我目前使用babelbib
该alphadin
样式来编写我的学士论文的参考书目。现在我必须处理一个有四位作者的资源,并且是@incollection
一本有八位编辑(出版商)的书。
当我拥有超过三位作者/编辑的资源时,我的论文导师希望我仅提及前三位作者/编辑,并et al.
在其后附加一个。我知道使用 可以做到这一点biblatex
,但我使用的是babelbib
。我还没有找到任何设置或解决方法来执行此操作,而且纪录片也没有任何帮助。有什么办法吗?我也检查了alphadin.bst
执行此操作的样式,但也没有针对最大作者和编辑数量的变量。
如果不可能:我使用 Citavi 作为我的文献整理软件。有没有办法存档,只导出三个作者,然后用and others
LaTeX 替换et al.
?我也没有找到这个选项。我更喜欢在 latex 中执行此操作。
编辑:这是我包含参考书目包的部分:
\usepackage[fixlanguage]{babelbib}
\selectbiblanguage{ngerman}
\addto\captionsngerman{\renewcommand{\refname}{Literatur- und Quellenverzeichnis}}
\bibliographystyle{alphadin}
答案1
由于我确实必须使用 babelbib,而没有选择使用其他书目,并且 babelbib 本身也没有定义最大作者数量的选项,因此我决定看看如何修改文件alphadin.bst
。
我引入了两个新变量:
INTEGERS { et.al.char.used.names et.al.char.used.names.stop }
第一个计算给定来源的作者数量,第二个指示是否et al.
已经写完。
必须编辑该函数format.names
才能只有三个名称:
FUNCTION {format.names}
{ #0 'et.al.char.used.names :=
#0 'et.al.char.used.names.stop :=
's :=
"" 'u :=
#1 'nameptr :=
s num.names$ 'numnames :=
numnames 'namesleft :=
{ namesleft #0 > }
{
s nameptr "{ll}" format.name$ 't :=
t capitalize 't :=
s nameptr "{ jj}" format.name$ 'w :=
s nameptr "{, ff}{ vv}{ jj}" format.name$ 'u :=
u text.length$ 'lang :=
#1 'zahl :=
"" 'v :=
{ zahl lang < }
{ u zahl #1 substring$ "~" =
{ v "" =
{ u #1 zahl #1 - substring$ 'v := }
'skip$
if$
v u zahl #2 substring$ * "." * w * 'v :=
}
'skip$
if$
zahl #1 + 'zahl := }
while$
v "" =
{ u 'v := }
'skip$
if$
t v * fkt * 't :=
nameptr #1 >
{
et.al.char.used.names #1 + 'et.al.char.used.names :=
namesleft #1 >
{
et.al.char.used.names #2 >
{
et.al.char.used.names.stop #1 =
{}
{
ua.etal *
#1 'et.al.char.used.names.stop :=
}
if$
}
{ "; " * t * }
if$
}
% { "; " * t * }
{ numnames #2 >
{ "" * }
'skip$
if$
et.al.char.used.names.stop #1 =
{}
{
t "\textsc{others}" = t "\textsc{others} (Hrsg.)" = or
{ ua.etal * }
{
et.al.char.used.names #2 >
{ ua.etal * }
{ "; " * t * }
if$
}
if$
}
if$
}
if$ %% Ende der namesleft-Pruefung
}
't
if$ %% Ende der nameptr-Pruefung
nameptr #1 + 'nameptr :=
namesleft #1 - 'namesleft :=
}
while$ %% Ende von { namesleft #0 > } ganz oben
"" 'fkt := %% fkt wird zurueckgesetzt
#0 'et.al.char.used.names := %%% MODIFIZIERT
#0 'et.al.char.used.names.stop := %%% MODIFIZIERT
}
format.lab.names
并且标记函数(例如[ABC12]
)在添加之前仅显示三个作者的姓名首字母,而不是 5 个+
:
FUNCTION {format.lab.names}
{ 's :=
s num.names$ 'numnames :=
numnames #1 >
{ numnames #3 > %% MODIFIZIERT war 4
{ #3 'namesleft := }
{ numnames 'namesleft := }
if$
#1 'nameptr :=
""
{ namesleft #0 > }
{ nameptr numnames =
{ s nameptr "{ff }{vv }{ll}{ jj}" format.name$ "others" =
%% { "\," * %% kein besonderes Zeichen fuer "others" i. label
{ "{\etalchar{+}}" * %% ein plus-Zeichen (+) fuer "others"!
#1 'et.al.char.used :=
}
{ s nameptr "{l{}}" format.name$ * }
if$
}
{ s nameptr "{l{}}" format.name$ * }
if$
nameptr #1 + 'nameptr :=
namesleft #1 - 'namesleft :=
}
while$
numnames #3 > %% MODIFIZIERT war 4
%% { "\," * %% s. Bemerkung oben
{ "{\etalchar{+}}" *
#1 'et.al.char.used :=
}
'skip$
if$
}
{ s #1 "{l{}}" format.name$
duplicate$ text.length$ #2 <
{ pop$ s #1 "{ll}" format.name$ #3 text.prefix$ } %% vgl. Anmerkung!
'skip$
if$
}
if$
}
如果需要的话,也许这可以帮助到某人。