Формирование итогов в ячейке табличной среды. Возможно ли макрорасширение или встроенный eval для простой арифметики?

Формирование итогов в ячейке табличной среды. Возможно ли макрорасширение или встроенный eval для простой арифметики?

У меня есть табличная среда с дюжиной или около того детализированных строк, каждая из которых имеет числовую целочисленную стоимость. Я хотел бы отобразить итог в последней строке. Я несколько раз редактировал элементы в таблице в течение определенного периода времени, каждый раз утомительно пересчитывая итог.

Есть ли способ сделать встроенную оценку для простой арифметической формулы, например, что-то вроде $(()) в 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команду, которая автоматически выполняет расчет. Окончательный дизайн таблицы оставлен на усмотрение ОП

\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}

введите описание изображения здесь

Связанный контент