我正在通过命令获取一个值。现在我正在临时更改一个已保存的变量,这会更改命令输出。完成一些代码后,如果临时代码之前的值为 1,我想重置存储的值。
我的示例可以简化为:
\newcommand{\storedvalue}{1}
\newcommand{\getstoredvalue}{\storedvalue}
\newcommand{\resetstoredvalue}{Resetting}
Some text
\let\oldvalue\protect\getstoredvalue
\renewcommand{\storedvalue}{0}
Some text which needs the stored value to be changed
\ifnum\numexpr\oldvalue>0%
\resetstoredvalue{}%
\fi%
当然\getstoredvalue
和\resetstoredvalue
要复杂得多。
我尝试使用\protect
。这将返回正确的值,而不是命令。但我得到了Missing number, treated as zero
-clause if
。
我认为这是一个相当简单的问题。但我没有通过谷歌搜索找到解决方案。这也可能是因为我搜索了错误的搜索词。
我希望有人可以帮助我或者发布一个我可以自己找到解决方案的网站。
答案1
你必须使用\edef
宏\oldvalue
或
\let\oldvalue\storedvalue
因为\let\oldvalue\getoldvalue
会复制\getoldvalue
,而不是其扩展。
\documentclass{article}
\begin{document}
\newcommand{\storedvalue}{1}
\newcommand{\getstoredvalue}{\storedvalue}
\newcommand{\resetstoredvalue}{Resetting}
Some text
\edef\oldvalue{\getstoredvalue} % or \let\oldvalue\storedvalue
\renewcommand{\storedvalue}{0}
Some text which needs the stored value to be changed
\ifnum\oldvalue>0
\resetstoredvalue{}%
\fi
\end{document}
请注意,上下文%
之后不应出现“no” 。0
\ifnum