我的texdoc biblatex
状态:
\citeauthor[ prenote ][ postnote ]{ key }
\citeauthor*[ prenote ][ postnote ]{ key }
... 带星号的变体有效地强制将 maxcitenames 设置为 1,因此仅打印标签名称列表中的第一个名称(如果有更多名称,则可能后跟“et al”字符串)。
因此,我正在尝试这个MWE:
\documentclass{book}
\usepackage[utf8]{inputenc}
\usepackage[%
natbib,% just loads citep, citey?
style=ieee,
isbn=true, % in ieee.bbx, bbx:isbn controls both isbn and issn
url=true,
defernumbers=true,
sorting=nyt,
bibencoding=utf8,
backend=biber
]{biblatex}
\bibliography{biblatex-examples}
\begin{document}
\frontmatter
\mainmatter
Test 1: \citeauthor{westfahl:space}, *: \citeauthor*{westfahl:space},
Test 2: \citeauthor{baez/article}, *: \citeauthor*{baez/article},
Test 3: \citeauthor{companion}, *: \citeauthor*{companion},
Test 4: \citeauthor{cotton}, *: \citeauthor*{cotton},
\end{document}
如果我注释掉natbib,
选项行并进行编译(pdflatex
,,biber
+ pdflatex
),那么我将获得预期的输出:
但是如果我像在 MWE 中一样取消注释 natbib 选项,并且进行编译,那么我会得到以下结果:
...也就是说,发生了一些事情,因此该\citeauthor*
命令还会输出所有名称,而不是仅输出第一个名称(+可选等)。为什么会发生这种情况 -\citeauthor*
即使我已加载该natbib
选项,我如何才能恢复原来的行为?
答案1
这不是一个错误,而是一个功能!显然,natbib
的带星号的命令的行为方式如下。
在blx-natbib.def
,如果你发出加载的配置文件natbib=true
,你会发现(其中包括)
\newrobustcmd*{\citet}{%
\@ifstar
{\AtNextCite{\defcounter{maxnames}{999}}%
\textcite}
{\textcite}}
\newrobustcmd*{\citep}{%
\@ifstar
{\AtNextCite{\defcounter{maxnames}{999}}%
\parencite}
{\parencite}}
\DeclareCiteCommand*{\citeauthor}
{\defcounter{maxnames}{999}%
\boolfalse{citetracker}%
\boolfalse{pagetracker}%
\usebibmacro{prenote}}
{\usebibmacro{citeindex}%
\printnames{labelname}}
{\multicitedelim}
{\usebibmacro{postnote}}
因此,natbib
的星号版本在某种程度上与biblatex
的星号版本完全相反。前者设置maxnames
为 999 以打印所有名称,而后者仅打印一个名称。
根据您是否需要natbib
支持,您可以停止使用natbib=true
或有选择地恢复您想要的行为 - 取决于您想要恢复的程度,从您想要中挑选那些定义可能是一个更好的主意blx-natbib.def
。
例如,如果你只\citep
需要\citet
\newrobustcmd*{\citet}{\textcite}
\newrobustcmd*{\citep}{\parencite}
对你来说已经足够了。