使用url.sty
,我想在 URL 中使用空格来指示可能的换行点,但实际上不会在输出中显示空格。这个想法实际上是受url.sty
包文档中的这段话启发的:
请注意,允许唯一的选项“[spaces]”让输入空格指示断点,但不在输出中显示它们,这似乎是合乎逻辑的。这很容易实现,但是为了避免混淆而被省略了。
嗯,那么如何我会实现它吗?:)
(请注意,原文中的问号是……)
梅威瑟:
\documentclass{article}
\usepackage{url}
\begin{document}
So, here we go:
\url{http://www.this-is-a-long.com/long long long long long long
long/domain/name?with=a &lot=variables &that=I &would=like &to=be &able=to
&break=at &space=characters}
\end{document}
编辑1:
我做什么不是想要的是空格真的出现在显示的 URL 中。这就是为什么不能使用obeyspaces
包选项的原因url.sty
。我的意思是在源代码中使用空格只是为了指示可能的断点,而不让它们出现在输出中。
激活空格作为断点正是该选项的目的spaces
。因此,使用
\usepackage[spaces]{url}
实现我想要的功能:空格作为断点但不显示在输出中。但是,正如文档第 2 页所述,该spaces
选项只能与结合使用,obeyspaces
而不能单独使用,这将是我想要的功能的逻辑配置。请参阅手册中的上述引文,其中表明故意停用不使用obeyspaces
但使用spaces
以“避免”混淆,尽管这很容易实现。
所以我的问题是:如何才能“轻松”地实现它?
答案1
这种组合似乎有效。obeyspaces
选项激活了空格处理,重新定义则为其提供了所需的输出/操作。该spaces
选项给出了\Url@sppen
一个“可破坏”的值,但实际上并不需要。例如\def\Url@space{\penalty\UrlBreakPenalty}
也可以。
\documentclass{article}
\usepackage[obeyspaces,spaces]{url}
\textwidth1cm
\makeatletter
\def\Url@space{\penalty\Url@sppen}
\makeatother
\begin{document}
So, here we go:
\url{http://www.this-is-a-long.com/long long long long long long
long/domain/name?with=a &lot=variables &that=I &would=like &to=be &able=to
&break=at &space=characters}
\end{document}
答案2
比 Ulrike Fischer 做的要严格一点:
\documentclass{article}
\usepackage[obeyspaces]{url}
\makeatletter
\def\Url@space{\penalty10}
\def\UrlBreakPenalty{100000}
\def\UrlBigBreakPenalty{100000}
\makeatother
\begin{document}
So, here we go:
\url{http://www.this-is-a-long.com/long long long long long long
long/domain/name?with=a &lot=variables &that=I &would=like &to=be &able=to
&break=at &space=characters}
\end{document}
这应该允许仅于空格处休息(也许我忘记了一两个惩罚)。
我没有使用该spaces
选项,因为我将惩罚设置为绝对值,并且没有使用任何url
内部变量,例如使用时\Url@sppen
设置为的变量。因此该选项不会改变我的答案中的任何内容。\UrlBreakPenalty
spaces
spaces