我正在寻找一种方法来获取(在 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}