(另一个)参考书目中的 URL 连字符问题

(另一个)参考书目中的 URL 连字符问题

我要问的问题已经被问过很多次了,但到目前为止似乎没有什么对我有用。基本上,我在参考书目中正确地使用连字符连接网址时遇到了麻烦。

我修改了命令\UrlBreaks,以便它允许在任何地方使用连字符,但这似乎在参考书目中被忽略了,而在文档的其余部分它确实有效。

以下是 MWE:

% !TEX encoding = UTF-8
% !TEX program = xelatex
\documentclass[12pt,english,a4paper]{article}%
\usepackage[backend=bibtex,defernumbers=true,sorting=nty]{biblatex}%
\usepackage[breaklinks,plainpages=false]{hyperref}%
\def\UrlBreaks{\do\/\do\a\do\b\do\c\do\d\do\e\do\f\do\g\do\h\do\i\do\j\do\k\do\l\do\m\do\n\do\o\do\p\do\q\do\r\do\s\do\t\do\u\do\v\do\w\do\x\do\y\do\z\do\A\do\B\do\C\do\D\do\E\do\F\do\G\do\H\do\I\do\J\do\K\do\L\do\M\do\N\do\O\do\P\do\Q\do\R\do\S\do\T\do\U\do\V\do\W\do\X\do\Y\do\Z\do0\do1\do2\do3\do4\do5\do6\do7\do8\do9\do=\do/\do.\do:}
\addbibresource{Biblio.bib}
\begin{document}
See \cite{citation} for further details or visit \url{http://www.joifewoirjecpwoirjcpewrijcpenwrjcpnewrjicpnwerjincpejricpejripcne.com}.
\printbibliography
\end{document}

参考文献在 Biblio.bib 文件中,如下所示

@book{citation,
author = {Doe, John},
title = {The Book},
url = {http://www.joifewoirjecpwoirjcpewrijcpenwrjcpnewrjicpnwerjincpejricpejripcne.com}
}

使用xelatex(或pdflatex)进行编译并bibtex产生以下输出: 使用 xelatex 编译

好奇心(希望它有助于找到错误):上面的图像是使用 编译后的结果xelatex;使用 编译pdflatex得到相同的输出,除了链接的青色轮廓线,具有讽刺意味的是,被连字符使用 latex 编译

使用\sloppy效果更好,但仍然不能使链接在我想要的地方连字符,即任何地方: 带有草率的选择

正如您可能想象的那样,\raggedright这也无法解决问题。

我正在寻找一些代码,允许在参考书目中对 URL 进行良好的连字符连接,并满足以下限制(我不知道它们是否相关):

  1. 它必须与xelatex和一起工作bibtex(对我来说backend=biber选项biblatex不起作用)
  2. polyglossia不一定是必需的,而是必须与babel
  3. 与包装兼容hyperref
  4. book与文档类兼容

答案1

biblatex有多个计数器,当设置为非零正值时,小于10000允许书目中的 URL 中断。具体计数器是

biburlnumpenalty
biburlucpenalty
biburllcpenalty

分别表示数字、大写字母和小写字母后的换行符。对于您的情况,将小写惩罚设置为 即可9000;较低的值会更多地鼓励换行符(或者更确切地说,较少地阻止换行符)。设置值通过 完成\setcounter

示例输出

\documentclass[12pt,english,a4paper]{article}%
\usepackage[backend=bibtex,defernumbers=true,sorting=nty]{biblatex}%
\usepackage[breaklinks,plainpages=false]{hyperref}%
\def\UrlBreaks{\do\/\do\a\do\b\do\c\do\d\do\e\do\f\do\g\do\h\do\i\do\j\do\k\do\l\do\m\do\n\do\o\do\p\do\q\do\r\do\s\do\t\do\u\do\v\do\w\do\x\do\y\do\z\do\A\do\B\do\C\do\D\do\E\do\F\do\G\do\H\do\I\do\J\do\K\do\L\do\M\do\N\do\O\do\P\do\Q\do\R\do\S\do\T\do\U\do\V\do\W\do\X\do\Y\do\Z\do0\do1\do2\do3\do4\do5\do6\do7\do8\do9\do=\do/\do.\do:}
\setcounter{biburllcpenalty}{9000}
\addbibresource{Biblio.bib}
\begin{document}
See \cite{citation} for further details or visit \url{http://www.joifewoirjecpwoirjcpewrijcpenwrjcpnewrjicpnwerjincpejricpejripcne.com}.
\printbibliography
\end{document}

在选择这些惩罚的值时,值得注意的biblatex

\UrlBigBreakPenalty   100

:和之后的休息时间-,以及

\UrlBreakPenalty      200

对于大多数标点符号后的换行符。您希望将其他惩罚设置得更高,以便数字和字母后的换行符的优先级低于标点符号后的换行符。如果您需要更改\Url...BreakPenalty上述两个,则可以通过以下不寻常的语法

\mathchardef\UrlBreakPenalty=200\relax

相关内容