\href 链接中的变音符号和特殊字符的编码

\href 链接中的变音符号和特殊字符的编码

我有一个相当大的项目,需要同时使用多个包。我在\href链接中使用“德语变音符号”(äöü) 和其他特殊字符时遇到了问题。

以下是我所拥有的:

\documentclass[12pt,a4paper]{article}
\usepackage[ngerman]{babel}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{textcomp}
\usepackage{xcolor}
\usepackage{soulutf8}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage{graphicx}
\usepackage{geometry}
\usepackage{eurosym}
\usepackage[hidelinks,pdfencoding=auto]{hyperref}
\geometry{
 left=20mm,
 top=15mm,
 right=20mm,
 bottom=15mm
}
\pagenumbering{gobble}
\setlength\parindent{0pt}

\newcommand{\cfbox}[2]{%
    \colorlet{currentcolor}{.}%
    {\color{#1}%
        \fbox{\color{currentcolor}#2}
    }%
}


\definecolor{COLOR_CON}{RGB}{255,0,0}
\definecolor{COLOR_DEF}{RGB}{0,255,0}


\begin{document}
    \Large


    \setul{0.5ex}{0.3ex}
    \setulcolor{COLOR_DEF} % mit rot unterstrichen

    \section*{§ 1 Beginn der Rechtsfähigkeit}

    Die \href{<ref.> Ä ä Ö ö Ü ü § \& € </ref.>}{\ul{Link with Ä ä Ö ö underlined}}.

    Die \href{<ref.> ä Ä ö Ö ü Ü § \& € </ref.>}{\cfbox{COLOR_CON}{Link with Ä ä Ö ö and text superscript in a box\textsuperscript{S1}}}.
\end{document}

我收到“TeX 容量超出”错误。或者即使我删除所有字符,只留下一个特殊字符,它也无法正确显示。

我正在使用 pdflatex 进行编译。(Windows 上为 Miktex 2.9)

编辑:

更清楚地说,我的问题是什么。我如何在实际链接(不是 http 链接)和 pdf 文档中使用这些字符。正如我已经指出的那样,如果我删除

\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}

我的阅读器 (texStudio) 可以正确解释这些字符。但是这些字符在实际 PDF 文档中不可见。

我可以写一些类似的东西\"a来在输出中获得ä。有没有办法避免使用替换函数或类似的东西手动替换所有这些?

答案1

的第一个参数中的 URI 参数\href是错误的。根据 PDF 规范: 是URI一个 7 位编码的 ASCII 字符串。规范引用RFC 2396,统一资源标识符 (URI):通用语法. URI 中不允许的字符必须转义,请参阅百分比编码

例如,德语维基百科中 baker 的条目(贝克尔) 的 URL 为:

https://de.wikipedia.org/wiki/B%C3%A4cker

可以通过从某些浏览器(例如 Mozilla Firefox、Google Chrome)的位置栏中复制并粘贴来检索此 URL。

用于编码ä为 URI 八位字节的编码取决于 URI 和服务器。在这种情况下(通常)是 UTF-8,但也可以不同。

域名中的非 ASCII 字符(国际化域名) 和主机名 (Punycode) 的实现要复杂得多。

答案2

所以我现在所取得的是我的问题的“半最优”解决方案。

如果有人感兴趣:

首先,我使用 \usepackage[OT1]{fontenc}现在,因此我可以使用 ä、ö、ü、& 和 ß。但是 § 和 € 在这里不起作用。

这是半最优的,因为编译器没有给我真正的“ä”,而是类似

\保护 \取消hbox...\U@D 一个\egroup

由于我稍后要提取此文本,因此我可以用“ä”替换该字符串。

使用另一个 fontenc,我只会得到每个字符的“?”,在这里我可以用“\U@D a 代码”来区分它们

对于其他字符,我仍然需要一个特殊的解决方案。

相关内容