自动将 CJK Unicode 转换为 HREF 中的百分比编码

自动将 CJK Unicode 转换为 HREF 中的百分比编码

我正在使用 LuaLaTex、TexShop、Class Memoir。

我正在尝试制作一个超链接文本,其目标 URL 包含 Unicode 字符。例如,https://namu.wiki/w/대전역

手动将 Unicode 字符转换为百分比编码并将输出放入 \href 中:

\href{https://namu.wiki/w/\%EB\%8C\%80\%EC\%A0\%84\%EC\%97\%AD}{대전역 link}

一个缺点是非常很麻烦。有没有更方便的方法来做到这一点?

启用 Unicode 选项\usepackage[unicode]{hyperref}不起作用,而且我听说即使它起作用,某些 PDF 查看器也无法处理此类 PDF 文件。

平均能量损失

\class{memoir}
\usepackage{hyperref}

\begin{document}

\href{https://namu.wiki/w/\%EB\%8C\%80\%EC\%A0\%84\%EC\%97\%AD}{대전역 link} % This correctly produces a working hyperlink to https://namu.wiki/w/대전역

\href{https://namu.wiki/w/대전역}{대전역 link} % Clicking this will get you to https://namu.wiki/w/ (note: 대전역 omitted)

\end{document}

答案1

lua 维基给出%-encoding 作为示例字符串函数

你可以使用它作为

\documentclass{article}

\makeatletter
\directlua{function url_encode(str)
  if (str) then
    str = string.gsub (str, "\string\n", "\string\r\string\n")
    str = string.gsub (str, "([^\@percentchar w \@percentchar -\@percentchar _\@percentchar .\@percentchar \string~])",
        function (c) return string.format ("\@percentchar \@percentchar \@percentchar 02X", string.byte(c)) end)
    str = string.gsub (str, " ", "+")
  end
  return str    
end}
\makeatother

\def\zz#1{\directlua{
print(url_encode('\detokenize{#1}'))
}}
\begin{document}

\zz{https://namu.wiki/w/대전역}

\end{document}

这只是使用print()将编码的字符串放在终端上

https%3A%2F%2Fnamu.wiki%2Fw%2F%EB%8C%80%EC%A0%84%EC%97%AD

但是您当然可以替换print及其tex.print变体以将其传回 TeX。

相关内容