使用 XeLaTeX 处理 URL 中的 Unicode 字符

使用 XeLaTeX 处理 URL 中的 Unicode 字符

我想打印一个带有希腊字符的 URL(使用 XeLaTeX 进行编译),但是下面的脚本无法显示 URL 中的希腊字符(它们显示为下划线),而如果我将 URL 中的希腊字符括起来,则会\textgreek出现错误。

\documentclass{book}
\usepackage{fontspec}
\setmainfont{Times New Roman}

\usepackage{polyglossia}
\setdefaultlanguage{english}
\setotherlanguage{greek}

%\newfontfamily\greekfont[Script=Greek, Scale=MatchUppercase, Ligatures=TeX]{Gentium Plus}
\newfontfamily\greekfont{CMU Serif}

\usepackage{hyperref,xurl}

\begin{document}

δημοτικο-κεντρο-εικαστικων

\textgreek{δημοτικο-κεντρο-εικαστικων}

\url{http://www.elemesos.com/index.php/municipalities/2018-12-20-10-21-59/item/14463-δημοτικο-κεντρο-εικαστικων-τεχνων-αποθηκεσ-παπαδακη-3-9-2014.html}


\end{document}

外面的希腊字符\url均可正确显示,无论是内部还是外部\textgreek

难道我做错了什么?

PS 我使用包xurl因为它会破坏每个字符的链接。

答案1

问题是,如果当前字体缺少 Unicode 字符,实际上没有一种后备机制可以将这些字符输出到其他字体中。lmtt 是 XeLaTeX 中的默认打字机字体,它没有希腊字符。但是,CMU Typewriter Text 有这些字符。将行\setmonofont{CMU Typewriter Text}¹ 添加到文档前言将切换到 Computer Modern 的变体,您将获得希腊字符。

我还注意到,在您的文档中,δημοτικο-κεντρο-εικαστικων 的第一个实例采用 Times New Roman 字体(已扩展为涵盖 Unicode 中的希腊语)。您的第二个实例(括在内)\textgreek使用指定的希腊语字体 CMU Serif,尽管我倾向于省略以\newfontfamily\greekfont使用该字体(尽管您这样做似乎是为了让那些没有 Gentium Plus 的人能够管理 MWE)。


  1. 或者任何具有希腊文 Unicode 覆盖范围的等宽字体。

答案2

正如 Don 所写,您首先需要一种带有希腊字符的字体。但除此之外,URL 还必须在 PDF 中进行百分比编码才能正常工作。

这意味着你应该使用\href

\href{http://www.dezemeros.com/index.php/2018-12-20-10-21-59/14463-%CE%B4%CE%B7%CE%BC%CE%BF%CF%84%CE%B9%CE%BA%CE%BF-%CE%BA%CE%B5%CE%BD%CF%84%CF%81%CE%BF-%CE%B5%CE%B9%CE%BA%CE%B1%CF%83%CF%84%CE%B9%CE%BA%CF%89%CE%BD-%CF%84%CE%B5%CF%87%CE%BD%CF%89%CE%BD-%CE%B4%CE%B7%CE%BC%CE%BF%CF%84%CE%B9%CE%BA%CE%BF-%CE%BA%CE%B5%CE%BD%CF%84%CF%81%CE%BF-%CE%B5%CE%B9%CE%BA%CE%B1%CF%83%CF%84%CE%B9%CE%BA%CF%89%CE%BD-%CF%84%CE%B5%CF%87%CE%BD%CF%89%CE%BD.html}
{http://www.dezemeros.com/index.php/2018-12-20-10-21-59/14463-δημοτικο-κεντρο-εικαστικων-τεχνων-δημοτικο-κεντρο-εικαστικων-τεχνων.html}

由于第二个参数只是文本,因此您可以使用各种格式命令,例如 \texttt 或 \textgreek 或 \nolinkurl。

使用 LaTeX 的新 pdfmanagement(目前处于测试阶段),您可以让 url 使用以下选项进行百分比编码urlencode

\DocumentMetadata{pdfversion=2.0}

\documentclass{book}
\usepackage{fontspec}
\setmonofont{CMU Typewriter Text}
\usepackage{hyperref,xurl}

\begin{document}

\url[urlencode]{http://www.dezemeros.com/index.php/2018-12-20-10-21-59/14463-δημοτικο-κεντρο-εικαστικων-τεχνων-δημοτικο-κεντρο-εικαστικων-τεχνων.html}

\end{document}

在此处输入图片描述

相关内容