![Wie drucke ich Zwischensummen auf jeder Seite einer langen Tabelle?](https://rvso.com/image/281478/Wie%20drucke%20ich%20Zwischensummen%20auf%20jeder%20Seite%20einer%20langen%20Tabelle%3F.png)
Bei manchen Rechnungen muss eine lange Liste von Artikeln ausgedruckt werden. In diesem Fall und in meinem Land müssen Rechnungen für jede Zwischenseite die Zwischensumme der vorherigen Seite ausdrucken und zur letzten Zwischensumme die Summe aller auf der Seite ausgedruckten Artikel hinzufügen.
Stellen Sie sich beispielsweise die folgende Tabelle vor, die auf zwei Seiten aufgeteilt ist.
\begin{longtable}{cc}
Item 1 & 100 \$ \\
Item 2 & 100 \$ \\
Item 3 & 100 \$ \\
Item 4 & 100 \$ \\
Item 5 & 100 \$ \\
\end{longtable}
Die Rechnung muss für jede Seite mit der Zwischensumme vorher und der Summe der Beträge danach Folgendes aufweisen:
Seite 1:
Item 1 & 100 \$ \\
Item 2 & 100 \$ \\
Item 3 & 100 \$ \\
Subtotal: 300 \$.
Seite 2:
Transport: 300 \$.
Item 4 & 100 \$ \\
Item 5 & 100 \$ \\
Transport + Subtotal: 500 \$.
Ich habe versucht, den Betrag zu akkumulieren mitfpin jeder Zeile der Tabelle, aber es funktioniert nicht. Drucken Sie 0 für Transport und Transport + Zwischensumme.
Beispiel in ShareLatex mit dem Problem
Danke für alle Ideen!
Antwort1
Dies hat einige Einschränkungen, berechnet aber die Fußbox auf jeder Seite neu ...
\documentclass{article}
\usepackage{longtable}
\usepackage[textheight=9\baselineskip]{geometry}
\newcount\zzz
\def\foo{}
\def\zz#1{#1%
\global\advance\zzz#1\relax
\marks1 {\the\zzz}%
}
\marks1{0}
\makeatletter
\def\LT@output{%
\ifnum\outputpenalty <-\@Mi
\ifnum\outputpenalty > -\LT@end@pen
\LT@err{floats and marginpars not allowed in a longtable}\@ehc
\else
\LT@bchunk
page total: &
\edef\tmp{\topmarks1 }%
\the\numexpr\botmarks1 \ifx\tmp\@empty\else - \topmarks1 \fi\relax\\
total:&\botmarks1
\LT@echunk
\setbox\LT@foot\box\z@
\LT@get@widths
\setbox\z@\vbox{\unvbox\@cclv}%
\ifdim \ht\LT@lastfoot>\ht\LT@foot
\dimen@\pagegoal
\advance\dimen@-\ht\LT@lastfoot
\ifdim\dimen@<\ht\z@
\setbox\@cclv\vbox{\unvbox\z@\copy\LT@foot\vss}%
\@makecol
\@outputpage
\setbox\z@\vbox{\box\LT@head}%
\fi
\fi
\global\@colroom\@colht
\global\vsize\@colht
%\vbox
{\unvbox\z@\nobreak\box\ifvoid\LT@lastfoot\LT@foot\else\LT@lastfoot\fi}%
\fi
\else
\global\advance\c@LT@chunks\@M
\LT@bchunk
\edef\tmp{\topmarks1 }%
page total: &
\edef\tmp{\topmarks1 }%
\the\numexpr\botmarks1 \ifx\tmp\@empty\else - \topmarks1 \fi\relax\\
running total:&\botmarks1
\LT@echunk
\setbox\LT@foot\box\z@
\LT@get@widths
\global\advance\c@LT@chunks-\@M
\setbox\@cclv\vbox{\unvbox\@cclv\copy\LT@foot\vss}%
\@makecol
\@outputpage
\global\vsize\@colroom
\copy\LT@head\nobreak
\fi}
\makeatother
\begin{document}
\begin{longtable}{l|l}
xxxxxx&yyyyyy\\
xxxxzzzzzzzzzzzzzxx&yyyyyyy\endfoot% not typeste but needs to be bigger than the foot that is used.
a & \zz{1}\\
b & \zz{2}\\
c & \zz{5}\\
d & \zz{7}\\
e & \zz{1}\\
f & \zz{9}\\
g & \zz{2}\\
h & \zz{3}\\
i & \zz{1}\\
j & \zz{6}\\
k & \zz{8}\\
l & \zz{3}\\
m & \zz{2}\\
n & \zz{1}\\
o & \zz{4}\\
p & \zz{8}\\
q & \zz{3}
\end{longtable}
\end{document}
Antwort2
In Anlehnung an die Ausführungen von David Carlisle hier das gleiche Beispiel, allerdings mit einer zweiten Spalte mit Gleitkommazahlen (ich habe hierfür Längen verwendet):
\documentclass{article}
\usepackage{longtable}
\usepackage[textheight=9\baselineskip]{geometry}
\newcount\zzz
\def\foo{}
\def\zz#1{#1%
\global\advance\zzz#1\relax
\marks1 {\the\zzz}%
}
\marks1{0}
\newlength\yyy
\setlength{\yyy}{0pt}
\def\yy#1{#1
\global\addtolength{\yyy}{#1pt}\relax
\marks2 {\the\yyy}
}
\marks2{0}
\makeatletter
\def\LT@output{%
\global\advance\c@LT@chunks\@M
\LT@bchunk
\edef\tmp{\topmarks1 }%
page total: &
\edef\tmp{\topmarks1 }%
\the\numexpr\botmarks1 \ifx\tmp\@empty\else - \topmarks1 \fi\relax&
\edef\tmp{\topmarks2 }%
\strip@pt\dimexpr\botmarks2 \ifx\tmp\@empty\else - \topmarks2 \fi\relax\\
running total:&\botmarks1&\strip@pt\dimexpr\botmarks2
\LT@echunk
\setbox\LT@foot\box\z@
\LT@get@widths
\global\advance\c@LT@chunks-\@M
\setbox\@cclv\vbox{\unvbox\@cclv\copy\LT@foot\vss}%
\@makecol
\@outputpage
\global\vsize\@colroom
\copy\LT@head\nobreak
}
\makeatother
\begin{document}
\begin{longtable}{l|l|l}
xxxxxx&yyyyyy&yyyyyy\\
xxxxzzzzzzzzzzzzzxx&yyyyyyy&yyyyyy\endfoot% not typeste but needs to be bigger than the foot that is used.
a & \zz{1} & \yy{5.3}\\
b & \zz{2} & \yy{6}\\
c & \zz{5} & \yy{7.1}\\
d & \zz{7} & \yy{4.5}\\
e & \zz{1} & \yy{9.15}\\
f & \zz{9} & \yy{15}\\
g & \zz{2} & \yy{2}\\
h & \zz{3} & \yy{8}\\
i & \zz{1} & \yy{1}\\
j & \zz{6} & \yy{6}\\
k & \zz{8} & \yy{8}\\
l & \zz{3} & \yy{3.2}\\
m & \zz{2} & \yy{2.67}\\
n & \zz{1} & \yy{1.1}\\
o & \zz{4} & \yy{4}\\
p & \zz{8} & \yy{8.05}\\
q & \zz{3} & \yy{3}
\end{longtable}
\end{document}