我正在使用 natbib 自定义参考书目样式,因此如果可以的话,我宁愿不改变 natbib。我有一个作者和两个引文,我只希望参考文献部分在一个作者下正确列出两个引文。我不知道该怎么做,因为目前输出将每个引文视为属于不同的作者(作为不同的条目)。我没有提供 MWE,因为在这种情况下它似乎没有必要,但如果需要的话我可以提供。
\documentclass{article}
\usepackage{natbib}
\bibliographystyle{plainnat}
\begin{document}
Here is text \citep[p.1]{authorA}. And then more from same author \citep[p.1]{authorB}
\clearpage
\bibliography{bib}{}
\end{document}
bib 文件如下:
@book{authorA,
author={Smith, John},
title={Book},
}
@book{authorB,
author={Smith, John},
title={Other Book},
}
我希望文章末尾的“参考文献”部分看起来像这样:
Smith, John. Book
------Other Book
而不是像这样:
Smith, John. Book
Smith, John. Other Book
答案1
请注意,参考文献部分中的书目条目的格式实际上不受natbib
;的控制natbib
,它主要是一个引文管理系统,可以处理各种数字和作者年份引文样式。书目条目的格式(包括用长破折号替换重复的作者(或作者))由您指定的书目样式决定。
您在问题的第一段中提到您使用自定义书目样式。但是,在 MWE 中,您声明您使用书目样式plainnat
。以下代码假设您正在使用plainnat
并显示如何修改文件plainnat.bst
以实现您的排版目标。希望您实际使用的书目样式与没有太大区别plainnat
。
首先创建 的副本
plainnat.bst
;将副本另存为myplainnat.bst
。(切勿编辑原始文件。)myplainnat.bst
使用您最喜欢的文本编辑器打开该文件。找到函数
article
。(该函数在我的副本中从 lin 699 开始plainnat
。)之前在此函数中插入以下几行代码:STRINGS {oldname} FUNCTION {name.or.dash} { 's := oldname empty$ { s 'oldname := s } { s oldname = { "---{}---{}---" } { s 'oldname := s } if$ } if$ }
你没有指定多久替换作者姓名(或多个作者姓名)的破折号应该是。在上面的代码中,我使用了三个连续的破折号。您可以随意更改此设置以满足您的排版需求和偏好。
接下来,在 中找到以下代码行的十个 [10!] 个实例
myplainnat.bst
:author format.key output
并插入指令
name.or.dash
独自在一条线上紧接着每条
author format.key output
线。book
在函数和中找到以下五行代码的两个实例inbook
:{ format.editors "author and editor" output.check editor format.key output } { format.authors output.nonnull crossref missing$
并将其替换为
{ format.editors "author and editor" output.check editor format.key output name.or.dash } { format.authors output.nonnull name.or.dash crossref missing$
name.or.dash
即,按照两个实例中分别指示的方式插入指令。在函数中
proceedings
,找到以下行editor format.key output
并插入行
name.or.dash
紧接着那条线。
如果您完成了所有这些编辑,则文件中应该有十六 [16] 个字符串“name.or.dash”的实例
.bst
。将文件保存
myplainnat.bst
在包含主文件的目录中.tex
,或者保存在 TeX 发行版的搜索路径中的目录中。\bibliographystyle{myplainnat}
从现在起请务必使用该说明。
TeXing 快乐!
答案2
尝试在最后一位(或任何一位)作者的第二个名字后添加 $~$。对我来说,这确实有效。我使用了 IEEE 格式。