如何在 BibTeX 生成的 bbl 文件中自动插入命令?

如何在 BibTeX 生成的 bbl 文件中自动插入命令?

这个问题询问如何将代码保存在 bbl 文件中。幸运的是,无需修改 bbl 文件即可找到并解决根本原因。几个答案指出不应更改 bbl 文件,并且(通常)有更好的方法来实现目标。

但是,有些情况下,修改 bbl 文件是唯一的选择。在这种情况下,我需要使用 ACM sig-alternate LaTeX 类来平衡文章最后一页的列。sig-alternate 样式的作者建议的“官方”解决方案是修改 bbl 文件并将命令插入到\balancecolumns应该出现列分隔符的位置。当然,我想避免直接修改它,而是找到一种可维护的方法来获取列分隔符。

我发现的所有解决方案都不适合我的情况(我知道它们在某些情况下有效,但我现在有一篇论文,它们不起作用)。我尝试过这个balance包,这个flushend包,试验过这个multicol包,摆弄过页面高度,......

此时,最可维护的解决方案似乎确实是以某种方式将 ACM sig-alternate class 命令\balancecolumns自动放入 bbl 文件中。我可以通过编辑 BibTeX 文件或 LaTeX 文件来实现这一点吗?如果我必须自己指定中断发生的位置,那就没问题,但我不想修改临时文件(例如 bbl 文件)。我是否必须求助于使用 sed 或其他程序以编程方式编辑文件?

答案1

.bbl一般情况下,可以使用以下方法将材料添加到文件中

@premble{ <command to be inserted in the bbl> }

但是,@preamble在 的开头添加了.bbl

在 中的特定点添加一些命令的一种策略bbl是创建一个钩子(使用toolbox \patchcmd),\bibitem其中由特定的 激活key。这是一种可行的方法。

\patchcmd{\@bibitem}
  {\item}
  {\ifstrequal{#1}{KEY}{\balance}{}\item}
  {}
  {}
\patchcmd{\@lbibitem}
  {\item}
  {\ifstrequal{#1}{KEY}{\balance}{}\item}
  {}
  {}
\makeatother

上面的代码本质上是\balancecolumns在引用之前添加 key KEY。请注意,在普通 latex 中\bibitem会扩展为\@lbibitem\@bibitem,因此我们必须修补这两个命令。

以下是完整的 MWE

\documentclass[twocolumn]{article}

\usepackage{etoolbox}
\usepackage{balance}
\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
 @article{first,
   author = "A.U. Thor",
   title = "Atitle",
   journal = "AJournal",
   year = 2013,
   pages = {1-10}
 }
 @article{second,
   author = "A.U. Thor",
   title = "Btitle",
   journal = "AJournal",
   year = 2013,
   pages = {11}
 }
 @article{third,
   author = "A.U. Thor",
   title = "Ctitle",
   journal = "AJournal",
   year = 2013,
   pages = {12-}
 }
 @article{fourth,
   author = "A.U. Thor",
   title = "Dtitle",
   journal = "AJournal",
   year = 2013,
 } 
\end{filecontents}

\makeatletter
\patchcmd{\@bibitem}
  {\item}
  {\ifstrequal{#1}{third}{\balance}{}\item}
  {}
  {}
\patchcmd{\@lbibitem}
  {\item}
  {\ifstrequal{#1}{second}{\balance}{}\item}
  {}
  {}
\makeatother
\begin{document}

\nocite{*}
\bibliographystyle{plain}
\bibliography{\jobname}  
\end{document}

输出结果

在此处输入图片描述

相关内容