ß 在 hyperref-package 的 \path{} 内

ß 在 hyperref-package 的 \path{} 内

我想插入一个包含 的文件路径ß。因此我想使用-package\path{}中的 -commandhyperref来正确设置它(即不要用 替换所有\内容/)。但是,我的文件路径包含德语“变音符号”,因此我得到了错误的结果。

我怎样才能告诉hyperref将读ß作一个符号而不是它的双字节 UTF-8 代表?

我的代码示例:

\documentclass[ngerman]{scrartcl}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage[ngerman=ngerman-x-latest]{hyphsubst}

\usepackage[ngerman]{babel}             % language
\usepackage{hyperref}                   % include links

\begin{document}
Test ä, ö, ü und ß.

\path{hier entlang... ß}
\end{document}

的输出Test ä, ö, ü und ß.运行良好,但在\path环境中ß被其两个字节替换。

正如我所读,hyperref似乎是按字节读取输入的。如何判断hyperref改为读取“UTF-8”?我还检查了我的代码文件本身是否正确保存为 UTF-8。

答案1

让我们添加一些对 UTF-8 前缀的支持0xC3。其他前缀可以用类似的方式添加。

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{lmodern}% less ugly ß
\usepackage{url}

\AddToHook{cmd/Url@OT1encSpecials/after}{\do\^^c3{\checknextCthree}}
\AddToHook{cmd/Url@T1encSpecials/after}{\do\^^c3{\checknextCthree}}
\newcommand{\checknextCthree}[1]{\mbox{\UrlFont\csname u8:\string^^c3\string#1\endcsname}}

\begin{document}

Test ä, ö, ü und ß.

\path{hier entlang... ß}

\end{document}

我删除了所有不必要的部分。为了支持 OT1,还需要添加两个部分。

在此处输入图片描述

答案2

这不是一个真正的解决方案,但也许是一种仅适用于 Windows 的规避方法:旧式 DOS 名称在 Windows 11 之前仍然普遍有效。“8.3 文件名”约定是使用前六个字母(大写,没有空格)并附加~1, ~2, ~3....[file extension]如果存在多个选项,则加上向上计数。my file.tex获取MYFILE~1.TEX您可以使用dir /x.

因此,如果您的主要目标是 Windows,并且 ß 出现在 6 个以上的字符之后,那么这可能是一个肮脏的伎俩。

答案3

url包(由 加载hyperref)提供\path作为其 的变体\url。工作方式\url是它将通过使用 来反标记其参数\meaning。这会破坏pdflatex(inputenc,现在是 LaTeX 中的默认设置)对 UTF-8 字符的支持,该支持依赖于使某些字节处于活动状态。通过 重新标记整个事物\scantokens看起来很危险,因为毕竟整个要点是处理诸如 之类的特殊内容%,并且需要找到合适的时间来处理它。作为一种侵入性较小的方法,让我们添加(我可能没有找到最好的入口点,也许\Url@HyperHook可以考虑,我将其\Url@actpercent作为入口点。

您必须明确列举要允许的所有字符。我没有添加用于以逗号分隔输入许多此类字符的界面,而只是一次输入一个字符的主命令。

概念证明:

\documentclass[ngerman]{scrartcl}
% \usepackage[utf8]{inputenc}% not needed with recent LaTeX
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage[ngerman=ngerman-x-latest]{hyphsubst}

\usepackage[ngerman]{babel}             % language
\usepackage{hyperref}                   % include links

\makeatletter
\newcommand\userrescuethischarforurlcommand[1]{%
   \expandafter\user@rescuethischar\expandafter{\detokenize{#1}}{\hbox{#1}}%
}
\def\user@rescuethischar#1#2{%
   \g@addto@macro\Url@actpercent{\Url@Edit\Url@String{#1}{#2}}%
}
\makeatother

\userrescuethischarforurlcommand{ß}
\begin{document}
Test ä, ö, ü und ß.

\path{hier entlang... ß}
\end{document}

生产 在此处输入图片描述

\hbox是为了解决 LaTeX 在数学模式下不接受某些字符命令的问题,并\url在数学模式下使用。

扩展示例:

\userrescuethischarforurlcommand{ß}
\userrescuethischarforurlcommand{ä}
\userrescuethischarforurlcommand{ö}
\userrescuethischarforurlcommand{ü}
\begin{document}
Test ä, ö, ü und ß.

\path{hier entlang... äöüß}
\end{document}

扩展示例

相关内容