将 plain.bst 作者更改为 first+et al

将 plain.bst 作者更改为 first+et al

在 plain.bst 文件中,我需要修改作者,以便只显示第一作者,后面跟着“et al”。我要强调的是,出于这里不值得提及的原因,这必须在 bst 级别完成(我不能使用其他解决方案,例如用另一个 bst 或某些 usepackage 解决方案替换)。

我已经确定了(可能)需要修改的正确功能,但我不熟悉这种语言,并希望得到有关如何修改它的指导:

FUNCTION {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 * }
        { numnames #2 >
        { "," * }
        'skip$
          if$
          t "others" =
        { " et~al." * }
        { " and " * t * }
          if$
        }
      if$
    }
    't
      if$
      nameptr #1 + 'nameptr :=
      namesleft #1 - 'namesleft :=
    }
  while$
}

我搜索了很久,但找不到合适的答案。

谢谢你!

答案1

这个答案模仿的是这个答案针对较早的查询,标题为BibTeX:如何将长作者列表缩减为“Firstauthor et al.”?

我建议您按如下方式进行。

  • 在您的 TeX 发行版中找到该文件plain.bst。复制一份并将副本命名为 。plainone.bst(切勿编辑 TeX 发行版文件的原始副本。)

  • 在文本编辑器中打开plainone.bst。(你用来编辑 tex 文件的程序就可以了。)

  • 在 中plainone.bst,找到函数format.names。(在我的文件副本中,该函数从第 183 行开始。)

  • 在此函数中,找到以下一组行:

          { namesleft #1 >
              { ", " * t * }
              { numnames #2 >
    

    并将其替换为以下组:

          {
            nameptr #1
            #1 + =
            numnames #1
            > and
              { "others" 't :=
                #1 'namesleft := }
              'skip$
            if$
            namesleft #1 >
              { ", " * t * }
              {
                s nameptr "{ll}" format.name$ duplicate$ "others" =
                  { 't := }
                  { pop$ }
                if$
                numnames #2 >
    

    另外:如果你改变主意,想要截断作者列表,比如说,作者(而不是多位作者),请将新代码块第 2 行的更改nameptr #1为,并将第 4 行的更改为。nameptr #4numnames #1numnames #4

  • 将新的 bst 文件保存在主 tex 文件所在的目录中,或保存在 BibTeX 搜索的目录中。如果选择后一种方法,请确保适当更新 TeX 发行版的文件名数据库。(如果您不理解前面这句话的意思,您可能应该选择第一个选项。)

  • 在主 tex 文件中,更改\bibliographstyle{plain}为 `\bibliographystyle{plainone} 并运行完整的重新编译循环 - LaTeX、BibTeX 和 LaTeX 两次 - 以完全传播所有更改。

祝您 BibTeX 愉快。


MWE 及其输出:

在此处输入图片描述

\documentclass{article}

\begin{filecontents}[overwrite]{mybib.bib}
@misc{a,author="Anne Author", title="U", year=3001}
@misc{ab,author="Anne Author and B", title="V", year=3002}
@misc{abc,author="Anne Author and B and C", title="W", year=3003}
@misc{abcd,author="Anne Author and B and C and D", title="X", year=3004}
\end{filecontents}

\usepackage{cite}
\begin{document}
\cite{a,ab,abc,abcd}
\bibliographystyle{plain-one}  % <-- be sure to point to the new bst file
\bibliography{mybib}
\end{document}

相关内容