我有一个表格环境,里面有十几行条目,每行都有一个整数成本。我想在最后一行显示总数。一段时间内,我多次编辑表格中的条目,每次都要费力地重新计算总数。
有没有办法对简单的算术公式进行内联求值,例如类似于 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}