我经常使用模式
\begin{figure}
\centering
\tikzsetnextfilename{<SOME-NAME>}
\begin{tikzpicture}
\subimport{.}{figures/<SOME-NAME>.tex}
\end{tikzpicture}
\label{fig:<SOME-NAME>}
\end{figure}
fig:<SOME-NAME>
碰巧的是,我在复制粘贴此代码时忘记更改标签。因此我想知道是否有可能检索使用设置的值,\tikzsetnextfilename
以便
\label{fig:<SOME-NAME>}
可以改为
\label{fig:\tikzgetnextfilename}
对于不同的用例,我还想获取\tikzsetexternalprefix
导入命令的值。
编辑:我扩展了我的用例,因为我也想使用变量来导入正确的文件。
EDIT2:我最终使用了
\providecommand{\tikzfile}{}
...
\begin{figure}
\renewcommand{\tikzfile}{<SOME-NAME>}
\tikzsetnextfilename{\tikzfile}
\centering
\begin{tikzpicture}
\subimport{.}{figures/\tikzfile.tex}
\end{tikzpicture}%
\caption{This is the figure with name \tikzfile.}%
\label{fig:\tikzfile}%
\end{figure}
答案1
该宏\tikzsetnextfilename
非常简单,其定义为
\gdef\tikzexternal@nextfile{#1}
这意味着文件名将存储在(全局)宏中\tikzexternal@nextfile
。您可以将此宏用于标签,但它包含一个符号(表示它是一个内部宏),这意味着您只能在自己的代码中使用它,如果您使用和宏暂时@
关闭的特殊含义。这对于当前用例非常不方便,因此更容易更改原始定义以创建两个宏,原始宏带有符号,另一个自定义宏没有可在中使用的符号。@
\makeatletter
\makeatother
\tikzexternal@nextfile
@
@
\label
MWE,基于 TikZ 手册:
\documentclass{article}
% main document, called main.tex
\usepackage{tikz}
\usetikzlibrary{external}
\makeatletter
\def\tikzsetnextfilename#1{\gdef\tikzexternal@nextfile{#1}\gdef\mytikznext{#1}}
\makeatother
\tikzexternalize[prefix=tikzext/] % activate
\begin{document}
\begin{figure}
\centering
\tikzsetnextfilename{trees}
\begin{tikzpicture}
\node {root}
child {node {left}}
child {node {right}
child {node {child}}
child {node {child}}
};
\end{tikzpicture}
\caption{A tree}
\label{fig:\mytikznext}
\end{figure}
\begin{figure}
\centering
\tikzsetnextfilename{gridlines}
\begin{tikzpicture}
\draw[help lines] (0,0) grid (5,5);
\end{tikzpicture}
\caption{A grid}
\label{fig:\mytikznext}
\end{figure}
\centering See Figure \ref{fig:trees} and \ref{fig:gridlines}.
\end{document}
结果: