我使用 定义一个变量\def\x{0}
。如何通过加 1 来更新此变量?
\def\x{\x+1}
不起作用(它只是陷入无限循环)
或者我可以通过其他方式定义变量来实现这一点吗?
答案1
最好使用 TeX 的寄存器来管理整数变量。你可以说
\newcount\x
然后在需要数字的所有情况下使用它。推进计数器是通过
\advance\x by 1
或任何其他整数。为了打印此计数器的值,您必须说\number\x
。
但是,这取决于你想用这些“变量”做什么。另一种方法可能是
\def\newvariable#1{\gdef#1{0}}
\def\addtovariable#1#2{\xdef#1{\number\numexpr#1+#2\relax}}
\def\incrvariable#1{\addtovariable#1{1}}
以便
\newvariable\x
将定义\x
为扩展为 0;
\incrvariable\x
它会扩展为 1;接下来
\addtovariable\x{41}
它将扩大到 42。我并不推荐这种方式。
答案2
没有 PSTricks。
\documentclass[preview,border=12pt,varwidth]{standalone}
\usepackage[nomessages]{fp}
% #1: (optional) the number of digits after decimal point, the default is zero to make an integer
% #2: (mandatory) the name of variable to create
% #3: (mandatory) mathematics expression in infix form
\newcommand\const[3][0]{%
\edef\temporary{round(#3}%
\expandafter\FPeval\csname#2\expandafter\endcsname
\expandafter{\temporary:#1)}%
}
\const{x}{10}
\const{y}{x^2}
\begin{document}
\x% print 10
\const{x}{x+20}% add 20 to x
\x% print 30
\y% print 100, not 900!
\end{document}
应用(寻找 cos(x) 的不动点)
\documentclass[preview,border=12pt,varwidth]{standalone}
\usepackage[nomessages]{fp}
% #1: (optional) the number of digits after decimal point, the default is zero to make an integer
% #2: (mandatory) the name of variable to create
% #3: (mandatory) mathematics expression in infix form
\newcommand\const[3][0]{%
\edef\temporary{round(#3}%
\expandafter\FPeval\csname#2\expandafter\endcsname
\expandafter{\temporary:#1)}\ignorespaces
}
\def\f(#1){cos(#1)}
\const[5]{x}{0}
\begin{document}
\newcount\i
\i=1
\loop
\unless\ifnum\i>35
\advance \i by 1
\const[5]{x}{\f(x)}
\x
\par
\repeat
\end{document}