hyperref 的 ocgcolorlinks 选项与 TikZ 的模式库之间的冲突

hyperref 的 ocgcolorlinks 选项与 TikZ 的模式库之间的冲突

经过一些实验,我已将其精简为以下 MWE。事实上,它运行起来没有任何问题。

\documentclass{memoir}
\usepackage[ocgcolorlinks]{hyperref}

\usepackage{tikz}
\usetikzlibrary{patterns}


\author{The author}
\title{Some title}

\begin{document}
\frontmatter
\maketitle
\listoffigures
\mainmatter
\chapter{first}
\section{first}
Some figure
\begin{figure}%
\centering
\begin{tikzpicture}
\draw[fill,pattern=north east lines,thick] (0,0) rectangle (5cm,2cm);
\end{tikzpicture}
\caption{Some caption}%
\label{fig:a1}%
\end{figure}
\end{document}

注意 LoF 条目上的字体的颜色和粗细:

在此处输入图片描述

但是,当我将声明的位置更改hyperref为 TikZ 及其库声明之后的某个位置时,整个图形环境就消失了(但 LoF 仍然知道它在那里),而且 LoF 条目也会失去颜色(我猜!)。

在此处输入图片描述

如果我删除模式库依赖项(fill=yellow或其他任何内容),则无论声明顺序如何,都会获得上面的第二张图片,并且 TikZ 图片都会正确呈现。这表明第二张图片是正确的,并且模式库或ocgcolorlinks选项中发生了一些可疑的事情。有人知道为什么吗?还是一个错误?

我使用 MikTeX 2.9,TikZ/PGF2.10,hyperref6.83c

答案1

这两个包都需要访问 PDF 中的相同数据结构。没有任何东西可以管理 PDF 格式的全局资源。因此,目前的情况是包相互覆盖。在 TeX 宏观层面上,需要某种 PDF 内核,就像 LaTeX 内核管理各种计数器寄存器等全局资源一样。

更新:仔细查看后,我发现两个包都覆盖了令牌寄存器\pdfpageresources并删除了以前的内容。当然,如果不同的包设置了相同的键,就会出现问题。但是在这种情况下,TikZ设置了/ColorSpace/Pattern/ExtGState,而hyperref将键放在/Properties那里。因此,我将更新hyperref以保留以前的内容。然后,如果加载了\pdfpageresources,示例将起作用hyperref pgf。目前的情况是,要么TikZ的模式,hyperref要么的模式ocgcolorlinks被破坏了。

相关内容