Natbib+style alpha:获取所有作者的姓名首字母

Natbib+style alpha:获取所有作者的姓名首字母

我正在使用 natbib 的风格α

\usepackage[numbers,round,longnamesfirst]{natbib}
\bibliographystyle{alpha}

然而,对于作者超过三位的论文,这将产生一个形式为 的引用键[ABC⁺00],而不是[ABCDEF00]

是否有一个包选项可以用来获得后一种行为?

答案1

没有选项可以做到这一点。只有直接修改(副本)natbib才能影响生成的字母标签。alphaalpha.bst

(请注意,这alpha甚至不是一种natbib样式,它natbib主要支持数字和作者年份引用,但不支持字母样式。如果您不尝试使用\citet\citeauthor和朋友,它可能运行得足够好,但我认为我应该提一下这一点。)

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

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

  3. 将文件重命名为alpha-all.bst(文件的许可证仅允许分发具有不同名称的修改后的副本)

  4. 查找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$
    }
    
  5. 在文件顶部添加一条包含您的姓名、当前日期和更改的简短描述的评论。

  6. 在您的文档中使用\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}

生产

乱码 (EHAWH72)


下面说明了如何使用 执行相同的操作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}

乱码 [EHAWH72]

相关内容