tikzscale
与 -library 结合使用时我发现了一个奇怪的行为externalize
:
当我使用 配置externalize
,only named = true
但没有设置/pgfsetnextfilename
图像时,该图像不再被缩放。
梅威瑟:
\documentclass[]{article}
\usepackage{tikz}
\usetikzlibrary{external}
\tikzexternalize[
only named=true,
]
\usepackage{tikzscale}
\usepackage{filecontents}
\begin{document}
\begin{filecontents}{simple.tikz}
\begin{tikzpicture}[show background rectangle]
\draw (1,0) -- (0,1);
\end{tikzpicture}
\end{filecontents}
\tikzsetnextfilename{simple} % no scaling is happening once this line is commented out
\includegraphics[width=10cm]{simple.tikz}
\end{document}
这是预期的行为吗,还是我错过了什么或者做错了什么?
编辑:正如预期的那样,在tikzexternaldisable
之前放置一个\includegraphics
可以解决这个问题。
答案1
我不明白所有的细节,但我思考问题在于tikzscale修补命令\tikzexternalenable
和\tikzexternaldisable
但不修补\tikzsetnextfilename
。这意味着当启用外部化时,由于\tikzsetnextfilename
,我们得到修补的命令tikzscale已提供。当由于图片未命名而被禁用时,原始的、未修补的命令将就位,并且不会进行任何缩放。
相反,如果你使用显式\tikzexternalenable
和进行切换\tikzexternaldisable
,那么一切都会正常进行。但如果你依赖隐式启用和禁用通过 \tikzsetnextfilename
,事情并没有按预期进行。
真正的解决办法可能掌握在tikzscale或者,如果这不切实际,在 TikZ/PGF 的作者手中tikzscale。
作为一种解决方法,您可以\tikzsetnextfilename
自行修补以启用外部化并\tikzexternaldisable
默认设置。但是,我目前无法弄清楚如何\tikzexternaldisable
在之后自动发出,因此下面我手动发出了此命令,但这并不令人满意。
但这至少或许会有所帮助。
\begin{filecontents}{siml.tikz}
\begin{tikzpicture}[show background rectangle]
\draw (1,0) -- (0,1);
\end{tikzpicture}
\end{filecontents}
\documentclass{article}
\usepackage{tikz}
\usepackage{showframe}
\usetikzlibrary{external,backgrounds}
\tikzexternalize
[
only named=true,
]
\tikzexternaldisable
\usepackage{tikzscale}
\pretocmd{\tikzsetnextfilename}{\tikzexternalenable}{\typeout{Patch OK!}}{\typeout{Oh dear!}}
\begin{document}
\includegraphics[width=5cm]{siml.tikz}
\tikzsetnextfilename{siml} % no scaling is happening once this line is commented out
\includegraphics[width=5cm]{siml.tikz}
\tikzexternaldisable
\includegraphics[width=5cm]{siml.tikz}
\end{document}
我稍微缩小了比例以使内容适合一页: