全局变量和/或变量数组

全局变量和/或变量数组

我正在寻找一种方法来获取(在 tex/latex 中 - 我仍然很难确定差异 - 我猜它应该说明 latex)可与 fp 包一起使用的运行时可定义的全局变量。

我想定义一个函数,每次调用它时,都会创建这样一个变量,以及第二个函数可以使用和/或更新这个变量的值。

典型结果

\newcommand{\defvar}[1]{%
  % var#1 := 0
  \expandafter\FPset\csname var#1\endcsname{0}%
}

\newcommand{\addvar}[2]{%
  % var#1 += #2
  \expandafter\FPadd\csname var#1\endcsname{\csname \var#1\endcsname}{#2}%
}

不幸的是似乎不起作用......有人可以解释我的错误吗?

答案1

\var您对的定义有误\addvar

\documentclass{article}
\usepackage{fp}

\newcommand{\defvar}[1]{%
  % var#1 := 0
  \expandafter\FPset\csname var#1\endcsname{0}%
}

\newcommand{\addvar}[2]{%
  % var#1 += #2
  \expandafter\FPadd\csname var#1\endcsname{\csname var#1\endcsname}{#2}%
}

% added for debugging
\newcommand{\showvar}[1]{\typeout{var "#1" is \csname var#1\endcsname}}

\defvar{x}
\showvar{x}
\addvar{x}{3}
\showvar{x}

这是终端上的输出

var "x" is 0
( FP-ADD )
var "x" is 3.000000000000000000

expl3使用及其模块的不同实现fp;我还添加了一个便捷命令\usevar

\documentclass{article}
\usepackage{xparse}

\ExplSyntaxOn
\NewDocumentCommand{\defvar}{m}
 {
  \fp_new:c { l_liselorev_var_#1_fp }
 }

\NewDocumentCommand{\addvar}{mm}
 {
  % var#1 += #2
  \fp_add:cn { l_liselorev_var_#1_fp } { #2 }
 }

\DeclareExpandableDocumentCommand{\usevar}{m}
 {
  \fp_use:c { l_liselorev_var_#1_fp }
 }

\NewDocumentCommand{\showvar}{m}
 {
  \fp_show:c { l_liselorev_var_#1_fp }
 }
\ExplSyntaxOff

\defvar{x}
\showvar{x}
\addvar{x}{3}
\showvar{x}

终端上的输出:

> 0.
<recently read> }

l.28 \showvar{x}

? 
> 3.
<recently read> }

l.30 \showvar{x}

相关内容