![Plainnat 类似于书目样式,但按名字排序](https://linux22.com/image/432431/Plainnat%20%E7%B1%BB%E4%BC%BC%E4%BA%8E%E4%B9%A6%E7%9B%AE%E6%A0%B7%E5%BC%8F%EF%BC%8C%E4%BD%86%E6%8C%89%E5%90%8D%E5%AD%97%E6%8E%92%E5%BA%8F.png)
默认情况下,使用 生成的参考文献列表中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
文件
plainnat.bst
在您的机器上找到。您可以通过kpsewhich plainnat.bst
在命令行/终端中输入来执行此操作。或者,从 CTAN 获取该文件的副本http://mirrors.ctan.org/macros/latex/contrib/natbib/plainnat.bst将文件复制到 TeX 可以找到的位置。文档目录就可以了。
将文件重命名为
plainnat-sortby-first.bst
打开文件并将以
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 :=
。
在文件顶部的注释中添加您的姓名和日期并解释修改。
在您的文档中使用
\bibliographystyle{plainnat-sortby-first.bst}
而不是。\bibliographystyle{plainnat}
作为上述步骤 1 至 5 的替代方案,您可以plainnat-sortby-first.bst
从https://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}
如果你希望在任何地方都按给定家族的顺序排列(不仅用于排序,还用于引用),请plainnat-firstlast.bst
从https://gist.github.com/moewew/008625af47bc58c76e2e89ef2789fa1a。