我想插入一个包含 的文件路径ß
。因此我想使用-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}