我默认biblatex
切换到“et al.”的时间比较晚(超过三位作者)。现在我遇到过这种情况,重复提到作者时要求使用简称“Author et al.”,而不管合著者的数量是多少。我已经使用了这样的自定义名称格式:
\DeclareNameFormat{idem}{%
\usebibmacro{name:last}{#1}{#3}{#5}{#7}%
\usebibmacro{name:andothers}}
我如何创建另一种名称格式,例如,\DeclareNameFormat{short}
如果有多个作者,则始终使用“et al.”;而无需更改我的全局biblatex
样式设置(maxnames
--不想碰它!)。除了name:andothers
这个宏之外,还有其他我可以使用的宏吗?
@lockstep 的答案很接近。但我希望它表现\citeauthor{A01}
正常,除了我多次重复作者的情况。我当然可以用这种技术添加重复条目;但我仍然想知道我是否能让从该答案中得出的以下“幼稚”想法发挥作用:
\newcommand{\personshort}[1]{\defcounter{maxnames}{1}\citeauthor{#1}}
这“有效”,但似乎覆盖了maxnames
文档的其余部分。我该如何封装 defcounter 使其仅在其中有效\newcommand
?
答案1
我建议不要定义特殊的名称格式,而是采用以下方法:
定义一个新的书目类别并向其中添加“特殊场合”键,
用于
\AtEveryCitekey
测试此类别,如果为真,则设置maxnames
为 1本地 (使用由 加载的包\defounter
)。etoolbox
biblatex
\documentclass{article}
\usepackage[style=authoryear]{biblatex}
\DeclareBibliographyCategory{alwaysetal}
\addtocategory{alwaysetal}{A01}
\AtEveryCitekey{%
\ifcategory{alwaysetal}{%
\defcounter{maxnames}{1}%
}{%
}%
}
\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@misc{A01,
author = {A and B and C},
year = {2001},
title = {Alpha},
}
@misc{D02,
author = {D and E and F},
year = {2002},
title = {Bravo},
}
\end{filecontents}
\addbibresource{\jobname.bib}
\begin{document}
\cite{A01}
\cite{D02}
\printbibliography
\end{document}
答案2
使用上面的答案以及另一个相关答案来自@lockstep,我得到了以下内容,这似乎就是我想要的:
\newcommand{\personshort}[1]{\begingroup%
\defcounter{maxnames}{1}\citeauthor{#1}%
\endgroup}
这会暂时将maxnames
计数设置为 1,并且我有一个专用命令,\personshort
用于我想要立即回退到“at al”的场合。
在更广泛的上下文中,我使用\person
带有两个参数的命令,后者是名称格式(\formatname
在这个答案)。然后我可以有条件地使用上述命令而不是名称格式:
\newcommand*{\person}[2]{%
\ifstrequal{#2}{short}{\personshort{#1}}{\citename{#1}[#2]{author}}%
}
因此,我举了最长格式的例子\person{miller1960plans}{sci}
,使用首字母和最多三个名字,然后\person{miller1960plans}{idem}
对于正常重复,省略首字母,以及\person{miller1960plans}{short}
强制使用“et al”,尽管合著者人数小于或等于maxnames
。
- 科学:GA Miller、E. Galanter 和 KH Pribram
- 同上:米勒、加兰特和普里布拉姆
- 短的:Miller 等人