Biblatex natbib 选项会杀死 \citeauthor* (已加星号) 吗?

Biblatex natbib 选项会杀死 \citeauthor* (已加星号) 吗?

我的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),那么我将获得预期的输出:

测试1.png

但是如果我像在 MWE 中一样取消注释 natbib 选项,并且进行编译,那么我会得到以下结果:

测试2.png

...也就是说,发生了一些事情,因此该\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}

对你来说已经足够了。

相关内容