et al. 后面的空格太大

et al. 后面的空格太大

我有一份文件

\documentclass[12pt]{article}
\usepackage{natbib}
\bibpunct{(}{)}{,}{a}{}{;}
\makeatletter
\renewcommand*{\NAT@nmfmt}[1]{\textsc{#1}}
\makeatother

\begin{document}
According to \citeauthor{test01} space is important.

According to \citeauthor{test01}\ space is important.
\bibliographystyle{plainnat}
\bibliography{literature}
\end{document}

以及如下的bib文件:

@misc{test01,
       author = "Jim Jones and Arthur Miller and Jenny Carter",
       title = "My title",
       year = "1988" 
}

在生成的 PDF 中,et al. 后面的空格很大,就像一个新句子的开始一样:

etal_输出

我怎样才能告诉 Latex 自动在那里使用正常空间?

答案1

以下是一个似乎有效的方法

\usepackage{xpatch}
\xpatchcmd\citeauthor{\begingroup}{\begingroup\aftergroup\@}{}{}
\makeatletter
\renewcommand*{\NAT@nmfmt}[1]{\textsc{#1\@}}
\makeatother

这不应该产生不利影响,因为只有当引用以标点符号结束时,空间因素才会产生影响。

如果该包xpatch不可用,可以通过以下方式获得相同的效果

\usepackage{etoolbox}
\expandafter\patchcmd\csname citeauthor \endcsname
  {\begingroup}{\begingroup\aftergroup\@}{}{}

如果没有重新定义\NAT@nmfmt,则应该执行以下操作:

\let\patched@NAT@nmfmt\NAT@nmfmt
\xpatchcmd{\patchedNAT@nmfmt}{#1}{#1\@}{}{}
\AtBeginDocument{\let\NAT@nmfmt\patchedNAT@nmfmt}

(请注意,如果愿意的话,\xpatchcmd可以将其改为。)\patchcmd

免责声明:我是xpatch

答案2

merlin.mbs“et al.”中,是由以下函数生成的:

FUNCTION {bbl.etal}
{ "et~al." }

在生成的 bst 文件中将其替换为

FUNCTION {bbl.etal}
{ "et~al.\@" }

这应该可以解决问题。也许值得向作者报告错误。

这可能是过度的,真正需要的是两个这样的函数:一个将设置\spacefactor为 1000(通过\@),另一个在点“et al.”既是缩写又是句子结尾句号的地方不这样做。


如果plainnat.bst上述方法不太适用,因为此 bibtex 样式不会将字符串封装在函数中,而是直接使用它。因此,在这种情况下,需要在文本编辑器中打开 bst 文件,将所有出现的“et~al.”更改为“et~al.\@”,然后将结果保存为新名称,例如,myplain.bst并改用此样式。

另一种方法是按照@egreg 的建议更新 natbib 宏。无论哪种情况,这都是 natbib 系统的一个错误,我认为应该引起 Patrick 的注意。

答案3

我似乎找到了一种简单但有效的方法来减少“et al.”后面过宽的空格,如下所示:

对于 的第 5 个参数\bibpunct,它指定作者姓名和年份之间的标点符号,我放置了一个负数细空格:\!它起作用了!

当然,出于简单的考虑,这并不是一个没有问题的解决方案:当没有“et al.”时,它还会缩短作者姓名和年份之间的间距。

相关内容