介绍
我有一个文档,其中许多pgfplots
图表都嵌入在图中。我想使用该externalize
功能为每个图表生成一个单独的文件。
生成的文件能按照图号来命名吗?
在我的现实生活中的例子中,我有一个book
类,并且图形被命名为例如图 4.13(第 4 章,图 13)。
类似问题
示例代码
\documentclass{article}
% Here just for the figure placement option "H".
\usepackage{float}
% Plotting diagrams
\usepackage{pgfplots}
% Using the "Externalize" feature
\usepgfplotslibrary{external}
% Configuring the "Externalize" feature
\tikzexternalize[prefix=Output/] % Save all externalized files in the subfolder "Output"
\tikzexternalize[shell escape=-enable-write18]
\begin{document}
\section*{Example Section}
\begin{figure}[H]
\centering
\begin{tikzpicture}
\begin{axis}
\addplot{x^2};
\end{axis}
\end{tikzpicture}
\caption{Caption of Figure}
\end{figure}
\end{document}
示例输出
期望输出
根据图示命名的文件,例如图1.pdf。
更新
如果我必须在每个图形之前添加包装\tikzsetnextfilename
中的内容,我也会接受。pgf
那么问题是,当使用书籍类时,我该如何构建下一个图形名称?
答案1
我在环境中添加了 ,figure
以便根据图形计数器值设置下一个文件名。即使此图形未外部化,它也可以用于其他图形。但是,对于chapter.figure
编号样式, 的输出\thefigure
会更好。
\documentclass{book}
% Here just for the figure placement option "H".
\usepackage{float}
% Plotting diagrams
\usepackage{pgfplots}
% Using the "Externalize" feature
\usepgfplotslibrary{external}
\usepackage{xpatch}
\makeatletter
\xpretocmd{\figure}{%
\xdef\tmp@a{Figure.\the\numexpr\value{figure}+1}% Prepare the next filename
\tikzsetnextfilename{\tmp@a}
}{}{}%
\makeatother
\tikzexternalize[prefix=Output/,] % Save all externalized files in the subfolder "Output"
\tikzexternalize[shell escape=-enable-write18]
\begin{document}
\section*{Example Section}
\begin{figure}[H]
\centering
\begin{tikzpicture}
\begin{axis}
\addplot{x^2};
\end{axis}
\end{tikzpicture}
\caption{Caption of Figure}
\label{foo}
\end{figure}
\begin{figure}[H]
\centering
\begin{tikzpicture}
\begin{axis}
\addplot{x^2};
\end{axis}
\end{tikzpicture}
\caption{Caption of Figure}
\label{foobar}
\end{figure}
\end{document}
更可配置的版本(以及一些解释)
\tikzsetnextfilename
需要知道完整展开的文件名。这要么是一个字符串,要么是一个展开为完整文件名的宏。
\xdef\tmp@a{Figure.\the\numpexpr\value{figure}+1}
全局定义\tmp@a
并扩展它Figure.1
或Figure.2
等。这是一个可以赋予的固定内容\tikzsetnextfilename
(\xdef
是的全局变体\edef
,意味着扩展定义。
\edef
现在,没有(或)的直接方法\xdef
需要多个\expandafter
语句
\expandafter\tikzsetnextfilename\expandafter{\expandafter\myexternalprefix\the\numexpr\value{figure}+1}%
这实在不容易!
\documentclass{book}
% Here just for the figure placement option "H".
\usepackage{float}
% Plotting diagrams
\usepackage{pgfplots}
% Using the "Externalize" feature
\usepgfplotslibrary{external}
\usepackage{xpatch}
\newcommand{\myexternalprefix}{Figure.}
\xpretocmd{\figure}{%
\expandafter\tikzsetnextfilename\expandafter{\expandafter\myexternalprefix\the\numexpr\value{figure}+1}%
}{\typeout{figure was patched successfully}}{\typeout{figure patching failed}}%
\tikzexternalize[prefix=Output/,] % Save all externalized files in the subfolder "Output"
\tikzexternalize[shell escape=-enable-write18]
\begin{document}
\section*{Example Section}
\begin{figure}[H]
\centering
\begin{tikzpicture}
\begin{axis}
\addplot{x^2};
\end{axis}
\end{tikzpicture}
\caption{Caption of Figure}
\label{foo}
\end{figure}
\begin{figure}[H]
\centering
\begin{tikzpicture}
\begin{axis}
\addplot{x^2};
\end{axis}
\end{tikzpicture}
\caption{Caption of Figure}
\label{foobar}
\end{figure}
\end{document}