rechnung.sty/rechnung.dtx

1481 lines
49 KiB
TeX

% \iffalse
%% File: rechnung.dtx Copyright (C) 1998 M G Berberich
%% berberic@fmi.uni-passau.de
% Änderungen V3.94 (2023-11-21, Tom Kazimiers <tom@voodoo-arts.net>)
% - Stornemdus mittels \Storno hinzugefügt, Mengen und Postensummen werden
% dadurch negativ.
% - USt. bei Gutschriften repariert.
% Änderungen V3.93 (2023-11-10, Felix Kußmaul <thoth@chensthoth.de>)
% - Korrektur der UStG-Formulierung für Kleinunternehmer
% Änderungen V3.92 (2022-03-11, Tom Kazimiers <tom@voodoo-arts.net>)
% - Tausendertrennung auf Basis von siunitx hinzugefügt. Ist standardmäßig
% aktiviert und kann mittels \TausenderTrennzeichenEin/-Aus kontrolliert
% werden. Mit Hilfe von \TausenderTrennzeichen kann das entsprechende
% Trennzeichen gesetzt werden.
% Änderungen V3.91 (2022-03-10, Felix Kußmaul <thoth@chensthoth.de>)
% - Option zum Verbergen der Anzahl und Einzelpreise hinzugefügt
% Änderungen V3.9 (2021-06-05, Felix Kußmaul <thoth@chensthoth.de>)
% - Abschlagszahlungen für Kleinunternehmer (UStG §19) implementiert
% Änderungen V3.81 (2021-01-28, Tom Kazimiers <tom@voodoo-arts.net>)
% - Internationale Rechnungen ohne USt. haben nun die korrekte
% Netto-Bezeichnung.
% Änderungen V3.80 (2020-08-15, Tom Kazimiers <tom@voodoo-arts.net>)
% - Dollar ist nun als Währung mittels \Dollar verfügbar.
% - Die Textbausteine der Rechnung können nun mittels verschiedener
% \Lang-Macros verändert werden.
% - Es gibt einen weiteren Schalter um die Rechnung ohne USt. zu stellen, wenn
% Rechnungen ins Nicht-EU-Ausland gehen. Dazu muss der Rechnungstyp auf I
% gesetzt werden.
% Änderungen V3.70 (2019-08-28, Tom Kazimiers <tom@voodoo-arts.net>)
% - Negative Zahlen wie sie z.B. bei \Gutschrift vorkommen, werden nun korrekt
% dargestellt.
% Änderungen V3.60 (2019-04-21, Stefan Sperling <stsp@stsp.name>)
% - Berechnungstyp "E" für "EU Innergemeinschaftliche Lieferung" hinzugefügt
% Änderungen V3.50 (2015-10-06, Lennart Hensler <lennarthensler@aol.com>)
% - Breite der Anzahl-Spalte um 0.3em (auf 3.2em) vergrößert
% - Macro hinzugefügt, um der Anzahl eine Einheit zu geben. Das kann zum
% Beispiel verwendet werden, um die Anzahl als Stunden auszuweisen.
% Dabei sollte beachtet werden, dass sich die Breite der Anzahl-Spalte
% NICHT automatisch vergrößert und dass die Einheit für ALLE NACHFOLGENDEN
% Artikel/Posten verwendet wird
% Änderungen V3.40 (2015-11-03, Sven Schoradt <schoradt@netztierpfleger.de>)
% - Abschlagszahlungen in netto-Rechnungen eingebaut
% Änderungen V3.30 (2010-03-05, Tom Kazimiers <tom@voodoo-arts.net>)
% - Fehler behoben der eine MwSt von 0% nicht möglich machte
% - Euro als Standardwährung gesetzt, für DM muss "\DMark" gesetzt
% werden
% - Macro hinzugefügt um einen Prefix für jedes Element eines Artikels
% zu setzen. Damit kann beispielsweise die Schriftgröße der Artikel
% zeilen angepasst werden.
% Änderungen V3.20 (2009-12-08, Tom Kazimiers <tom@voodoo-arts.net>)
% - Mehrwertsteuersatz angepasst. von 16/7 auf 19/7
% - Einen Rechnungstyp "K" für "Umsatzsteuer/keine Mehrwertsteuer"
% hinzugefügt; verwendbar wenn MwSt. nach 19 UStG nicht anwendbar
% Änderungen V3.10 (2001-04-01, Ulrich Sibiller <uli42@web.de>)
% - Statt "Artikel" steht jetzt "Beschreibung" in der Titelzeile
% Eines Tages soll der User das einstellen können
% - Kommazahlen für Anzahl werden jetzt korrekt behandelt. Beträge werden
% bei der Ausgabe korrekt gerundet (0,34 * 0,20 -> 0,07; 0,34 * 0,24 = 0,09)
% - Daraus resultierend kann man jetzt für Zahlen auch weniger
% als zwei Nachkommastellen angeben.
% - Spaltenbreiten werden zentral definiert (leider nicht automatisch, sollten
% user definable sein)
% - Bugfix: Wenn Positionsspalte abgeschaltet war, dann rutschten die Zeilen
% ein klein wenig nach oben (weil \strut dann fehlte)
%
% Änderungen V3.00 (2001-03-23, Ulrich Sibiller <uli42@web.de>)
% - Positionsspalte kann abgeschaltet werden (\PositionEin/Aus)
% - Mehrwertsteuer wird separat in zwei Zeilen ausgegeben
% - horizontale Trennlinien zwischen den einzelnen Artikeln
% können abgeschaltet werden (\TrennerEin/Aus)
% - Reduktion auf weniger Code (durch Parametrisierung), da ein
% Großteil identisch war
% - Neues Kommando: \Posten ist ein Alias zu Artikel
% - Bugfix: Versandkosten mit erm. MwSt-Satz funktionieren jetzt. Keine
% Ahnung, ob es sowas ueberhaupt gibt, aber jedenfalls wurde das
% bisher nicht korrekt angezeigt!
% - Neues Environment: \Bestellung
%
%<*dtx>
\ProvidesFile{rechnung.dtx}
%</dtx>
%<package>\NeedsTeXFormat{LaTeX2e}
%<package>\ProvidesPackage{rechnung}
%<package>\RequirePackage{siunitx}
%<driver> \ProvidesFile{rechnung.drv}
% \fi
% \ProvidesFile{rechnung.dtx}
[2023/11/10 v3.93 BMG Rechnungs Style, enhanced by Ulrich Sibiller, Tom Kazimiers, Sven Schoradt, Lennart Hensler, Stefan Sperling, Felix Kußmaul]
%
% \iffalse
%<*driver>
\documentclass[draft]{ltxdoc}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{textcomp}
\usepackage{german}
% To generate the documentation, we need to include ourselves.
\usepackage{rechnung}
\begin{document}
\DocInput{rechnung.dtx}
\end{document}
%</driver>
% \fi
%
% \GetFileInfo{rechnung.dtx}
% \title{Das \textsf{rechnung} Paket V3.93}
% \author{M G Berberich, Ulrich Sibiller, Tom Kazimiers}
% \date{2010-03-05}
%
% \let\env\textsf
%
% \maketitle
%
% \begin{abstract}
% Dieses Paket definiert \env{rechnung} und
% \env{rechnung\textasteriskcentered} Umgebungen
% um Rechnungen und Bestellungen zu erzeugen.
% \end{abstract}
%
% \changes{v1.00}{1998/11/16}
% {Auskoppelung der Umgebungen aus bmgbrief.cls}
%
% \changes{v1.01}{1998/11/19}
% {Zahlenleseroutine erneuert. Sie gibt jetzt lesbare Fehlermeldungen
% bei falscher Nachkommastellenzahl}
%
% \changes{v2.00}{1998/11/25}
% {Erweiterung um Netto- und Bruttorechnungen mit Mehrwertsteuer}
%
% \changes{v2.01}{1998/11/25}
% {Rundungsfehler in der Bruttorechnungen behoben}
%
% \changes{v3.00}{2001/03/23}
% {Positionen und Trennlinien abschaltbar, Code Cleanup <uli42@web.de>}
%
% \changes{v3.01}{2001/04/01}
% {Statt Artikel wird Beschreibung in der Titelzeile verwendet, Anzahl kann
% muss keine ganze Zahl mehr sein<uli42@web.de>}
% \changes{v3.20} {2009/12/08}
% {Einen Rechnungstyp "K" für "nmsatzsteuer/keine Mehrwertsteuer"
% hinzugefügt; verwendbar wenn MwSt. nach 19 UStG nicht anwendbar
% <tom@voodoo-arts.net>}
% \changes{v3.30} {2010/03/05}
% {Fehler behoben der eine MwSt von 0\% nicht möglich machte,
% Euro als Standardwährung gesetzt, für DM muss "\textbackslash DMark" gesetzt
% werden; Mehrwertsteuersatz korrigiert (von 16/7 auf 19/7; Mittels
% einem Prefixmakro kann allen Tabellenelementen etwas vorangsteltt
% werden
% <tom@voodoo-arts.net>}
% \changes{v3.40} {2015/11/03}
% {Abschlagszahlungen in netto-Rechnungen eingebaut
% <schoradt@netztierpfleger.de>}
% \changes{v3.50} {2015/10/06}
% {Breite der Anzahl-Spalte um 0.3em (auf 3.2em) vergrößert;
% Macro hinzugefügt, um der Anzahl eine Einheit zu geben. Das kann zum
% Beispiel verwendet werden, um die Anzahl als Stunden auszuweisen.
% Dabei sollte beachtet werden, dass sich die Breite der Anzahl-Spalte
% NICHT automatisch vergrößert und dass die Einheit für ALLE NACHFOLGENDEN
% Artikel/Posten verwendet wird
% <LennartHensler@aol.com>}
% \changes{v3.60} {2019/04/21}
% {Berechnungstyp "E" für "EU Innergemeinschaftliche Lieferung" hinzugefügt
% <stsp@stsp.name>}
% \changes{V3.70} {2019/08/28}
% {Negative Zahlen wie sie z.B. bei "\textbackslash Gutschrift" vorkommen,
% werden nun korrekt dargestellt
% <tom@voodoo-arts.net>}
% \changes{V3.80} {2020/08/15}
% {Dollar ist nun als Währung mittels "\textbackslash Dollar" verfügbar;
% Die Textbausteine der Rechnung können nun mittels verschiedener
% "\textbackslash Lang"-Macros verändert werden; Es gibt einen weiteren
% Schalter um die Rechnung ohne USt. zu stellen, wenn Rechnungen ins
% Nicht-EU-Ausland gehen. Dazu muss der Rechnungstyp auf I gesetzt werden.
% <tom@voodoo-arts.net>}
% \changes{V3.92} {2022/03/11}
% {Tausendertrennung auf Basis von siunitx hinzugefügt. Ist standardmäßig
% aktiviert und kann mittels \TausenderTrennzeichenEin/-Aus kontrolliert
% werden. Mit Hilfe von \TausenderTrennzeichen kann das entsprechende
% Trennzeichen gesetzt werden
% <tom@voodoo-arts.net>}
%
% \DeleteShortVerb{\|}
% \MakeShortVerb{\"}
% \let\package\textsf
% \let\env\textsf
%
% \section{Rechtliches}
%
%
% Da das Paket ohne jegliche Kosten lizenziert wird, besteht keinerlei
% Gewährleistung. Ich hafte weder für unmittelbar noch mittelbar entstehende
% Schäden aus der Verwendung des Paketes. Ich stelle das Paket so zur Verfügung,
% \glqq wie es ist\grqq, ohne irgendeine Gewährleistung, weder ausdrücklich noch
% implizit, einschließlich, aber nicht begrenzt auf, die Tauglichkeit und
% Verwendbarkeit für einen bestimmten Zweck. Das volle Risiko bezüglich Qualität
% und Leistungsfähigkeit liegt bei Ihnen. Sollte das Programm fehlerhaft sein,
% übernehmen Sie die Kosten für notwendigen Service, Reparatur oder Korrektur.
%
% Die Weitergabe dieses Pakets ist erlaubt solange es \emph{vollständig}
% weitergegeben wird. Änderungen an Dateien dieses Pakets sind nur zulässig wenn
% die Datei \emph{vorher} umbenannt wird, mein Copyright-Vermerke und der
% Haftungssausschluß erhalten bleiben und klar ersichtlich ist, daß es sich um
% eine veränderte Variante handelt.
%
%
%
% \section{Beschreibung}
%
% \DescribeEnv{Rechnung}\DescribeEnv{Bestellung}
% Die Umgebung \env{Rechnung} bzw \env{Bestellung} erstellt eine Rechnung oder
% Bestellung. Die beiden Makros sind identisch, es wird jedoch empfohlen, zur
% besseren Lesbarkeit das jeweils passende zu verwenden. Im weiteren Text wird
% nur \env{Rechnung} verwendet. Jede Position besteht aus einer
% Positionsnummer, die automatisch erstellt wird, der Anzahl, der
% Artikelbeschreibung und dem Einzelpreis des Artikels. Die Preise und die
% Gesamtsumme werden von \env{Rechnung} berechnet. \env{Rechnung} hat ein
% optionales Argument, daß den Typ der Rechnung/Bestellung angibt:
% \begin{description}
% \item[\texttt{\textbackslash begin\{Rechnung\}}]
% Eine \glqq Rechnung\grqq\ ohne Mehrwertsteuer. Diese Variante eignet
% sich z.\,B. zur Erstelllung von Bestellungen.
% \item[\texttt{\textbackslash begin\{Rechnung\}[N]}]
% Eine Rechnung bei der alle Preise als Nettopreise angegeben sind
% und bei der die Mehrwertsteuer angegeben und zum Endpreis addiert
% wird. (z\.B. für gewerbliche Kunden)
% \item[\texttt{\textbackslash begin\{Rechnung\}[B]}]
% Eine Rechnung bei der alle Preise als Bruttopreise angegeben sind
% und die enthaltene Mehrwertsteuer ausgewiesen ist.
% (z.\,B. für Endverbraucher)
% \item[\texttt{\textbackslash begin\{Rechnung\}[K]}]
% Eine Rechnung bei der alle Preise als Nettopreise angegeben sind
% und die Mehrwertsteuer nach \S19 UStG nicht ausweisbar ist.
% (z.\,B. für Selbstständige im Kleingewerbe)
% \item[\texttt{\textbackslash begin\{Rechnung\}[E]}]
% Eine Rechnung bei der alle Preise als Nettopreise angegeben sind
% und die Mehrwertsteuer nach Art. 6 Abs. 1 UStG vom Leistungsempfänger
% gezahlt wird (z.\,B. für Innergemeinschaftliche Lieferungen in der EU)
% \end{description}
% \DescribeEnv{Rechnung\textasteriskcentered}
% \DescribeEnv{Bestellung\textasteriskcentered}
% Die Umgebung \env{Rechnung\textasteriskcentered} bzw.
% \env{Bestellung\textasteriskcentered} ist zu \env{Rechnung} bzw.
% \env{Bestellung} identisch, bis auf die, hier zusätzlich vorhandenen,
% Artikelnummern. Der Platz für die Artikelbeschreibungen wird entsprechend
% kleiner.
%
% \DescribeMacro{\Artikel}\DescribeMacro{\Posten}
% Mit "\Artikel" oder "\Posten" werden die einzelnen Positionen der Rechnung
% eingegeben. Es besteht kein Unterschied zwischen den beiden Makros.\\
% "\Artikel{"\textlangle Anzahl\textrangle"}{"
% \textlangle Artikel\textrangle"}{"
% \textlangle Einzelpreis\textrangle"}"\\
% bzw. bei \env{Rechnung\textasteriskcentered} und
% \env{Bestellung\textasteriskcentered}:\\
% "\Artikel{"\textlangle Anzahl\textrangle"}{"
% \textlangle Artikelnummer\textrangle"}{"
% \textlangle Artikel\textrangle"}{"
% \textlangle Einzelpreis\textrangle"}"\\
% "\Artikel" hat ein optionales Argument, daß es erlaubt für diesen Artikel den
% ermäßigten Mehrwertsteuersatz auszuwählen. Diese Positionen werden hinter dem
% Preis mit einem $^*$ gekennzeichnet und unter der Tabelle wird bei Netto- und
% Bruttorechnungen eine \glqq Fußnote\grqq\ erzeugt. Zum Beispiel:\\
% "\Artikel[e]{5}{Der Herr der Ringe}{59,80}"\\ fügt eine Position mit 5
% \emph{Herr der Ringe} zum ermäßigten Mehrwertsteuersatz ein. Mittels dem
% Makro "\ArtikelPrefix{...}" kann man jedem Element der Artikel einen Prefix
% geben. Damit lässt sich beispielsweise die Schriftgröße dieser Auflistung im
% Ganzen ändern:\\ "\ArtikelPrefix{\small}"
%
%
% Versandkosten lassen sich mit \DescribeMacro{\Versandkosten}
% "\Versandkosten{"\textlangle Preis\textrangle"}" eingeben und bekommen keine
% Positionsnummer. Es sind auch ermäßigte Versandkosten über den optionalen
% Parameter "[e]" möglich, allerdings ist nicht bekannt, ob es sowas überhaupt
% irgendwo gibt.
%
% \DescribeMacro{\Waehrung}
% Die Währungseinheit, die hinter die Beträge gesetzt wird, ist auf DM
% voreingestellt. Mit "\Waehrung{...}" kann eine beliebige andere Währung
% gesetzt werden, "\Waehrung{F}" setzt z.\,B. die Währung auf \glqq F\grqq. Für
% den Euro gibt es eine Abkürzung "\Euro" die identisch zu
% "\Waehrung{\texteuro}" ist und (falls das "textcomp"-Paket eingebunden ist)
% ein \texteuro\ erzeugt.
%
% \DescribeMacro{\Steuersatz}
% Die Steuersätze lassen sich mit "\Steuersatz{"\textlangle Steuersatz
% 1\textrangle"}{" \textlangle Steuersatz 2\textrangle"}" festlegen.
% Standardmäßig ist Steuersatz 1 auf "19" und Steuersatz 2 auf "7" eingestellt.
% Dies entspricht dem Mehrwertsteuersatz von 19\% und dem ermäßigtem
% Mehrwertsteuersatz von 7\%.
%
% \DescribeMacro{\Gesamtsumme}\DescribeMacro{\Mehrwertsteuer}
% Nach dem Ende einer \env{Rechnung}- bzw. \env{Bestellung}\-Umgebung lassen
% sich die Gesamtsumme und die Mehrwertsteuer noch mit den Makros "\Gesamtsumme"
% und "\Mehrwertsteuer" in den Text einfügen.
%
% \DescribeMacro{\PositionEin}\DescribeMacro{\PositionAus}
% Hiermit läßt sich die Ausgabe der Positionsspalte aktivieren bzw.
% unterdrücken, da diese nicht immer benötigt wird. Voreingestellt ist
% "\PositionEin" Die Makros können beliebig oft auftreten, es wird jedoch nur
% das letzte vor dem ersten Artikel beachtet. Sobald ein Artikel angegeben
% wurde, werden die Makros ignoriert.
%
% \DescribeMacro{\TrennerEin}\DescribeMacro{\TrennerAus}
% Eine Rechnung sieht oft besser aus, wenn sich keine Trennlinien zwischen den
% einzelnen Posten befinden. Da dies aber Geschmackssache ist, kann man die
% Ausgabe von Trennlinien mit den Makros "\TrennerEin" bzw. "\TrennerAus"
% steuern. Voreinstellung ist "\TrennerEin". Die Makros können beliebig oft
% auftreten, es wird jedoch nur das letzte vor dem ersten Artikel beachtet.
% Sobald ein Artikel angegeben wurde, kann die Einstellung nicht mehr verändert
% werden.
%
% \DescribeMacro{\AnzahlEinheit}
% Die Einheit aller nachfolgender Artikel/Posten lassen sich mit
% "\AnzahlEinheit{"\textlangle Einheit\textrangle"}" festlegen. Die Einheit
% wird von einem Leerzeichen getrennt hinter die Anzahl eingefügt.
% Standardmäßig ist die keine Einheit gewählt. Das Makro kann beliebig oft
% auftreten. Dabei beeinflusst die jeweile Definition immer nur die
% nachfolgenden Artikel/Posten. Dies kann verwendet werden, um unterschiedlichen
% Artikeln/Posten unterschiedliche Einheiten zu geben.
%
% \DescribeMacro{\TausenderTrennzeichenEin}\DescribeMacro{\TausenderTrennzeichenAus}
% Große Zahlenwerte sind oft einfacher zu lesen, wenn Tausendergruppen separiert
% dargestellt werden. In der deutschen Sprache geschicht dies üblicherweise
% durch einen Punkt, in anderen Regionen kann dies aber auch ein Komma oder ein
% kleines Leerzeichen sein. Hier wird das Paket "siunitx" genutzt, mit einer
% Standardkofiguration mit Tauserderpunkt. Die Makros
% "\TausenderTrennzeichenEin" und "\TausenderTrennzeichenAus" erlauben es, diese
% Zahlendarstellung ein- bzw. auszuschalten. Voreinstellung ist
% "\TausenderTrennzeichenEin". Mit dem Makro "\TausenderTrennzeichen" kann ein
% alternatives Trennzeichen gewählt werden, selbiges ist auch direkt mittels
% "\sisetup" möglich. Die Makros können beliebig oft auftreten, es wird jedoch
% nur das letzte vor dem ersten Artikel beachtet. Sobald ein Artikel angegeben
% wurde, kann die Einstellung nicht mehr verändert werden.
%
% \DescribeMacro{\Storno}
% Mit diesem Macro kann eine Stornorechnung erstellt werden. Alle Einträge der
% Anzahl-Spalte werden Negativ dargestellt, sodass auch die Zwischensummen und
% Gesamtsummen negativ werden.
%
% \section{Beispiele}
%
% \subsection{Bestellung ohne Artikelnummern}
% Dieses Beispiel demonstriert, daß eine Vielzahl von Textauszeichnungs-
% und Formatierungsmöglichkeiten innerhalb einer \env{Rechnung}-Umgebung
% verwendet werden kann.
%
% \begin{verbatim}
% \begin{Rechnung}
% \Artikel{1}{Der Herr der Ringe
% \begin{enumerate}
% \item Die Gefährten
% \item Die zwei Türme
% \item Die Rückkehr des Königs
% \end{enumerate}
% John Ronald R. Tolkien\\
% \scriptsize Taschenbuch, Erschienen 1972}{59,80}
% \Artikel{4}{\textbf{Der kleine Hobbit}\\
% \textit{John Ronald R. Tolkien}, Taschenbuch, Erschienen 1995}{12,90}
% \Versandkosten{9,90}
% \end{Rechnung}
% \noindent Ein Verrechnungsscheck über \Gesamtsumme\ liegt bei.
% \end{verbatim}
%
% \vbox{
% \begin{Rechnung}
% \Artikel{1}{Der Herr der Ringe
% \begin{enumerate}
% \item Die Gefährten
% \item Die zwei Türme
% \item Die Rückkehr des Königs
% \end{enumerate}
% John Ronald R. Tolkien\\
% \scriptsize Taschenbuch, Erschienen 1972}{59,80}
% \Artikel{4}{\textbf{Der kleine Hobbit}\\
% \textit{John Ronald R. Tolkien}, Taschenbuch, Erschienen 1995}{12,90}
% \Versandkosten{9,90}
% \end{Rechnung}
% \noindent Ein Verrechnungsscheck über\Gesamtsumme\ liegt bei.
% }
% \subsection{Bestellung mit Artikelnummern}
%
% \begin{verbatim}
% \begin{Rechnung*}
% \Artikel{1}{3345765}{The \TeX-Book von Donald E. Knuth}{85,47}
% \Artikel{1500}{879847}{Büroklammern}{0,03}
% \Versandkosten{12,95}
% \end{Rechnung*}
% \end{verbatim}
%
% \vbox{
% \begin{Rechnung*}
% \Artikel{1}{3345765}{The \TeX-Book von Donald E. Knuth}{85,47}
% \Artikel{1500}{879847}{Büroklammern}{0,03}
% \Versandkosten{12,95}
% \end{Rechnung*}
% }
%
% \subsection{Rechnung mit Nettopreisen und Mehrwertsteuer}
%
% \begin{verbatim}
% \begin{Rechnung}[N]
% \Artikel[e]{1}{Donald E. Knuth: The \TeX-Book}{79,88}
% \Artikel{20}{Erdnüße}{0,99}
% \Versandkosten{10,00}
% \end{Rechnung}
% \noindent Im Betrag von \Gesamtsumme\ sind also
% \Mehrwertsteuer\ Mehrwertsteuer enthalten.
% \end{verbatim}
%
% \vbox{
% \begin{Rechnung}[N]
% \Artikel[e]{1}{Donald E. Knuth: The \TeX-Book}{79,88}
% \Artikel{20}{Erdnüsse}{0,85}
% \Versandkosten{10,00}
% \end{Rechnung}
% \noindent Im Betrag von \Gesamtsumme\ sind also
% \Mehrwertsteuer\ Mehrwertsteuer enthalten.
% }
%
% \subsection{Rechnung mit Nettopreisen und Mehrwertsteuer, ohne Trennlinien und Positionsnummern}
%
% \begin{verbatim}
% \begin{Rechnung}[N]
% \PositionAus
% \TrennerAus
% \Artikel[e]{1}{Donald E. Knuth: The \TeX-Book}{79,88}
% \Artikel{20}{Erdnüße}{0,99}
% \Versandkosten{10,00}
% \end{Rechnung}
% \noindent Im Betrag von \Gesamtsumme\ sind also
% \Mehrwertsteuer\ Mehrwertsteuer enthalten.
% \end{verbatim}
%
% \vbox{
% \begin{Rechnung}[N]
% \PositionAus
% \TrennerAus
% \Artikel[e]{1}{Donald E. Knuth: The \TeX-Book}{79,88}
% \Artikel{20}{Erdnüsse}{0,85}
% \Versandkosten{10,00}
% \end{Rechnung}
% \noindent Im Betrag von \Gesamtsumme\ sind also
% \Mehrwertsteuer\ Mehrwertsteuer enthalten.
% }
%
% \subsection{Rechnung mit Bruttopreisen und ausgewiesener Mehrwertsteuer}
%
% Hier mal ein Beispiel mit EUR:
%
% \begin{verbatim}
% \Euro
% \begin{Rechnung}[B]
% \Artikel[e]{1}{Donald E. Knuth: The \TeX-Book}{42,73}
% \Artikel{20}{Erdnüsse}{0,49}
% \Versandkosten{5,80}
% \end{Rechnung}
% \end{verbatim}
%
% \vbox{
% \Euro
% \begin{Rechnung}[B]
% \Artikel[e]{1}{Donald E. Knuth: The \TeX-Book}{42,73}
% \Artikel{20}{Erdnüsse}{0,49}
% \Versandkosten{5,80}
% \end{Rechnung}
% }
%
% \subsection{Stornorechnung}
%
% Stornorechnungen haben negative Einträge in der Anzahl-Spalte.
%
% \begin{verbatim}
% \Euro
% \Storno
% \begin{Rechnung}[B]
% \Artikel[e]{1}{Donald E. Knuth: The \TeX-Book}{42,73}
% \Artikel{20}{Erdnüsse}{0,49}
% \Versandkosten{5,80}
% \end{Rechnung}
% \end{verbatim}
%
% \vbox{
% \Euro
% \Storno
% \begin{Rechnung}[B]
% \Artikel[e]{1}{Donald E. Knuth: The \TeX-Book}{42,73}
% \Artikel{20}{Erdnüsse}{0,49}
% \Versandkosten{5,80}
% \end{Rechnung}
% }
%
% \cleardoublepage
%
%
%
% \section{\LaTeX-Code}
%
% \subsection{Deklarationen}
%
% Einige Zähler für Position, Gesamtsumme, Mehrwertsteuer und zur
% Parameterübergabe und temporäre Daten
% \begin{macrocode}
\newcount\@RCHcnt \newcount\@RCHsum \newcount\@RCHtmp
\newcount\@RCHmwst \newcount\@RCHmwsti \newcount\@RCHmwstii
\newcount\@RCHtmptmp \newcount\@RCHabschln \newcount\@RCHabschlb
\newcount\@RCHabschlmwst
% \end{macrocode}
%
% Die Dimensionen der Spalten
% \begin{macrocode}
\newdimen\@RCHPosWidth
\newdimen\@RCHAnzWidth
\newdimen\@RCHArtnumWidth
\newdimen\@RCHArtWidth
\newdimen\@RCHEinzelWidth
\newdimen\@RCHGesamtWidth
\@RCHPosWidth=1.3em%
\@RCHAnzWidth=3.2em%
\@RCHArtnumWidth=5em%
\@RCHEinzelWidth=4.8em%
\@RCHGesamtWidth=6.1em%
% \end{macrocode}
% Die Standardeinstellung zur Tausendergruppierung: Tausenderpunkt ab vier
% Ziffern. Dies kann in der eigenen Rechnung mittels "\sisetup" überschrieben
% werden.
% \begin{macrocode}
\sisetup{
detect-all,
locale=DE,
group-separator={.},
group-digits=integer,
group-minimum-digits=4,
input-ignore={.}
}
% \end{macrocode}
% \begin{macro}{\@RCHerm}
% Ein Schalter der das Auftauchen von ermäßigtem MwSt-Satz anzeigt.
% \begin{macrocode}
\newif\if@RCHerm
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@RCHabschl}
% Ein Schalter der das Anzeigen der Abschlagsberechnung beeinflusst
% \begin{macrocode}
\newif\if@RCHabschl
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@RCHpos}
% Ein Schalter der das Anzeigen der Pos-Spalte beeinflusst
% \begin{macrocode}
\newif\if@RCHpos
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@RCHamo}
% Ein Schalter der das Anzeigen der Anzahl- und Einzelpreisspalte beeinflusst
% \begin{macrocode}
\newif\if@RCHamo
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@RCHfirst}
% Ein Schalter der anzeigt, daß der erste Artikel eingefügt wird
% \begin{macrocode}
\newif\if@RCHfirst
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@RCHhor}
% Ein Schalter der anzeigt, ob horizontale Trennlinien zwischen den
% Artikeln eingefügt werden
% \begin{macrocode}
\newif\if@RCHhor
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@RCHartnum}
% Ein Schalter der anzeigt, ob die Artikelnr ausgegeben wird.
% \begin{macrocode}
\newif\if@RCHartnum
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@RCHinit}
% Ein Schalter der anzeigt, ob schon initialisiert wurde.
% \begin{macrocode}
\newif\if@RCHinit
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@RCHwdt}
% Breite der Spalte für die Artikelbezeichnung
% \begin{macrocode}
\newdimen\@RCHwdt
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@RCHstsi}
% normalen Mehrwertsteuersatz
% \begin{macrocode}
\newcommand*\@RCHstsi{19}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@RCHstsii}
% ermäßigter Mehrwertsteuersatz
% \begin{macrocode}
\newcommand*\@RCHstsii{7}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@RCHustsi}
% Umsatzsteuer, wenn Mehrwertsteuer nach \S19 UStG nicht ausweisbar
% \begin{macrocode}
\newcommand*\@RCHustsi{0}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@RCHstorno}
% Ein Schalter der die Rechnung als Stornorechnung kennzeichnen kann
% \begin{macrocode}
\newif\if@RCHstorno
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@ArtikelPrefix}
% aktueller Artikelprefix. Voreingestellt ist dieser leer.
% \begin{macrocode}
\newcommand*\@ArtikelPrefix{}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@AnzahlSuffix}
% aktueller Artikelsuffix. Voreingestellt ist dieser leer.
% \begin{macrocode}
\newcommand*\@AnzahlSuffix{}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@waehrung}
% aktuelle Währung. Voreingestellt ist Euro.
% \begin{macrocode}
\newcommand*\@waehrung{\texteuro}
% \end{macrocode}
% \end{macro}
%
% \subsection{Benutzermacros}
%
% \begin{macro}{\Steuersatz}
% Stellt neue Mehrwertsteuersätze (normal und ermäßigt) ein.
% \begin{macrocode}
\newcommand*\Steuersatz[2]{\def\@RCHstsi{#1}\def\@RCHstsii{#2}}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\Waehrung}
% Stellt eine beliebige Währung ein.
% \begin{macrocode}
\newcommand*\Waehrung[1]{\def\@waehrung{#1}}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\PositionEin/Aus}
% Schaltet Positionsnummern ein oder aus.
% \begin{macrocode}
\newcommand*\PositionEin[0]{\if@RCHinit\else\global\@RCHpostrue\fi}
\newcommand*\PositionAus[0]{\if@RCHinit\else\global\@RCHposfalse\fi}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\TrennerEin/Aus}
% Schaltet Positionsnummern ein oder aus.
% \begin{macrocode}
\newcommand*\TrennerEin[0]{\if@RCHinit\else\global\@RCHhortrue\fi}
\newcommand*\TrennerAus[0]{\if@RCHinit\else\global\@RCHhorfalse\fi}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\AnzahlEin/Aus}
% Schaltet Anzahlangaben und Einzelpreise ein oder aus.
% \begin{macrocode}
\newcommand*\AnzahlEin[0]{\if@RCHinit\else\global\@RCHamotrue\fi}
\newcommand*\AnzahlAus[0]{\if@RCHinit\else\global\@RCHamofalse\fi}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\TausenderTrennzeichenEin/Aus}
% Schaltet Tausendertrennung ein oder aus (z.B. mittels Punkt).
% \begin{macrocode}
\newcommand*\TausenderTrennzeichenEin[0]{\sisetup{group-digits=integer}}
\newcommand*\TausenderTrennzeichenAus[0]{\sisetup{group-digits=none}}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\TausenderTrennzeichen}
% Setzt das Tausendertrennung (z.B. auf einen Punkt).
% \begin{macrocode}
\newcommand*\TausenderTrennzeichen[1]{\sisetup{group-separator={#1}}}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\Storno}
% Schaltet Stornorechnungsmodus ein.
% \begin{macrocode}
\newcommand*\Storno{\if@RCHinit\else\global\@RCHstornotrue\fi}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\ArtikelPrefix}
% Setzt einen belibigen Prefix für das Setzen der Artikelbeschreibung. Damit
% kann beispielsweise die Schriftgröße angepasst werden.
% \begin{macrocode}
\newcommand*\ArtikelPrefix[1]{\def\@ArtikelPrefix{#1}}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\AnzahlEinheit}
% Setzt einen belibigen Suffix für die Anzahl der Artikel.
% \begin{macrocode}
\newcommand*\AnzahlEinheit[1]{\def\@AnzahlSuffix{\,#1}}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\Euro}
% Stellt die Währung auf Euro um. (benötigt textcomp)
% \begin{macrocode}
\newcommand*\Euro{\def\@waehrung{\texteuro}}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\Dollar}
% Stellt die Währung auf Dollar um. Das Währungssymbol wird links vom Betrag
% angezeigt.
% \begin{macrocode}
\newcommand*\Dollar{\def\@waehrung{\textdollar}\setLeftCurrency}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\DMark}
% Stellt die Währung auf DM um. (benötigt textcomp)
% \begin{macrocode}
\newcommand*\DMark{\def\@waehrung{D\kern-0.05em M}}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\Gesamtsumme}
% Gibt die Gesamtsumme der letzten Tabelle aus.
% \begin{macrocode}
\newcommand*\Gesamtsumme{\writeCurrency\@RCHsum}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\Mehrwertsteuer}
% Gibt die Mehrwertsteuer der letzten Tabelle aus.
% \begin{macrocode}
\newcommand*\Mehrwertsteuer{\writeCurrency\@RCHmwst}
% \end{macrocode}
% \end{macro}
%
% \subsection{Textbaustein-Macros}
%
% \begin{macro}{\LangDecimalSeparator}
% Der Dezimalwert-Seperator, voreingestellt auf das Komma (",").
% \begin{macrocode}
\newcommand*\LangDecimalSeparator{,}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\LangPos}
% Der Posten-Spaltenkopf, voreingestellt auf "Pos".
% \begin{macrocode}
\newcommand*\LangPos{Pos}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\LangCount}
% Der Anzahl-Spaltenkopf, voreingestellt auf "Anzahl".
% \begin{macrocode}
\newcommand*\LangCount{Anzahl}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\LangArticleId}
% Der Artikel-Nummer-Spaltenkopf, voreingestellt auf "Art. Nr.".
% \begin{macrocode}
\newcommand*\LangArticleId{Art.\,Nr.}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\LangDescription}
% Der Beschreibungs-Spaltenkopf, voreingestellt auf "Beschreibung".
% \begin{macrocode}
\newcommand*\LangDescription{Beschreibung}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\LangSingleItemPrice}
% Der Einzelpreis-Spaltenkopf, voreingestellt auf "Einzelpreis".
% \begin{macrocode}
\newcommand*\LangSingleItemPrice{Einzelpreis}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\LangTotalPrice}
% Der Gesamtpreis-Spaltenkopf, voreingestellt auf "Gesamtpreis".
% \begin{macrocode}
\newcommand*\LangTotalPrice{Gesamtpreis}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\LangShippingFee}
% Der Versandkosten-Posten, voreingestellt auf "Versandkosten".
% \begin{macrocode}
\newcommand*\LangShippingFee{Versandkosten}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\LangTotal}
% Der Postensumme, voreingestellt auf "Summe".
% \begin{macrocode}
\newcommand*\LangTotal{Summe}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\LangNet}
% Der Text für die Nettosumme, voreingestellt auf "Nettosumme".
% \begin{macrocode}
\newcommand*\LangNet{Nettosumme}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\LangGrossTotal}
% Der Text für die Bruttosumme, voreingestellt auf "Bruttosumme".
% \begin{macrocode}
\newcommand*\LangGrossTotal{Bruttosumme}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\LangInvoice}
% Der Text für "Rechnung", voreingestellt auf "Rechnung".
% \begin{macrocode}
\newcommand*\LangInvoice{Rechnung}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\LangTaxRate}
% Der Text für den Steuersatz.
% \begin{macrocode}
\newcommand*\LangTaxRate{Steuersatz}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\LangSalesTaxEU}
% Der Text für Umsatzsteuer-Posten bei Inner-EU-Handel, voreingestellt auf
% ``Umsatzsteuer (Innergemeinschaftliche Lieferung nach Art. 6 Abs. 1 UStG)''.
% \begin{macrocode}
\newcommand*\LangSalesTaxEU{Umsatzsteuer (Innergemeinschaftliche
Lieferung nach Art. 6 Abs. 1 UStG)}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\LangSalesTaxNoVAT}
% Der Text für Nichtausweisung der Umsatzsteuer, nach Paragraph 19,
% voreingestellt auf ``Umsatzsteuer (MwSt. nicht ausweisbar nach Paragraph 19
% UStG)''.
% \begin{macrocode}
\newcommand*\LangSalesTaxNoVAT{Umsatzsteuer (nicht ausweisbar
nach \S19 UStG, Kleinunternehmer)}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\LangSalesTaxReverseVAT}
% Der Text für Nichtausweisung der Umsatzsteuer durch Reverse-Charge-Verfahren,
% nach Paragraph 3a Abs 2 UStG, voreingestellt auf ``Umsatzsteuer wird gem.
% Paragraph 3a Abs. 2 UStG nicht erhoben. Die Steuerschuld geht auf den
% Empfänger über''.
% \begin{macrocode}
\newcommand*\LangSalesTaxReverseVAT{\parbox[t]{10cm}{Umsatzsteuer
wird gem.\S3a Abs. 2 UStG nicht erhoben. Die Steuerschuld geht
auf den Empfänger über.}}
% \end{macrocode}
% \end{macro}
%
% \subsection{Zahlenmacros}
%
% \begin{macro}{\@RCHwrite}
% Gibt einen Zähler gerundet auf zwei Nachkommastellen aus.
% (cntr/100,cntr\%100)
% \begin{macrocode}
\newcommand*\@RCHwrite[1]{
\@tempcnta=#1
\@tempcntb\@tempcnta
\divide\@tempcnta100 \expandafter\num\expandafter{\the\@tempcnta}\LangDecimalSeparator%
\multiply\@tempcnta100\advance\@tempcntb-\@tempcnta
\ifnum#1<0
\multiply\@tempcntb-1
\fi
\@tempcnta\@tempcntb\divide\@tempcnta10 \the\@tempcnta
\multiply\@tempcnta10\advance\@tempcntb-\@tempcnta
\the\@tempcntb
}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\writeCurrency}
% Gibt einen Zähler als Währungsbetrag aus.
% \begin{macrocode}
\newcommand*\writeCurrency[1]{\@RCHwrite{#1}\,\@waehrung}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\writebfCurrency}
% Gibt eine Zähler als Währungsbetrag mit fetter Zahl aus.
% \begin{macrocode}
\newcommand*\writebfCurrency[1]{{\fontseries{b}
\selectfont\writeCurrency{#1}}}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\setLeftCurrency}
% Legt fest, dass das Währungssymbol links des Betrags steht.
% \begin{macrocode}
\newcommand*\setLeftCurrency{
\renewcommand*\writeCurrency[1]{\@waehrung\@RCHwrite{##1}}
}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@readNum}
% Liest eine Zahl der Form [Zahl]*{,[Zahl]{[Zahl]}} in
% \verb|\@RCHtmp| ein
% \begin{macrocode}
\newcommand*\@readNum[1]{\@RCHtmp=0\@readA#1\relax}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@readA}
% Liest eine Zahl ein. Falls Nachkommastellen vorhanden sind,
% werden diese ebenfalls eingelesen. Nachkommastellen werden
% mit , oder . abgetrennt. Tritt eines dieser Zeichen auf, dann müssen
% auch Nachkommastellen kommen, sonst wird ein Fehler ausgegeben.
% \begin{macrocode}
\newcommand*\@readA[1]{%
\expandafter\if#1\relax\@tempcnta0\@readC\relax
\else\expandafter\if#1.\@tempcnta0
\expandafter\expandafter\expandafter\expandafter
\expandafter\expandafter\expandafter\@readB
\else\expandafter\if#1,\@tempcnta0
\expandafter\expandafter\expandafter\expandafter
\expandafter\expandafter\expandafter\@readB
\else\multiply\@RCHtmp10\advance\@RCHtmp#1
\expandafter\expandafter\expandafter\expandafter
\expandafter\expandafter\expandafter\@readA
\fi\fi\fi
}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@readB}
% Liest zwei Nachkommastellen ein. Bei 0 oder mehr als 2 Stellen
% wird eine Fehlermeldung erzeugt.
% \begin{macrocode}
\newcommand*\@readB[1]{%
\expandafter\if#1\relax\relax
\ifnum \@tempcnta > 2
\@RCHtmp0\PackageError{rechnung}{mehr als zwei
Nachkommastellen gefunden}
\else
\ifnum \@tempcnta = 2
\else
\ifnum \@tempcnta > 0
\advance\@tempcnta1
\multiply\@RCHtmp10
\@readB\relax
\else
\multiply\@RCHtmp100\PackageError{rechnung}{keine
Nachkommastellen gefunden}
\fi
\fi
\fi
\else
\advance\@tempcnta1
\multiply\@RCHtmp10
\advance\@RCHtmp#1\expandafter\@readB
\fi}
% \end{macrocode}
% \end{macro}
% \begin{macro}{\@readC}
% Liest zwei Nachkommastellen ein. Wenn weniger vorhanden sind, dann
% werden Nullen angenommen. Sind mehr als zwei Nachkommastellen vorhanden,
% erfolgt eine Fehlermeldung!
% \begin{macrocode}
\newcommand*\@readC[1]{%
\expandafter
\if#1\relax\relax
\ifnum \@tempcnta > 2
\@RCHtmp0\PackageError{rechnung}{mehr als zwei
Nachkommastellen gefunden}
\fi
\ifnum \@tempcnta < 2
\advance\@tempcnta1
\multiply\@RCHtmp10
\@readC\relax
\fi
\else
\advance\@tempcnta1
\multiply\@RCHtmp10
\advance\@RCHtmp#1\expandafter\@readC
\fi}
% \end{macrocode}
% \end{macro}
%
% \subsection{Rechnungsabschlußmacros}
%
% \begin{macro}{\writefoot}
% Gibt Fußnote mit reduziertem MwSt.Satz aus.
% \begin{macrocode}
\newcommand*{\writefoot}[0]{
\if@RCHerm
\nointerlineskip
\vskip0.5ex
\hbox to \textwidth{
\hfill\footnotesize\strut
$^*$ Artikel mit \@RCHstsii\,\% Mehrwertsteuer}
\fi}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@RCHsline}
% Erzeugt eine Zeile für Summe, Mehrwertsteuer, \dots
% \begin{macrocode}
\newcommand*\@RCHsline[2]{%
\goodbreak\nointerlineskip
\vbox{\hrule
\hbox to\textwidth{%
\strut\lsep #1\hfil
\sep
\hbox to \@RCHGesamtWidth{\hfil#2}%
\rsep}%
\hrule\vskip-0.4pt}}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@RCHohne}
% Beendet eine Tabelle ohne Angabe von Mehrwertsteuer
% \begin{macrocode}
\newcommand*\@RCHohne{
\@RCHsline{\LangTotal}{\writebfCurrency\@RCHsum}}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@RCHnetto}
% Beendet eine Tabelle mit Nettopreisen und Mehrwertsteuer.
% \begin{macrocode}
\newcommand*\@RCHnetto{
\@RCHsline{\LangNet}{\writeCurrency\@RCHsum}%
% \end{macrocode}
% \[\left\lfloor\frac{\hbox{\LangNet}\cdot\hbox{\LangTaxRate}+50}{100}\right\rfloor\]
% \begin{macrocode}
\multiply\@RCHmwsti\@RCHstsi
\ifnum\@RCHmwsti<0
\advance\@RCHmwsti-50\divide\@RCHmwsti100
\else
\advance\@RCHmwsti50\divide\@RCHmwsti100
\fi
\multiply\@RCHmwstii\@RCHstsii
\ifnum\@RCHmwstii<0
\advance\@RCHmwstii-50\divide\@RCHmwstii100
\else
\advance\@RCHmwstii50\divide\@RCHmwstii100
\fi
\@RCHmwst\@RCHmwsti\advance\@RCHmwst\@RCHmwstii
\if@RCHerm
\@RCHsline{zzgl. \@RCHstsii\,\% MwSt.}{\writeCurrency\@RCHmwstii}%
\fi
\@RCHsline{zzgl. \@RCHstsi\,\% MwSt.}{\writeCurrency\@RCHmwsti}%
\advance\@RCHsum\@RCHmwst
\hrule
\vskip\doublerulesep\vskip0.4pt
\@RCHsline{\LangTotal}{\writebfCurrency\@RCHsum}%
\if@RCHabschl
\vskip\doublerulesep\vskip10pt
\advance\@RCHabschlb\@RCHabschln
\advance\@RCHabschlmwst\@RCHabschln
\multiply\@RCHabschlmwst\@RCHstsi
\advance\@RCHmwsti50
\divide\@RCHabschlmwst100
\advance\@RCHabschlb\@RCHabschlmwst
\advance\@RCHmwst-\@RCHabschlmwst
\@RCHsline{Abschlagszahlung }{\writeCurrency\@RCHabschln}%
\@RCHsline{zzgl. \@RCHstsi\,\% MwSt. }{\writeCurrency\@RCHabschlmwst}%
\vskip\doublerulesep\vskip0.4pt
\@RCHsline{bereits gezahlt }{\writebfCurrency\@RCHabschlb}%
\advance\@RCHsum-\@RCHabschlb
\vskip\doublerulesep\vskip10pt
\@RCHsline{noch zu zahlen }{\writebfCurrency\@RCHsum}%
\fi
\hrule
\writefoot
}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@RCHkeineUST}
% Beendet eine Tabelle mit den Nettopreisen und gibt
% an, dass die Mehrwertsteuer nach \S19 UStG nicht
% ausweisbar ist.
% \begin{macrocode}
\newcommand*\@RCHkeineUST{
\@RCHsline{\LangNet}{\writeCurrency\@RCHsum}%
\@RCHsline{\LangSalesTaxNoVAT}{\writeCurrency\@RCHustsi}
\hrule
\vskip\doublerulesep\vskip0.4pt
\@RCHsline{\LangTotal}{\writebfCurrency\@RCHsum}%
\if@RCHabschl
\vskip\doublerulesep\vskip10pt
\@RCHsline{Abschlagszahlung }{\writeCurrency\@RCHabschln}%
\@RCHsline{\LangSalesTaxNoVAT}{\writeCurrency\@RCHustsi}
\advance\@RCHsum-\@RCHabschln
\vskip\doublerulesep\vskip10pt
\@RCHsline{noch zu zahlen }{\writebfCurrency\@RCHsum}%
\fi
\writefoot
}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@RCHeuUST}
% Beendet eine Tabelle mit den Nettopreisen und gibt
% an, dass die Mehrwertsteuer nach Art. 6 Abs. 1 UStG vom
% Leistungsempfänger gezahlt wird.
% \begin{macrocode}
\newcommand*\@RCHeuUST{
\@RCHsline{\LangNet}{\writeCurrency\@RCHsum}%
\@RCHsline{\LangSalesTaxEU}{\writeCurrency\@RCHustsi}
\hrule
\vskip\doublerulesep\vskip0.4pt
\@RCHsline{\LangTotal}{\writebfCurrency\@RCHsum}%
\writefoot
}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@RCHkeineUSTInt}
% Beendet eine Tabelle mit den Nettopreisen und gibt
% an, dass die Mehrwertsteuer nach \S3a Abs. 2 UStG nicht
% ausweisbar ist und die Steuerschuld auf den Empfänger übergeht
% (Reverse-Charge-Verfrahren).
% \begin{macrocode}
\newcommand*\@RCHkeineUSTInt{
\@RCHsline{\LangNet}{\writeCurrency\@RCHsum}%
\@RCHsline{\LangSalesTaxReverseVAT}{\writeCurrency\@RCHustsi}
\hrule
\vskip\doublerulesep\vskip0.4pt
\@RCHsline{\LangTotal}{\writebfCurrency\@RCHsum}%
\writefoot
}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@RCHbrutto}
% Beendet eine Tabelle mit Bruttopreisen und gibt die
% enthaltene Mehrwertsteuer an.
% \begin{macrocode}
\newcommand*\@RCHbrutto{
\@RCHsline{\LangTotal}{\writebfCurrency\@RCHsum}
% \end{macrocode}
% \[ \left\lfloor\frac{2\cdot\mbox{\LangGrossTotal}\cdot\mbox{\LangTaxRate}+
% 100+\mbox{\LangTaxRate}}{2(100+\mbox{\LangTaxRate})}\right\rfloor \]
% \begin{macrocode}
\multiply\@RCHmwsti\@RCHstsi\multiply\@RCHmwsti2%
\@tempcnta100\advance\@tempcnta\@RCHstsi
\advance\@RCHmwsti\@tempcnta
\multiply\@tempcnta2%
\divide\@RCHmwsti\@tempcnta
\multiply\@RCHmwstii\@RCHstsii\multiply\@RCHmwstii2%
\@tempcnta100\advance\@tempcnta\@RCHstsii
\advance\@RCHmwstii\@tempcnta
\multiply\@tempcnta2%
\divide\@RCHmwstii\@tempcnta
\@RCHmwst\@RCHmwsti\advance\@RCHmwst\@RCHmwstii
\if@RCHerm
\@RCHsline{inkl. erm. MwSt. \@RCHstsii\,\%}
{\writeCurrency\@RCHmwstii}%
\fi
\@RCHsline{inkl. \@RCHstsi\,\% MwSt}{\writeCurrency\@RCHmwsti}%
\writefoot
}
% \end{macrocode}
% \end{macro}
% \begin{macro}{\sep}
% Gibt eine vertikale Trennlinie innerhalb einer Zeile aus
% \begin{macrocode}
\newcommand*{\sep}[0]{\hskip\tabcolsep\vrule\hskip\tabcolsep}
\newcommand*{\rsep}[0]{\hskip\tabcolsep\vrule}
\newcommand*{\lsep}[0]{\vrule\hskip\tabcolsep}
% \end{macrocode}
% \end{macro}
% \begin{macro}{\@RCHlineX}
% Erzeugt eine Position in einer Rechnung mit Artikelnummern
% Param: Position, Anzahl, Art.-Nr.,Artikel, Einzelpreis, Gesamtpreis
% \begin{macrocode}
\newcommand*\@RCHlineX[6]{{
\goodbreak\nointerlineskip
\vbox{
\if@RCHhor
\hrule
\else
\if@RCHfirst
\hrule
\fi
\fi
\hbox to\textwidth{%
\lsep%
\if@RCHpos%
\hbox to\@RCHPosWidth{\hfil #1\strut}%
\sep
\fi% Pos-Spalte
\if@RCHamo%
\hbox to\@RCHAnzWidth{\hfil #2\strut}%
\sep
\fi% Anzahl-Spalte
\if@RCHartnum%
\hbox to\@RCHArtnumWidth{\hfil #3\strut}%
\sep%
\fi% Art-Num-Spalte
\vtop{\normalbaselines%
\noindent\rightskip=0pt plus1cm%
\hsize\@RCHwdt%
\linewidth\hsize#4\null\strut\par}%
\hfil\sep%Beschreibung
\if@RCHamo%
\hbox to\@RCHEinzelWidth{\hfil #5\strut}%
\sep%
\fi% Einzelpreis
\hbox to\@RCHGesamtWidth{\hfil #6\strut}\rsep% Gesamtpreis
}%hbox
}%vbox
}}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@ArtikelX}
% Berechnet für einen Artikel den Preis aus Anzahl und Einzelpreis,
% erhöht die Gesamtsumme und die entsprechende Mehrwertsteuersumme
% und gibt die Position aus.
% Param: [ermaessigt,] Anzahl, (X: Art.-Nr.,) Artikel, Einzelpreis
% \begin{macrocode}
\newcommand*\@Artikel[4][X]{\@ArtikelX[#1]{#2}{}{#3}{#4}}
\newcommand*\@ArtikelX[5][X]{
\initRechnung
\advance\@RCHcnt1%
\@readNum{#5}
\@RCHtmptmp=\@RCHtmp%
\@readNum{#2}
\if@RCHstorno
\multiply\@RCHtmp-1
\multiply\@RCHtmp\@RCHtmptmp
\advance\@RCHtmp-99\divide\@RCHtmp100%Aufrunden auf 2 Nachkommastellen.
\else
\multiply\@RCHtmp\@RCHtmptmp
\advance\@RCHtmp99\divide\@RCHtmp100%Aufrunden auf 2 Nachkommastellen.
\fi
\@lineBaseX[#1]{\the\@RCHcnt}{\if@RCHstorno--\fi#2\@AnzahlSuffix}{#3}{#4}{\writeCurrency\@RCHtmptmp}
}
% \end{macrocode}
% \end{macro}%
%
% \begin{macro}{\@GutschriftX}
% Fügt eine Gutschrift hinzu und gibt diese aus.
% Param: [ermaessigt,] Beschreibung, Betrag
% \begin{macrocode}
\newcommand*\@Gutschrift[3][X]{\@GutschriftX[#1]{#2}{#3}}
\newcommand*\@GutschriftX[3][X]{
\initRechnung
\advance\@RCHcnt1%
\@readNum{#3}
\multiply\@RCHtmp-1
\@lineBaseX[#1]{\the\@RCHcnt}{\null}{\null}{#2}{\null}
}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@VersandkostenX}
% Erzeugt eine Zeile für die Versandkosten, die keinen Einzelpreis und
% und keine Positionsnummer bekommt (mit Artikelnummer).
% \begin{macrocode}
\newcommand*\@Versandkosten[2][X]{\@VersandkostenX[#1]{#2}}
\newcommand*\@VersandkostenX[2][X]{
\initRechnung
\@readNum{#2}
\@lineBaseX[#1]{\null}{1}{\null}{\LangShippingFee}{#2\,\@waehrung}
}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@AbschlagszahlungX}
% Erzeugt eine Abschlagszahlung
% \begin{macrocode}
\newcommand*\@Abschlagszahlung[2][X]{\@AbschlagszahlungX[#1]{#2}}
\newcommand*\@AbschlagszahlungX[2][X]{
\initRechnung
\@readNum{#2}
\global\@RCHabschltrue
\global\advance\@RCHabschln\@RCHtmp
}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@lineBaseX}
% Gemeinsamer Code für Artikel- und Versandkostenzeilen
% \begin{macrocode}
\newcommand*\@lineBaseX[6][X]{
\global\advance\@RCHsum\@RCHtmp
\@RCHlineX{\@ArtikelPrefix#2}{\@ArtikelPrefix#3}{\@ArtikelPrefix#4}{\@ArtikelPrefix#5}{\@ArtikelPrefix#6}{\@ArtikelPrefix\writeCurrency\@RCHtmp
\expandafter\ifx#1X\else\rlap{$^*$}\fi}
\expandafter
\ifx#1X
\advance\@RCHmwsti\@RCHtmp
\else
\advance\@RCHmwstii\@RCHtmp\global\@RCHermtrue
\fi
\global\@RCHfirstfalse %horizontale Linien nur beim ersten Artikel
}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\Rechnung*}
% Beginnt eine Rechnung oder Bestellung ohne/mit Artikelnummer
% \begin{macrocode}
\newenvironment*{Rechnung}[1][X]{\RechnungStart{#1}{}}{\RechnungEnde}
\newenvironment*{Rechnung*}[1][X]{\RechnungStart{#1}{X}}{\RechnungEnde}
\newenvironment*{Bestellung}[0]{\RechnungStart{X}{}}{\RechnungEnde}
\newenvironment*{Bestellung*}[0]{\RechnungStart{X}{X}}{\RechnungEnde}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\RechnungStart}
% Kopf einer Rechnungstabelle
% \begin{macrocode}
\newcommand*{\RechnungStart}[2]{
\@RCHinitfalse
\@RCHermfalse
\@RCHabschlfalse
\@RCHmwsti0
\@RCHmwstii0
\@RCHabschln0
\@RCHabschlb0
\@RCHabschlmwst0
\def\@RCHtype{#1}%
% \end{macrocode}
% Berechne die Breite der Artikelspalte.\\
% $=\verb|\textwidth|-8\verb|\tabcolsep|-5*0.4\hbox{pt}-
% \sum\hbox{Spaltenbreite}$
% \begin{macrocode}
\@RCHcnt0
\@RCHsum0
\@RCHwdt\textwidth
\advance\@RCHwdt-\@RCHAnzWidth % Breite der Spalte Anz
\advance\@RCHwdt-\@RCHEinzelWidth% Breite der Spalte EPreis
\advance\@RCHwdt-\@RCHGesamtWidth % Breite der Spalte GPreis
\advance\@RCHwdt-2.0pt % Breite der Spaltentrenner
\advance\@RCHwdt-8\tabcolsep % Breite des Abstands zu
% den Spaltentrennern
\global\@RCHfirsttrue
\global\@RCHpostrue
\global\@RCHhortrue
\global\@RCHamotrue
% \end{macrocode}
% Param 2: Mit Artikelnummern?
% \begin{macrocode}
\ifx#2X
\global\@RCHartnumtrue
\let\Artikel\@ArtikelX
\let\Posten\@ArtikelX
\let\Versandkosten\@VersandkostenX
\let\Abschlagszahlung\@AbschlagszahlungX
\let\Gutschrift\@GutschriftX
\else
\global\@RCHartnumfalse
\let\Artikel\@Artikel
\let\Posten\@Artikel
\let\Versandkosten\@Versandkosten
\let\Abschlagszahlung\@Abschlagszahlung
\let\Gutschrift\@Gutschrift
\fi
}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\initRechnung}
% Kurze Routine, um Kopfzeile auszugeben, nachdem diverse
% Initialisierungen vorgenommen wurden. Das ist noetig, da
% einige Einstellungen innerhalb der Umgebung veraendert werden
% duerfen.
% \begin{macrocode}
\newcommand*{\initRechnung}[0]
{
\if@RCHinit
\else
% Breite wegen Anzeige der Positionsnummern korrigieren
% \begin{macrocode}
\if@RCHpos
\advance\@RCHwdt-\@RCHPosWidth
\advance\@RCHwdt-0.4pt
\advance\@RCHwdt-2\tabcolsep
\fi
% \end{macrocode}
% Breite wegen Anzeige von Anzahl und Einzelpreis korrigieren
% \begin{macrocode}
\unless\if@RCHamo
\advance\@RCHwdt+\@RCHAnzWidth
\advance\@RCHwdt+\@RCHEinzelWidth
\advance\@RCHwdt+0.8pt
\advance\@RCHwdt+4\tabcolsep
\renewcommand*{\LangTotalPrice}{Preis}
\fi
% \end{macrocode}
% Breite wegen Anzeige der Artikelnummern korrigieren
% \begin{macrocode}
\if@RCHartnum
\advance\@RCHwdt-\@RCHArtnumWidth
\advance\@RCHwdt-0.4pt
\advance\@RCHwdt-2\tabcolsep
\fi
% \end{macrocode}
% bißchen Platz über der Rechnung
% \begin{macrocode}
\vskip\abovedisplayskip
% \end{macrocode}
% Titelzeile ausgeben
% \begin{macrocode}
\@RCHlineX{\scriptsize \LangPos}%
{\scriptsize \LangCount}%
{\scriptsize \LangArticleId}%
{\scriptsize \LangDescription\hfill}%
{\scriptsize \LangSingleItemPrice}%
{\scriptsize \LangTotalPrice}
\@RCHinittrue
\fi
}
% \end{macrocode}
% \end{macro}
% \begin{macro}{\RechnungEnde}
% Footer einer Rechnung
% \begin{macrocode}
\newcommand*{\RechnungEnde}[0]
{
\hrule
\vskip\doublerulesep\vskip0.4pt
\expandafter\if\@RCHtype X \@RCHohne
\else\expandafter\if\@RCHtype N \@RCHnetto
\else\expandafter\if\@RCHtype B \@RCHbrutto
\else\expandafter\if\@RCHtype K \@RCHkeineUST
\else\expandafter\if\@RCHtype I \@RCHkeineUSTInt
\else\expandafter\if\@RCHtype E \@RCHeuUST
\else\PackageError{rechnung}{Unbekannter Rechnungstyp `\@RCHtype'}%
\fi\fi\fi\fi\fi\fi
\global\@RCHsum\@RCHsum\global\@RCHmwst\@RCHmwst
% \end{macrocode}
% bißchen Platz unter der Rechnung
% \begin{macrocode}
\vskip\belowdisplayskip
}
% \end{macrocode}
% \end{macro}
%
% \Finale
\endinput