tikzscale 无法使用仅命名的 externalize

tikzscale 无法使用仅命名的 externalize

tikzscale与 -library 结合使用时我发现了一个奇怪的行为externalize

当我使用 配置externalizeonly 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}

我稍微缩小了比例以使内容适合一页:

缩放图片

相关内容