我正在尝试解决一个明显是名称作用域的问题,但不知道如何解决。(此讨论摘自关于我昨天发布的相同代码的一个格式不正确的问题;我已要求删除该帖子。)
我正在尝试使用 fp 包来维护在表中显示的列表的运行总数(当然,真正的应用程序有些复杂;下面是一个最小的[非]工作示例。)问题似乎是累加器 \total 被重新创建为表的每一行中的本地值[如果我正确理解了上一个问题的海报的评论的话]。
\documentclass{article}
\usepackage[autolanguage]{numprint}
\usepackage{fp}
\FPset\total{0}
%
\def\item#1{%
\FPadd\total\total{#1}
$\FPprint{#1}$\\\\
}
%
\def\itotal{$\FPprint\total$}
\begin{document}
\begin{tabular}{l}
\item{17.5}
\item{12}
\itotal
\end{tabular}
\end{document}
该代码产生(忽略间距和类似的)
17.5
12
0
当然,我想要的是
17.5
12
29.5
发生了什么,我该如何解决?
答案1
发生这种情况的原因是表格中的每个条目都在其自己的组中排版,并\FPadd
进行本地分配。您可以按如下方式将其全球化:
\def\item#1{%
\FPadd\0\total{#1}\global\let\total\0
$\FPprint{#1}$\\\\
}
答案2
\documentclass{article}
\usepackage[autolanguage]{numprint}
\usepackage{fp}
\FPset\total{0}
%
\def\Item#1{%
\FPadd\total\total{#1}
\xdef\total{\total}
$\FPprint{#1}$\\\\
}
%
\def\itotal{$\FPprint\total$}
\begin{document}
\begin{tabular}{l}
\Item{17.5}
\Item{12}
\itotal
\end{tabular}
\end{document}