biblatex 名称格式立即退化为“et al.”

biblatex 名称格式立即退化为“et al.”

我默认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)。etoolboxbiblatex


\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 等人

相关内容