我需要一个以(姓氏,年份)形式呈现引用的参考书目,我正在使用natbib
,并且允许在文档末尾出现两个不同的参考书目,我正在使用multibib
。
要点是:我想使用 natbib 的“别名”命令作为二级参考书目,但它不起作用。MWE:
\documentclass[a4paper]{article}
\usepackage{natbib}
\usepackage{multibib}
\newcites{sec}{Other bibliographic references}
\defcitealias{intlog}{International journal of logistics, issue 91}
\begin{document}
Something something something and then \citetalias{intlog}.
\bibliographystyle{plainnat}
\bibliography{bibliography}
\bibliographystyle{plainnat}
\bibliography{bibliography}
\end{document}
在文件中添加正确的条目bibliography.bib
。
如何让该命令citetalias{intlog}
在二级参考书目中发挥作用?
我知道什么:
\citetaliassec{intlog}
不起作用\defcitetaliassec{intlog}
效果不太好(好吧,可能性不大)
这让我认为别名系统与多方位不兼容......
当然,任何不同于别名系统的其他解决方案都是绝对受欢迎的。
答案1
当然,任何不同于别名系统的其他解决方案都是绝对受欢迎的。
正如我经常推荐的那样biblatex
。但是下面的解决方案不使用biblatex
。
您的示例存在下面列出的一些错误。
相关错误multibib
如果你使用 定义新的参考书目
\newcites{<ext>}{<headind>}
,则将定义新的命令\bibliographystyle<ext>
、\bibliography<ext>
和\cite<ext>
。因此,在你的情况下,行\newcites{sec}{Other bibliographic references}
导致命令:
\bibliographystylesec \bibliographysec
<ext>.aux
并将创建一个新文件。此新文件需要其自己的 bibtex 运行。
与参考书目风格相关的错误plainnat
您的风格将以下几行写入您的包含
bbl
文件(包含于\bibliography
)。\newcommand{\noopsort}[1]{} \newcommand{\printfirst}[2]{#1} \newcommand{\singleletter}[1]{#1} \newcommand{\switchargs}[2]{#2#1}
您希望有两个书目,因此命令的定义要进行两次。这会导致命令定义的错误。一方法是在包含第二个参考书目之前将命令设置为未定义。
\bibliographystyle{plainnat} \bibliography{xampl} \let\noopsort\undefined \let\printfirst\undefined \let\singleletter\undefined \let\switchargs\undefined \bibliographystylesec{plainnat} \bibliographysec{xampl}
该样式
plainnat
是数字引用样式。手册natbib
提供了以下信息默认情况下,natbib 处于作者年份模式。可以通过以下方式更改
- 选择具有预定义引用样式的数字书目样式,该样式可以在包中或本地配置文件中定义;
natbib
与相关的错误\defcitealias
该命令
\defcitealias
在文档中用以下句子描述:有时人们希望用特殊名称来引用参考文献,而不是用作者
这意味着您的密钥
\defcitealias
必须是您的 bib 文件的给定条目。您没有向我们显示您的 bib 文件,因此我使用了xampl.bib
位于您的 texmf 树中的文件。该命令
\defcitealias
对不同的参考书目没有区别,因此您可以按照文档中所述使用它。multibib
定义命令\citep<ext>
等。已定义的命令均列在命令中\@mb@citenamelist
。在的文档中,multibib
您可以找到以下提示:定义新 cite 命令的软件包可以使用 添加这些命令
\@mb@citenamelist
。默认定义已包含 natbib 的 cite 变体,如下所示。\def\@mb@citenamelist{cite,citep,citet,citealp,citealt}
您看到了命令
citepalias
,但遗漏了。因此,在加载citetalias
包之前添加以下几行:multibib
\makeatletter \def\@mb@citenamelist{cite,citep,citet,citealp,citealt,citepalias,citetalias} \makeatother
根据此处给出的信息,结果是一个最小示例,其中包含结果输出。编译步骤由出色的工具 arara 完成:
% arara: pdflatex
% arara: bibtex : { files :[test , sec] }
% arara: pdflatex
% arara: pdflatex
%: Start Header
\documentclass[a4paper]{article}
\usepackage[numbers]{natbib}
\makeatletter
\def\@mb@citenamelist{cite,citep,citet,citealp,citealt,citepalias,citetalias}
\makeatother
\usepackage{multibib}
\newcites{sec}{Other bibliographic references}
\defcitealias{manual-full}{International journal of logistics, issue 91}
\begin{document}
\cite{article-full}
\citesec{booklet-full}
Something something something and then \citepaliassec{manual-full}.
\bibliographystyle{plainnat}
\bibliography{xampl}
\let\noopsort\undefined
\let\printfirst\undefined
\let\singleletter\undefined
\let\switchargs\undefined
\bibliographystylesec{plainnat}
\bibliographysec{xampl}
\end{document}