我正在编写一个包,首先检查 tikz 包是否已加载,然后添加一些 tikz 库
但是,此包与 tikzpicture 的“记住图片,覆盖”选项有冲突
我的 MWE 将包的内容嵌入到单个 tex 文件中:
\documentclass[10pt,a4paper]{article}
\AtBeginDocument{\usetikzlibrary{tikzmark}}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}[remember picture, overlay]
\draw (0,0) -- (1,1);
\end{tikzpicture}
\end{document}
在 Texmaker 中(我不知道这是否重要),这可以在初始构建时生成 pdf 文件。但是,如果我再次构建 .tex 文件,它会给出错误消息:“未定义的控制序列\savepicturepage
” 。
(参见\usetiklibarary
部分在包内,应该在之前\usepackage{tikz}
,这就是我使用的原因\AtBeginDocument
。出于另一个原因,我还应该使用 [记住图片,覆盖] 选项)
有人知道为什么吗?
答案1
你通常不能加载 Ti钾文档开始处的 Z 库。
使用当前的 LaTeX,您可以进行加载就在之前开始文档:
documentclass[10pt,a4paper]{article}
\makeatletter % this will go in the .sty file
\AddToHook{begindocument/before}{%
\@ifpackageloaded{tikz}{\usetikzlibrary{tikzmark}}{}%
}
\makeatother
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}[remember picture, overlay]
\draw (0,0) -- (1,1);
\end{tikzpicture}
\end{document}
如果您希望它也适用于旧版本的 LaTeX,您需要加载etoolbox
并使用\AtEndPreamble
。
\documentclass[10pt,a4paper]{article}
\makeatletter % this will go in the .sty file
\@ifundefined{AddToHook}{%
\RequirePackage{etoolbox}%
\AtEndPreamble{%
\@ifpackageloaded{tikz}{\usetikzlibrary{tikzmark}}{}%
}%
}{%
\AddToHook{begindocument/before}{%
\@ifpackageloaded{tikz}{\usetikzlibrary{tikzmark}}{}%
}%
}
\makeatother
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}[remember picture, overlay]
\draw (0,0) -- (1,1);
\end{tikzpicture}
\end{document}