名称范围问题(可能)

名称范围问题(可能)

我正在尝试解决一个明显是名称作用域的问题,但不知道如何解决。(此讨论摘自关于我昨天发布的相同代码的一个格式不正确的问题;我已要求删除该帖子。)

我正在尝试使用 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}

相关内容