BibTex/Natbib:只有三位作者的参考文献第一次出现时要求显示所有作者,后续出现时则显示第一作者等

BibTex/Natbib:只有三位作者的参考文献第一次出现时要求显示所有作者,后续出现时则显示第一作者等

我正在为一份期刊(MNRAS,英国皇家天文学会期刊)撰写论文,该期刊要求当我引用任何恰好有三位作者的论文时,我需要在第一次引用时给出完整的作者列表,但在任何进一步的引用中仅给出第一作者等。

例如,对于 Bloggs、Smith 和 Klein 1999 的一篇论文的引用,其引用键为 Bloggs1999,我希望能够在我的 latex 文件中输入以下内容:

This information was found within \citet{Bloggs1999}. Referring again 
to this seminal paper \citep{Bloggs1999}.

运行 latex/bibtex/latex/latex 后将其排版为:

This information was found within Bloggs, Smith and Klein (1999). 
Referring again to this seminal paper (Bloggs et al. 1999).

不幸的是,期刊提供的类和 .bib 文件 (mn2e.cls 和 mn2e.bst) 不支持此功能(而且 mn2e.bst 还有很多其他问题)。我知道 natbib 允许您使用 和 手动执行此操作,\citet\citet*我正在寻找自动化的东西,如果有人有任何想法的话。

答案1

这是一个概念证明(不支持可选参数,并且其他引用命令需要类似的东西\citep),并且它假定.bst样式使用“et al”来引用多个作者。

这个想法是创建类似于\ifciteseen中的东西biblatex。因此,我们可以创建一个文档中已引用的参考文献列表(我们利用 的列表功能etoolbox)。然后,如果之前未使用过该参考文献,我们使用\citet*,并将密钥添加到可见参考文献列表中。否则,我们使用\citet

\documentclass{article}
\usepackage{etoolbox}
\usepackage{natbib}

\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@article{test1,
  author = {Author, A. and Buthor, B and Cuthor, C and Duthor, D},
  title = {Title},
  journal = {Journal},
  year = 2013
}
@article{test2,
  author = {Author, A. and Buthor, B and Cuthor, C and Duthor, D},
  title = {Title},
  journal = {Journal},
  year = 2012
}
\end{filecontents}


\newcommand{\citelist}{}

\newcounter{currentcite}
\newcounter{currentcitetotal}
\newcommand{\mycite}[1]{
  \setcounter{currentcitetotal}{0}
  \renewcommand{\do}[1]{\addtocounter{currentcitetotal}{1}}
  \docsvlist{#1}
  \renewcommand{\do}[1]{%
  \addtocounter{currentcite}{1}%
  \ifinlist{##1}{\citelist}
    {\citet{##1}}
    {\citet*{##1}\listadd{\citelist}{##1}}%
  \ifnumcomp{\value{currentcitetotal}}{>}{\value{currentcite}}
    {, }
    {}%
  }
  \docsvlist{#1}
}


\begin{document}

\mycite{test1,test2}

\mycite{test1}

\mycite{test2}


\bibliographystyle{plainnat}
\bibliography{\jobname}
\end{document}

在此处输入图片描述

相关内容