Bibliography: name initial before surname for the last author only

386 views
Skip to first unread message

texnic

unread,
Dec 23, 2010, 4:38:01 AM12/23/10
to LaTeX Users Group
Dear TeXnics,

I am trying to help my girlfriend with writing her master thesis in
LaTeX. Her institute has very strict rules for how the bibliography
should be typeset (described in
http://www.geographie.uni-bonn.de/lehre-und-studium/lehre-am-institut/zitieranleitung/zitieranleitung-07-2010).
I have used MAKEBST to create an appropriate style. Everything seems
to work fine (for now), except for one thing: according to the
aforementioned guide, if a reference has more than one author, all
authors in the bibliography list should be listed as "Surname,
Initial" except for the last one, that should be "Initial Surname".
For example:

Born, M. and E. Wolf (1997): Principles of Optics: Electromagnetic
Theory of Propagation, Interference and Diffraction of Light.
Cambridge.

For three authors it would look like:

Born, M., Knuth., D. and E. Wolf (1997)...

I have no clue even if it is possible to do with LaTeX at all. Could
you please help?

Merry Christmas!

Kotya

Peter Flynn

unread,
Dec 23, 2010, 4:51:42 AM12/23/10
to latexus...@googlegroups.com

Yes I think you can, but not with BIBTeX, not LaTeX. This is something you must do in the .bst file. There are already styles which do something similar for the first name (forename surname) and all remaining names (surname, forename), but I don't know which ones.

///Peter

texnic

unread,
Dec 23, 2010, 12:19:19 PM12/23/10
to LaTeX Users Group
@Peter: Thanks for response.

The solution was found in the form of germapali.bst (http://ctan.org/
tex-archive/biblio/bibtex/contrib/germbib/) file, in which I have
edited the format.names function to:

FUNCTION {format.names}
{ 's :=
#1 'nameptr :=
s num.names$ 'numnames :=
numnames 'namesleft :=
{ namesleft #0 > }
{
nameptr #1 >
{
nameptr numnames =
{ s nameptr "{f.~}{vv~}{ll}{, jj}" format.name$ 't := } %
last name last
{ s nameptr "{ll}{, jj}{, f.}{~vv}" format.name$ 't := } %
last name first
if$


namesleft #1 >
{ ", " * t smallcaps * }
{ numnames #2 >
{ "english" language.state.test
"USenglish" language.state.test
or
{"," * }
'skip$
if$
}
'skip$
if$
t "others" =
{ " \btxetalshort{.}" * }
{ " \btxandshort{.}\ " * t smallcaps * }
if$
}
if$
}
{ s nameptr "{ll}{, jj}{, f.}{~vv}" format.name$ smallcaps } %
last name first
if$
nameptr #1 + 'nameptr :=
namesleft #1 - 'namesleft :=
}
while$
}
Reply all
Reply to author
Forward
0 new messages