在表格环境的单元格中形成总计。宏扩展或内联评估是否可用于简单算术?

在表格环境的单元格中形成总计。宏扩展或内联评估是否可用于简单算术?

我有一个表格环境,里面有十几行条目,每行都有一个整数成本。我想在最后一行显示总数。一段时间内,我多次编辑表格中的条目,每次都要费力地重新计算总数。

有没有办法对简单的算术公式进行内联求值,例如类似于 bash 的 $(()):The total is $((12 + 34 + 23 + ... + 5))其中将显示求值的表达式,而不是文字方程。我很乐意更改项目的行值并更改方程中的相应数字(我不认为我在这里需要完整的电子表格表达能力)。

我也不想添加预处理步骤来从模板生成表格。表格的大小还不足以保证这一点。

我认为 tex 中必须有一个简单的内置方法来显示与源文档内联定义的计算结果。也许是通过滥用自定义计数器,或者通过定义新的命名长度,为其添加单位,然后显示其值?

尝试实现这样的目标(伪代码):

% initialize the current total to 0 before the table
{\thetotal = 0}

\begin{tabular}{@{}lp{4cm}r@{}} \toprule
  Store & Purpose & Items\\
  \midrule
  Safeway & for the salad   &    10 tomatoes  {\thetotal += 10} \\
  Whole Foods & for dessert &     4 muffins   {\thetotal += 4}  \\
  % ...
  % many more rows here.
  % in each row, \thetotal is incremented. This way, if I change
  % one line's value, I can change just that line and I don't need
  % to change anything else.
  % ...
  Home Depot & leftovers &     17 mouse traps {\thetotal += 17} \\
  \bottomrule
  % Lastly, show the value of the counter at that point in the document
  \multicolumn{2}{r}{Total} & \thetotal items
\end{tabular}

我希望最后一行的最后一列显示文档中该点的运行总数,即Total 31在此示例中。

答案1

由于只涉及整数值,因此该\addtocounter命令应该足够了。

我稍微修改了一下表格,并添加了\additems自动执行计算的命令。最终的表格设计留给 OP

\documentclass{article}

\usepackage{booktabs}
\usepackage{siunitx}
\newcounter{total}
\newcommand{\additem}[2]{%
  \num{#1} & #2 &   \addtocounter{total}{#1} \thetotal
}

\begin{document}

\begin{tabular}{@{}lp{4cm}rlr@{}} \toprule
  Store & Purpose & \multicolumn{3}{c}{Items} \tabularnewline
  \midrule
  Safeway & for the salad   &    \additem{10}{tomatoes} \tabularnewline
  Whole Foods & for dessert &    \additem{4}{muffins}   \tabularnewline
  Home Depot & leftovers &     \additem{17}{mouse traps} \tabularnewline
  \bottomrule
  \multicolumn{4}{r}{Total} & \thetotal\ items
\end{tabular}


\end{document}

在此处输入图片描述

另一个没有运行总和的版本

\documentclass{article}

\usepackage{booktabs}
\usepackage{siunitx}
\newcounter{total}
\newcommand{\additem}[2]{%
  \num{#1} & #2    \addtocounter{total}{#1} 
}

\begin{document}

\begin{tabular}{@{}lp{4cm}rl@{}} \toprule
  Store & Purpose & \multicolumn{2}{c}{Items} \tabularnewline
  \midrule
  Safeway & for the salad   &    \additem{10}{tomatoes} \tabularnewline
  Whole Foods & for dessert &    \additem{4}{muffins}   \tabularnewline
  Home Depot & leftovers &     \additem{17}{mouse traps} \tabularnewline
  \bottomrule
  \multicolumn{2}{r}{Total} & \thetotal & %items
\end{tabular}


\end{document}

在此处输入图片描述

相关内容