
Ich habe eine tabellarische Umgebung mit etwa einem Dutzend Einzelzeilen, jede mit einem numerischen Ganzzahlwert. Ich möchte in der letzten Zeile eine Gesamtsumme anzeigen. Ich habe die Elemente in der Tabelle im Laufe der Zeit mehrmals bearbeitet und jedes Mal die Gesamtsumme mühsam neu berechnet.
Gibt es eine Möglichkeit, eine Inline-Auswertung für eine einfache Rechenformel zu haben, z. B. etwas Ähnliches wie $(()): von Bash, The total is $((12 + 34 + 23 + ... + 5))
wo der ausgewertete Ausdruck angezeigt würde, statt der wörtlichen Gleichung? Ich wäre zufrieden, wenn ich den Zeilenwert eines Elements ändern und auch die entsprechende Zahl in der Gleichung ändern könnte (ich glaube nicht, dass ich hier die Ausdruckskraft der gesamten Tabelle benötige).
Ich möchte auch lieber keinen Vorverarbeitungsschritt hinzufügen, um die Tabelle aus einer Vorlage zu generieren. Die Größe der Tabelle rechtfertigt das derzeit nicht.
Ich denke, es muss eine einfache integrierte Möglichkeit in Tex geben, das Ergebnis einer Berechnung anzuzeigen, die im Quelldokument definiert ist. Vielleicht durch Missbrauch eines benutzerdefinierten Zählers oder durch Definieren einer neuen benannten Länge, Hinzufügen von Einheiten und anschließendes Anzeigen ihres Werts?
Ich versuche, so etwas zu erreichen (Pseudocode):
% 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}
Ich möchte, dass in der letzten Spalte der letzten Zeile die laufende Zählung an dieser Stelle im Dokument angezeigt wird, also Total 31
in diesem Beispiel.
Antwort1
Da es sich nur um ganzzahlige Werte handelt, \addtocounter
sollte der Befehl ausreichen.
Ich habe die Tabelle leicht geändert und den \additems
Befehl hinzugefügt, der die Berechnung automatisch durchführt. Das endgültige Tabellendesign bleibt dem OP überlassen
\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}
Eine andere Version ohne laufende Summe
\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}