默认引用定界符是,
。
\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 所建议的)是一种优雅而简短的方法,尽管如果原始宏被更改(例如被另一个包更改),它可能会失败。至少你自己的重新定义可能仍然有效,但我也会小心并检查和处理已被另一个包重新定义的新宏。