Formación de totales en celda de entorno tabular. ¿Es posible la expansión macro o la evaluación en línea para aritmética simple?

Formación de totales en celda de entorno tabular. ¿Es posible la expansión macro o la evaluación en línea para aritmética simple?

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 31en este ejemplo.

Respuesta1

Dado que sólo están involucrados valores enteros, el \addtocountercomando debería ser suficiente.

Cambié ligeramente la tabla y agregué el \additemscomando 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}

ingrese la descripción de la imagen aquí

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}

ingrese la descripción de la imagen aquí

información relacionada