
Eu tenho um ambiente tabular com cerca de uma dúzia de linhas discriminadas, cada uma com um custo numérico inteiro. Gostaria de exibir um total na última linha. Editei itens na tabela várias vezes durante um período de tempo, cada vez recalculando tediosamente o total.
Existe alguma maneira de ter avaliação embutida para uma fórmula aritmética simples, por exemplo, algo semelhante ao $(()): do bash, The total is $((12 + 34 + 23 + ... + 5))
onde a expressão avaliada seria mostrada, em vez da equação literal. Eu ficaria feliz em alterar o valor da linha de um item e também alterar o número correspondente na equação (acho que não preciso de expressividade completa na planilha aqui).
Também prefiro não adicionar uma etapa de pré-processamento para gerar a tabela a partir de um modelo. O tamanho da mesa ainda não garante isso.
Eu acho que deve haver uma maneira simples e integrada no tex para exibir o resultado de um cálculo definido em linha com o documento de origem. Talvez abusando de um contador personalizado ou definindo um novo comprimento nomeado, adicionando unidades a ele e exibindo seu valor?
Tentando conseguir algo assim (pseudocódigo):
% 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}
Gostaria que a última coluna da última linha mostrasse a contagem em execução naquele ponto do documento, ou seja, Total 31
neste exemplo.
Responder1
Como apenas valores inteiros estão envolvidos, o \addtocounter
comando deverá ser suficiente.
Mudei um pouco a tabela e adicionei o \additems
comando, que realiza o cálculo automaticamente. O design da mesa final é deixado para o 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}
Outra versão sem soma acumulada
\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}