在较新版本的 LaTeX 或 hyperref 中,如果参数中包含重音符号,则 `\nolinkurl` 会损坏(+T1 编码的显示效果很丑陋)

在较新版本的 LaTeX 或 hyperref 中,如果参数中包含重音符号,则 `\nolinkurl` 会损坏(+T1 编码的显示效果很丑陋)

法语 URL 上带有重音符号是很常见的(因为法语单词带有重音符号)。最知名的利用这种可能性不将 URL 限制为 ASCII 字符的网站可能是 Wikipedia,但法语在线词典也使用它(正如我们在以下示例中看到的url hyperref 不适用于法语重音字符)。

这是包含上述 URL 中示例的 MWE(在 2013 年有效,但现在无效)。

\documentclass{article}
\usepackage{xcolor}
\usepackage[colorlinks,allcolors=blue]{hyperref}

\begin{document}
    URL 1: \href{http://www.larousse.fr/dictionnaires/francais-anglais/%C3%A9cr%C3%A9mer/27576?q=%C3%A9cr%C3%A9m%C3%A9}{%
  \nolinkurl{http://www.larousse.fr/dictionnaires/francais-anglais/écrémer/27576?q=écrémé}}
  
  URL 2: \href{https://fi.wikipedia.org/wiki/Andr\%C3\%A9_Weil}
{\nolinkurl{https://fi.wikipedia.org/wiki/André_Weil}}
\end{document}

我们获得:

在此处输入图片描述

所有的“é”都消失了。

预期的:

http://www.larousse.fr/dictionnaires/francais-anglais/écrémer/27576?q=écrémé

https://fi.wikipedia.org/wiki/André_Weil

此外,如果我添加\usepackage[T1]{fontenc}序言,如下所示:

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{xcolor}
\usepackage[colorlinks,allcolors=blue]{hyperref}

\begin{document}
    URL 1: \href{http://www.larousse.fr/dictionnaires/francais-anglais/%C3%A9cr%C3%A9mer/27576?q=%C3%A9cr%C3%A9m%C3%A9}{%
  \nolinkurl{http://www.larousse.fr/dictionnaires/francais-anglais/écrémer/27576?q=écrémé}}
  
  URL 2: \href{https://fi.wikipedia.org/wiki/Andr\%C3\%A9_Weil}
{\nolinkurl{https://fi.wikipedia.org/wiki/André_Weil}}
\end{document}

我得到了这个奇怪的输出:

在此处输入图片描述

我如何获得:

http://www.larousse.fr/dictionnaires/francais-anglais/écrémer/27576?q=écrémé

https://fi.wikipedia.org/wiki/André_Weil

\usepackage[T1]{fontenc}序言中也有这个内容吗?

(2021 年夏季编写的旧文档没有这些损坏的输出)。

更新:

Ulrike Fischer 在回答中说“带有非 ascii 字符的 url 从未在 pdflatex 上正常工作”。

但是在这里(在其他未更新的计算机上),使用 TeXlive 2021(实际上是 TeXlive 2022/dev),它可以工作:

在此处输入图片描述

当我点击链接时,浏览器会显示正确的页面。

证明我的另一台电脑上安装了 TeXlive 2021(通过 TeX Live Utility 应用程序): 在此处输入图片描述

答案1

带有非 ASCII 字符的 url 从未在 pdflatex 中正常工作。基本上,底层 url 包是在 url 和文件名中使用非 ASCII 字符是“您不应该做的事情”的时候编写的,并且当仅使用包时,url您总是会得到当前的输出。hyperref 做得相当不错,可以让一些像您这样的字符é更好地工作,但例如德语ß也失败了。现在在当前的 LaTeX 中,非 ASCII 字符受到保护,因此您也可以使用 hyperref 获得使用原始 url 命令获得的结果。可以稍微改进 url 命令,但这对德语 ß 仍然不起作用。

% utf8 encoded file!
\documentclass{article}
\usepackage{iftex}
\ifluatex \else 
\usepackage[T1]{fontenc}
\fi
\usepackage{hyperref}

\begin{document}

\makeatletter
Original url from url package: \HyOrg@url{grüße} \HyOrg@url{André_Weil}
\makeatother

Hyperref url: \url{grüße} \url{André_Weil}


\makeatletter
\def\Url@FormatString{%
 \UrlFont 
 \Url@MathSetup 
\mathcode"C3="8000 %more needed for other chars ...
 $\fam\z@ \textfont\z@\font
 \expandafter\UrlLeft\Url@String\UrlRight
 \m@th$%
}%
\makeatother

Improved url: \url{grüße} \url{André_Weil}

\end{document}

使用 pdflatex 在 texlive 2021 中输出:

在此处输入图片描述

使用 pdflatex 在 texlive 2022 中输出

在此处输入图片描述

在 texlive 2022 中使用 lualatex 输出

在此处输入图片描述

相关内容