大部分稍有经验的 LaTeX 用户,都知道使用 \url
命令在 LaTeX 文稿中插入 URL。更资深一些的用户,会使用 hyperref
宏包,而不是过时的 url
宏包来处理。
然而,不论是否资深,大多数用户应该都有遇到过 LaTeX 无法正确对 URL 进行折行的问题。此篇介绍一下如何处理。
TeX 对于断行和分页,是有专门的算法处理的。通常而言,如果一个单词(一整个 \url
可以看做是一个单词),TeX 不知道从何处进行分词,那么 TeX 就不会在这个单词上断行。对于很长的单词,比如一个 \url
,如果 TeX 不能在此处断行,而它又处于某一行的末尾,就很容易出现 overful box。
因此,本质上,这个问题需要让 \url
命令,知道我们允许在何处断行。
hyperref
宏包提供了两个宏,\UrlBreaks
以及 \UrlBigBreaks
,用于告知 TeX,用户允许在何处截断 URL 以便换行。二者有一些细微的差别,但此处按下不表——大多数读者只需要使用 \UrlBreaks
即可。
1 | \documentclass{article} |
在这里,\UrlOrds
里记录了一些特殊符号(例如 -
和 _
),而 \UrlAlphabet
记录了 26 个英文字母的大小写,\UrlDigits
则记录了 10 个阿拉伯数字。
而后,我们使用 LaTeX 内核提供的 \g@addto@marco
,依次将上述三个宏的内容,续接在 \UrlBreaks
之后。这就是说,我们允许在上述所有字符处断行。
如此,编译出的结果也是符合预期的。