重新定义 \defcitealias{key}{text} 以包含可选参数?

重新定义 \defcitealias{key}{text} 以包含可选参数?

在我的论文中,大约一百个引用中只有一个是错误的。这是一本有四位作者的书,比如 Abraham、Barminton、Cetralini 和 Durman (2008),但从来没有出现过 Abraham et al (2008) --- 总是列出所有四位作者。对于所有其他参考文献,只有在第一次引用参考文献时才会出现完整的作者列表。我花了很多时间试图找出是什么让这个参考文献如此特别,但都无济于事。

我考虑过一种解决方法

\defcitealias{ABCD2008}{Abraham et al. (2008)}

然后使用\citetalias{ABCD2008}得到 Abraham et al. (2008)。一切都很完美。不幸的是,这个罪魁祸首是最常用的参考文献之一,我经常将它用作\citet[][sec. 3](ABCD2008)\citet[e.g.][](ABCD2008),类似地与 一起使用\citep

是否可以重新定义,\defcitealias{key}{text}以便我可以使用两个可选参数,就像我使用citet和一样citep

以下是链接http://crpit.com/natbib.sty相关行如下

\newcommand\defcitealias[2]{%
   \@ifundefined{al@#1\@extra@b@citeb}{}
   {\PackageWarning{natbib}{Overwriting existing alias for citation #1}}
   \@namedef{al@#1\@extra@b@citeb}{#2}}

\DeclareRobustCommand\citetalias{\begingroup
   \NAT@swafalse\def\NAT@ctype{3}\NAT@parfalse\NAT@citetp}

\DeclareRobustCommand\citepalias{\begingroup
   \NAT@swatrue\def\NAT@ctype{3}\NAT@partrue\NAT@citetp}

任何帮助都感激不尽。

答案1

我不确定我是否正确理解了您遇到的问题。为了举例说明,我假设我们有一个条目,其中有四位作者——比如 Abraham、Barminton、Cetralini 和 Durman——于 2008 年出版,并且该条目具有“键” abcd2008。此外,我认为您正在使用natbib选项加载包longnamesfirst。最后,我了解到,虽然您希望abcd2008从第二个引文实例开始以缩写形式显示引文,即“Abraham et al. (2008)”,但它目前从未缩写过,即它始终显示为“Abraham、Barminton、Cetralini 和 Durman (2008)”。

该怎么办?首先,一定要检查条目中作者姓名是否正确列出:没有多余的逗号,也没有其他任何附加内容。

如果该问题检查无误,但问题仍然神秘地未得到解决,您确实可以使用 natbib 的引文别名功能。此外,由于您提到此项目出现的频率很高,您可能希望将引文别名设置为

\defcitealias{abcd2008}{Abraham et~al. (2008)}

引用natbib用户指南,命令 \citetalias\citepalias......

... 功能与 \citet 和 \citep 非常相似:它们可能在参数中采用多个键,可能包含注释,并标记为超链接。

因此,您确实可以发出诸如这样的引用命令\citetalias[e.g.,][p.~59]{abcd2008}

相关内容