BibTeX 自动限制生成的 .bbl 文件每行最多 80 个字符。这可能会产生意想不到的后果。例如,我使用的是apsrev4-1
APS 期刊的参考书目样式,这种样式会自动将 .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.bst
RevTeX 包提供的参考书目样式,但它也需要进行修改以显示文章标题,如这个答案。该文件很长,因此为了方便起见,我将其复制到此处: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}%