我正在使用 natbib 的风格α:
\usepackage[numbers,round,longnamesfirst]{natbib}
\bibliographystyle{alpha}
然而,对于作者超过三位的论文,这将产生一个形式为 的引用键[ABC⁺00]
,而不是[ABCDEF00]
。
是否有一个包选项可以用来获得后一种行为?
答案1
没有选项可以做到这一点。只有直接修改(副本)natbib
才能影响生成的字母标签。alpha
alpha.bst
(请注意,这alpha
甚至不是一种natbib
样式,它natbib
主要支持数字和作者年份引用,但不支持字母样式。如果您不尝试使用\citet
或\citeauthor
和朋友,它可能运行得足够好,但我认为我应该提一下这一点。)
alpha.bst
在您的机器上找到。您可以通过kpsewhich alpha.bst
在命令行/终端中输入来执行此操作。或者,从 CTAN 获取该文件的副本http://mirrors.ctan.org/biblio/bibtex/base/alpha.bst将文件复制到 TeX 可以找到的位置。文档目录就可以了。另请参阅https://texfaq.org/FAQ-inst-wlcf
将文件重命名为
alpha-all.bst
(文件的许可证仅允许分发具有不同名称的修改后的副本)查找
FUNCTION {format.lab.names}
(ll. 934-973) 并将完整函数定义替换为FUNCTION {format.lab.names} { 's := s num.names$ 'numnames := numnames #1 > { numnames 'namesleft := #1 'nameptr := "" { namesleft #0 > } { nameptr numnames = { s nameptr "{ff }{vv }{ll}{ jj}" format.name$ "others" = { "{\etalchar{+}}" * #1 'et.al.char.used := } { s nameptr "{v{}}{l{}}" format.name$ * } if$ } { s nameptr "{v{}}{l{}}" format.name$ * } if$ nameptr #1 + 'nameptr := namesleft #1 - 'namesleft := } while$ } { s #1 "{v{}}{l{}}" format.name$ duplicate$ text.length$ #2 < { pop$ s #1 "{ll}" format.name$ #3 text.prefix$ } 'skip$ if$ } if$ }
在文件顶部添加一条包含您的姓名、当前日期和更改的简短描述的评论。
在您的文档中使用
\bibliographystyle{alpha-all}
而不是。\bibliographystyle{alpha}
作为步骤 1 至 5 的替代方案,您可以在以下位置获取该文件的修补版本https://gist.github.com/moewew/372397ed6d91f516ba71eec0097a376a
alpha.bst
和新版本之间的区别alpha-all.bst
大致如下
--- alpha.bst 2010-12-09 04:18:56.000000000 +0100
+++ alpha-all.bst 2021-02-16 17:49:17.801451700 +0100
@@ -1,3 +1,14 @@
+%%%%% alpha-all.bst
+%%%%%
+%%%%% for https://tex.stackexchange.com/q/583586/35864
+%%%%%
+%%%%% 2021-02-16 MW
+%%%%%
+%%%%% modification of alpha.bst
+%%%%% that displays all author letters in the alphabetic label
+%%%%% and does not truncate the list with \etalchar{+}
+%%%%% the only change is a slight simplification of format.lab.names
+%%%%%
% BibTeX standard bibliography style `alpha'
% Version 0.99b (8-Dec-10 release) for BibTeX versions 0.99a or later.
% Copyright (C) 1984, 1985, 1988, 2010 Howard Trickey and Oren Patashnik.
@@ -935,10 +946,7 @@
{ 's :=
s num.names$ 'numnames :=
numnames #1 >
- { numnames #4 >
- { #3 'namesleft := }
- { numnames 'namesleft := }
- if$
+ { numnames 'namesleft :=
#1 'nameptr :=
""
{ namesleft #0 > }
@@ -956,12 +964,6 @@
namesleft #1 - 'namesleft :=
}
while$
- numnames #4 >
- { "{\etalchar{+}}" *
- #1 'et.al.char.used :=
- }
- 'skip$
- if$
}
{ s #1 "{v{}}{l{}}" format.name$
duplicate$ text.length$ #2 <
现在
\documentclass[british]{article}
\usepackage[T1]{fontenc}
\usepackage{babel}
\usepackage[numbers,round,longnamesfirst]{natbib}
\begin{filecontents}{\jobname.bib}
@book{elk,
author = {Anne Elk and Annie Hacker and Humphrey Appleby and Bernard Woolley and James Hacker},
title = {A Theory on Brontosauruses},
year = {1972},
publisher = {Monthy \& Co.},
location = {London},
}
\end{filecontents}
\begin{document}
Lorem \citep{elk}
\bibliographystyle{alpha-all}
\bibliography{\jobname}
\end{document}
生产
下面说明了如何使用 执行相同的操作biblatex
,它有一个选项(maxalphanames
)。
\documentclass[british]{article}
\usepackage[T1]{fontenc}
\usepackage{babel}
\usepackage[backend=biber, style=alphabetic, maxbibnames=999, maxalphanames=999]{biblatex}
\begin{filecontents}{\jobname.bib}
@book{elk,
author = {Anne Elk and Annie Hacker and Humphrey Appleby and Bernard Woolley and James Hacker},
title = {A Theory on Brontosauruses},
year = {1972},
publisher = {Monthy \& Co.},
location = {London},
}
\end{filecontents}
\addbibresource{\jobname.bib}
\begin{document}
Lorem \autocite{elk}
\printbibliography
\end{document}