![自动将外部化图形的文件名设置为与 tikz/PGF 文件的文件名相同](https://linux22.com/image/250501/%E8%87%AA%E5%8A%A8%E5%B0%86%E5%A4%96%E9%83%A8%E5%8C%96%E5%9B%BE%E5%BD%A2%E7%9A%84%E6%96%87%E4%BB%B6%E5%90%8D%E8%AE%BE%E7%BD%AE%E4%B8%BA%E4%B8%8E%20tikz%2FPGF%20%E6%96%87%E4%BB%B6%E7%9A%84%E6%96%87%E4%BB%B6%E5%90%8D%E7%9B%B8%E5%90%8C.png)
正如标题所说,是否可以为外部化库设置一些选项,以便外部化图形的文件名等于 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.pdf
、circuit.pdf
和somethingelse.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”。不过,您必须在命令调用中指定输出路径。