自动将外部化图形的文件名设置为与 tikz/PGF 文件的文件名相同

自动将外部化图形的文件名设置为与 tikz/PGF 文件的文件名相同

正如标题所说,是否可以为外部化库设置一些选项,以便外部化图形的文件名等于 TikZ 文件的文件名,而无需\tikzsetnextfilename{}对每个要外部化的图形使用?

例如,如果我有一个文件pendulum.tikz,我希望外部输出获取文件名,pendulum.pdf而不必使用明确指定名称\tikzsetnextfilename{pendulum}

可能是手册中指定了这一点,但我一直不明白这是如何做到的。

希望有人可以帮忙。

编辑:

我今天使用的 TikZ 选项有一个“MWE”(不能按我想要的方式工作)。

\documentclass[12pt]{standalone}

\usepackage{tikz}
\usetikzlibrary{circuits.logic.US,circuits.logic.IEC}
\usetikzlibrary{external}
\tikzexternalize[prefix=figures/]

\begin{document}

\tikzsetnextfilename{circuit}
\begin{tikzpicture}[circuit logic IEC]
    \matrix[column sep=7mm]
    {
        \node (i0) {0}; & & \\
        & \node [and gate] (a1) {}; & \\
        \node (i1) {0}; & & \node [or gate] (o) {};\\
        & \node [nand gate] (a2) {}; & \\
        \node (i2) {1}; & & \\
    };
    \draw (i0.east) -- ++(right:3mm) |- (a1.input 1);
    \draw (i1.east) -- ++(right:3mm) |- (a1.input 2);
    \draw (i1.east) -- ++(right:3mm) |- (a2.input 1);
    \draw (i2.east) -- ++(right:3mm) |- (a2.input 2);
    \draw (a1.output) -- ++(right:3mm) |- (o.input 1);
    \draw (a2.output) -- ++(right:3mm) |- (o.input 2);
    \draw (o.output) -- ++(right:3mm);
\end{tikzpicture}

\end{document}

编辑#2

我的文档中有类似这样的内容,我想将其外部化

\begin{figure}[ht]
    \input{pendulum.tikz}
\end{figure}
\begin{figure}[ht]
    \input{circuit.tikz}
\end{figure}
\begin{figure}[ht]
    \input{somethingelse.tikz}
\end{figure}

我希望外部化的图形具有文件名pendulum.pdfcircuit.pdfsomethingelse.pdf,但不必这样做:

\begin{figure}[ht]
    tikzsetnextfilename{pendulum}
    \input{pendulum.tikz}
\end{figure}
\begin{figure}[ht]
    \tikzsetnextfilename{circuit}
    \input{circuit.tikz}
\end{figure}
\begin{figure}[ht]
    \tikzsetnextfilename{somethingelse}
    \input{somethingelse.tikz}
\end{figure}

答案1

一旦.tikz使用 将此文件包含在主文档中\input,TikZ 将不知道代码来自的文件的名称。实现您要执行的操作的最简单方法可能是定义一个新命令,例如

\newcommand{\includetikz}[1]{%
    \tikzsetnextfilename{#1}%
    \input{#1.tikz}%
}

然后您可以使用类似的东西来包含您的图像\includetikz{pendulum}


如果您想将输入和输出文件保存在单独的文件夹中,您只需向宏添加必要的路径:

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{external}
\tikzexternalize

% Define the command. Note that the input and output folders are static!
\newcommand{\includetikz}[1]{%
    \tikzsetnextfilename{images_OUT/#1}%
    \input{images_INP/#1.tikz}%
}

% Create a test .tikz file in the images_INP folder
\begin{filecontents}{images_INP/circle.tikz}
\begin{tikzpicture}
\fill [orange] circle [radius=3cm];
\end{tikzpicture}
\end{filecontents}

\begin{document}

\includetikz{circle}

\end{document}

答案2

相当老的线程,但我想在处理保存在不同子文件夹中的 tikz 文件时添加一个解决方案(正如@David K. 在 2012 年 11 月 16 日 11:18 对已批准答案的评论中提到的那样):

\newcommand{\inputtikz}[2]{%
    \tikzsetnextfilename{#2}%
    \input{#1#2.tikz}%
}

MWE 将是(仅取自批准的答案并经过修改):

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{external}
\tikzexternalize[prefix=./images_OUT/]

% Define the command. Note that input folder is NOT STATIC ANYMORE!
\newcommand{\inputtikz}[2]{%
    \tikzsetnextfilename{#2}%
    \input{#1#2.tikz}%
}

% Create a test .tikz file in the images_INP folder
\begin{filecontents}{images_INP/circle.tikz}
  \begin{tikzpicture}
     \fill [orange] circle [radius=3cm];
  \end{tikzpicture}
\end{filecontents}

\begin{document}

\inputtikz{images_INP/}{circle}

\end{document}

这样,circle.pdf 就会保存到输出文件夹“./images_OUT”。不过,您必须在命令调用中指定输出路径。

相关内容