防止 BibTeX 在最终作者姓名前打印“and”字

防止 BibTeX 在最终作者姓名前打印“and”字

我希望 BibTeX 按以下方式打印作者姓名:

S. Bouabdallah、A. Noth、R. Siegwart

为了实现这一点,根据我已经读过的内容,.bib代码应该如下所示:

@inproceedings{BouabdallahPID,
    author = {Bouabdallah, S. and Noth, A. and Siegwart, R.},
    keywords = {quad},
    location = {Sendai, Japan},
    pages = {2451--2456},
    title = {{PID vs LQ control techniques applied to an indoor micro quadrotor}},
    year = {2004}
}

相反,BibTeX 一直在最后一位作者的名字前包含“and”字,即:

S. Bouabdallah、A. Noth 和 R. Siegwart

我怎样才能去掉“and”这个词?

到目前为止,我尝试过alpha、和样式,但没有什么区别,因此假定样式不会改变此行为,但这个样式可能不对。不过,我还是想继续使用。plainamsacmplain

答案1

如果您使用的是plain参考书目样式,则可以按以下步骤让 BibTeX 将" and "倒数第二位和最后一位作者姓名之间的连接器替换为一个简单的逗号:

  • 复制该文件plain.bst并将其命名为myplain.bst。请执行不是直接编辑/修改 TeX 发行版附带的现有文件。

  • 在您喜欢的文本编辑器中打开文件myplain.bst并搜索函数format.names。(它在我的系统的副本中从 l. 185 开始plain.bst。)在此函数的代码中,查找以下行(可能是第 195-201 行):

        { numnames #2 >
            { "," * }
            'skip$
          if$
          t "others" =
            { " et~al." * }
            { " and " * t * }
    
  • 修改这些行的第一行和最后一行,使代码行如下所示:

        { numnames #1 >
            { "," * }
            'skip$
          if$
          t "others" =
            { " et~al." * }
            { " " * t * }
    

    即,将第一行改为,并将#2该组最后一行改为。无论作者人数多少,都需要进行两项修改才能得到正确的处理——当然,只要作者人数大于 1 即可。#1" and "" "

  • 保存文件,根据需要更新 TeX 发行版的文件名数据库,然后使用命令开始调用新的参考书目样式\bibliographystyle{myplain}

祝您 BibTeX 愉快!

答案2

使用时jurabib,其工作方式如下:

\renewcommand*{\jbbtasep}{, } % bta = between two authors sep
\renewcommand*{\jbbfsasep}{, } % bfsa = between first and second author sep
\renewcommand*{\jbbstasep}{, }% bsta = between

不过,我还没有弄清楚它是如何使用的plain

编辑:

我刚刚阅读了plain样式文档——显然不是全部——可以在加拿大运输安全局。第 683-714 行描述了名称格式化函数(就我所理解的而言)。它说:

format.names(s) ==
%  BEGIN
%       nameptr := 1
%       numnames := num.names$(s)
%       namesleft := numnames
%       while namesleft > 0
%         do
%                               % for full names:
%           t := format.name$(s, nameptr, "{ff~}{vv~}{ll}{, jj}")
%                               % for abbreviated first names:
%           t := format.name$(s, nameptr, "{f.~}{vv~}{ll}{, jj}")
%           if nameptr > 1 then
%               if namesleft > 1 then nameresult := nameresult * ", " * t
%               else if numnames > 2
%                      then nameresult := nameresult * ","
%                    fi
%                    if t = "others"
%                      then nameresult := nameresult * " et~al."
%                      else nameresult := nameresult * " and " * t
%                    fi
%               fi
%           else nameresult := t
%           fi
%           nameptr := nameptr + 1
%           namesleft := namesleft - 1
%         od
%       return nameresult
%  END

似乎必须else nameresult := nameresult * " and " * t进行转变else nameresult := nameresult * ", " * t才能实现您想要实现的目标。

因此,您可能必须基于plain仅更改此部分的样式来创建自己的新样式。

“K-Lo 博士” 的博文也可能有帮助。

答案3

谢谢你的回答。我只想为新用户添加一条评论:

该文件myplain.bst必须与父文件位于同一文件夹中.tex。如果您将工作分成多个.tex文件(例如,在一篇论文中),则必须将该.bst文件与非父.tex文件放在同一文件夹中。

例子

  • 父 tex 文件: thesis/thesis.tex
  • 章节路径: thesis/chapters/introduction.tex,,...thesis/chapters/abstract.texthesis/chapters/results.tex

那么的路径myplain.bst就必须是thesis/chapters/myplain.bst

您必须至少编译两次参考书目和 PDF 文件才能打印不带“和”字的参考文献。

这对我有用。

相关内容