有几种方法可以让长而难以操作的 URL 在 LaTeX 中换行。如果您使用的是 pdfLaTeX,那么该hyperref
软件包可以帮您将它们换行,大致在任意 之后/
。如果您给它这个[hyphens]
选项,它还会允许在任何字符后换行-
。如果您不使用 pdfLaTeX,则breakurl
包给出了相同的行为。但是它的文档说它永远不会在破折号处断开 URL,因为破折号可能会被误认为不是 URL 一部分的连字符。同样,选项的文档警告hyphens
在hyperref
连字符后断开可能会导致印刷混乱。具体来说,如果 LaTeX 必须处理像 这样的 URL http://foo.com/is-this-read-able-or-readable
,并且恰好在第三个破折号后断开,那么查看打印结果:
http://foo.com/is-this-read-
able-or-readable
含糊不清:除非你作为读者已经知道或者breakurl
从不[hyphens]{hyperref}
引入新-
字符,那么就有可能将该 url 读作is-this-readable-or-readable
,这是不正确的。
假设你遵循警告,并决定不是在破折号后断开。然后,自然地,你可能会发现自己的盒子严重不足或过满。我通常遵循的推荐建议是使用 FlushLeft但即便如此,你也可能有一些特别难以打破的链接。所以我的场景是:
- 甚至
FLushLeft
认为队伍不够满 - 在最后一个字符之后,没有任何好的字符可以破坏 URL
/
- 在线情况下(即在计算机上查看,而不是打印出来),我需要支持
hyperref
正确链接 URL - 因此奇怪的字符不应该出现在文本中或hyperref
可能造成混淆。 - 我正在使用 pdflatex,如果这对解决方案有任何影响。
我的问题(我希望这个网站中的许多相关问题不会重复这个问题!)是,有没有办法配置,\url
以便我可以在任何字符处中断,插入一个回车符(\hookleftarrow
我认为在视觉上类似于)作为连字符,并且仍然正确链接hyperref
(即不认为回车符是文本的一部分)?根据这个问题,这很棘手,而且看起来它与 不太兼容hyperref
。其他问题的其他建议大多归结为“使用右侧不规则文本”。显然,我宁愿在 URL 中可中断的位置中断,也不愿插入符号,但这个 URL 特别不配合……
已编辑:我修改了问题的描述,以(希望)澄清我的目标。我知道解决方案涉及在破折号处断开;我首先试图避免对破折号和连字符产生混淆 :)
答案1
您需要使用 吗breakurl
?如果不需要,则\usepackage[hyphens]{url}
大部分情况下都可以使用(带连字符的 URL 周围的框不太正确)。
\documentclass{article}
\usepackage[hyphens]{url}
\usepackage{hyperref}
\begin{document}
\url{https://tex.stackexchange.com/questions/28835/option-to-break-urls-with-carriage-return-symbol}
\bigskip% An alternative, if this is meant for online use:
\href{https://tex.stackexchange.com/questions/28835/option-to-break-urls-with-carriage-return-symbol}{Question about to break in URLs}
\end{document}
该[hyphens]
选项似乎也解决了参考书目问题(改编形式参考书目中的 URL 引用):
\documentclass{article}
\usepackage[hyphens]{url}
\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@misc{A01,
author = {Lerner, Ben},
year = {2011},
title = {Break URLs},
url = {http://short.domain.com/very-long-dashed-section},
}
\end{filecontents}
\begin{document}
\nocite{*}
\bibliographystyle{alphaurl}
\bibliography{\jobname}
\end{document}
更新:2011-09-20:
借用用向后的箭头替换连字符,这使用连\hookleftarrow
字符分隔符,似乎有效。在这里我允许每一个字符是可破坏的,但如果不希望如此,您可以有选择地\BreakableChar
在想要破坏的字符处插入:
\documentclass{article}
\usepackage{hyphenat}
\usepackage{url}
\usepackage{xstring}
\usepackage{forloop}
\usepackage{xcolor}
%\usepackage{filecontents}
\newsavebox\MyArrowBox%
\sbox\MyArrowBox{$\hookleftarrow$}%
\makeatletter%
\newcommand*{\BreakableChar}{%
\leavevmode%
\prw@zbreak%
\discretionary{\usebox\MyArrowBox}{}{}%
\prw@zbreak%
}%
\newcounter{index}%
\newcommand{\AddBreakableChars}[1]{%
\StrLen{#1 }[\stringLength]%
\forloop[1]{index}{1}{\value{index}<\stringLength}{%
\StrChar{#1}{\value{index}}[\currentLetter]%
{\currentLetter\BreakableChar}%
}%
}%
\newcommand*{\MyUrl}{https://tex.stackexchange.com/questions/28835/option-to-break-urls-with-carriage-return-symbol}%
\begin{document}
\parbox{4cm}{\textcolor{blue}{\AddBreakableChars{\MyUrl}}}
\bigskip
\parbox{7cm}{\textcolor{blue}{\AddBreakableChars{\MyUrl}}}
\end{document}
答案2
和url
扩展,该包允许您通过指定、和hyperref
来定义 URL 中的断点。该选项除了在列表中添加连字符外不执行任何其他操作。但还有另一个调整点:。在这里,您可以定义将执行有趣操作的字符。因此,我们可以让断点字符在发生换行时插入回车符。请注意,URL 实际上是在数学模式下设置的,因此必须将断点字符定义为映射到数学字符和断点。\UrlBreaks
\UrlBigBreaks
\UrlNoBreaks
hyphens
\UrlBigBreaks
\UrlSpecials
这个解决方案有一个小缺点。在原始设置中,由于 / 是一个\UrlBreak
字符,所以两个连续的斜线之间不能出现换行符,例如 http://... 当将斜线设为特殊符号时,就会出现这样的换行符。
\documentclass[10pt,a4paper]{article}
\PassOptionsToPackage{hyphens}{url}
\usepackage[colorlinks]{hyperref}
\usepackage{dingbat} % for \carriagereturn
\newcommand{\urllb}{\discretionary{\carriagereturn}{}{}}
%% original breaking points of url package
% \def\UrlBreaks{\do\.\do\@\do\\\do\/\do\!\do\_\do\|\do\;\do\>\do\]%
% \do\)\do\,\do\?\do\'\do+\do\=\do\#}%
% \def\UrlBigBreaks{\do\:\do@url@hyp}%
\renewcommand{\UrlSpecials}{\do\.{\mathchar`\.\urllb}%
\do\/{\mathchar`\/\urllb}%
\do\@{\mathchar`\@\urllb}%
\do\\{\mathchar`\\\urllb}%
\do\-{\mathchar`\-\urllb}%
\do\#{\mathchar`\#\urllb}}%
% and so on; I'm too lazy to type all breaking characters
% here, you get the idea
\begin{document}
\urldef{\myurl}\url{http://tex.stackexchange.com/questions/28835/option-to-break-urls-with-carriage-return-symbol}
\parbox{3cm}{\myurl}
\bigskip
\parbox{4cm}{\myurl}
\bigskip
\parbox{5cm}{\myurl}
\end{document}
产量
答案3
由于您使用的是hyperref
,因此可以手动拆分 URL。这样您就可以自由地在两部分之间放置任何您想要的字符,并且更普遍地可以微调输出。
需要注意的是,断开的两半要指向正确的东西——您可以通过使用\href
和\nolinkurl
代替 来实现这一点\url
。
\documentclass{article}
\usepackage{hyperref}
\usepackage{parskip}
\begin{document}
\href{http://tex.stackexchange.com/questions/28835/option-to-break-urls-with-carriage-return-symbol}{\nolinkurl{http://tex.stackexchange.com/questions/}}%
\(\hookleftarrow\)\\
\qquad\href{http://tex.stackexchange.com/questions/28835/option-to-break-urls-with-carriage-return-symbol}{\nolinkurl{28835/option-to-break-urls-with-carriage-return-symbol}}
\end{document}