使用 hyperref 的 URL 中的西里尔字母会产生文件链接而不是 URL 链接

使用 hyperref 的 URL 中的西里尔字母会产生文件链接而不是 URL 链接

我有一个包含西里尔字符的 URL,例如: \href{https://bg.wikipedia.org/wiki/Начална_страница}{Bulgarian Wikipedia Main Page}

当我编译该文档时,链接指向一个本地文件如:file:\\\Users\me\path\to\source\file\location\followed_by_something_mangled 这显然不是想要的结果。

似乎\href无法正确识别链接类型(“url 链接”)并检测到“文件链接”。

描述了一种规避这种情况的方法这里(简而言之:将原始包含西里尔字母的 URL 编码为https://bg.wikipedia.org/wiki/%D0%9D%D0%B0%D1%87%D0%B0%D0%BB%D0%BD%D0%B0_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D0%B0

然而,这除了丑陋之外,还包含所有那些 % 符号,当在\href\textit{} 内部使用时,这些符号会被解释为注释,并且由于括号不匹配,编译会失败。

有什么想法可以解决这个问题吗?

PS 我使用 XeLaTeX,我的序言是:

\documentclass[12pt,a4paper]{book}

\usepackage{fontspec}
\usepackage{xunicode}
\usepackage{xltxtra}
\setmainfont{Free Serif}

\usepackage{hyperref}

当我使用 pdfLaTeX + inputenc 时也会出现类似的问题

答案1

带有百分比编码的地址对于 的第一个参数是正确的\href。如果\href在另一个命令的参数中使用,则%可以使用反斜杠对百分比进行转义,\%以防止百分比字符被解释为注释字符:

\documentclass{article}
\usepackage{hyperref}
\begin{document}
\textit{%
  \href{https://bg.wikipedia.org/wiki/%
    \%D0\%9D\%D0\%B0\%D1\%87\%D0\%B0\%D0\%BB\%D0\%BD\%D0\%B0_%
    \%D1\%81\%D1\%82\%D1\%80\%D0\%B0\%D0\%BD\%D0\%B8\%D1\%86\%D0\%B0}{%
    Bulgarian Wikipedia Main Page}%
}
\end{document}

另一种变化:

\documentclass{article}
\usepackage{hyperref}

\begingroup
  \catcode`\^^A = 14 % ^^A is comment char
  \catcode`\%=12
  \gdef\UrlBulgarianWikipediaMainPage{^^A
    https://bg.wikipedia.org/wiki/^^A
    %D0%9D%D0%B0%D1%87%D0%B0%D0%BB%D0%BD%D0%B0_^^A
    %D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D0%B0}
\endgroup

\begin{document}
\textit{%
  \expandafter\href\expandafter{%
    \UrlBulgarianWikipediaMainPage
  }{%
    Bulgarian Wikipedia Main Page}%
}
\end{document}

答案2

玩了一个小时左右后,我找到了这个解决方法。我给出\hreftinyUrl,让它用西里尔文打印出网站。以下是代码:

\footnote{Wikipedia: Биоелектричен потенцијал 
  \href{http://tinyurl.com/hp6o9t7}
       {\mkurl{https://mk.wikipedia.org/wiki/Биоелектричен\_потенцијал}}}

在这里我使用 tinyUrl 来避免转义的麻烦%\mkurl它只是一个命令,将文本样式化为链接\url。我没有找到默认字体,但我猜是 CMU Typewriter Text,它看起来非常接近,只是排版\url略显粗体(\textbf粗体太多)。这是我的颜色设置:

\usepackage{fontspec}
\definecolor{bbe}{rgb}{0, 0.27, 0.52}
\usepackage{hyperref}
\hypersetup{
   colorlinks,
   menucolor=black,
   linkcolor=black,
   citecolor=black,
   urlcolor=bbe
}
\newfontfamily\urlfont[]{CMU Typewriter Text}
\newcommand{\mkurl}[1]{\urlfont{\color{bbe} #1}}

对我来说已经够好了:)

相关内容