在文本中使用 biblatex 的 \finalandcomma

在文本中使用 biblatex 的 \finalandcomma

如何\finalandcomma在参考书目之外使用 biblatex 的连续逗号 ( )?以下最小示例导致错误Undefined control sequence. [ One, two\finalandcomma]

\documentclass{article}
\usepackage[american]{babel}
\usepackage{biblatex}
\begin{document}
  One, two\finalandcomma{} and three.
\end{document}

但如果我禁用牛津/连续逗号,那么它就可以正常工作:

\documentclass{article}
\usepackage[american]{babel}
\usepackage{biblatex}
\DefineBibliographyExtras{american}{% Remove Oxford/serial commas
  \let\finalandcomma\empty
}
\begin{document}
  One, two\finalandcomma{} and three.
\end{document}

答案1

您的第一个 MWE 的完整错误消息是

! Undefined control sequence.
\finalandcomma ->\addcomma 
                           
l.5   One, two\finalandcomma
                            {} and three.
? 

这意味着它不是\finalandcomma未定义的。\finalandcomma定义为\addcomma。并且\addcomma是此处未定义的命令。

确实biblatex文档解释见§4.7标点和间距

请注意,这些功能 [\addcomma和朋友 ] 仅在引文和参考书目中本地可用。它们不会影响文档的任何其他部分。

原因有两个:首先,这些命令只能在特定的空间因子设置中正常工作,而这种设置通常不会在引用之外使用。其次,biblatex将这些宏保存在私有名称空间中,以避免名称冲突。

禁用的示例可以正常\finalandcomma工作,因为宏扩展为一个空的替换文本,这显然不能以未定义的形式结束。

总而言之,我建议您用不同的名称定义自己的宏,不要依赖biblatex\finalandcomma

\documentclass{article}
\usepackage[american]{babel}

\newcommand*{\listfinalcomma}{}

\begin{document}
  One, two\listfinalcomma{} and three.
\end{document}

如果你真的想使用解决这个问题的另一种方法是biblatex定义\finalandcomma\addcomma

\documentclass{article}
\usepackage[american]{babel}
\usepackage{biblatex}

\newcommand*{\addcomma}{,}

\begin{document}
  One, two\finalandcomma{} and three.
\end{document}

biblatex在负责\addcomma时仍将使用自己的定义,但在的范围之外,我们有一个应该足够好的后备定义。biblatexbiblatex

相关内容