编辑

编辑

我有一种重复使用 Ti 的格式某些页面的背景中有 Z 图片。由于这些图片需要remember picture, overlay,因此无法将其外部化。因此,为了控制编译时间,我将需要重复使用的图片保存到文档开头的框中,然后在需要它们的页面上使用这些框。

这很好。唯一的问题是我得到了多重定义的标签。问题不在于 LaTeX 警告我这些标签,而在于它们太多了,它们淹没了我关心的警告。特别是,我想知道其他标签是否被多重定义,因为这会搞砸我的交叉引用。

因此,我试图减少收到的虚假警告数量。在外部化图像的情况下,我取得了一些进展(通过重新定义pageslts仅在外部化时出现的宏),但我需要对要装箱的图片做一些不同的事情(如果可能的话)。

这是一个演示该问题的最小例子。

\documentclass{article}
\usepackage{tikz,everypage,kantlipsum}
\newsavebox\mybox

\begin{document}
\sbox\mybox{%
  \begin{tikzpicture}[remember picture, overlay]
    \shade [top color=blue!50!black, bottom color=blue!50!black, middle color=blue!50!cyan] (current page.north west) rectangle (current page.south east);
  \end{tikzpicture}%
}%
\AddThispageHook{\usebox\mybox}
\kant[1-8]
\AddThispageHook{\usebox\mybox}
\kant[9-10]
\end{document} 

所以这里的重点是图片生成一次并保存到\mybox。然后在第 1 页将此框放入背景中。然后在第 3 页将其放入背景中。输出就没问题了。

期望输出

问题是它会生成多重定义标签警告

LaTeX Warning: Label `pgfid1' multiply defined.

因为.aux文件包含

\pgfsyspdfmark {pgfid1}{4736286}{47362867}
\pgfsyspdfmark {pgfid1}{4736286}{47362867}

有什么办法吗?显然,这个警告是虚假的,因为它不会造成任何伤害。但我的警告列表被我无法摆脱的虚假警告淹没了,而且几乎不可能找到我需要识别的警告,尤其是当我很着急的时候。

编辑

需要澄清的是,我知道它remember picture负责将标签写入.aux触发警告的文件。但删除它不是一个选项,因为overlay需要它:

为什么我需要<code>记住图片</code>

答案1

正如我在评论中提到的,我认为真正的解决方案是不使用 tikz 记忆机制,因为在这里您不需要保存任何当前坐标,因为您将 tikz 放在页面上的固定位置。

然而从这里开始,最简单的事情就是通过向辅助文件写入一个丢弃设置的命令来忽略第一个设置之后的所有设置。

\documentclass{article}
\usepackage{tikz,everypage,kantlipsum}
\newsavebox\mybox
\makeatletter
\def\eatpgfmark{\write\@auxout{\string\@gobblefour}}
\makeatother
\begin{document}
\sbox\mybox{%
  \begin{tikzpicture}[remember picture, overlay]
    \shade [top color=blue!50!black, bottom color=blue!50!black, middle color=blue!50!cyan] (current page.north west) rectangle (current page.south east);
  \end{tikzpicture}%
}%
\AddThispageHook{\usebox\mybox}
\kant[1-8]
\AddThispageHook{\eatpgfmark\usebox\mybox}
\kant[9-10]
\end{document} 

生成一个 aux 文件

\relax 
\pgfsyspdfmark {pgfid1}{4736286}{47362867}
\@gobblefour
\pgfsyspdfmark {pgfid1}{4736286}{47362867}

所以第二个\pgfsysmark被丢弃。

相关内容