使用natbib
(我知道biblatex
),我想在两位作者的列表中用单词“and”替换分号,并在三位或更多作者的列表中在最后一个分号后插入单词“and”。我该如何实现?
\documentclass{article}
\usepackage[sort]{natbib}
\usepackage{filecontents}
\begin{filecontents}{foo.bib}
@article{foo,
author={Foo},
year={2016},
Title={Foo foo}
}
@article{bar,
author={Bar},
year={2014},
Title={Bar bar}
}
@article{tilde,
author={Tilde},
year={2015},
Title={Tilde tilde}
}
\end{filecontents}
\bibliographystyle{chicago}
\begin{document}
\citet{foo,bar,tilde} are nuts. \citet{foo,bar} are in fact insane.
\bibliography{foo}
\end{document}
答案1
据我所知,这无法使用 进行配置。也就是说,修补的宏来执行您想要的操作natbib
并不难。natbib
请记住,这只是一种技巧。
将此代码插入序言中。
\usepackage{etoolbox}
\makeatletter
\newcount\NAT@inline@cnt
\preto\NAT@reset@citea{%
\NAT@inline@cnt=\@ne
\mathchardef\NAT@total@cnt=\count@
}
\def\NAT@separator{%
\advance\NAT@inline@cnt\@ne
\ifnum\NAT@inline@cnt=\NAT@total@cnt
\ifnum\NAT@inline@cnt=\tw@\else
\NAT@sep\NAT@penalty
\fi
\NAT@space and%
\else
\NAT@sep\NAT@penalty
\fi
}
\makeatother
解释:面向用户的\cite
命令扩展为\NAT@citexnum
以下列内容开头的定义。
\def\NAT@citexnum[#1][#2]#3{%
\NAT@reset@parser
\NAT@sort@cites{#3}%
\NAT@reset@citea
作为 的副作用\NAT@sort@cites
,此特定调用中的引用总数\cite
为\count@
。我的代码的第一部分分配了一个新的计数寄存器\NAT@inline@cnt
,并在前面添加了代码以\NAT@reset@citea
设置\NAT@inline@cnt
为 1 并定义\NAT@total@cnt
为\count@
。
当内联引用排版到引用列表时,natbib
插入\NAT@separator
通常定义为的\NAT@sep\NAT@penalty
。我的其余代码重新定义了它以增加我们的新计数器并插入
and
如果只有两个内联引用;; and
如果有超过两次引用,并且这是在最后两次引用之间;;
否则。
这适用于natbib
版本 8.31b(2010/09/13),但可能会完全或以微妙的方式破坏早期或更高版本。