hyperref 包阻止从 OT1 转换到 T1 编码

hyperref 包阻止从 OT1 转换到 T1 编码

正如在使用 fontenc 临时更改字体编码,我需要切换到 T1 编码才能获得某些 T1 字形。这可以很好地编译hyperref

\documentclass{article}
\usepackage[T1, OT1]{fontenc}
\usepackage{hyperref}
\begin{document}
Har{\fontencoding{T1}\selectfont{\dh}}arson
\end{document}

正如在\renewcommand 和 \newcommand 用于重音字母,我在序言中重新定义了一些 T1 宏。但是,在这种情况下,hyperref似乎坚持认为编码仍然在 OT1 中(没有 也可以编译得很好hyperref)。

\documentclass{article}
\usepackage[T1, OT1]{fontenc}
\renewcommand{\dh}{\fontencoding{T1}\selectfont{\symbol{240}}}
\usepackage{hyperref}
\begin{document}
Har{\dh}arson
\end{document}

LaTeX 错误:命令 \dh 在编码 OT1 时不可用。

这里发生了什么 ... ?


编辑

事实证明,如果在hyperref加载后重新定义宏,它就可以正常工作:

\documentclass{article}
\usepackage[T1, OT1]{fontenc}
\usepackage{hyperref}
\renewcommand{\dh}{\fontencoding{T1}\selectfont{\symbol{240}}}
\begin{document}
Har{\dh}arson
\end{document}

所以现在就引出了一个问题,为什么hyperref会导致这种行为。

答案1

hyperref 加载 pd1enc.def,它设置书签的编码并覆盖您的定义。将定义移到 hyperref 后面可以避免错误,但您将无法在书签中使用该命令。

LaTeX 正在努力以一种适用于各种编码的方式设置此类定义。您不应通过这种方式重新定义 LICR 命令来破坏此系统。请使用正确的命令。

\documentclass{article}
\usepackage[T1, OT1]{fontenc}
\DeclareTextSymbolDefault{\dh}{T1}
\usepackage{hyperref}
\begin{document}
\section{Har{\dh}arson } %to test bookmarks
Har{\dh}arson 
\end{document}

相关内容