使用 multibib 和 natbib 的引文别名

使用 multibib 和 natbib 的引文别名

我需要一个以(姓氏,年份)形式呈现引用的参考书目,我正在使用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 处于作者年份模式。可以通过以下方式更改

    1. 选择具有预定义引用样式的数字书目样式,该样式可以在包中或本地配置文件中定义;

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}

在此处输入图片描述

相关内容