![hyperref 的 ocgcolorlinks 选项与 TikZ 的模式库之间的冲突](https://linux22.com/image/255866/hyperref%20%E7%9A%84%20ocgcolorlinks%20%E9%80%89%E9%A1%B9%E4%B8%8E%20TikZ%20%E7%9A%84%E6%A8%A1%E5%BC%8F%E5%BA%93%E4%B9%8B%E9%97%B4%E7%9A%84%E5%86%B2%E7%AA%81.png)
经过一些实验,我已将其精简为以下 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
选项中发生了一些可疑的事情。有人知道为什么吗?还是一个错误?
答案1
这两个包都需要访问 PDF 中的相同数据结构。没有任何东西可以管理 PDF 格式的全局资源。因此,目前的情况是包相互覆盖。在 TeX 宏观层面上,需要某种 PDF 内核,就像 LaTeX 内核管理各种计数器寄存器等全局资源一样。
更新:仔细查看后,我发现两个包都覆盖了令牌寄存器\pdfpageresources
并删除了以前的内容。当然,如果不同的包设置了相同的键,就会出现问题。但是在这种情况下,TikZ
设置了/ColorSpace
,/Pattern
和/ExtGState
,而hyperref
将键放在/Properties
那里。因此,我将更新hyperref
以保留以前的内容。然后,如果加载了\pdfpageresources
,示例将起作用hyperref
后 pgf
。目前的情况是,要么TikZ
的模式,hyperref
要么的模式ocgcolorlinks
被破坏了。