
Tengo un entorno tabular con una docena de líneas detalladas, cada una con un costo numérico entero. Me gustaría mostrar un total en la última fila. He editado elementos en la tabla varias veces durante un período de tiempo, cada vez recalculando tediosamente el total.
¿Hay alguna forma de tener una evaluación en línea para una fórmula aritmética simple, por ejemplo, algo similar a $(()): de bash, The total is $((12 + 34 + 23 + ... + 5))
donde se mostraría la expresión evaluada, en lugar de la ecuación literal? Me encantaría cambiar el valor de línea de un elemento y también cambiar el número correspondiente en la ecuación (no creo que necesite la expresividad completa de la hoja de cálculo aquí).
También prefiero no agregar un paso de preprocesamiento para generar la tabla a partir de una plantilla. El tamaño de la mesa aún no lo garantiza.
Me imagino que tiene que haber una forma sencilla incorporada en tex para mostrar el resultado de un cálculo definido en línea con el documento fuente. ¿Quizás abusando de un contador personalizado, o definiendo una nueva longitud con nombre, agregándole unidades y luego mostrando su valor?
Intentando lograr algo como esto (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}
Me gustaría que la última columna de la última fila muestre el recuento acumulado en ese punto del documento, es decir, Total 31
en este ejemplo.
Respuesta1
Dado que sólo están involucrados valores enteros, el \addtocounter
comando debería ser suficiente.
Cambié ligeramente la tabla y agregué el \additems
comando que realiza el cálculo automáticamente. El diseño de la mesa final se deja en manos del 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}
Otra versión sin suma corriente.
\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}