the canonical order of bibtex sort fields is the following: author(s)
(or sort keys if an alpha
sort is requested), year, title.
whether the bibtex ordering is controlled by a plain
or an alpha
.bst
file, if the year of publication is the same, the element
that will control the sort is the title. so if the title of the
earlier part begins with "z", only special handling can force that
to sort before an item with a title starting with "a". if the year
of publication is different, and the second part was published in a
year earlier than the first, the same problem holds.
let's take an extreme case. part "a" was published in 2000 and
part "b" in 1999. this will result in sort keys (if an alpha
style
is used) for which the two-digit years sort the entries "out of order".
even fiddling with how the title is sorted won't help here.
the most direct approach is to adjust the year field in a way that
won't affect the output except for the order of the entries.
the fact that multiple works by the same author(s) don't necessarily
sort in logical order was recognized by the author of bibtex ,
who provided this workaround in the manual (texdoc bibtex
) on page 4.
in the .bib
database, add this command:
@PREAMBLE{ "\newcommand{\noopsort}[1]{} " }
this will be passed along to the .bbl
file, from which it will
be applied in the latex run.
in the affected item entries in the .bib
file, modify the date
fields to do your dirty work:
year = "{\noopsort{1999b}}1999"
...
year = "{\noopsort{1999a}}2000"
of course, the artificial sort field should be chosen so that these
entries (according to the manual)
come out in a reasonable spot relative to the author's other works.
although the \noopsort
technique could be applied to the title,
always using the date should not have any untoward effect in future
processing; only if additional books by the same author are added
to the .bib
file would it even have to be checked.
I suggest you proceed in two steps. First, create a new bst (bibliography style) file using the interactive makebst
utility. (Open a command window and type latex makebst
to get started.) Second, it will be necessary to make a minor edit, by hand, in the newly created bst file.
While answering the interactive, multiple-choice questions posed by makebst
, choosing the default answer is correct in most instances. (That's why they're the defaults, right?) In same cases, though, you'll need to choose a non-default answer. The most important such cases are as follows:
...
...
...
...
...
...
...
Let's assume you've named the new file ii-experimental.bst
. Open this file in a text editor -- the program you use to edit your tex files will do fine -- and locate the function format.authors
. It should look like this:
FUNCTION {format.authors}
{ author "author" format.names }
Change the code block to
FUNCTION {format.authors}
{ author "author" format.names
"." *
}
I.e., add a new line that contains "." *
. As you can probably guess, this additional instruction serves to add a dot ("period", "full stop") immediately after the final name in the author block.
In your main tex file, be sure to change the argument of \bibliographystyle
to ii-experimental.bst
(or whatever you chose to name the file). Save the new bst file either in the directory where your main tex file is located or in a directory that's searched by BibTeX. If you choose the latter option, be sure to also update the filename database of your TeX distribution suitably.
Last but not least, assuming you're using the natbib
citation management package (with the option longnamesfirst
), you should (a) use \citep
exclusively to create citation call-outs, as all citation call-outs are supposed to be in "parenthetic" style, and (b) run the instruction
\setcitestyle{aysep={}}
after loading natbib
, to suppress the comma between the author(s)'s surname(s) and the year(s). Finally, perform a full recompile cycle -- latex, bibtex, and latex twice more -- to fully propagate all changes.
Happy BibTeXing!
Best Answer
Only just noticed your posting; I hope the following answer will still be useful to you.
If I understand your objective correctly, you want the surnames to be listed before the initials of the first (and, if present, any middle) names in the references, with a comma separating the surname from the first and middle names.
Starting out from the bibliography style file
abbrvnat.bst
, your objective may be achieved as follows:Locate the file
abbrvnat.bst
in your TeX distribution. Make a copy of this file, and name the copy, say,myabbrvnat.bst
. (Don't modify a file that's part of the TeX distribution directly.Open the file
myabbrvnat.bst
in your favorite text editor. (The one you use to edit your.tex
files will do.) Seach for the following line:(it'll be in the function called
format.names
) and change it toYou can probably guess that "vv" stands for "von part" of a name, "ll" stands for "last name", etc. The ordering suggested above conforms to U.S. usage, which places the "von part" before the last name, as in "von der Vogelweide, W." If, instead, you want the "von part" to come after the first names' initials, i.e., if you want the name to be typeset as "Vogelweide, W. von der", you should change the line above to
Save the file
myabbrvnat.bst
either in the directory where your main.tex
file is located or in a directory that's searched by your TeX distribution. If you choose the latter option, be sure to update the TeX filename database in a way that's appropriate for your TeX distribution.Start using the new style file by issuing the command
\bibliographystyle{myabbrvnat}
. Be sure to run LaTeX, BibTeX, and LaTeX twice more with this new setup so that all changes are propagated fully.For instance, suppose the bib entry you provided in a comment to the other answer, viz.,
is stored in a file called
temp.bib
. Then, the following MWEwill produce the following output: