从 \tikzsetnextfilename 获取最后一个值

从 \tikzsetnextfilename 获取最后一个值

我经常使用模式

\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}

结果:

在此处输入图片描述

相关内容