PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : BibTex, MakeBst, Erster Autor anders trennen



vizechecker
18-07-2008, 13:56
Hallo,

ich habe ein Problem, zu dem ich bisher keinen passenden Thread gefunden habe. Ich benutze seit gestern BibTeX und MakeBst, aber eine Sache passt mir in meinen References nicht. Wenn ich mehrere Autoren (>=3) habe, sollen die so ausgegeben werden:

Nachname1, V1.; V2. Nachname2, and V3. Nachname3 .....

Soweit habe ich das auch geschafft, aber ich möchte nach dem ersten Autor ein Semikolon, sonst Kommas haben. Kann ich das in der .bst irgendwo ändern? Wär echt klasse, wenn Ihr mir helfen könntet,

viele Grüße,
Alex

[Edit:] Ich glaube Minimalbeispiel ist hier nicht nützlich, bei Bedarf mach ich natürlich eins oder häng die .bst in den Anhang!

vizechecker
19-07-2008, 18:20
Hmm, also bis jetzt noch keine Ideen? Vielleicht könnt Ihr mir ja sagen, ob ich in einem von diesen Codeschnipseln aus der .bst richtig bin :confused: Wobei ich mit der (Programmier?)sprache hier nicht viel anfangen kann. Bin über jeden Hinweis froh!

Gruß,
Alex



FUNCTION {format.full.names}
{'s :=
"" 't :=
#1 'nameptr :=
s num.names$ 'numnames :=
numnames 'namesleft :=
{ namesleft #0 > }
{ s nameptr
"{vv~}{ll}{, jj}" format.name$
cite.name.font
't :=
nameptr #1 >
{
namesleft #1 >
{ ", " * t * }
{
s nameptr "{ll}" format.name$ duplicate$ "others" =
{ 't := }
{ pop$ }
if$
t "others" =
{
" " * bbl.etal *
}
{
numnames #2 >
{ "," * }
'skip$
if$
bbl.and
space.word * t *
}
if$
}
if$
}
't
if$
nameptr #1 + 'nameptr :=
namesleft #1 - 'namesleft :=
}
while$
}




FUNCTION {format.names}
{ 'bibinfo :=
duplicate$ empty$ 'skip$ {
's :=
"" 't :=
#1 'nameptr :=
s num.names$ 'numnames :=
numnames 'namesleft :=
{ namesleft #0 > }
{ s nameptr
nameptr #1 >
{ "{f.}" format.name$ duplicate$ empty$ 'skip$
{ tie.or.space.prefix bib.fname.font swap$ * }
if$
s nameptr
"{vv~}{ll}" format.name$ bib.name.font *
s nameptr
"{jj}" format.name$ duplicate$ empty$ 'skip$
{ bib.fname.font ", " swap$ * }
if$
}
{ "{vv~}{ll}" format.name$ bib.name.font
s nameptr
"{f.}{, jj}"
format.name$ duplicate$ empty$ 'skip$
{ bib.fname.font ", " swap$ * }
if$
}
if$
*
bibinfo bibinfo.check
type$ "presentation" =
{ check.speaker }
'skip$
if$
't :=
nameptr #1 >
{
namesleft #1 >
{ ", " * t * }
{
s nameptr "{ll}" format.name$ duplicate$ "others" =
{ 't := }
{ pop$ }
if$
numnames #2 >
t "others" = not and
{ "," * }
'skip$
if$
t "others" =
{
" " * bbl.etal *
}
{
bbl.and
space.word * t *
}
if$
}
if$
}
't
if$
nameptr #1 + 'nameptr :=
namesleft #1 - 'namesleft :=
}
while$
} if$
}

rais
19-07-2008, 20:57
Moin moin,
vllt wär ja jurabib was für Dich?
Da gibt es Befehle wie


\bibbtasep %Trenner zwischen (genau) zwei Autoren
\bibbfsasep %Trenner zwischen erstem und zweitem Autor
\bibbstasep %Trenner zwischen zweitem und drittem Autor
, um mal nur ein paar zu nennen, die Dir u. U. dienlich sein könnten...

OTOH: warum setzt Du nicht einfach mal unterschiedliche selbsterdachte Zeichen(ketten) für die ", " in den format*names-Funktionen Deiner .bst, lässt es laufen und schaust Dir an, wo welche dieser Zeichen(ketten) im Ergebnis unter welchen Umständen auftauchen ... ?

MfG

vizechecker
24-07-2008, 13:23
Super Tipp! (Auch wenn er so nahe lag, dass ich selbst hätt drauf kommen können, hab mich aber zuerst nicht getraut, einfach da drin rumzuwerkeln...)

Für mich relevant war die format.names, da ich die Vornamen abkürze, sonst wahrsch. die format.full.names. In folgendem Block



if$
't :=
nameptr #1 >
{
namesleft #1 >
{ "; " * t * }
{
s nameptr "{ll}" format.name$ duplicate$ "others" =
{ 't := }
{ pop$ }
if$
numnames #2 >
t "others" = not and
{ "," * }
'skip$
if$
t "others" =
{
" " * bbl.etal *
}
{
bbl.and
space.word * t *
}
if$
}
if$
}
't


kann man an der Stelle des roten Semikolons das gewünschte Trennzeichen nach dem ersten Autor ändern - wenn es 3 oder mehr Autoren sind. Vielleicht hilft das ja noch jemand anderem weiter :D

Also vielen Dank an rais und bis bald,
Alex