我正在使用natbib
与 非常相似的参考书目样式的包humannat
。我想在作者相同的多个参考文献中使用长破折号代替完整的作者姓名。我将不胜感激任何建议。
答案1
书目样式文件humannat.bst
至少已经存在了二十年,几乎没有变化。因此,我首先建议你不是不必费心修改文件。相反,选择一个更现代的参考书目样式文件,最好是已经了解诸如 和 之类“新奇” [!] 字段的文件url
。doi
文件中的标题信息humannat.bst
表明它基于(现在同样过时的)参考书目样式。因此,您可能希望从和apalike
开始搜索更新的参考书目样式。只是一个想法。apa.bst
apa6.bst
但是,如果您坚持使用humannat
参考书目样式,则可以按以下步骤指示 BibTeX 用长破折号替换重复作者(和编辑者)的实例:
复制一份
humannat.bst
并将其命名为myhumannat.bst
。请执行不是编辑/覆盖此类现有文件。在您最喜欢的文本编辑器中打开该文件
myhumannat.bst
并搜索名为的函数article
。(它从该文件的本地副本中的第 586 行开始。)在此函数前面插入以下代码行:
STRINGS {oldname} FUNCTION {name.or.dash} { 's := oldname empty$ { s 'oldname := s } { s oldname = { "---{}---{}---" } { s 'oldname := s } if$ } if$ }
您在问题中没有指定“破折号”的长度。我在上面的函数中选择了“三个破折号”的长度。如果您希望破折号的长度只有一两个破折号,您可以随意以显而易见的方式修改该函数。
接下来,在中应该有 11 个以下两行代码的实例
humannat.bst
(分别在函数article
、、、、、、、和 中booklet
):incollection
inproceedings
manual
mastersthesis
misc
phdthesis
proceedings
techreport
unpublished
author format.key output % special for output.year.check % apalike
在所有这些情况下,插入行
name.or.dash
之间这两行代码。
需要进一步特别注意的函数是针对类型
@book
和条目的函数@inbook
,因为它们必须处理重复的作者和重复的编辑者。要修改该book
函数,请搜索以下代码行:FUNCTION {book} { output.bibitem author empty$ { format.editors "author and editor" output.check editor format.key output } { format.authors output.nonnull crossref missing$ { "author and editor" editor either.or.check } 'skip$ if$ }
并将整个块替换为
FUNCTION {book} { output.bibitem author empty$ { format.editors "author and editor" output.check editor format.key output name.or.dash } { format.authors output.nonnull name.or.dash crossref missing$ { "author and editor" editor either.or.check } 'skip$ if$ }
注意两条新线调用该
name.or.dash
函数。对函数的前几行进行相同的搜索和替换处理。当然,如果您确定bib 文件中
inbook
永远不会有此类条目,则可以跳过此步骤。@inbook
保存文件
myhumannat.bst
并以适合您的 TeX 发行版的方式更新 TeX 文件名数据库,以便当 LaTeX 遇到指令时,BibTeX 可以找到它\bibliographystyle{myhumannat}
祝 (Bib)TeXing 快乐!