较长的 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 dvipdf
或latex dvips ps2pdf
构建模式重现。由 生成的 DVIlatex
出现了这个问题(在 下查看xdvi
),所以后面的构建过程失败也就不足为奇了。
肯定存在更好的解决方案,但pdflatex
首先使用 可以在很大程度上解决这个问题。(连字符模式还有很多不足之处。)
latex
输出:(在 下查看的 DVI 屏幕截图xvdi
;红线是页面边缘)
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.
中一样。.pdf
dvipdf
答案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/...}
),我的方法仍能顺利运行。