![不带 \sloppy 的 URL 换行符](https://linux22.com/image/273134/%E4%B8%8D%E5%B8%A6%20%5Csloppy%20%E7%9A%84%20URL%20%E6%8D%A2%E8%A1%8C%E7%AC%A6.png)
几个小时阅读有关 URL 换行的不同文章并没有找到以下问题的解决方案:
我有一个很长的 URL,我不打算使用在线服务将其缩短。使用 URL 包和 pdfLaTeX 输出。换行符出现在一个看起来很丑的地方,我无法理解,为什么一个幸运地如此重视正确布局的工具会在这里换行。
我的 MWE 是:
\documentclass[10pt,a5paper]{book} % Regular text font size is 10 pt.
\usepackage{lipsum} % load paragraphs of filler text
\setlength{\oddsidemargin}{20mm}
\setlength{\textwidth}{108.5mm}
\usepackage{url}
\makeatletter
\g@addto@macro{\UrlBreaks}{\UrlOrds}
\g@addto@macro{\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\do\1\do\2\do\3\do\4\do\5\do\6\do\7\do\8\do\9\do\0\do\.}
\makeatother
\begin{document}
\lipsum[2]
Available: \url{http://www.aaa.bb.cccc.dh/uploads/dfjasdasdfsadfsdfklfjskldfjssdfasdfasdfdfsdf/Psdfsdafresentationskdjf_sdfsad_sdf_sdf_sadfasdf.pdf}
\end{document}
可以看出,倒数第二行的“d”已经超长了(与上面的段落相比),但 LaTeX 还是在“d”后添加了“f”而不是换行。
我完全理解,倒数第二行无法完全对齐,因为没有可以放大的空格(我读过一个可以在这种情况下放大字母的软件包) - 我的问题是,为什么 LaTeX 在添加“f”而不是将其作为最后一行的第一个字母时使情况变得更糟,以及我可以在不使用草率的解决方法的情况下做些什么,这会使其余部分看起来比在“f”之前换行更糟糕?
答案1
我认为最好的方法是减少 URL 可能损坏的地方。
您给出的 MWE 减少到仅在字符运行后破坏 urld
而没有问题,并且在我的 MiKTeX 2.9 上得到想要的结果:
\documentclass[10pt,a5paper]{book} % Regular text font size is 10 pt.
\usepackage{lipsum} % load paragraphs of filler text
\setlength{\oddsidemargin}{20mm}
\setlength{\textwidth}{108.5mm}
\usepackage{url}
\makeatletter
\g@addto@macro{\UrlBreaks}{\UrlOrds}
\g@addto@macro{\UrlBreaks}{%
\do\/\do\d%
}
\makeatother
\begin{document}
\lipsum[2]
Available: \url{http://www.aaa.bb.cccc.dh/uploads/dfjasdasdfsadfsdfklfjskldfjssdfasdfasdfdfsdf/Psdfsdafresentationskdjf_sdfsad_sdf_sdf_sadfasdf.pdf}
\end{document}