了解默认书目排序顺序

了解默认书目排序顺序

我试图理解我在 Latex 书目和有两位以上作者的 bibitem 中遇到的有些令人惊讶的行为。这是一个简单的演示.bib文件:

@article{s0,
  title={Title},
  author={Aaronson, Aaron},
  journal={Journal},
  year={Year},
}

@article{s1,
  title={Title},
  author={Aaronson, Aaron and Christopher, Christina},
  journal={Journal},
  year={Year},
}

@article{s2,
  title={Title},
  author={Aaronson, Aaron and Baker, Brian and Dudley, Diedre},
  journal={Journal},
  year={Year}
}

以下是一份包含参考书目的最简文档:

\documentclass{article}

\usepackage{natbib}
\bibliographystyle{plainnat}

\begin{document}

\nocite{*}
\bibliography{test}

\end{document}

根据列出的作者,我希望按字母顺序排列的参考文献列表具有以下参考顺序:

  1. 亚伦·阿伦森
  2. Aaron Aaronson、Brian Baker 和 Diedre Dudley
  3. 亚伦·亚伦森和克里斯蒂娜·克里斯托弗

事实上,当我建立这个文档时,我得到了以下内容:

在此处输入图片描述

这是怎么回事?有没有办法强制执行我期望的字母顺序?

答案1

使用plainnatBibTeX 为 MWE 中的条目生成以下排序名称

aaronson  aaron                                           % s0
aaronson  aaron   christopher  christina                  % s1
aaronson  aaron   zzYear   baker  brian   dudley  diedre  % s2

最后一点可能有点令人惊讶,但却解释了正在发生的事情。

plainnat本质上确保“Name et al.”排在“Name zz”下,排在所有其他“Name”/“Name and OtherName”组合之后。请记住,对于作者年份引文,您只会在引文中看到“Aaronson et al.”,而不会看到“Aaronson, Baker and Dudley”。因此,统一对“et al.”条目进行排序是有意义的,这样总是可以轻松找到它们,并且不需要有关合著者的额外知识(如果您的读者只知道引文标签,他们就不会知道这些知识)。

当然,对于那些认识合著者或只阅读参考书目的人来说,这种排序顺序可能有点奇怪。

如果您想强制不同的排序顺序,则需要.bst直接修改文件。

  1. 在您的机器上找到plainnat.bst。您可以通过输入kpsewhich plainnat.bst。您可以通过在命令行/终端中输入来执行此操作。或者,从 CTAN 获取该文件的副本http://mirrors.ctan.org/macros/latex/contrib/natbib/plainnat.bst

  2. 将文件复制到 TeX 可以找到的位置。文档目录就可以了。另请参阅https://texfaq.org/FAQ-inst-wlcf

  3. 将文件重命名为plainnat-allsort.bst(LPPL 强烈建议重命名原始文件的已更改副本)

  4. 查找FUNCTION {sort.format.names}(ll. 1207-1235) 并将完整函数定义替换为

    
     FUNCTION {sort.format.names}
     { 's :=
       #1 'nameptr :=
       ""
       s num.names$ 'numnames :=
       numnames 'namesleft :=
         { namesleft #0 > }
         {
           s nameptr "{vv{ } }{ll{ }}{  ff{ }}{  jj{ }}" format.name$ 't :=
           nameptr #1 >
             {
               "   "  *
               namesleft #1 = t "others" = and
                 { "zzzzz" * }
                 { t sortify * }
               if$
             }
             { t sortify * }
           if$
           nameptr #1 + 'nameptr :=
           namesleft #1 - 'namesleft :=
         }
       while$
     }
    
  5. 在文件顶部添加一条包含您的姓名、当前日期和更改的简短描述的评论。

  6. 在您的文档中使用\bibliographystyle{plainnat-allsort}而不是。\bibliographystyle{plainnat}

作为步骤 1 至 5 的替代方案,您可以在以下位置获取该文件的修补版本https://gist.github.com/moewew/6b7f057d814d8fbd3e3883bceeae91cd

\documentclass{article}

\usepackage{natbib}
\bibliographystyle{plainnat-allsort}

\begin{filecontents}{\jobname.bib}
@article{s0,
  title   = {Title},
  author  = {Aaronson, Aaron},
  journal = {Journal},
  year    = {Year},
}
@article{s1,
  title   = {Title},
  author  = {Aaronson, Aaron and Christopher, Christina},
  journal = {Journal},
  year    = {Year},
}
@article{s2,
  title   = {Title},
  author  = {Aaronson, Aaron and Baker, Brian and Dudley, Diedre},
  journal = {Journal},
  year    = {Year}
}
\end{filecontents}

\begin{document}
\cite{s0,s1,s2}
\bibliography{\jobname}
\end{document}

Aaron Aaronson。标题。日志,年份。//Aaron Aaronson、Brian Baker 和 Diedre Dudley。标题。日志,年份。//Aaron Aaronson 和 Christina Christopher。标题。日志,年份。

相关内容