natbib 和 \citet:在最后一个分号后插入“and”

natbib 和 \citet:在最后一个分号后插入“and”

使用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),但可能会完全或以微妙的方式破坏早期或更高版本。

相关内容