自更新至 MacTex 21 以来,软件包“tfrupee”在网络链接中失败

自更新至 MacTex 21 以来,软件包“tfrupee”在网络链接中失败

环境。MacBook Air 2019,macOS 10.414.6(最新补丁),完整 MacTeX 2021 安装

由于从 MacTeX '20 升级到 '21,使用\rupee该软件包提供的宏tfrupee失败如果用于超文本链接。以前,在旧版 MacTeX 中,它在正文或链接中运行良好。MWE:

\documentclass{article} 
\usepackage{hyperref}
\usepackage{tfrupee}

\begin{document}

Inline use of \rupee \ symbol.

\href{http://www.example.com/index.html}{test}

%\href{http://www.example.com/\rupee.html}{\rupee}

End text.

\end{document}

第一个文本\rupee在正文中显示有效,第一个 URL 显示\href宏正常工作。第二个 URL 失败并出现以下错误:

Illegal parameter number in definition of \Hy@tempa. \href{http://www.example.com/\rupee.html}

Illegal parameter number in definition of \Hy@tempa. ...ttp://www.example.com/\rupee.html}{\rupee}

假设该部分中每次使用都会出现一个错误\href{}。日志针对上述每项操作都显示了此错误:

! Illegal parameter number in definition of \Hy@tempa. <to be read again> 1 l.13 \href{http://www.example.com/\rupee.html} {\rupee} You meant to type ## instead of #, right? Or maybe a } was forgotten somewhere earlier, and things are all screwed up? I'm going to assume that you meant ##.

我做错了什么?2021 MacTex 是否需要一些额外的设置?

答案1

提示@Ulrike Fischer上面的第二条评论,我尝试使用 ₹ 的 Unicode 数字值,即 %u20B9。如果我使用这个:

\href{https://www.example.com/\%u20B9.html}{\rupee}

它通过了 LaTeX 处理,没有错误,并给出了一个有效的链接。但是,使用我的网络域名(不是 example.com)进行测试时,它₹.html并没有加载,相反,我看到的 %25u20B9.html是 404。

采取与我以前不同的策略https://onlineunicodetools.com/url-encode-unicode转换为 UTF-8 编码的字符串%e2%82%b9,允许此代码:

\href{https://www.example.com/\%E2\%82\%B9.html}{\rupee}

它可以在 LaTex 中运行,并在浏览器地址栏中加载页面渲染₹.html。因此,固定的 MWE 为:

\documentclass{article} 
\usepackage{hyperref}
\usepackage{tfrupee}

\begin{document}

Inline use of \rupee \ symbol.

\href{http://www.example.com/index.html}{test}

\href{https://www.example.com/\%E2\%82\%B9.html}{\rupee}
% opens URL at 'example.com/₹.html`

End text.

\end{document}

所以,我希望这能帮助其他有类似困境的人。@Ulrike Fischer让 mme 走上正轨。

学习要点,对于像我这样缺乏代码经验的人来说,并非所有的“%代码”都是相同的!

†。至少我认为它是 UTF-8 编码!评论者——如果有错,请随时纠正我,以帮助后来的读者。

答案2

如果您对受保护做出定义\rupee,那么它就可以起作用。

\documentclass{article}
\usepackage{tfrupee}
\usepackage{hyperref}

\protected\def\rupee{{\usefont{U}{tfrupee}{m}{n}\char124}}

\begin{document}

Inline use of \rupee \ symbol.

\href{http://www.example.com/index.html}{test}

\href{http://www.example.com/\rupee.html}{\rupee}

End text.

\end{document}

当然,这不会产生合法的 URL,并且链接不会指向任何地方。

\documentclass{article}
\usepackage{tfrupee}
\usepackage{hyperref}

\protected\def\rupee{{\usefont{U}{tfrupee}{m}{n}\char124}}
\begingroup\catcode`\%=12
\gdef\urlrupee{%E2%82%B9}
\endgroup

\begin{document}

Inline use of \rupee \ symbol.

\href{http://www.example.com/index.html}{test}

\href{http://www.example.com/\urlrupee.html}{\rupee}

End text.

\end{document}

在此处输入图片描述

如果我点击超链接,我的浏览器会转到

在此处输入图片描述

说明:印度卢比符号的 Unicode 为 U+20B9,即0xE282B9UTF-8。

对于该示例来说,保护\rupee不是必需的,但我还是建议这样做。

相关内容