如何通过编辑 .bst 文件来抑制 natbib 引用中的换行符

如何通过编辑 .bst 文件来抑制 natbib 引用中的换行符

我想取消参考文献中不同引用之间的换行符。通常,参考文献如下所示:

[1] aaa. 
[2] bbb.

我正在寻找以下输出:

[1] aaa. [2] bbb.

这应该是一个相对简单的修复,但经过大量搜索,没有找到有效的解决方案。我正在使用已经编辑过的 ieeetr natbib 样式文件。

我看到一个output.bibitem函数,内容是

FUNCTION {output.bibitem}
{ newline$
  "\bibitem{" write$
  cite$ write$
  "}" write$
  newline$
  ""
  before.all 'output.state :=
}

我尝试通过删除换行符$ 来编辑它以读取

FUNCTION {output.bibitem}
{ 
  "\bibitem{" write$
  cite$ write$
  "}" write$
  
  ""
  before.all 'output.state :=
}    

然而,这并没有改变任何事情。

有什么解决办法吗?不是正在寻找一个需要 biblatex 的解决方案,而是恳求黑暗艺术直接编辑 .bst 文件的解决方案。

答案1

以下答案采用修改\bibitem而不是编辑文件的方法.bst

换行符是由使用\item内的 引起的\bibitem,或者在 Natbib 中实际上是辅助宏\@lbibitem。您可以修改代码以删除。这可以使用包中的宏\item来完成。\patchcmdetoolbox

在项目标签中,Natbib 执行一些管理操作,将引用键链接到正确的编号。修改后应保留此部分代码。具体来说,将代码从

\item[\hfil\NAT@anchor{#2}{\NAT@num}]

\NAT@anchor{#2}{\NAT@num}\space

\patchcmd

\makeatletter
\patchcmd{\@lbibitem}{\item[\hfil\NAT@anchor{#2}{\NAT@num}]}{\NAT@anchor{#2}{\NAT@num}\space}{}{}
\makeatother

这已经起作用了,但是整个段落都缩进了。要纠正这个问题,你可以减少\labelsep

\setlength{\labelsep}{-1em}

完整 MWE:

\documentclass{article}
\usepackage[numbers]{natbib}
\usepackage{etoolbox}
\makeatletter
\patchcmd{\@lbibitem}{\item[\hfil\NAT@anchor{#2}{\NAT@num}]}{\NAT@anchor{#2}{\NAT@num}\space}{}{}
\makeatother
\begin{document}
\cite{manual-minimal,misc-full,misc-minimal}
\bibliographystyle{ieeetr}
\setlength{\labelsep}{-1em}
\bibliography{xampl}
\end{document}

结果:

在此处输入图片描述

请注意,此修改会导致警告:包 natbib 警告:输入行 24 上的“thebibliography”环境为空。这是因为仍然有一个枚举环境,但其中没有更多项目。为了以更干净的方式实现此更改,您还应该删除触发此警告的环境和检查 - 但对于结果而言,它似乎没有产生不利影响。

相关内容