为什么它不起作用?我该怎么做才能让它起作用?
\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}