为什么要区分 \cite 和 \cites?

为什么要区分 \cite 和 \cites?

为什么要使用\cites多个bibtex-key而不是特定的原因是什么\cite

考虑以下 MWE:

\documentclass{article}
\usepackage{biblatex}
\addbibresource{biblatex-examples.bib}
\let\cite\cites
\begin{document}
\cite[12]{westfahl:space}[e.g.][23]{angenendt}

\cites[12]{westfahl:space}[e.g.][23]{angenendt}
\printbibliography
\end{document}

\let\cite\cites我可以毫无问题地将另一个添加bibtex-key到 -command 中,因此如果我忘记了多个 ,\cite也没有关系。s\citesbibtex-keys

如果它保存这样做,难道它不是默认行为吗biblatex

答案1

当然,这是设计决定,我们无法询问软件包的原始维护者,因为他不再活跃。据我所知,普通 cite 命令和 multicite 命令之间的分离(使用s) 从一开始就在那里。

\cite该命令的行为biblatex与其他软件包中的行为基本一致。然而,多引号版本提供了许多其他软件包所不具备的附加功能。

multicite 命令的语法与标准 cite 命令的语法完全向后兼容。因此,\let\cite\cites不会带来比您\cites专门使用 并且从不允许自己使用时更多的问题\cite。(记住,\let所有命令都应与 multicite 对应,您不希望出现不一致的情况。)

不过,我强烈建议不要将 multicite 作为常态。biblatex 中的 cite 和 multicite 命令的行为非常知名且已确立,因此不应更改。最后,由于 multicite 命令的参数结构,它们更加复杂,因此最好只在必要时使用它们,而不是将其作为默认命令。

多重引用命令所需的设置显然比标准命令更复杂一些。这就是为什么我们首先定义标准命令,然后再定义多重引用命令的原因

\DeclareMultiCiteCommand{\cites}{\cite}{\multicitedelim}

我认为保留这种分离的原因之一是允许首先定义一个简单的引用命令,然后再用复杂的多引用结构将其覆盖。这允许分层方法。

然而,保持两者分离的最令人信服的原因是 multicite 命令更加复杂和脆弱。multicite 命令的性质决定了它事先不知道参数的数量。因此,它必须提前扫描看起来像参数的东西。尽管这非常可靠,但在某些情况下,更稳定的命令知道其参数的数量是更好的选择。

例如

\cite[pre][post]{key} ["this"]

有效,因为\cite已经读取了所有参数,所以知道这["this"]不可能是它的参数。但在

\cites[pre][post]{key} ["this"]

\cites不知道这["this"]不是它的参数之一。您需要插入\relax\告诉它停止扫描:\cites[pre][post]{key}\ ["this"]

相关内容