tikzexternalize
在我使用annotationimage
环境之前,它工作正常(无论出于什么原因,如果不禁用外部化,它本身就无法工作):
\RequirePackage{mwe}
\documentclass{article}
\usepackage{graphicx}
\usepackage{tikz,pgfplots,tikz-imagelabels}
\usetikzlibrary{external}
\tikzexternalize[prefix=plot_]
\begin{document}
\tikzset{external/force remake}
\tikzsetnextfilename{01}
\begin{figure}[h]
\centering%
\begin{tikzpicture}%[trim axis left, trim axis right]
\begin{axis}
\addplot+ coordinates {%
(0,20)%
(60,-40)%
(150,-40)%
};%
\end{axis}
l \end{tikzpicture}%
\end{figure}
%\tikzset{external/export next = {false}}
%\begin{figure}
% \centering%
% \begin{annotationimage}{width = 4cm}{example-image-a}
% \draw[coordinate label = {Annotation at (0.2,0.2)}];
% \end{annotationimage}%
%\end{figure}
\end{document}
日志显示system commands enabled
(我正在使用--shell-scape
)。
如果我取消注释最后一部分,我收到以下错误并且外部化的 PDF 消失:
! Package tikz Error: Sorry, the system call 'lualatex -shell-escape -halt-on-e
rror -interaction=batchmode -jobname "plot_01" "\def\tikzexternalrealjob{tikzex
ternalize}\input{tikzexternalize}"' did NOT result in a usable output file 'plo
t_01' (expected one of .pdf:.jpg:.jpeg:.png:). Please verify that you have enab
led system calls. For pdflatex, this is 'pdflatex -shell-escape'. Sometimes it
is also named 'write 18' or something like that. Or maybe the command simply fa
iled? Error messages can be found in 'plot_01.log'. If you continue now, I'll t
ry to typeset the picture.
这是一个错误,还是我遗漏了什么?
仅供参考:我在 Windows 10 上使用 TeXstudio,没有管理员权限。我在主文件夹中安装了 TL2023(类似于%userprofile%\stuff\texlive
)。我必须在%userprofile%\stuff\texlive\2023\bin\windows
TeXstudio 中输入路径作为 tikzexternalize 的搜索路径才能找到 lualatex。
答案1
由于 Ulrike Fischer 已经在评论中回答了您的问题,因此这个答案解决了另一个问题,即如何外部化带注释的图像。
memoize
毫不费力地记住annotationimage
,记忆速度更快,而且这个过程甚至不需要不受限制的 shell 转义。需要两次编译来稳定文档,但第二次只需要包含外部化(记忆化)图像。这些图像的生成是第一次编译运行的一部分。与 Ti 不同钾Z 的外部化方法,没有单独的编译过程。
\documentclass{article}
\usepackage{memoize}
\usepackage{tikz,pgfplots,tikz-imagelabels}
\mmzset{%
auto={annotationimage}{memoize}
}
\pgfplotsset{compat=1.18}
\begin{document}
\begin{figure}% you don't want to use simply h for placement and latex will change it if you do
\centering
\begin{tikzpicture}%[trim axis left, trim axis right]
\begin{axis}
\addplot+ coordinates {%
(0,20)%
(60,-40)%
(150,-40)%
};%
\end{axis}
l \end{tikzpicture}% does the l here serve any purpose?
\end{figure}
\begin{figure}
\centering
\begin{annotationimage}{width = 4cm}{example-image-a}
\draw[coordinate label = {Annotation at (0.2,0.2)}];
\end{annotationimage}%
\end{figure}
\end{document}
看https://tex.stackexchange.com/a/698555/以获得非常基本的介绍memoize
。