我要问的问题已经被问过很多次了,但到目前为止似乎没有什么对我有用。基本上,我在参考书目中正确地使用连字符连接网址时遇到了麻烦。
我修改了命令\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
;使用 编译pdflatex
得到相同的输出,除了链接的青色轮廓线,具有讽刺意味的是,被连字符:
使用\sloppy
效果更好,但仍然不能使链接在我想要的地方连字符,即任何地方:
正如您可能想象的那样,\raggedright
这也无法解决问题。
我正在寻找一些代码,允许在参考书目中对 URL 进行良好的连字符连接,并满足以下限制(我不知道它们是否相关):
- 它必须与
xelatex
和一起工作bibtex
(对我来说backend=biber
选项biblatex
不起作用) - 包
polyglossia
不一定是必需的,而是必须与babel
- 与包装兼容
hyperref
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