更改引用分隔符

更改引用分隔符

默认引用定界符是,

\cite{John96, Doe78, White05}

生成类似的内容[8, 2, 4],其中引用编号(8、2 和 4)以逗号 ( ,) 分隔。

这在拉丁语中很自然,但其他一些语言使用不同的分隔符。假设您想将分隔符更改为,例如+。您该怎么做?

答案1

重新定义\@citex宏。在下面的例子中,我使用etoolbox包仅改变部分定义。

\documentclass{article}

\usepackage{etoolbox}

\makeatletter
\patchcmd{\@citex}{,\penalty\@m\ }{+}{}{}
\makeatother

\usepackage{filecontents}

\begin{filecontents}{\jobname.bib}
@misc{A01,
  author = {Author, A.},
  year = {2001},
  title = {Alpha},
}
@misc{B02,
  author = {Buthor, B.},
  year = {2002},
  title = {Bravo},
}
\end{filecontents}

\begin{document}

Some text \cite{A01,B02}

\bibliographystyle{plain}
\bibliography{\jobname}

\end{document}

答案2

逗号直接用于内部 LaTeX 宏\@citex。您可以重新定义它:

\documentclass{article}
\newcommand*{\citedelimiter}{+}
\makeatletter
\def\@citex[#1]#2{\leavevmode
  \let\@citea\@empty
  \@cite{\@for\@citeb:=#2\do
    {\@citea\def\@citea{\citedelimiter\penalty\@m}%
     \edef\@citeb{\expandafter\@firstofone\@citeb\@empty}%
     \if@filesw\immediate\write\@auxout{\string\citation{\@citeb}}\fi
     \@ifundefined{b@\@citeb}{\hbox{\reset@font\bfseries ?}%
       \G@refundefinedtrue
       \@latex@warning
         {Citation `\@citeb' on page \thepage \space undefined}}%
       {\@cite@ofmt{\csname b@\@citeb\endcsname}}}}{#1}}
\makeatother
\begin{document}
\cite{John96, Doe78, White05}
\end{document}

扩展包可能为此目的提供宏。

这是输出,带有问号,因为引用不确定,但是您会看到新的分界符:

在此处输入图片描述

与原始的乳胶来源相比,我更改了行

{\@citea\def\@citea{,\penalty\@m\ }%

{\@citea\def\@citea{\citedelimiter\penalty\@m}%

我引入宏是\citedelimiter为了方便更改,这是原始 LaTeX 所没有预见到的。修补(如 lockstep 所建议的)是一种优雅而简短的方法,尽管如果原始宏被更改(例如被另一个包更改),它可能会失败。至少你自己的重新定义可能仍然有效,但我也会小心并检查和处理已被另一个包重新定义的新宏。

相关内容