我有一个很长的 URL。我使用 包breakurl
,它在环境之外运行良好enumerate
,但在 上时则不行\item
。
\usepackage[margin=3cm]{geometry}
\usepackage{hyperref}
\usepackage{breakurl}
\begin{enumerate}
\item svn co \burl{https://svn.xxx.ch/reps/yyyyyyyyyy/Publications/ABC-paper-2012/trunk ABC-paper-2012}
\end{enumerate}
我怎样才能给 URL 加换行符?
编辑:如果我删除,它就会正常工作。这似乎是和 之间margin=3cm
的相互作用。geometry
breakurl
答案1
2022 年 1 月更新:当我最初写这个答案的时候,网址包——之所以这样命名,大概是因为它极大地X倾向于的能力网址包——还没有写出来。然而,它现在已经存在了,这就是为什么我不再推荐下面显示的答案,即运行
\usepackage[hyphenbreaks]{breakurl}
\usepackage[hyphens]{url}
相反,我只会跑
\usepackage{xurl}
引用该软件包的用户指南的介绍部分xurl
:
xurl 包默认加载 url 包,并为所有字母数字字符定义可能的 [URL 中的换行符] 和
=
/
.
:
*
-
~
'
"
可以使用对 [该] [包] 有效的所有参数
url
。它将被传递给包 url。xurl 本身没有特殊的可选参数。有关更多信息,请阅读包 url 的文档。
请注意不是需要指定包选项hyphens
以允许在-
(连字符) 字符处发生换行。如果您想允许在空格在 URL 字符串中,而不是抑制 URL 字符串中其他地方的空格,请确保xurl
使用选项spaces
和来加载obeyspaces
。
需要提前注意的是,您遇到的长 URL 问题可能出现在不管URL 是否出现在enumerate
环境内。
默认情况下,如果 URL 字符串包含连字符,则无论\burl
是breakurl
软件包还是\url
软件包url
都不会在连字符后插入换行符。(选择此设置是为了避免对连字符是否是 URL 字符串的一部分产生歧义。)要覆盖默认设置,请使用选项加载软件包,breakurl
或者hyphenbreaks
等效地,使用选项集加载url
软件包(当然,使用命令而不是hyphens
命令)。\url
\burl
但是,即使设置了hyphenbreaks
/hyphens
选项,仍然会出现行满的情况。您可能需要采取的额外措施是发出命令\sloppy
。此指令允许 TeX 几乎任意扩展单词间空白量,以支持其避免行满的情况。
以下修改后的 MWE 形式显示了其工作原理。包breakurl
和分别使用选项和url
加载。即便如此,枚举中的前两个项目(使用和命令)会产生超满行。相反,指令有效的第三和第四个项目不会产生超满行。(顺便说一句,在这个 MWE 中,指令的范围在语句处结束。)hyphenbreaks
hyphens
\burl
\url
\sloppy
\sloppy
\end{enumerate}
\documentclass{article}
\usepackage{lipsum} % load paragraphs of filler text
\usepackage[margin=3cm]{geometry}
\usepackage[hyphenbreaks]{breakurl}
\usepackage[hyphens]{url}
\begin{document}
\lipsum[2] % generate some filler text (to show width of text block)
\begin{enumerate}
\item
svn co \burl{https://svn.xxx.ch/reps/yyyyyyyyyy/Publications/ABC-paper-2012/trunk ABC-paper-2012}
\item
svn co \url{https://svn.xxx.ch/reps/yyyyyyyyyy/Publications/ABC-paper-2012/trunk ABC-paper-2012}
\item
\sloppy
svn co \burl{https://svn.xxx.ch/reps/yyyyyyyyyy/Publications/ABC-paper-2012/trunk ABC-paper-2012}
\item
svn co \url{https://svn.xxx.ch/reps/yyyyyyyyyy/Publications/ABC-paper-2012/trunk ABC-paper-2012}
\end{enumerate}
\end{document}
答案2
这些答案都帮不了我。我的长网址被放在了脚注中。经过一番搜索,我找到了一个可行的解决方案这里。
在我的序言中:
\usepackage{hyperref}
\def\UrlBreaks{\do\/\do-}
最后一行指示与 hyperref-package 一起加载的 url-package 在字符/
和处额外中断-
。 hyperref 中的选项breaklinks=true
也可以调用,但对我来说没有效果。
答案3
问题在于中断网址软件包似乎与 PDFLaTeX 和 XeLaTeX 不兼容。我的同事 Dag Langmyhr 指出网址软件包兼容超链接如果它在后者之前加载,因此
\usepackage[T1,hyphens]{url}
\usepackage[colorlinks,urlcolor=blue]{hyperref}
更优雅地完成工作(breaklinks=true
对我来说也不起作用)。此方法允许\url
在插入 URL 时使用正常命令。
答案4
如果其他解决方案不起作用,这是唯一对我有用的解决方案(来自这里):
% If you want to break on URL numbers
\setcounter{biburlnumpenalty}{9000}
% If you want to break on URL lower case letters
\setcounter{biburllcpenalty}{9000}
% If you want to break on URL UPPER CASE letters
\setcounter{biburlucpenalty}{9000}