我有一个包含西里尔字符的 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
玩了一个小时左右后,我找到了这个解决方法。我给出\href
tinyUrl,让它用西里尔文打印出网站。以下是代码:
\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}}
对我来说已经够好了:)