如何让包含 Unicode 字符的 URL 自动换行?

如何让包含 Unicode 字符的 URL 自动换行?

一些 URL 包含 unicode 字符。例如https://en.wikipedia.org/wiki/Durbin–Watson_statistics。所有(大多数?)网络浏览器都能够处理此类 URL,但某些 PDF 查看器(如 Mac 的 Preview 和 Skim)却不能。如何在 LaTeX 文档中显示这样的 URL?

您显然可以使用,\href{encoded URL}{original URL}但是这个无法换行“原始 URL”部分。

普通\url{original URL}命令确实打印了正确的 URL,但是此超链接不起作用,因为它包含 unicode 字符。

使用编码的 URL\url{encoded URL}确实有效并且会换行,但打印起来太难看。

\url我认为,如果命令对超链接的 URL 进行编码而不改变其打印的文本,那就太好了。

\documentclass{article}
\usepackage{xurl}
\usepackage[breaklinks]{hyperref}
\begin{document}
blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah

\noindent%
1. blah blah blah blah blah blah\href{https://en.wikipedia.org/wiki/Durbin\%E2\%80\%93Watson_statistic}%
{https://en.wikipedia.org/wiki/Durbin–Watson\_statistic}

\noindent%
2. blah blah blah blah blah blah\url{https://en.wikipedia.org/wiki/Durbin\%E2\%80\%93Watson_statistic}

\noindent%
3. blah blah blah blah blah blah\url{https://en.wikipedia.org/wiki/Durbin–Watson\_statistic}
\end{document}

编辑:感谢下面的解决方案,即使\nolinkurl使用 pdflatex 也可以解决问题,但这次讨论让我意识到 pdflatex 不能很好地处理 unicode。如果您从生成的 PDF 中复制 URL 文本,剪贴板中的文本并不总是“正确的”:

\documentclass{article}
\usepackage[colorlinks=true,urlcolor=blue]{hyperref}
\begin{document}
\href{https://en.wikipedia.org/wiki/Schr\%C3\%B6dinger}%
{\nolinkurl{https://en.wikipedia.org/wiki/Erwin\_Schr}ö\nolinkurl{dinger}}
\end{document}

pdflatex 此文档,使用 PDF 查看器打开它,复制 URL 的文本,然后将其粘贴到 Web 浏览器的地址框中。字符ö被复制为 * ̈o* 并且此 URL 不起作用。

不幸的是,这并不是一个刻意的抱怨,因为有时你会想复制 URL,而不是点击它。(有时你只是不想点击它。)

lualatex 生产ö在 PDF 中。这个问题与我原来的问题没有直接关系。我应该首先使用 lualatex。

答案1

最简单的方法是使用 lualatex,它或多或少可以开箱即用(或者至少可以通过定义合适的字体来解决):

\documentclass{article}
\usepackage{xurl}
\usepackage{hyperref}
\begin{document}
blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah

\noindent%
1. blah blah blah blah blah blah\href{https://en.wikipedia.org/wiki/Durbin\%E2\%80\%93Watson_statistic}%
{\nolinkurl{https://en.wikipedia.org/wiki/Durbin–Watson_statistic}}

\end{document}

当使用新的 PDF 管理时,\DocumentMetadata您甚至可以让代码为您完成百分比编码:

\DocumentMetadata{}

\documentclass{article}
\usepackage{xurl}
\usepackage{hyperref}
\begin{document}
blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah

\noindent%
1. blah blah blah blah blah blah\href{https://en.wikipedia.org/wiki/Durbin\%E2\%80\%93Watson_statistic}%
{\nolinkurl{https://en.wikipedia.org/wiki/Durbin–Watson_statistic}}

\url[urlencode]{https://en.wikipedia.org/wiki/Durbin–Watson_statistic}

\end{document}

在此处输入图片描述

对于 pdflatex 来说,没有好的解决方案。url 包的工作方式(通过切换到 math)使得它几乎不可能正确支持 unicode。参见例如https://tex.stackexchange.com/a/670811/2388。因此在这种情况下您必须手动插入断点。

答案2

这是一个解决方案(我添加它是\urlstyle{rm}因为当\nolinkurl使用时,默认情况下,URL 以打字机字体显示):

1 是您的第一次尝试。

2 几乎是解决方案,但没有显示短划线。

3 是解决方案。

\documentclass{article}
\usepackage{xurl}
\urlstyle{rm}
\usepackage[breaklinks]{hyperref}
\begin{document}
blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah

\noindent%
1. blah blah blah blah blah blah\href{https://en.wikipedia.org/wiki/Durbin\%E2\%80\%93Watson_statistic}%
{https://en.wikipedia.org/wiki/Durbin–Watson\_statistic}

\noindent%
2. blah blah blah blah blah blah\href{https://en.wikipedia.org/wiki/Durbin\%E2\%80\%93Watson_statistic}%
{\nolinkurl{https://en.wikipedia.org/wiki/Durbin–Watson\_statistic}}

\noindent%
3. blah blah blah blah blah blah\href{https://en.wikipedia.org/wiki/Durbin\%E2\%80\%93Watson_statistic}%
{\nolinkurl{https://en.wikipedia.org/wiki/Durbi}--\nolinkurl{Watson\_statistic}}
\end{document}

在此处输入图片描述

编辑

回答已编辑的问题:

代替:

\documentclass{article}
\usepackage[colorlinks=true,urlcolor=blue]{hyperref}
\begin{document}
\href{https://en.wikipedia.org/wiki/Schr\%C3\%B6dinger}%
{\nolinkurl{https://en.wikipedia.org/wiki/Erwin\_Schr}ö\nolinkurl{dinger}}
\end{document}

和:

\documentclass{article}

\usepackage[T1]{fontenc} % Necessary for using things like `\"o` in `\nolinkurl`
\usepackage{url} % For the style of the displayed URL
\urlstyle{rm} % For using the roman style (in place of typewriter)

\usepackage[colorlinks=true,urlcolor=blue]{hyperref}
\begin{document}
\href{https://en.wikipedia.org/wiki/Schr\%C3\%B6dinger}%
{\nolinkurl{https://en.wikipedia.org/wiki/Erwin\_Schr\"odinger}} % replacing ö by \"o, you can put everything in \nolinkurl
\end{document}

通过添加\usepackage[T1]{fontenc}和替换ö \"o,您可以将所有内容放入其中\nolinkurl

\usepackage{url}\urlstyle{rm}可选的,如果您喜欢打字机风格,可以避免使用它)。

然后您将获得:

在此处输入图片描述

如果你将其复制到 PDF 阅读器中,你将会获得https://en.wikipedia.org/wiki/Erwin_Schrödinger预期的效果。

相关内容