![如何“真正”解决脚注排版url时“\hbox未满”的问题](https://linux22.com/image/344510/%E5%A6%82%E4%BD%95%E2%80%9C%E7%9C%9F%E6%AD%A3%E2%80%9D%E8%A7%A3%E5%86%B3%E8%84%9A%E6%B3%A8%E6%8E%92%E7%89%88url%E6%97%B6%E2%80%9C%5Chbox%E6%9C%AA%E6%BB%A1%E2%80%9D%E7%9A%84%E9%97%AE%E9%A2%98.png)
当我要在脚注中排版一个较长的 URL(长度足以填满两行)时,我遇到了 \hbox 未满的问题。这是我的 MWE:
\documentclass{article}
\usepackage{hyperref}
\usepackage{ragged2e}
\begin{document}
We use this dataset
\footnote{\url{http://archive.ics.uci.edu/ml/datasets/Parkinson+Speech+Dataset+with++Multiple+Types+of+Sound+Recordings\#}}
for experimentation.
\end{document}
在网上搜索后,这个帖子建议\RaggedRight
从ragged2e
包中使用。但我认为这\RaggedRight
并没有“真正”解决这个问题,它只是隐藏了“\hbox 未满”警告。下面是上述 MWE 生成的脚注:
使用该\RaggedRight
命令后,即从
\footnote{\url{http://archive.ics.uci.edu/ml/datasets/Parkinson+Speech+Dataset+with++Multiple+Types+of+Sound+Recordings\#}}
在 MWE 中
\footnote{\RaggedRight\url{http://archive.ics.uci.edu/ml/datasets/Parkinson+Speech+Dataset+with++Multiple+Types+of+Sound+Recordings\#}}
我的问题是,如何“真正”解决这个问题?我天真地认为,为什么不把第二行的一些字符,比如“+Multipl”这些字符,移到第一行末尾的空白处呢?毕竟,url 只是一系列字符,为什么不把第二行的一些字符塞进第一行以充分利用第一行呢?或者这其中隐藏着一些非常复杂的事实?
任何答案或者指向答案的指针都将受到赞赏!
答案1
你可以通过在分隔符周围重新引入一些可拉伸的空间(这里),而不是在单词中间进行分隔,.
我/
使用
\Urlmuskip=0mu plus 10mu
在这种情况下,这提供了足够的灵活性。
\documentclass{article}
\usepackage{hyperref}
\Urlmuskip=0mu plus 10mu
\begin{document}
We use this dataset
\footnote{\url{http://archive.ics.uci.edu/ml/datasets/Parkinson+Speech+Dataset+with++Multiple+Types+of+Sound+Recordings\#}}
for experimentation.
\vfill
\noindent X\dotfill X
\end{document}
答案2
\url
尽量只在“合理”的地方中断 url。但是如果你不喜欢这样,你可以允许 \url 在任何地方中断:
\documentclass{article}
\usepackage{hyperref}
\makeatletter
\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}
\makeatother
\begin{document}
We use this dataset
\footnote{\url{http://archive.ics.uci.edu/ml/datasets/Parkinson+Speech+Dataset+with++Multiple+Types+of+Sound+Recordings\#}}
for experimentation.
\end{document}
请注意,由于没有可拉伸的空间,因此线路仍然有点不足。
答案3
对我而言,一个有效的解决方案是用 替换\url
。\href
但是,如果您的 URL 不包含任何可拆分字符(例如-
),则您必须通过\hspace{0pt}
在战略位置插入一些(零宽度空格)来帮助它找到。
在您的情况下,我在每个“+”后面都添加了一个。
\footnote{\href{http://archive.ics.uci.edu/ml/datasets/Parkinson+Speech+Dataset+with+Multiple+Types+of+Sound+Recordings\#}{http://archive.ics.uci.edu/ml/datasets/Parkinson+\hspace{0pt}Speech+\hspace{0pt}Dataset+\hspace{0pt}with+\hspace{0pt}Multiple+\hspace{0pt}Types+\hspace{0pt}of+\hspace{0pt}Sound+\hspace{0pt}Recordings\#}}