禁止 BibLaTeX 在连字符处断开 URL

禁止 BibLaTeX 在连字符处断开 URL

默认情况下,BibLaTeX 会在 URL 中的连字符处断行:

\documentclass{article}
\begin{filecontents}{main.bib}
@online{entry,
  title = {Title},
  subtitle = {Subtitle},
  author = {Doe, John},
  url = {http://some-quite-long-url-that-contains-hyphens},
}
\end{filecontents}
\usepackage{biblatex}
\addbibresource{main.bib}
\begin{document}
\nocite{*}
\printbibliography
\end{document}

使用 pdfLaTeX 排版上述代码的结果

这很容易引起混淆:连字符是作为连字符连接的一部分添加的,还是 URL 中有意义的部分?因此,我想禁止在连字符处对 URL 进行连字符连接。

BibLaTeX 使用该url包,默认情况下它不会在连字符处破坏 URL,并且我在 BibLaTeX 文档中没有看到有关此行为的提及。

答案1

biblatex有自己的 URL 设置\biburlsetup(第 3.16 版第 285-324 行biblatex.def。默认\biburlsetup包含\def\UrlBigBreaks{\do\:\do\-}%,因此明确允许在连字符处换行。我们可以通过\UrlBigBreaks在 中更改 来撤消该操作\appto\biburlsetup

\documentclass{article}

\usepackage{biblatex}

\appto\biburlsetup{%
  \def\UrlBigBreaks{\do\:}}

\begin{filecontents}{\jobname.bib}
@online{entry,
  title    = {Title},
  subtitle = {Subtitle},
  author   = {Doe, John},
  url      = {http://some-quite-long-url-that-contains-hyphens},
}
\end{filecontents}
\addbibresource{\jobname.bib}
\begin{document}
\nocite{*}
\printbibliography
\end{document}

长 URL 中没有换行符。

当然,不允许在连字符处断开 URL 会使许多“现代”URL 极难断开。如果 URL 的排版字体与正文不同,大多数读者可能会被警告 URL 中出现的任何连字符都是真实的,而不是由连字符引起的。

答案2

您可以添加\do\-\UrlNoBreaks

\def\UrlNoBreaks{\do\-\do\(\do\[\do\{\do\<}%

但是正如你从下面的例子中看到的那样,这样 url 就无法中断,而且结果很难看:

在此处输入图片描述

平均能量损失

\documentclass{article}
\begin{filecontents}[overwrite]{main.bib}
 @online{entry,
  title = {Title},
  subtitle = {Subtitle},
  author = {Doe, John},
  url = {http://some-quite-long-url-that-contains-hyphens},
 }
\end{filecontents}
\usepackage{lipsum}
\usepackage{biblatex}
\addbibresource{main.bib}

\def\UrlNoBreaks{\do\-\do\(\do\[\do\{\do\<}%

\begin{document}
\lipsum[11]
 \nocite{*}
 \printbibliography
\end{document}

相关内容