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