一些 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
预期的效果。