换行符和 URL 包

换行符和 URL 包

较长的 URL 需要在行末断开。这里有一个与此相关的主题。该主题建议在 URL 包中添加连字符选项,并定义

\renewcommand{\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}

我都试过了,但还是不行。下面是示例的副本。有什么想法吗?

\documentclass[10pt, a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage[swedish,english]{babel}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage{amsmath}
\usepackage[hyphens]{url}
\usepackage{hyperref}
\renewcommand{\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}

\usepackage{fixmath}
\usepackage{graphicx}
\usepackage[usenames,dvipsnames]{color}
\usepackage[small,font=it]{caption}
\usepackage{amssymb}
\usepackage{icomma}
\usepackage{verbatim}

\usepackage{fancyhdr}
\pagestyle{fancy}
\renewcommand{\headrulewidth}{0pt}
\renewcommand{\footrulewidth}{0pt}

\setlength{\parindent}{0pt} 
\setlength{\parskip}{2ex}

\begin{document}

This is a test. Kurzweil says technology increases exponentially (\url{http://www.kurzweilai.net/the-law-of-accelerating-returns}).

\end{document}

编辑:我正在使用 latex 然后使用 dvipdf 进行编译。

答案1

我不确定是什么导致了这个问题,但pdflatex它给出了所需的输出,没有任何麻烦。这个问题似乎只能通过latex dvipdflatex dvips ps2pdf构建模式重现。由 生成的 DVIlatex出现了这个问题(在 下查看xdvi),所以后面的构建过程失败也就不足为奇了。

肯定存在更好的解决方案,但pdflatex首先使用 可以在很大程度上解决这个问题。(连字符模式还有很多不足之处。)

latex输出:(在 下查看的 DVI 屏幕截图xvdi;红线是页面边缘) 乳胶输出

pdflatex输出: pdflatex 输出

答案2

我终于找到了一个解决方案,这可能会引起所有在 LaTeX 中显示长 URL 时遇到问题的人的兴趣:我与 Vilar(-package 的维护者breakurl)进行了一些交谈,他能够按照我建议的方式扩展他的软件包的破坏可能性。

因此,最新版本中的新选项anythingbreaks使链接看起来很好,因为它们保持在文本边框的范围内。


你自己看:

完全没有:

没有


标准行为:

中断网址


任何中断:

选择任何中断

另请在此处查看我的问题:https://tex.stackexchange.com/a/108001/28200

答案3

可以通过breakurl在之后加载包来解决这个问题hyperref(也应该在序言中稍后加载):

...
\usepackage{hyperref}
\renewcommand{\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\d\o\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}
\usepackage{breakurl}

添加此项后,在给定的测试文件中, 会.dvi在 之后立即中断,就像在使用 制作的http://www.中一样。.pdfdvipdf

答案4

这不是一个自动化的解决方案,但我目前使用一个可以手动分解 URL 的宏:

\documentclass{memoir}
\usepackage{lipsum}
\usepackage{hyperref}

\newcommand*{\brokenurl}[2]{\href{#1#2}{\texttt{#1}}\par\nopagebreak\href{#1#2}{\texttt{#2}}}
\newcommand*{\brokenurlwithoutpar}[2]{\href{#1#2}{\texttt{#1}}\\*\href{#1#2}{\texttt{#2}}}

\begin{document}

Kurzweil says technology increases exponentially (\url{http://www.kurzweilai.net/the-law-of-accelerating-returns}).

Kurzweil says technology increases exponentially (\brokenurl{http://www.kurzweilai}{.net/the-law-of-accelerating-returns}).

Kurzweil says technology increases exponentially (\brokenurlwithoutpar{http://www.kurzweilai}{.net/the-law-of-accelerating-returns}).

\lipsum[1]

\end{document}

我的这个“解决方案”是偶尔最后一招,当其他方法都无济于事时。是的,这很明显,并不深奥,也没有使用任何技巧——但时常它似乎是唯一有效的方法。请注意\brokenurl(with \par\nopagebreak) 和\brokenurlwithoutpar(with \\*) 之间的区别;当您设置类似 的内容时\parindent0pt,两者的行为几乎相同(事实上很难构造一个它们的右对齐行为不同的示例)。现在我想到用\par\nopagebreak\noindent而不是来定义宏\par\nopagebreak可以避免对 的任何需要\parindent0pt,但是,根据您所处的上下文(例如,参考书目),您可能有意想要一个损坏的 URL 的缩进延续,以清楚地表明该项是上一行的延续;这在很大程度上取决于格式和样式。

请注意,即使您在任意位置断词(例如\brokenurl{http://www.kurz}{weilai.net/...}),我的方法仍能顺利运行。

相关内容