让 BibTeX 在 .bbl 文件中正确打印换行符

让 BibTeX 在 .bbl 文件中正确打印换行符

BibTeX 自动限制生成的 .bbl 文件每行最多 80 个字符。这可能会产生意想不到的后果。例如,我使用的是apsrev4-1APS 期刊的参考书目样式,这种样式会自动将 .bib 文件中的 DOI(科学论文标识符)转换为 URL,方法是将它们转换为以下内容: \href {\doibase xxxx.xxxxx}其中\doibase只是一个插入的命令http://dx.doi.org/,而xxxx.xxxxx是给定论文的 DOI。大多数情况下,这个空格不会引起问题,URL 的格式与http://dx.doi.org/xxxx.xxxxx参考书目中的格式相同。但是,BibTeX 可能会决定断开\doibase和 DOI 之间的线,在这种情况下会添加一个空格,并且 URL 的格式会是这样,http://dx.doi.org/ xxxx.xxxxx这是不正确的,并会导致某些 PDF 查看器出现问题。

我想通过强制 BibTeX 在每个 之前换行来解决这个问题\href。我一直试图修改 .bst 文件,但没有成功, snewline$没有出现在适当的位置。我怎样才能在所有参考书目链接前强制换行?

平均能量损失

为了重现此行为,我将使用apsrev4-1.bstRevTeX 包提供的参考书目样式,但它也需要进行修改以显示文章标题,如这个答案。该文件很长,因此为了方便起见,我将其复制到此处:paste.ee/p/tj5zj

如果将此文件保存为apsrev-mod.bst,则最小工作示例如下:

\documentclass{article}
\usepackage{hyperref}

\usepackage{filecontents}
\begin{filecontents}{bibliography.bib}
@article{entry,
  title = {Long title so that it just happens that the line gets broken appropriately},
  author = {Author, A and Author, B},
  year = {2021},
  publisher = {Publisher},
  doi = {xxxx.xxxxx},
  journal = {Journal}
}
\end{filecontents}

\begin{document}

  \cite{entry}

  \bibliographystyle{apsrev-mod}
  \bibliography{bibliography}
  
\end{document}

答案1

这是解决您问题的一种方法,无需强制换行。\doibase我们只需在文件中写出(新的)DOI 基础 URL.bst而不使用空格即可。然后 BibTeX 不会在空格处换行,一切都很好。

强制使用 的问题在于,样式会使用相对较少的或指令newline$一次性写出整个参考书目条目。因此,如果我们想强制换行,我们需要在正确的时间输入。此外,我们不能在 之前换行,因为样式会用 硬编码前一个空格,然后换行会产生额外的(不需要的)空格。write$newline$\href\

所以我只需.bst按如下方式更改文件

--- apsrev-mod.bst  2021-03-19 08:38:36.360594000 +0100
+++ apsrev-moddoi.bst   2021-03-19 08:38:27.266269000 +0100
@@ -1795,7 +1795,7 @@
 
 FUNCTION {doi.base.command}
 {
-  "\doibase "
+  "https://doi.org/"
 }
 
 FUNCTION {noop.command}

新文件可从以下网址获取:https://gist.github.com/moewew/797b5747b6c75bd69dec33f0ecfe8179.bbl并为 MWE生成以下条目

\bibitem [{\citenamefont {Author}\ and\ \citenamefont {Author}(2021)}]{entry}%
  \BibitemOpen
  \bibfield  {author} {\bibinfo {author} {\bibfnamefont {A.}~\bibnamefont
  {Author}}\ and\ \bibinfo {author} {\bibfnamefont {B.}~\bibnamefont
  {Author}},\ }\bibfield  {title} {\emph {\bibinfo {title} {Long title so that
  it just happens that the line gets broken appropriately},}\ }\href
  {https://doi.org/xxxx.xxxxx} {\bibfield  {journal} {\bibinfo  {journal}
  {Journal}\ } (\bibinfo {year} {2021}),\ xxxx.xxxxx}\BibitemShut {NoStop}%

相关内容