Tikz:从节点保存文本/内容

Tikz:从节点保存文本/内容

为什么它不起作用?我该怎么做才能让它起作用?

\documentclass[tikz,border=5]{standalone}

\newcommand{\lastsave}{defaulttext}
\newcommand{\save}[1]{\def\lastsave{#1}#1}

\begin{document}
\begin{tikzpicture}
\node at (0,0) {\save{text}};
\node at (0,-1) {\lastsave};
\end{tikzpicture}
\end{document}

在此处输入图片描述

毕竟,它确实在 tikz 之外工作:

\documentclass[tikz,border=5]{standalone}

\newcommand{\lastsave}{defaulttext}
\newcommand{\save}[1]{\def\lastsave{#1}#1}

\begin{document}
\save{text}

\lastsave    
\end{document}

在此处输入图片描述

答案1

因为\node设置了组内的节点文本,\gdef所以您必须改用\def。然后您的重新定义是全局的:

\documentclass[tikz,border=5]{standalone}
\newcommand{\lastsave}{defaulttext}
\newcommand{\save}[1]{\gdef\lastsave{#1}#1}% <- changed
\begin{document}
\save{text}
\lastsave
\end{document}

\def的重新定义仅在当前组中有效。在您的第二个示例中,文档中没有其他组。所以您得到了您想要的。但是如果您\save在组内设置,这意味着{\save{...}}\begingroup\save{...}\endgroup\bgroup\save{...}\egroup,那么您的重新定义将受此组限制。

\documentclass{article}
\newcommand{\lastsave}{defaulttext}
\newcommand{\save}[1]{\def\lastsave{#1}\lastsave}

\begin{document}
\save{first text} stores the text -- \lastsave

\bigskip

But using the command inside a group like

\bigskip
{\save{second text}},
\begingroup \save{third text}\endgroup,
\bgroup\save{fourth text}\egroup,

\begin{center}
  \save{last text}
\end{center}

you still get -- \lastsave{} -- outside the groups.

\end{document}

相关内容