pgfplots:外部化文件名 - 使用图形参考(例如图 2)

pgfplots:外部化文件名 - 使用图形参考(例如图 2)

介绍

我有一个文档,其中许多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.1Figure.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}

相关内容