如何拆分过长的 URL

如何拆分过长的 URL

我有一个很长的 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的相互作用。geometrybreakurl

答案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 字符串包含连字符,则无论\burlbreakurl软件包还是\url软件包url都不会在连字符后插入换行符。(选择此设置是为了避免对连字符是否是 URL 字符串的一部分产生歧义。)要覆盖默认设置,请使用选项加载软件包,breakurl或者hyphenbreaks等效地,使用选项集加载url软件包(当然,使用命令而不是hyphens命令)。\url\burl

但是,即使设置了hyphenbreaks/hyphens选项,仍然会出现行满的情况。您可能需要采取的额外措施是发出命令\sloppy。此指令允许 TeX 几乎任意扩展单词间空白量,以支持其避免行满的情况。

以下修改后的 MWE 形式显示了其工作原理。包breakurl和分别使用选项和url加载。即便如此,枚举中的前两个项目(使用和命令)会产生超满行。相反,指令有效的第三和第四个项目不会产生超满行。(顺便说一句,在这个 MWE 中,指令的范围在语句处结束。)hyphenbreakshyphens\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}

相关内容