Plainnat 类似于书目样式,但按名字排序

Plainnat 类似于书目样式,但按名字排序

默认情况下,使用 生成的参考文献列表中plainnat,参考文献按姓氏排序。

如何按名字排序?

在这里我附上一个 MWE

article.tex

\documentclass[]{article}
\usepackage{natbib}

\begin{document}

Test \citep{a1,a2,a3}

\bibliographystyle{plainnat}
\bibliography{refs}

\end{document}

refs.bib

@article{a1,
    title={Test paper 1},
    author={Albert Zwick},
    journal={Nature},
    year={2000}
}
@article{a2,
    title={Test paper 2},
    author={Christ Johnson},
    journal={Nature},
    year={2000}
}
@article{a3,
    title={Test paper 3},
    author={John Doe},
    journal={Nature},
    year={2000}
}

默认情况下我们将得到

在此处输入图片描述

按姓氏排序。如何按名字排序,同时又不失plainat风格?

答案1

按名字排序对于西方人而言极为罕见。natbib的作者年份样式也使得在参考书目中查找参考文献变得更加困难,因为读者只知道姓氏。

无论如何,为了实现所需的排序,您需要修改.bst文件

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

  2. 将文件复制到 TeX 可以找到的位置。文档目录就可以了。

  3. 将文件重命名为plainnat-sortby-first.bst

  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 "{ff~}{vv~}{ll}{, jj}" format.name$ 't :=
          nameptr #1 >
            {
              "   "  *
              namesleft #1 = t "others" = and
                { "zzzzz" * }
                { numnames #2 > nameptr #2 = and
                    { "zz" * year field.or.null * "   " * }
                    'skip$
                  if$
                  t sortify *
                }
              if$
            }
            { t sortify * }
          if$
          nameptr #1 + 'nameptr :=
          namesleft #1 - 'namesleft :=
        }
      while$
    }
    

这里唯一的变化是从s nameptr "{vv{ } }{ll{ }}{ ff{ }}{ jj{ }}" format.name$ 't :=s nameptr "{ff~}{vv~}{ll}{, jj}" format.name$ 't :=

  1. 在文件顶部的注释中添加您的姓名和日期并解释修改。

  2. 在您的文档中使用\bibliographystyle{plainnat-sortby-first.bst}而不是。\bibliographystyle{plainnat}

作为上述步骤 1 至 5 的替代方案,您可以plainnat-sortby-first.bsthttps://gist.github.com/moewew/203188e9933fdac3873601770b932357

\documentclass[]{article}
\usepackage{natbib}

\begin{filecontents}{\jobname.bib}
@article{a1,
  title   = {Test paper 1},
  author  = {Albert Zwick},
  journal = {Nature},
  year    = {2000},
}
@article{a2,
  title   = {Test paper 2},
  author  = {Christ Johnson},
  journal = {Nature},
  year    = {2000},
}
@article{a3,
  title   = {Test paper 3},
  author  = {John Doe},
  journal = {Nature},
  year    = {2000},
}
\end{filecontents}

\begin{document}
Test \citep{a1,a2,a3}

\bibliographystyle{plainnat-sortby-first}
\bibliography{\jobname}
\end{document}

艾伯特·茨威克。试卷 1。《自然》,2000 年。//克里斯特·约翰逊。试卷 2。《自然》,2000 年。//约翰·多伊。试卷 3。《自然》,2000 年。


如果你希望在任何地方都按给定家族的顺序排列(不仅用于排序,还用于引用),请plainnat-firstlast.bsthttps://gist.github.com/moewew/008625af47bc58c76e2e89ef2789fa1a

相关内容