PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : BibTeX-Style gesucht



karl_k0ch
23-11-2007, 14:58
Ich benutze im Moment den Style alpha und bin im Moment nicht so ganz zufireden mit der Formatierung der Keys/Label.
Sehe ich das richtig, dass sich irgendwo in der Datei alpha.bst die Anweisung versteckt, wie die Keys definiert werden?
Bei alpha bekommen ja Einträge mit einem Autor den Key "Jon05" und mit mehreren "JLT05". Ist es möglich, die Styledatei so zu ändern, dass auch bei einautorigen Einträgen nur der erste Buchstabe des Namens als Key benutzt wird? In dem Beispiel also dann "J05".

Oder gibt es schon einen Style, der das kann, den ich nur nicht kenne?

Ich möchte nur sehr ungern bei jedem Eintrag mit einem Autor Keys per Hand setzen müssen.

trempf
26-11-2007, 01:01
Ich glaube, Alpha sieht nur die umgekehrten Fall vor: Jon05 auch bei mehreren Autoren. Der Grund wird wohl sein, dass ein J05 sehr schnell uneindeutig wird, Johnson und Jones habe ja in 2005 bestimmt beiden veröffentlicht :-)

Auch Custom-Bib hilft deshalb nicht weiter. Ich glaube, es ist einer dieser Fälle, bei denen man sich fragen sollte, ob es nicht sinnvoll ist, dass es nicht vorgesehen ist :-)

Sönke

karl_k0ch
26-11-2007, 14:20
Ich habe einen Weg gefunden, alpha so zu modifizieren, dass es das macht, was ich will. Ich hoffe, dass ich nichts weiter ändern muss.


FUNCTION {format.lab.names}
{ 's :=
s num.names$ 'numnames :=
numnames #1 >
{ numnames #4 >
{ #3 'namesleft := }
{ numnames 'namesleft := }
if$
#1 'nameptr :=
""
{ namesleft #0 > }
{ nameptr numnames =
{ s nameptr "{ff }{vv }{ll}{ jj}" format.name$ "others" =
{ "{\etalchar{+}}" *
#1 'et.al.char.used :=
}
{ s nameptr "{v{}}{l{}}" format.name$ * }
if$
}
{ s nameptr "{v{}}{l{}}" format.name$ * }
if$
nameptr #1 + 'nameptr :=
namesleft #1 - 'namesleft :=
}
while$
numnames #4 >
{ "{\etalchar{+}}" *
#1 'et.al.char.used :=
}
'skip$
if$
}
{ s #1 "{v{}}{l{}}" format.name$
duplicate$ text.length$ #2 <
{ pop$ s #1 "{ll}" format.name$ #1 text.prefix$ }
'skip$
if$
}
if$
}
Ich habe einfach bei der Funktion, die die Label benennt, die Länge 3 durch 1 ersetzt. (Dort, wo ich es rot markiert habe)

Die Uneindeutigkeit der Label ist auch unkritisch, auch wenn nicht ganz schön: Es werden dann Labels J05a und J05b angelegt.