Merge branch 'master' of github.com:kivitendo/kivitendo-erp
[kivitendo-erp.git] / templates / print / Standard / zwischensumme.sty
1 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2 % Makros zur Berechnung und Ausgabe einer Zwischensumme bei langen Tabellen
3 % Der Hack der longtable Ausgabe ist von Heiko Oberdiek, das Paket zref auch.
4 %                            ---<(kaimartin)>---(August, 2007)
5 %Angepasst an 2.6.3 von n.simon@linet-services.de, 15. November 2011
6 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
7 % Diese Datei steht unter der GPL-Lizenz, Version 3
8 % siehe http://www.gnu.de/licenses/gpl-3.0.html
9 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
10
11 \usepackage{etex}           % Damit Marken verwendet werden koennen
12 \usepackage[savepos,user]{zref}  % Um die jeweils aktuelle Position zu merken
13 \usepackage{fltpoint}       % Rechnen mit Komma-Zahlen
14 \usepackage{numprint}       % Zahlen formatiert ausgeben
15 \usepackage{eurosym}        % Das Euro-Zeichen
16 \usepackage{calc}           % Fuer das Makro \widthof{}
17
18 % Globale Einstellungen fuer numprint
19 \nprounddigits{2}   % Zwei Nachkommasstellen
20 %% ",00" nicht durch ",--" ersetzen
21 \npprintnull
22
23 \fpDecimalSign{.}
24
25 \newcommand{\lxNumberFormatGermanInput}{\makeatletter\renewcommand*\nprt@ignorelist{.}\renewcommand*\nprt@dotlist{,}\makeatother}
26 \newcommand{\lxNumberFormatEnglishInput}{\makeatletter\renewcommand*\nprt@ignorelist{,}\renewcommand*\nprt@dotlist{.}\makeatother}
27
28 \newcommand{\lxNumberFormatGerman}{\lxNumberFormatGermanInput\npthousandsep{.}\npdecimalsign{,}}
29 \newcommand{\lxNumberFormatGermanNoSeparator}{\lxNumberFormatGermanInput\npthousandsep{}\npdecimalsign{,}}
30
31 \newcommand{\lxNumberFormatEnglish}{\lxNumberFormatEnglishInput\npthousandsep{,}\npdecimalsign{.}}
32 \newcommand{\lxNumberFormatEnglishNoSeparator}{\lxNumberFormatEnglishInput\npthousandsep{}\npdecimalsign{.}}
33
34 \newcommand{\lxNumberFormatToUse}{\lxNumberFormatGerman}
35
36 % Paketoptionen: Dezimaltrennzeichen und Tausendertrennzeichen
37 \DeclareOption{german}{\renewcommand{\lxNumberFormatToUse}{\lxNumberFormatGerman}}
38 \DeclareOption{germannosep}{\renewcommand{\lxNumberFormatToUse}{\lxNumberFormatGermanNoSeparator}}
39 \DeclareOption{english}{\renewcommand{\lxNumberFormatToUse}{\lxNumberFormatEnglish}}
40 \DeclareOption{englishnosep}{\renewcommand{\lxNumberFormatToUse}{\lxNumberFormatEnglishNoSeparator}}
41
42 \ProcessOptions
43
44 \lxNumberFormatToUse
45
46 %%%%%%%%%%%%%%Befehle zur Berechnung der Zwischensumme%%%%%%%%%%%%%%%%%%%%%%%
47 \newcommand*\laufsumme{0}
48 \newcommand*\resetlaufsumme{\global\def\laufsumme{0}}
49 \newcommand*\addlaufsumme[1]{\fpAdd{\laufsumme}{\laufsumme}{#1}%
50                                  \global\let\laufsumme\laufsumme}
51 \newcommand*\printwert[1]{%
52 \lxNumberFormatToUse%
53 \lxNumberFormatEnglishInput%
54 \numprint{#1}%
55 \lxNumberFormatToUse}
56
57 %%%%%%%%Plaintex-Hack fuer Positionierung der Zwischensummen%%%%%%%%%%%%%%%%%%
58
59
60 \makeatletter  % Das at-Zeichen in Variablen zulassen
61
62 % Variablen bereit stellen
63   \newdimen\drx
64   \newdimen\dry
65
66   \newmarks\ltm@marks
67   \def\ltm@setmarks#1{%
68     \marks\ltm@marks{#1}%
69     }
70   \def\ltm@getmarks{%
71     \botmarks\ltm@marks
72     }
73
74
75 % Den aktuellen Wert der Laufsumme berechnen und merken
76 \newcommand*{\Wert}[1]{%
77   \addlaufsumme{#1}%  Den uebergebenen Wert zur Laufsumme addieren
78   \expandafter\ltm@setmarks\expandafter{\laufsumme}% Die Laufsumme merken
79 }
80
81 % Merken der aktuellen Position
82 \newcommand*{\MarkZwsumPos}{%
83   \leavevmode
84      \zsavepos{zwsumpos\thepage}%
85      \zrefused{zwsumpos\thepage}%
86 }
87
88 \newcommand*{\MarkUebertrPos}{%
89   \leavevmode
90      \zsavepos{uebertrpos\thepage}%
91      \zrefused{uebertrpos\thepage}%
92 }
93
94
95 % Ausgabe der Zwischensumme
96 \def\ltm@insertfoot#1{%
97     \vbox to\z@{%
98       \vss
99       \hb@xt@\z@{%
100         \color@begingroup
101            \zsavepos{tabende\thepage}%   % Die aktuelle Position merken
102            \drx=0sp
103            \dry=0sp
104            % Die aktuelle Position abziehen und die gemerkte addieren
105            \advance \drx by -\zposx{tabende\thepage}sp
106            \advance \drx by \zposx{zwsumpos\thepage}sp
107            \advance \dry by -\zposy{tabende\thepage}sp
108            \advance \dry by \zposy{zwsumpos\thepage}sp
109            \smash{\kern\drx\raise\dry%
110              \hbox{\makebox[0cm][r]{Zwischensumme:\hspace*{2em}\printwert{#1} \currency}}%
111              }% end smash
112         \color@endgroup
113       }%
114     }%
115 }
116
117 % Ausgabe des Uebertrags
118 % Wie die Ausgabe der Zwischensumme, nur ohne neu gemerkte Position
119 \def\ltm@inserthead#1{%
120     \vbox to\z@{%
121       \vss
122       \hb@xt@\z@{%
123         \color@begingroup
124            \zsavepos{tabstart\thepage}%   % Die aktuelle Position merken
125            \drx=0sp
126            \dry=0sp
127            % Die Position des Tabellenendes abziehen und zur gemerkten gehen
128            \advance \drx by -\zposx{tabstart\thepage}sp
129            \advance \drx by \zposx{uebertrpos\thepage}sp
130            \advance \dry by -\zposy{tabstart\thepage}sp
131            \advance \dry by \zposy{uebertrpos\thepage}sp
132            \smash{\kern\drx\raise\dry%
133              \hbox{\makebox[0cm][r]{Übertrag:\hspace*{2em}\printwert{#1} \currency}}%
134              }% end smash
135         \color@endgroup
136       }%
137     }%
138 }
139
140 \def\ltm@lastfoot{}
141 \def\ltm@foot{\ltm@insertfoot{\ltm@getmarks}}
142 \def\ltm@head{\ltm@inserthead{\ltm@getmarks}}
143
144
145 % Ueberschreiben der Output-Routine von longtable
146 \def\LT@output{%
147   \ifnum\outputpenalty <-\@Mi
148     \ifnum\outputpenalty > -\LT@end@pen
149       \LT@err{floats and marginpars %
150               not allowed in a longtable}\@ehc
151     \else
152       \setbox\z@\vbox{\unvbox\@cclv}%
153       \ifdim \ht\LT@lastfoot>\ht\LT@foot
154         \dimen@\pagegoal
155         \advance\dimen@-\ht\LT@lastfoot
156         \ifdim\dimen@<\ht\z@
157           \setbox\@cclv\vbox{%
158             \unvbox\z@\copy\LT@foot\ltm@foot\vss
159           }%
160           \@makecol
161           \@outputpage
162           \setbox\z@\vbox{\box\LT@head}%
163         \fi
164       \fi
165       \global\@colroom\@colht
166       \global\vsize\@colht
167       \vbox{%
168         \unvbox\z@
169         \box\ifvoid\LT@lastfoot
170           \LT@foot\ltm@foot
171         \else
172           \LT@lastfoot\ltm@lastfoot
173         \fi
174       }%
175     \fi
176   \else
177     \setbox\@cclv\vbox{%
178       \unvbox\@cclv\copy\LT@foot\ltm@foot\vss
179     }%
180     \@makecol
181     \@outputpage
182     \global\vsize\@colroom
183     \copy\LT@head\ltm@head
184   \fi
185 }
186
187 \makeatother    % Das at-Zeichen in Variablen wieder verbieten
188 %%%%%%%%%%%%%%%%%%%%Ende plaintex-Hack%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%