madduck's git repository

Every one of the projects in this repository is available at the canonical URL git://git.madduck.net/madduck/pub/<projectpath> — see each project's metadata for the exact URL.

All patches and comments are welcome. Please squash your changes to logical commits before using git-format-patch and git-send-email to patches@git.madduck.net. If you'd read over the Git project's submission guidelines and adhered to them, I'd be especially grateful.

SSH access, as well as push access can be individually arranged.

If you use my repositories frequently, consider adding the following snippet to ~/.gitconfig and using the third clone URL listed for each project:

[url "git://git.madduck.net/madduck/"]
  insteadOf = madduck:

migrate from private repo to public
authormartin f. krafft <madduck@madduck.net>
Wed, 24 Apr 2013 14:50:43 +0000 (16:50 +0200)
committermartin f. krafft <madduck@madduck.net>
Wed, 24 Apr 2013 14:50:43 +0000 (16:50 +0200)
15 files changed:
.texmf/tex/latex/checkbox.sty [new file with mode: 0644]
.texmf/tex/latex/draft.sty [new file with mode: 0644]
.texmf/tex/latex/epspdffig.sty [new file with mode: 0644]
.texmf/tex/latex/href.sty [new file with mode: 0644]
.texmf/tex/latex/invoice.def [new file with mode: 0644]
.texmf/tex/latex/invoice.sty [new file with mode: 0644]
.texmf/tex/latex/koma-rotis.sty [new file with mode: 0644]
.texmf/tex/latex/memoir-rotis.sty [new file with mode: 0644]
.texmf/tex/latex/memoir-subtitle.sty [new file with mode: 0644]
.texmf/tex/latex/pdf.sty [new file with mode: 0644]
.texmf/tex/latex/realcalc.tex [new file with mode: 0644]
.texmf/tex/latex/rotis-ss.sty [new file with mode: 0644]
.texmf/tex/latex/today.sty [new file with mode: 0644]
.texmf/tex/latex/utf8.sty [new file with mode: 0644]
.var/texmf/.gitignore [new file with mode: 0644]

diff --git a/.texmf/tex/latex/checkbox.sty b/.texmf/tex/latex/checkbox.sty
new file mode 100644 (file)
index 0000000..8980ecb
--- /dev/null
@@ -0,0 +1,5 @@
+\RequirePackage{amsmath}
+\RequirePackage{amssymb}
+
+\newcommand{\uncheckedbox}{$\square$}
+\newcommand{\checkedbox}{$\text{\rlap{$\checkmark$}}\square$}
diff --git a/.texmf/tex/latex/draft.sty b/.texmf/tex/latex/draft.sty
new file mode 100644 (file)
index 0000000..44795c0
--- /dev/null
@@ -0,0 +1 @@
+\RequirePackage[light,first,timestamp,draft]{draftcopy}
diff --git a/.texmf/tex/latex/epspdffig.sty b/.texmf/tex/latex/epspdffig.sty
new file mode 100644 (file)
index 0000000..1c759ae
--- /dev/null
@@ -0,0 +1,20 @@
+\RequirePackage{pdf}
+
+\ifpdf
+  \RequirePackage[pdftex]{graphicx}
+\else
+  \RequirePackage[dvips]{graphicx}
+\fi
+
+\newcommand{\posfig}[4][width=\textwidth]
+{%
+  \ifx\flabelprefix\undefined\def\flabelprefix{figure}\fi
+  \begin{figure*}[#2]%
+    \centering%
+    \includegraphics[#1]{#3}%
+    \caption{#4}%
+    \label{\flabelprefix:#3}%
+  \end{figure*}%
+}
+
+\newcommand{\fig}[3][width=\textwidth] {\posfig[#1]{tbp}{#2}{#3}}
diff --git a/.texmf/tex/latex/href.sty b/.texmf/tex/latex/href.sty
new file mode 100644 (file)
index 0000000..7fbf814
--- /dev/null
@@ -0,0 +1,45 @@
+\RequirePackage{pdf}
+\RequirePackage{utf8}
+
+\ifpdf
+  \RequirePackage[final,unicode,pdftex,pdfcreator={pdftex}]{hyperref}
+%  \RequirePackage{ae, aecompl}
+  \pdfcompresslevel=7
+  \newcommand{\burlalt}[2]{\href{#1}{#2}}
+  \newcommand{\burl}[1]{\url{#1}}
+\else
+  \RequirePackage[final,unicode,ps2pdf,pdfcreator={dvips/ps2pdf}]{hyperref}
+  \RequirePackage{breakurl}
+\fi
+
+\hypersetup {
+  hyperindex=true,
+  backref=true,
+  pagebackref=true,
+  pageanchor=true,
+  breaklinks=true,
+  bookmarks=true,
+  bookmarksnumbered=true,
+  bookmarksopen=true,
+  bookmarksopenlevel=1,
+  linkcolor=black,
+  linkbordercolor=1 1 1,
+  urlcolor=black,
+  urlbordercolor=1 1 1,
+  anchorcolor=black,
+  citecolor=black,
+  citebordercolor=1 1 1,
+  filecolor=black,
+  filebordercolor=1 1 1,
+  pagecolor=black,
+  pagebordercolor=1 1 1,
+  menucolor=black,
+  menubordercolor=1 1 1,
+  pdfhighlight=/N,
+  pdfborder=0 0 0,
+  pdfstartview=FitB,
+%  implicit=false
+}
+
+\newcommand{\link}[1] {\burl{#1}}
+\newcommand{\email}[1] {\tterm{<}\burlalt{mailto:#1}{#1}\tterm{>}}
diff --git a/.texmf/tex/latex/invoice.def b/.texmf/tex/latex/invoice.def
new file mode 100644 (file)
index 0000000..f6be4f4
--- /dev/null
@@ -0,0 +1,319 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+%      File: invoice.def
+%      Author: Oliver Corff
+%      Date: 2003-12-12
+%      
+%      This file contains messages, labels etc. in English, German
+%      and other languages.
+%
+%      This file cannot be used alone but is called by invoice.sty
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+%      This file is the only file of this package which may be
+%      modified without renaming it.
+%
+%      Adding a new language to labels is simple. Follow the 
+%      instructions at line 275 of this file, and, please!,
+%      do not forget to send the result to
+%
+%      corff@zedat.fu-berlin.de or oliver.corff@email.de
+%
+%      Credits for language contributions given in invoice.sty.
+%
+%      Thank you very much for your support of "invoice".
+%
+%      Oliver Corff,
+%
+%      Berlin, Guangzhou, Ulaanbaatar, Zagreb, Shenyang, Shanghai 2003
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% English definitions are default. Other
+% languages are selected automatically.
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Warning messages for non-fatal situations
+%
+\def\InvoiceCompleted  {Invoice completed. Command ignored.}%
+\def\FeeSTExists       {You cannot print a fee subtotal twice!}%
+\def\ProjectEmpty      {Project empty. No subtotal possible!}%
+\def\ProjectSTExists   {You cannot print a project subtotal twice!}%
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Error messages for fatal situations
+%
+\def\InternalError                     {Package `invoice': Internal error!}%
+%
+\def\NoInvoiceNesting                  {Invoices cannot be nested.
+                                        Close this invoice first!}%
+%
+\def\InvoiceCompletedNoExpense         {Invoice closed.
+                                        No new expense item allowed.
+                                        Start a new invoice
+                                        first!}%
+%
+\def\InvoiceCompletedNoFee             {Invoice closed.
+                                        No new fee item allowed.
+                                        Start a new invoice
+                                        first!}%
+%
+\def\InvoiceCompletedNoFeeST           {Invoice closed.
+                                        No fee subtotal allowed.
+                                        Start a new invoice
+                                        first!}%
+%
+\def\InvoiceCompletedNoProject         {Invoice closed.
+                                        No new project allowed.
+                                        Start a new invoice
+                                        first!}%
+%
+\def\InvoiceCompletedNoProjectST       {Invoice closed.
+                                        No project subtotal allowed.
+                                        Start a new invoice
+                                        first!}%
+%
+\def\MissingFee                                {No fee given.
+                                        You must charge at least one fee!}%
+%
+\def\MissingInputData                  {Missing input data!}%
+%
+\def\MissingOpening                    {You must open an invoice!}%
+%
+\def\MissingProject                    {No project given.
+                                        Open a project first!}%
+%
+\def\FeeBeforeExpense                  {Fees are charged first.
+                                        Expenses follow.}%
+%
+\def\NoProjectNesting                  {Projects cannot be nested.
+                                        Close this project first!}%
+%
+\def\ProjectCompletedNoExpense         {Project closed.
+                                        No new expense item allowed.
+                                        Start a new project
+                                        first!}%
+%
+\def\ProjectCompletedNoFee             {Project closed.
+                                        No new fee item allowed.
+                                        Start a new project
+                                        first!}%
+%
+\def\KOMA                              {Users of KOMA-Script's scrlettr.cls%
+                                        ^^Jsay `invoiceno' for the scrlettr
+                                        invoice command,^^Jand `invoiceenv'
+                                        for the invoice environment!}%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Labels. These ones are available in translation, too. See below.
+%
+\def\Warning                           {Warning}%
+\def\Error                             {Error}%
+\def\Expense                           {Expense}%
+\def\Amount                            {Amount}%
+\def\Currency                          {Currency}%
+\def\Factor                            {Factor}%
+\def\Activity                          {Activity}%
+\def\Count                             {Count}%
+\def\UnitRate                          {Rate/Unit}%
+\def\Fees                              {Fees}%
+\def\VAT                               {VAT}%
+\def\Expenses                          {Expenses}%
+\def\SumFees                           {Sum \Fees}%
+\def\SumVAT                            {Sum \VAT}%
+\def\SumExpenses                       {Sum \Expenses}%
+\def\SubtotalFee                       {Subtotal \Fees}%
+\def\SubtotalExpenses                  {Subtotal \Expenses}%
+\def\SubtotalProject                   {Subtotal \Project}%
+
+\def\Total                             {Total}%
+%
+% This is German.
+%
+\ifx\l@german\undefined
+       \message{^^J(invoice) \Warning:
+               Language \string\l@german\space unknown.^^J^^J}
+\else
+\ifnum\number\invoice@language=\number\l@german
+       \def\Warning                    {Warnung}%
+       \def\Error                      {Fehler}%
+       \def\Expense                    {Auslage}%
+       \def\Amount                     {Betrag}%
+       \def\Currency                   {W\"ahrung}%
+       \def\Factor                     {Faktor}%
+       \def\Activity                   {Aktivit\"at}%
+       \def\Count                      {Anzahl}%
+       \def\UnitRate                   {Rate/Einheit}%
+       \def\Fees                       {Honorare}%
+       \def\VAT                        {MWSt.}%
+       \def\Expenses                   {Auslagen}%
+       \def\SumFees                    {Summe \Fees}%
+       \def\SumVAT                     {Summe \VAT}%
+       \def\SumExpenses                {Summe \Expenses}%
+       \def\SubtotalFee                {Zwischensumme \Fees}%
+       \def\SubtotalExpenses           {Zwischensumme \Expenses}%
+       \def\SubtotalProject            {Zwischensumme \Project}%
+       \def\Total                      {Gesamtsumme}%
+\fi\fi
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% This is Dutch.
+%
+\ifx\l@dutch\undefined
+       \message{^^J(invoice) \Warning:
+               Language \string\l@dutch\space unknown.^^J^^J}
+\else
+\ifnum\number\invoice@language=\number\l@dutch
+       \def\Warning                    {Waarschuwing}%
+       \def\Error                      {Fout}% 
+       \def\Expense                    {Onkosten}% 
+       \def\Amount                     {Bedrag}% 
+       \def\Currency                   {Valuta}% 
+       \def\Factor                     {Faktor}% 
+       \def\Activity                   {Activiteit}% 
+       \def\Count                      {Aantal}% 
+       \def\UnitRate                   {Prijs/Eenheid}% 
+       \def\Fees                       {Honorarium}% 
+       \def\VAT                        {BTW}% 
+       \def\Expenses                   {Onkosten}% 
+       \def\SumFees                    {Totaal \Fees}% 
+       \def\SumVAT                     {Totaal \VAT}% 
+       \def\SumExpenses                {Totaal \Expenses}% 
+       \def\SubtotalFee                {Subtotaal \Fees}% 
+       \def\SubtotalExpenses           {Subtotaal \Expenses}% 
+       \def\SubtotalProject            {Subtotaal \Project}% 
+       \def\Total                      {Totaal}% 
+\fi\fi
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% This is French.
+%
+\ifx\l@french\undefined
+       \message{^^J(invoice) \Warning:
+               Language \string\l@french\space unknown.^^J^^J}
+\else
+\ifnum\number\invoice@language=\number\l@french
+       \def\Warning                    {Avertissement}%
+       \def\Error                      {Erreur}%
+       \def\Expense                    {D\'epense}%
+       \def\Amount                     {Montant}%
+       \def\Currency                   {Devise}%
+       \def\Factor                     {Facteur}%
+       \def\Activity                   {Activit\'e}%
+       \def\Count                      {Quantit\'e}%
+       \def\UnitRate                   {Prix/Unit\'e}%
+       \def\Fees                       {Honoraires}%
+       \def\VAT                        {TVA}%
+       \def\Expenses                   {D\'epenses}%
+       \def\SumFees                    {Total \Fees}%
+       \def\SumVAT                     {Total \VAT}%
+       \def\SumExpenses                {Total \Expenses}%
+       \def\SubtotalFee                {Sous-Total \Fees}%
+       \def\SubtotalExpenses           {Sous-Total \Expenses}%
+       \def\SubtotalProject            {Sous-Total \Project}%
+       \def\Total                      {Total}%
+\fi\fi
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% This is Afrikaans.
+%
+\ifx\l@afrikaans\undefined
+       \message{^^J(invoice) \Warning:
+               Language \string\l@afrikaans\space unknown.^^J^^J}
+\else
+\ifnum\number\invoice@language=\number\l@afrikaans
+       \def\Warning                    {Waarskuwing}  
+       \def\Error                      {Fout}  
+       \def\Expense                    {Onkostes}  
+       \def\Amount                     {Bedrag}  
+       \def\Currency                   {Valuta}  
+       \def\Factor                     {Faktor}  
+       \def\Activity                   {Aktiwiteit}  
+       \def\Count                      {Aantal ure}  
+       \def\UnitRate                   {Tarief}  
+       \def\Fees                       {Fooie}  
+       \def\VAT                        {BTW}  
+       \def\Expenses                   {Uitgawes}  
+       \def\SumFees                    {Totaal Fooie}  
+       \def\SumVAT                     {Totaal BTW}  
+       \def\SumExpenses                {Totaal Uitgawes}  
+       \def\SubtotalFee                {Subtotaal \Fees} 
+       \def\SubtotalExpenses           {Subtotaal \Expenses}  
+       \def\SubtotalProject            {Subtotaal \Project}  
+       \def\Total                      {Totaal}  
+\fi\fi
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% This is Italian.
+%
+\ifx\l@italian\undefined
+       \message{^^J(invoice) \Warning:
+               Language \string\l@italian\space unknown.^^J^^J}
+\else
+\ifnum\number\invoice@language=\number\l@italian
+       \def\Warning                    {Avvertenza}%
+       \def\Error                      {Errore}%
+       \def\Expense                    {Spesa}%
+       \def\Amount                     {Ammontare}%
+       \def\Currency                   {Valuta}%
+       \def\Factor                     {Fattore}%
+       \def\Activity                   {Attivit\'a}%
+       \def\Count                      {Quantit\'a}%
+       \def\UnitRate                   {Prezzo/Unit\'a}%
+       \def\Fees                       {Onorario}%
+       \def\VAT                        {IVA}%
+       \def\Expenses                   {Spese}%
+       \def\SumFees                    {Totale onorario}%
+       \def\SumVAT                     {Totale IVA}%
+       \def\SumExpenses                {Totale spese}%
+       \def\SubtotalFee                {Subtotale onorario}%
+       \def\SubtotalExpenses           {Subtotale spese}%
+       \def\SubtotalProject            {Subtotale progetto}%
+       \def\Total                      {Totale}%
+\fi\fi
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% 
+% How to add new label languages to the `invoice' package:
+%
+% 1. Copy all following lines after this explanation
+%    and insert them above this comment.
+%
+% 2. Remove all comment symbols at the beginning of the lines.
+%
+% 3. Fill the empty parentheses {} with the appropriate
+%    translations.
+%
+% 4. Enter the correct internal language name used by LaTeX2e
+%    into the condition of the \ifnum clause.
+%
+% 5. Please do not forget to mail the resulting file to
+%    corff@zedat.fu-berlin.de or oliver.corff@email.de
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Name correct language name here --v--
+% and   --v--!
+%\ifx\l@german\undefined
+%      \message{^^J(invoice) \Warning:
+%              Language \string\l@german\space unknown.^^J^^J}
+%\else
+%\ifnum\number\invoice@language=\number\l@german
+%      \def\Warning                    {} % Enter translations here!
+%      \def\Error                      {} % 
+%      \def\Expense                    {} % 
+%      \def\Amount                     {} % 
+%      \def\Currency                   {} % 
+%      \def\Factor                     {} % 
+%      \def\Activity                   {} % 
+%      \def\Count                      {} % 
+%      \def\UnitRate                   {} % 
+%      \def\Fees                       {} % 
+%      \def\VAT                        {} % 
+%      \def\Expenses                   {} % 
+%      \def\SumFees                    {} % 
+%      \def\SumVAT                     {} % 
+%      \def\SumExpenses                {} % 
+%      \def\SubtotalFee                {} % 
+%      \def\SubtotalExpenses           {} % 
+%      \def\SubtotalProject            {} % 
+%      \def\Total                      {} % 
+%\fi
diff --git a/.texmf/tex/latex/invoice.sty b/.texmf/tex/latex/invoice.sty
new file mode 100644 (file)
index 0000000..082c61c
--- /dev/null
@@ -0,0 +1,1012 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%        Datei: invoice.sty
+%        Autor: Oliver Corff
+%      Contact: corff@zedat.fu-berlin.de, oliver.corff@email.de
+%        Datum: December 16, 2003
+%      Version: 0.7
+%    Copyright: Ulaanbaatar, Beijing, Berlin, Zagreb, Shenyang, Shanghai
+%  Description: This collection of macros provides
+%               tools for generating complex invoices
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Corrections, suggestions and contributions by:
+%%%%%%
+% Jacopo, May 2003
+% e-mail: jacopo@
+%
+%   Contributed labels in Italian.
+%
+%%%%%%
+% O. Corff, July 2003 
+% 
+%   fixed one nasty spacing bug, simplified internal table 
+%   construction (table now has five instead of six columns,
+%   the second of which was never used).
+%
+%%%%%%
+% Johann Spies, January 21, 2002
+% e-mail: jspies@sun.ac.za
+%
+%   Hinted that \Subtotal Project should show the project name
+%   rather than just `Project'.
+%
+%   Contributed labels in Afrikaans.
+%
+%%%%%%
+% Robin Fairbairns, December 6, 2001
+% 
+%   Hinted that the dollar sign can also be printed by saying
+%   \string$.
+%
+%%%%%%
+% Vincent Tougait, France, November 27, 2001
+%
+%   Pointed out that fractions of VAT percents were not allowed.
+%   Bugfix on December 06, 2001
+%
+%%%%%%
+% Fred Donck, The Hague, The Netherlands, October, 2001
+% e-mail: fd0@donck.com
+%
+% Dutch labels
+%
+%%%%%%
+% Ian Wormsbecker, October 31, 2001
+%
+%   Skips the VAT lines if VAT=0
+%   Noticed that the terminal message will not accept a Dollar sign.
+%   The only workaround is to say \char`$ in \begin{invoice}{}
+%
+%%%%%%
+% Fred Donck, The Hague, The Netherlands, Sept 18, 2001
+% e-mail: fd0@donck.com
+%
+% fixed some minor issues:
+%   real arithmetic will use integer intermediate values, so
+%   some calculations failed with the \Fee{title}{rate}{amount}
+%   where \rate is not an integer
+%
+%   another fix is that in my opinion the VAT line should be 
+%   printed also even though only one project is specified
+%
+%   third fix is that the subtotal-line should not be printed 
+%   on a project with only one \Fee line
+%
+%%%%%%
+% Jacco Kok (fixed some labels),
+%
+%%%%%%
+% Thilo Barth (discussed alternative names and command clashes
+%      with KOMA Script class scrlettr.cls),
+%
+%%%%%%
+% Robert Inder (discussed general issues)
+%
+% were gladly and gratefully received and accepted.
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% -------------------     identification     -------------------
+%
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{invoice}[2003/12/16]
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% -------------------    language options    -------------------
+%
+%
+\newcount\invoice@language
+\let\invoice@language=\language
+%
+\ifx\l@english\undefined       \newlanguage\l@english \fi
+\ifx\l@german\undefined                \newlanguage\l@german \fi
+\ifx\l@dutch\undefined         \newlanguage\l@dutch \fi
+\ifx\l@french\undefined                \newlanguage\l@french \fi
+\ifx\l@afrikaans\undefined     \newlanguage\l@afrikaans \fi
+\ifx\l@italian\undefined       \newlanguage\l@italian \fi
+%
+\DeclareOption{english}{\invoice@language=\number\l@english}
+\DeclareOption{german}{\invoice@language=\number\l@german}
+\DeclareOption{dutch}{\invoice@language=\number\l@dutch}
+\DeclareOption{french}{\invoice@language=\number\l@french}
+\DeclareOption{afrikaans}{\invoice@language=\number\l@afrikaans}
+\DeclareOption{italian}{\invoice@language=\number\l@italian}
+%
+\ProcessOptions
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% -------------------      initial code      -------------------
+%
+\RequirePackage{ifthen}
+\RequirePackage{longtable}
+\RequirePackage{calc}
+\input{realcalc}
+\input{invoice.def}
+%
+\newcommand{\InvoiceVersion}{0.7}%
+\newcounter{Fee}               %
+\newcounter{VAT}               %
+%\newcounter{VAT@rate}         %
+\newcounter{Expenses}          %
+\newcounter{Discount}          % Discount item
+\newcounter{Total}             %
+\newcounter{Project}           %
+%
+\newcounter{Fee@ctr}           % Number of fees per project
+                               % no subtotal will be printed in case of
+                               % value < 2
+%
+\newcounter{Expense@ctr}       % Number of expense items per project
+                               % no subtotal will be printed in case of
+                               % value < 2
+%
+\newcounter{One@Fee}           % Individual Fee
+\newcounter{One@VAT}           % Individual VAT
+\newcounter{One@Expense}       % Individual Expense
+%
+\newcounter{ST@Fee}            % Subtotal Fee
+\newcounter{ST@VAT}            % Subtotal VAT
+\newcounter{ST@Expenses}       % Subtotal Expenses
+\newcounter{ST@Project}                % Subtotal Project
+%
+\gdef\Flag{0}%                 % State 0: Invoice not started yet
+                               % State 1: Start invoice
+                               % State 2: Start project, print title
+                               % State 3: Fee Item
+                               % State 4: Print Subtotal Fee
+                               % State 5: Expense Item
+                               % State 6: Print Subtotal Expenses
+                               % State 7: Print Subtotal Project
+                               % State 8: Print Total, Close invoice
+%
+\gdef\Project{}%               % Empty Project Name
+\def\Null{0}%
+\newif\ifVATnonzero
+% \def\BC{Euro}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%\newcommand{\my@message}[1]{\message{^^J#1^^J^^J}}
+\newcommand{\error@message}[1]{\errmessage{^^J\Error: #1^^J^^J}}
+\newcommand{\warning@message}[1]{\message{^^J\Warning: #1^^J^^J}}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifx\invoice\undefined                 % False if KOMA Script scrlettr.cls
+       \def\my@invoice{invoice}        % loaded. In this case one may say
+\else                                  % "invoice". If true, the environ-
+       \def\my@invoice{invoiceenv}     % ment is renamed to "invoiceenv"
+       \let\invoiceno\invoice          % and the scrlettr macro is renamed
+       \def\invoice#1{%                % to "invoiceno". Thank you, Thilo,
+               \error@message{\KOMA}}  % for this hint!
+\fi                                    %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newenvironment{\my@invoice}[2]{%
+       \setcounter{Fee@ctr}{0}%                % reset counter
+       \setcounter{Expense@ctr}{0}%            % reset counter
+       \def\Null{0}%
+       \setcounter{Project}{0}%
+       \ST@Reset\Total@Reset%
+       \def\BC{#1}%
+       \def\VAT@rate{#2}%
+       \ifx\VAT@rate\Null\VATnonzerofalse\else\VATnonzerotrue\fi%
+       \ifVATnonzero
+               \message{^^J^^JVAT is not zero!^^J^^J}%
+       \else
+               \message{^^J^^JVAT is zero!^^J^^J}%
+       \fi%
+       % The VAT is: \the\VAT@rate % Debugging Diagnostics only
+       \parindent=0cm%
+       \ifcase\Flag % 0: Invoice not started yet
+               %
+               \gdef\Flag{1}%
+               \begin{center}%
+               \begin{longtable}{p{5cm}lrrr}%
+               %
+       \else \error@message{\NoInvoiceNesting}%
+       \fi}%
+% At the end of environment: 
+% Yields state 8->0, Close and complete invoice, finish tables, etc.
+{% 
+       \ifcase\Flag % 0: Invoice not started yet
+               %
+               \error@message{\MissingOpening}%
+               %
+       %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+       \or     % 1: Start invoice
+               %
+               \error@message{\MissingProject}%
+               %
+       %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+       \or     % 2: Start project, print title
+               %
+               \error@message{\MissingInputData}%
+               %
+       %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+       \or     % 3: Print remuneration item
+               %
+               \ifnum\theProject>0 \ST@Fee\ST@Project\fi%
+               \Tot@l%
+               %
+       %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+       \or     % 4: Print subtotal remuneration
+               %
+               \ifnum\theProject>1 \ST@Project\fi%
+               \Tot@l%
+               %
+       %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+       \or     % 5: Expense item
+               %
+               \ifnum\theProject>1 \ST@Expenses\ST@Project\fi%
+               \Tot@l%
+               %
+       %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+       \or     % 6: Print subtotal expenses
+               %
+               \ifnum\theProject>1 \ST@Project\fi%
+               \Tot@l%
+               %
+       %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+       \or     % 7: Print subtotal project
+               %
+               \Tot@l%
+               %
+       %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+       \or     % 8: Print total, close invoice
+               %
+               \warning@message{\InvoiceCompleted}%
+               %
+       \else \error@message{\InternalError}%
+       \fi%
+       \gdef\Flag{0}%
+}%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newcommand{\ProjectTitle}[1]{% Yields state 2: Start Project
+       %\gdef\NewProject{#1}
+       %
+       \ifcase\Flag% 0: Invoice not started yet
+       %
+       %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+       \or     % 1: Start invoice
+               %
+               \Project@Title{#1}%
+               %
+       %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+       \or     % 2: Start project, print title
+               %
+               \error@message{\NoProjectNesting}%
+               %
+       %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+       \or     % 3: Print remuneration item
+               %
+               \ST@Fee%
+               \ST@Project%
+               \Project@Title{#1}%
+               %
+       %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+       \or     % 4: Print subtotal remuneration
+               %
+               \ST@Project%
+               \Project@Title{#1}%
+               %
+       %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+       \or     % 5: Expense item
+               %
+               \ST@Expenses%
+               \ST@Project%
+               \Project@Title{#1}%
+               %
+       %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+       \or     % 6: Print subtotal expenses
+               %
+               \ST@Project%
+               \Project@Title{#1}%
+               %
+       %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+       \or     % 7: Print subtotal project
+               %
+               \Project@Title{#1}%
+               %
+       %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+       \or     % 8: Print total, close invoice
+               %
+               \error@message{\InvoiceCompletedNoProject}%
+               %
+       \else \error@message{\InternalError}%
+       \fi%
+       \setcounter{Fee@ctr}{0}%                % reset counter
+       \setcounter{Expense@ctr}{0}%            % reset counter
+}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newcommand{\Fee}[3]{% Yields state 3, Print Fee Item
+       %
+       % #1 Contents
+       % #2 Fee per Unit
+       % #3 Unit Count
+       %
+       \ifcase\Flag % 0: Invoice not started yet
+               \error@message{\MissingOpening}%
+               %
+       %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+       \or     % 1: Start invoice
+               %
+               \error@message{\MissingProject}%
+               %
+       %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+       \or     % 2: Start project, print title
+               %
+               \Fee@Title%
+               \Fee@Line{#1}{#2}{#3}%
+               %
+       %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+       \or     % 3: Print remuneration item
+               %
+               \Fee@Line{#1}{#2}{#3}%
+               %
+       %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+       \or     % 4: Print subtotal remuneration
+               %
+               \warning@message{\FeeSTExists}%
+               %
+       %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+       \or     % 5: Expense item
+               %
+               \error@message{\FeeBeforeExpense}%
+               %
+       %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+       \or     % 6: Print subtotal expenses
+               %
+               \error@message{\FeeBeforeExpense}%
+               %
+       %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+       \or     % 7: Print subtotal project
+               %
+               \error@message{\ProjectCompletedNoFee}%
+               %
+       %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+       \or     % 8: Print total, close invoice
+               %
+               \error@message{\InvoiceCompletedNoFee}%
+               %
+               %
+       \else \error@message{\InternalError}%
+       \fi%
+}%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newcommand{\STFee}{% Yields state 4, print subtotal remuneration
+       %
+       \ifcase\Flag % 0: Invoice not started yet
+               %
+               \error@message{\MissingOpening}%
+               %
+       %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+       \or     % 1: Start invoice
+               %
+               \error@message{\MissingProject}%
+               %
+       %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+       \or     % 2: Start project, print title
+               %
+               \error@message{\MissingFee}%
+               %
+       %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+       \or     % 3: Print remuneration item
+               %
+               \Print@ST@Fees%
+               %
+       %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+       \or     % 4: Print subtotal remuneration
+               %
+               \warning@message{\FeeSTExists}%
+               %
+       %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+       \or     % 5: Expense item
+               %
+               \error@message{\FeeBeforeExpense}%
+               %
+       %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+       \or     % 6: Print subtotal expenses
+               %
+               \error@message{\FeeBeforeExpense}%
+               %
+       %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+       \or     % 7: Print subtotal project
+               %
+               \error@message{\ProjectCompletedNoFee}%
+               %
+       %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+       \or     % 8: Print total, close invoice
+               %
+               \error@message{\ProjectCompletedNoFee}%
+               %
+       \else \error@message{\InternalError}%
+       \fi%
+}%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newcommand{\EBC}[2]{% Yields state 5: Expenses in BaseCurrency 
+       %
+       % #1 Contents und Datum
+       % #2 Amount in BaseCurrency
+       %
+       \ifcase\Flag % 0: Invoice not started yet
+               %
+               \error@message{\MissingOpening}%
+               %
+       %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+       \or     % 1: Start invoice
+               %
+               \error@message{\MissingProject}%
+               %
+       %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+       \or     % 2: Start project, print title
+               %
+               \Expense@Title%
+               \Expense@BaseCurrency{#1}{#2}%
+               %
+       %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+       \or     % 3: Print remuneration item
+               %
+               \ST@Fee%
+               \Expense@Title%
+               \Expense@BaseCurrency{#1}{#2}%
+               %
+       %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+       \or     % 4: Print subtotal remuneration
+               %
+               \Expense@Title%
+               \Expense@BaseCurrency{#1}{#2}%
+               %
+       %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+       \or     % 5: Expense item
+               %   
+               \Expense@BaseCurrency{#1}{#2}%
+               %
+       %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+       \or     % 6: Print subtotal expenses
+               %
+       %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+       \or     % 7: Print subtotal project
+               %
+       %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+       \or     % 8: Print total, close invoice
+               %
+               \error@message{\InvoiceCompletedNoExpense}%
+               %
+       \else \error@message{\InternalError}%
+       \fi%
+}%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newcommand{\EBCi}[2]{% Yields state 5: Expenses in BaseCurrency 
+       %                               But, unlike base form (no
+       %                               'invisible') this version does
+       %                               not state the item, it only
+       %                               the total amount of expenses. 
+       %
+       % #1 Contents und Datum
+       % #2 Amount in BaseCurrency
+       %
+       \ifcase\Flag % 0: Invoice not started yet
+               %
+               \error@message{\MissingOpening}%
+               %
+       %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+       \or     % 1: Start invoice
+               %
+               \error@message{\MissingProject}%
+               %
+       %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+       \or     % 2: Start project, print title
+               %
+               %\Expense@Title%
+               \Expense@Base@Currency{#1}{#2}%
+               %
+       %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+       \or     % 3: Print remuneration item
+               %
+               \ST@Fee%
+               %\Expense@Title%
+               \Expense@Base@Currency{#1}{#2}%
+               %
+       %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+       \or     % 4: Print subtotal remuneration
+               %
+               %\Expense@Title%
+               \Expense@Base@Currency{#1}{#2}%
+               %
+       %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+       \or     % 5: Expense item
+               %   
+               \Expense@Base@Currency{#1}{#2}%
+               %
+       %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+       \or     % 6: Print subtotal expenses
+               %
+       %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+       \or     % 7: Print subtotal project
+               %
+       %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+       \or     % 8: Print total, close invoice
+               %
+               \error@message{\InvoiceCompletedNoExpense}%
+               %
+       \else \error@message{\InternalError}%
+       \fi%
+}%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newcommand{\EFC}[5]{% Yields state 5: Expenses in ForeignCurrency
+       %
+       % #1 Contents und Datum
+       % #2 Currency
+       % #3 Amount
+       % #4 Exchange Rate
+       % #5 Amount Zielwaehrung
+       %
+       % Usage:
+       % 1. {Contents}{ForeignCurrency}{ExchangeRate}{}
+       % 2. {Contents}{ForeignCurrency}{}{BaseCurrency}
+       % 3. {Contents}{ForeignCurrency}{ExchangeRate}{BaseCurrency}
+       %
+       \ifcase\Flag % 0: Invoice not started yet
+               %
+               \error@message{\MissingOpening}%
+               %
+       %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+       \or     % 1: Start invoice
+               %
+               \error@message{\MissingProject}%
+               %
+       %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+       \or     % 2: Start project, print title
+               %
+               \Expense@Title%
+               \Expense@ForeignCurrency{#1}{#2}{#3}{#4}{#5}%
+               %
+       %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+       \or     % 3: Print remuneration item
+               %
+               \ST@Fee%
+               \Expense@Title%
+               \Expense@ForeignCurrency{#1}{#2}{#3}{#4}{#5}%
+               %
+       %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+       \or     % 4: Print subtotal remuneration
+               %
+               \Expense@Title%
+               \Expense@ForeignCurrency{#1}{#2}{#3}{#4}{#5}%
+               %
+       %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+       \or     % 5: Expense item
+               %
+               \Expense@ForeignCurrency{#1}{#2}{#3}{#4}{#5}%
+               %
+       %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+       \or     % 6: Print subtotal expenses
+               %
+               \error@message{\ProjectCompletedNoExpense}%
+               %
+       %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+       \or     % 7: Print subtotal project
+               %
+               \error@message{\ProjectCompletedNoExpense}%
+               %
+       %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+       \or     % 8: Print total, close invoice
+               %
+               \error@message{\InvoiceCompletedNoExpense}%
+               %
+       \else \error@message{\InternalError}%
+       \fi%
+}%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newcommand{\EFCi}[5]{% Yields state 5: Expenses in ForeignCurrency
+       %                               But, unlike base form (no
+       %                               'invisible') this version does
+       %                               not state the item, it only
+       %                               the total amount of expenses. 
+       %
+       % #1 Contents und Datum
+       % #2 Currency
+       % #3 Amount
+       % #4 Exchange Rate
+       % #5 Amount Zielwaehrung
+       %
+       % Usage:
+       % 1. {Contents}{ForeignCurrency}{ExchangeRate}{}
+       % 2. {Contents}{ForeignCurrency}{}{BaseCurrency}
+       % 3. {Contents}{ForeignCurrency}{ExchangeRate}{BaseCurrency}
+       %
+       \ifcase\Flag % 0: Invoice not started yet
+               %
+               \error@message{\MissingOpening}%
+               %
+       %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+       \or     % 1: Start invoice
+               %
+               \error@message{\MissingProject}%
+               %
+       %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+       \or     % 2: Start project, print title
+               %
+               \Expense@Title%
+               \Expense@Foreign@Currency{#1}{#2}{#3}{#4}{#5}%
+               %
+       %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+       \or     % 3: Print remuneration item
+               %
+               \ST@Fee%
+               % \Expense@Title%
+               \Expense@Foreign@Currency{#1}{#2}{#3}{#4}{#5}%
+               %
+       %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+       \or     % 4: Print subtotal remuneration
+               %
+               % \Expense@Title%
+               \Expense@Foreign@Currency{#1}{#2}{#3}{#4}{#5}%
+               %
+       %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+       \or     % 5: Expense item
+               %
+               \Expense@Foreign@Currency{#1}{#2}{#3}{#4}{#5}%
+               %
+       %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+       \or     % 6: Print subtotal expenses
+               %
+               \error@message{\ProjectCompletedNoExpense}%
+               %
+       %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+       \or     % 7: Print subtotal project
+               %
+               \error@message{\ProjectCompletedNoExpense}%
+               %
+       %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+       \or     % 8: Print total, close invoice
+               %
+               \error@message{\InvoiceCompletedNoExpense}%
+               %
+       \else \error@message{\InternalError}%
+       \fi%
+}%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newcommand{\STExpenses}{% Yields state 6: Ausgabe der ST Expenses
+       %
+       \ifcase\Flag % 0: Invoice not started yet
+               %
+               \error@message{\MissingOpening}%
+               %
+       %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+       \or     % 1: Start invoice
+               %
+               \error@message{\MissingProject}%
+               %
+       %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+               %
+       \or     % 2: Start project, print title
+               %
+       %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+               %
+       \or     % 3: Print remuneration item
+               %
+       %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+               %
+       \or     % 4: Print subtotal remuneration
+               %
+       %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+       \or     % 5: Expense item
+               %
+               \Print@ST@Expenses%
+               %
+       %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+       \or     % 6: Print subtotal expenses
+               %
+               \warning@message{\ProjectCompletedNoExpense}%
+               %
+       %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+       \or     % 7: Print subtotal project
+               %
+       %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+       \or     % 8: Print total, close invoice
+               %
+               \error@message{\InvoiceCompletedNoExpense}%
+               %
+       \else \error@message{\InternalError}%
+       \fi%
+}%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newcommand{\STProject}{% Yields state 7: Ausgabe der ST Project
+       %
+       \ifcase\Flag % 0: Invoice not started yet
+               %
+               \error@message{\MissingOpening}%
+               %
+       %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+       \or     % 1: Start invoice
+               %
+               \error@message{\MissingProject}%
+               %
+       %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+       \or     % 2: Start project, print title
+               %
+               \warning@message{\ProjectEmpty}%
+               %
+       %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+       \or     % 3: Print remuneration item
+               %
+               \ST@Fee%
+               \ST@Project%
+               %
+       %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+       \or     % 4: Print subtotal remuneration
+               %
+               \ST@Project%
+               %
+       %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+       \or     % 5: Expense item
+               %
+               \ST@Expenses%
+               \ST@Project%
+               %
+       %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+       \or     % 6: Print subtotal expenses
+               %
+               \ST@Project%
+               %
+       %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+       \or     % 7: Print subtotal project
+               %
+               \warning@message{\ProjectSTExists}%
+               %
+       %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+       \or     % 8: Print total, close invoice
+               %
+               \error@message{\InvoiceCompletedNoProjectST}%
+               %
+       \else \error@message{\InternalError}%
+       \fi%
+}%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newcommand{\Discount}[2]{%    Yields no particular state.
+       %                       Inserts discount in project total,
+       %                       names discount reason
+       %                       and amount of discount
+       %
+       \gdef\Discount@Contents{#1}%
+       \setcounter{Discount}{100 * \real{-#2}}%
+}%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newcommand{\Total@Reset}{%
+       \setcounter{Fee}{0}%
+       \setcounter{VAT}{0}%
+       \setcounter{Expenses}{0}%
+       \setcounter{Total}{0}%
+}%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newcommand{\ST@Reset}{%
+       \setcounter{ST@Fee}{0}%
+       \setcounter{ST@VAT}{0}%
+       \setcounter{ST@Expenses}{0}%
+       \setcounter{ST@Project}{0}%
+}%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newcommand{\Print@Value}[1]{%
+       \Rmul\r#1{0.01}%% <- Reduce to BaseCurrency
+       \Rtrunc\r{2}\r% % <- Truncate to two digits
+       \r%             % <- Output data!
+}%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newcommand{\Message@Value}[1]{%
+       \Rmul\r#1{0.01}%% <- Reduce to BaseCurrency
+       \Rtrunc\r{2}\r% % <- Truncate to two digits
+       \message{\r}%   % <- Output data!
+}%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newcommand{\Project@Title}[1]{%
+       % Internal command called by \ProjectTitle.
+       %
+       \gdef\Flag{2}%
+       \gdef\Project{#1}%
+       \ST@Reset\addtocounter{Project}{1}%
+       \ifnum\theProject>1 \\\\\else\\\fi%
+       \multicolumn{5}{c}{\textbf{\large#1}}\\%
+}%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newcommand{\Fee@Title}{%
+       \\
+       \noindent\textbf{\Activity}&&\UnitRate&\Count&\Amount\ (\BC)\\
+       \hline%
+}%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newcommand{\Fee@Line}[3]{%
+       %
+       % #1 Contents
+       % #2 Charged Fee per Unit
+       % #3 Count
+       %
+       % Internal command, called by \Fee.
+       %
+       \gdef\Flag{3}%
+       %
+       #1                      &       &#2     &#3 &
+%
+%   next is reversed to allow real arithmetic.
+%   intermediate results are stored in integer format, so calculations are
+%   incorrect in case #2 is a real.
+%   fixed by exchanging the 1 and the 100
+%
+               \setcounter{One@Fee}{100 * \real{#2} * \real{#3} * 1}%
+%
+               \addtocounter{ST@Fee}{\theOne@Fee}%
+               \addtocounter{Fee}{\theOne@Fee}%
+               \addtocounter{Fee@ctr}{1}%          increase counter with 1
+               \Print@Value{\theOne@Fee}\\%
+}%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newcommand{\ST@Fee}{%
+       % \gdef\Flag{4}%
+       \ifnum\theST@Fee>0%
+           \ifthenelse{\theFee@ctr>1} %            % if more than 1 \Fee line
+               {\Print@ST@Fees%                                        % print it, else
+               }%
+           {}%                                                                 % do nothing
+               \ifVATnonzero\ST@VAT@Printout\fi%
+       \fi%
+}%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newcommand{\Print@ST@Fees}{%
+       \gdef\Flag{4}%
+       \SubtotalFee &  &       &       &%      print the subtotal of fees
+               \Print@Value{\theST@Fee}\\%
+}%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newcommand{\ST@VAT@Printout}{%
+               \VAT\ (\VAT@rate\%)      &      &       &       &%
+                       \setcounter{ST@VAT}{\theST@Fee * \real{\VAT@rate} / 100}%
+                               \Print@Value{\theST@VAT}\\%
+}%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newcommand{\Expense@BaseCurrency}[2]{%
+       #1                      & \BC           &       &       &%
+       \gdef\Flag{5}%
+       \Rmul\r{100}{#2}%
+       \setcounter{One@Expense}{1*\real{\r}}%
+       \addtocounter{ST@Expenses}{\theOne@Expense}%
+       \addtocounter{Expenses}{\theOne@Expense}%
+       \addtocounter{Expense@ctr}{1}%advance counter
+                               \Print@Value{\theOne@Expense}\\%
+}%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newcommand{\Expense@Base@Currency}[2]{%
+       \gdef\Flag{5}%
+       \Rmul\r{100}{#2}%
+       \setcounter{One@Expense}{1*\real{\r}}%
+       \addtocounter{ST@Expenses}{\theOne@Expense}%
+       \addtocounter{Expenses}{\theOne@Expense}%
+       \addtocounter{Expense@ctr}{1}%advance counter
+               &       &       &       &       \\[-1.2em]% This is an ugly kludge:
+                                                                 %     Inserting an empty line
+                                                                 % which rolls backwards
+                                                                 % makes disappear the spurious
+                                                                 % spaces caused by external
+                                                                 % routines.
+}%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newcommand{\Expense@ForeignCurrency}[5]{%
+       \gdef\Flag{5}%
+       %
+       % Folgende Angaben sind moeglich:
+       % 1. {Contents}{Currency}{Amount}{Umrechnung}{  }
+       % 2. {Contents}{Currency}{Amount}{          }{BaseCurrency}
+       % 3. {Contents}{Currency}{Amount}{Umrechnung}{BaseCurrency}
+       %
+       #1       & #2   & #3    & #4&%
+       \ifthenelse{\equal{#5}{}}% Target in BaseCurrency or not?
+               {% Target not in BaseCurrency
+                       \Rmul\r{100}{#3}%
+                       \Rmul\r \r {#4}%
+               }%
+               {% Target in BaseCurrency
+                       \Rmul\r{100}{#5}%
+               }%
+       \setcounter{One@Expense}{1*\real{\r}}%
+       \addtocounter{ST@Expenses}{\theOne@Expense}%
+       \addtocounter{Expenses}{\theOne@Expense}%
+       \addtocounter{Expense@ctr}{1}%advance counter
+       \Print@Value{\theOne@Expense}%
+\\%
+}%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newcommand{\Expense@Foreign@Currency}[5]{%
+       \gdef\Flag{5}%
+       %
+       % Folgende Angaben sind moeglich:
+       % 1. {Contents}{Currency}{Amount}{Umrechnung}{  }
+       % 2. {Contents}{Currency}{Amount}{          }{BaseCurrency}
+       % 3. {Contents}{Currency}{Amount}{Umrechnung}{BaseCurrency}
+       %
+       \ifthenelse{\equal{#5}{}}% Target in BaseCurrency or not?
+               {% Target not in BaseCurrency
+                       \Rmul\r{100}{#3}%
+                       \Rmul\r\r{#4}%
+               }%
+               {% Target in BaseCurrency
+                       \Rmul\r{100}{#5}%
+               }%
+       \setcounter{One@Expense}{1*\real{\r}}%
+       \addtocounter{ST@Expenses}{\theOne@Expense}%
+       \addtocounter{Expenses}{\theOne@Expense}%
+       \addtocounter{Expense@ctr}{1}%advance counter
+               &       &       &       &       \\[-1.2em]% ugly kludge as above
+}%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newcommand{\Expense@Title}{%
+       \\%
+       \textbf{\Expense}&\Currency&\Amount&\Factor &\BC\\%
+       \hline%
+}%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newcommand{\ST@Expenses}{%
+       % \gdef\Flag{6}%
+       \ifnum\theST@Expenses>0%
+           \ifthenelse{\theExpense@ctr>1}%         % if more than 1 Expense line
+               {\Print@ST@Expenses}%                           % print it, else
+               {}%                                                                     % do nothing
+       \fi%
+}%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newcommand{\Print@ST@Expenses}{%
+       \gdef\Flag{6}%
+               &       &       &       &       \\[-1.2em]% ugly kludge as above
+       \SubtotalExpenses &     &       &       &%      print the subtotal of expenses
+               \Print@Value{\theST@Expenses}\\%
+}%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newcommand{\ST@Project}{%
+       \gdef\Flag{7}%
+       \\
+       %\multicolumn{4}{l}{\SubtotalProject}%
+       %\let\Project\NewProject%
+       %&
+       \SubtotalProject &      &       &       & 
+                       \addtocounter{ST@Project}{\theST@Fee}%
+                       \addtocounter{ST@Project}{\theST@VAT}%
+                       \addtocounter{ST@Project}{\theST@Expenses}%
+                       \Print@Value{\theST@Project}\\
+}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newcommand{\Total@VAT@Printout}{%
+               \setcounter{VAT}{\theFee*\real{\VAT@rate}/100}%
+                       \SumVAT &       &       &       &\Print@Value{\theVAT}\\%
+}%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newcommand{\Tot@l}{%
+       \\\hline
+       \ifnum\theFee>0 \SumFees&       &       &       &%
+                               \Print@Value{\theFee}\\ 
+               \ifVATnonzero%
+                       \Total@VAT@Printout%
+               \fi%
+       \fi%
+       \ifnum\theExpenses>0 \SumExpenses&      &       &       &%
+                               \Print@Value{\theExpenses}\\ 
+       \fi%
+       \ifnum\theDiscount=0 \else \Discount@Contents&  &       &       &%
+                               \Print@Value{\theDiscount}\\ 
+       \fi%
+       \hline\hline
+       \textbf{\Total} &       &       &       &%
+               \message{^^J\Currency: \BC}%
+               \message{^^J\VAT: \VAT@rate}%
+               \addtocounter{Total}{\theFee}%
+               \message{^^J\SumFees: }\Message@Value{\theFee}%
+               \addtocounter{Total}{\theVAT}%
+               \message{^^J\SumVAT: }\Message@Value{\theVAT}%
+               \addtocounter{Total}{\theExpenses}%
+               \message{^^J\SumExpenses: }\Message@Value{\theExpenses}%
+               \ifnum\theDiscount=0 \else %
+               \addtocounter{Total}{\theDiscount}%
+               \message{^^J\Discount@Contents: }\Message@Value{\theDiscount}%
+               \fi %
+               \textbf{\Print@Value{\theTotal}}%
+               \message{^^J\Total: }%
+                       \Message@Value{\theTotal}\message{^^J^^J}\\%
+       \end{longtable}
+       \end{center}
+       \gdef\Flag{8}%
+}
+\endinput
+% vim:ts=4:sw=4
diff --git a/.texmf/tex/latex/koma-rotis.sty b/.texmf/tex/latex/koma-rotis.sty
new file mode 100644 (file)
index 0000000..4d93e15
--- /dev/null
@@ -0,0 +1,3 @@
+\RequirePackage{rotis-ss}
+
+%\addtokomafont{sectioning}{\rmfamily}
diff --git a/.texmf/tex/latex/memoir-rotis.sty b/.texmf/tex/latex/memoir-rotis.sty
new file mode 100644 (file)
index 0000000..ce9c898
--- /dev/null
@@ -0,0 +1,32 @@
+\RequirePackage{rotis}
+\RequirePackage{memoir-subtitle}
+
+\pretitle{\begin{center}\LARGE\rmfamily}
+\presubtitle{\vspace{-1em}\begin{center}\Large\rmfamily}
+\preauthor{\begin{center}\large\rmfamily \lineskip .5em \begin{tabular}[t]{c}}
+\predate{\begin{center}\large\rmfamily}
+
+\renewcommand{\abstractnamefont}{\normalfont\rmfamily\small\bfseries}
+
+\makechapterstyle{rotis-fonts}{%
+  \renewcommand{\partnamefont}{\rmfamily\huge\bfseries}
+  \renewcommand{\parttitlefont}{\partnamefont}
+  \renewcommand{\partnumfont}{\partnamefont}
+
+  \renewcommand{\chapnamefont}{\rmfamily\huge}
+  \renewcommand{\chaptitlefont}{\chapnamefont}
+  \renewcommand{\chapnumfont}{\chapnamefont}
+
+  \setsecheadstyle{\Large\rmfamily\bfseries\raggedright}
+  \setsubsecheadstyle{\large\rmfamily\bfseries\raggedright}
+  \setsubsubsecheadstyle{\normalsize\rmfamily\bfseries\raggedright}
+  \setparaheadstyle{\normalsize\rmfamily\bfseries\raggedright}
+  \setsubparaheadstyle{\normalsize\rmfamily\raggedright}
+}
+
+\makechapterstyle{article-rotis}{%
+  \chapterstyle{rotis-fonts}
+  \chapterstyle{article}
+  \renewcommand{\chaptitlefont}{\normalfont\rmfamily\Large\bfseries}
+  \renewcommand{\chapnumfont}{\normalfont\rmfamily\Large\bfseries}
+}
diff --git a/.texmf/tex/latex/memoir-subtitle.sty b/.texmf/tex/latex/memoir-subtitle.sty
new file mode 100644 (file)
index 0000000..6bd8c8f
--- /dev/null
@@ -0,0 +1,13 @@
+\newcommand{\subtitle}[1]
+{%
+  \gdef\@subtitle{#1}
+}
+
+\newcommand{\presubtitle}[1]{\def\@bspresubtitle{#1}}
+\newcommand{\postsubtitle}[1]{\def\@bspostsubtitle{#1}}
+
+\presubtitle{\vspace{-1em}\begin{center}\Large}
+\postsubtitle{\par\end{center}\vspace{1em}}
+
+\newcommand{\@subtitle}{}
+\renewcommand{\maketitlehookb} {{\@bspresubtitle \@subtitle \@bspostsubtitle}}
diff --git a/.texmf/tex/latex/pdf.sty b/.texmf/tex/latex/pdf.sty
new file mode 100644 (file)
index 0000000..bb27fd6
--- /dev/null
@@ -0,0 +1,7 @@
+%\newif\ifpdf
+%\ifx\pdfoutput\undefined\pdffalse
+%\else\ifx\pdfoutput\relax\pdffalse
+%\else\ifcase\pdfoutput\pdffalse
+%\else\pdftrue
+%\fi\fi\fi
+\RequirePackage{ifpdf}
diff --git a/.texmf/tex/latex/realcalc.tex b/.texmf/tex/latex/realcalc.tex
new file mode 100644 (file)
index 0000000..be46167
--- /dev/null
@@ -0,0 +1,581 @@
+%% realcalc.tex
+%%
+%% (C) Frank Buchholz, Jan. 1993
+%% e-mail: buchholz@lusty.informatik.uni-dortmund.de
+%  User documentation: All lines starting with two %
+%  Try grep to extract these lines.
+%%
+%% Real arithmetic with big values and high precision.
+%% Calculations are done with 9 decimal digits.
+%% Usable with TeX and LaTeX.
+%%
+%% Parameter:
+%%
+%%     <macro> Macro, witch catches the result.
+%%     <value> String or macro witch expands to a value in the range 
+%%                 from -2147483647.999999999 to 2147483647.999999999
+%%     <precision> Number from 0 to 9
+%%
+%% Functions:
+%%
+
+% Don't read this file twice
+\ifx\Radd\undefined \else \endinput \fi
+
+% Make "@" be a letters
+\chardef\catamp=\the\catcode`\@
+\catcode`@=11
+\def\@Rversion{Version 1.0, Jan. 1993}
+\message{`Real arithmetic', \@Rversion (C) Frank Buchholz}
+
+% Allocation of temporary registers
+\newcount\@ta
+\newcount\@tb
+%
+\newcount\@xs  % Sign of 1st value
+\newcount\@xi  % Integer part of 1st value
+\newcount\@xf  % Fractional part of 1st value
+%
+\newcount\@ys  % Sign of 2nd value
+\newcount\@yi  % Integer part of 2nd value
+\newcount\@yf  % Fractional part of 2nd value
+%
+\newcount\@mil \@mil=1000000000        % 10^9
+%
+\countdef\@xa240
+\countdef\@xb241
+\countdef\@xc242
+\countdef\@xd243
+\countdef\@xe244
+\countdef\@ya245
+\countdef\@yb246
+\countdef\@yc247
+\countdef\@yd248
+\countdef\@ye249
+\let\@f=\@tb
+\let\@product=\@ta
+
+\chardef\@zero=0
+
+%%     \Radd<macro><value><value>              Addition
+\def\Radd#1#2#3{\@callc\@Radd#1{#2}{#3}}
+
+%%     \Rsub<macro><value><value>              Subtraction
+\def\Rsub#1#2#3{\@callc\@Radd#1{#2}{-#3}}
+
+\def\@Radd#1#2.#3.#4\relax#5.#6.#7\relax{%
+  % #1 Macro, witch gets the result
+  % #2 integer part of 1st value 
+  % #3 fractional part of 1st value
+  % #4 dummy to swallow everthing after the 2nd '.'
+  % #5 integer part of 2nd value 
+  % #6 fractional part of 2nd value
+  % #7 dummy to swallow everthing after the 2nd '.'
+  %
+  \@readvalue\@xs\@xi\@xf{#2}{#3}%
+  \@readvalue\@ys\@yi\@yf{#5}{#6}%
+  %
+  % Add integer parts
+  \@ta=\@xi \advance\@ta\@yi%
+  %
+  % Add fractional parts if they are not zero
+  \ifnum\@xf=\@zero%
+    \ifnum\@yf=\@zero%
+      \@tb=\@zero%
+    \else%
+      \@longadd%
+    \fi%
+  \else%
+    \@longadd%
+  \fi%
+  %
+  % Store result
+  \@store#1\@ta\@tb%
+}
+
+\def\@longadd{%
+    % Propagate sign to fractional parts
+    \multiply\@xf\@xs \multiply\@yf\@ys%
+    %
+    % Add fractional parts
+    \@tb=\@xf \advance\@tb\@yf%
+    %
+    % Calculate carry
+    \ifnum\@tb<\@zero% 
+      \ifnum\@tb<-\@mil      \advance\@ta -\@ne \advance\@tb\@mil  \fi% 
+    \else% 
+      \ifnum\@tb<\@mil \else \advance\@ta \@ne \advance\@tb-\@mil \fi% 
+    \fi%
+} 
+
+%%     \Rmul<macro><value><value>              Multiplication
+\def\Rmul#1#2#3{\@callc\@Rmul#1{#2}{#3}}
+
+\def\@Rmul#1#2.#3.#4\relax#5.#6.#7\relax{%
+  % #1 Macro, witch gets the result
+  % #2 integer part of 1st value 
+  % #3 fractional part of 1st value
+  % #4 dummy to swallow everthing after the 2nd '.'
+  % #5 integer part of 2nd value 
+  % #6 fractional part of 2nd value
+  % #7 dummy to swallow everthing after the 2nd '.'
+  %
+  % How to do real multiplications:
+  % Split values in various parts
+  % x y = 1234 567890 . 123 456 789
+  % ->   xa   xb       xc  xd  xe
+  % ->   ya   yb       yc  yd  ye
+  % Do 21 (!) integer multiplications if there are any fractional parts
+  % r = x * Y
+  % -> r =   xi*yi
+  %       + (xa*yc + xa*yc                  )*10^3 
+  %       + (xa*yd + xd*ya                  )*10^-0 
+  %       + (xa*ye + xe*ya  +  xb*yc + xc*yb)*10^-3 
+  %       + (xb*yd + xd*yb  +  xc*yc        )*10^-6 
+  %       + (xb*ye + xe*yb  +  xc*yd + xd*yc)*10^-9 
+  %       + (xc*ye + xe*yc  +  xd*yd        )*10^-12 
+  %       + (xd*ye + xe*yd                  )*10^-15 
+  %       + (xe*ye                          )*10^-18
+  %
+  % -> r = ((((( xe*ye                              / 1000 
+  %            + xd*ye + xe*yd                   ) / 1000
+  %           + xc*ye + xe*yc  +  xd*yd         ) / 1000
+  %          + xb*ye + xe*yb  +  xc*yd + xd*yc ) / 1000
+  %         + xb*yd + xd*yb  +  xc*yc         ) / 1000
+  %        + xa*ye + ye*xa  +  xb*yc + xc*yb ) / 1000
+  %       + xa*yd + xd*ya + (xa*yc + ya*xc)*1000 + xi*yi
+  % The last three digigs are saved just before the divisions.
+  %
+  % Init 
+  %
+  \@readvalue\@xs\@xi\@xf{#2}{#3}%
+  \@readvalue\@ys\@yi\@yf{#5}{#6}%
+  %
+  % Sign
+  \multiply\@xi\@xs%
+  \multiply\@yi\@ys%
+  \multiply\@xs\@ys%
+  %
+  \@product=\@zero%
+  % 
+  \ifnum\@xf=\@zero%
+    \ifnum\@yf=\@zero%
+      % No fractional parts
+      \edef\@frac{000000000}   % digits of fractional part  
+    \else%
+      \@longmul                        % Long multiplication           
+    \fi%
+  \else%
+    \@longmul                  % Long multiplication           
+  \fi%
+  %
+  % Multiply integer parts
+  \count@=\@xi \multiply\count@\@yi%
+  \advance\@product\count@%
+  %
+  % Sign
+  \multiply\@product\@xs%
+  %
+  % Store result
+  \edef#1{\number\@product.\@frac}%
+}
+
+% Do long multiplication
+\def\@longmul{%
+    % Split values in pieces
+    \@f=1000000%
+    \count@=\@xi%              
+    \divide\count@\@f                                  \@xa=\count@%
+    \multiply\count@-\@f       \advance\count@\@xi     \@xb=\count@%
+    \count@=\@xf%              
+    \divide\count@\@f                                  \@xc=\count@%
+    \multiply\count@-\@f       \advance\count@\@xf%    
+    \@f=1000%
+    \@xe=\count@%
+    \divide\count@\@f                                  \@xd=\count@%
+    \multiply\count@-\@f       \advance\count@\@xe     \@xe=\count@%
+    % 
+    \@f=1000000%
+    \count@=\@yi%              
+    \divide\count@\@f                                  \@ya=\count@%
+    \multiply\count@-\@f       \advance\count@\@yi     \@yb=\count@%
+    \count@=\@yf%              
+    \divide\count@\@f                                  \@yc=\count@%
+    \multiply\count@-\@f       \advance\count@\@yf%    
+    \@f=1000%
+    \@ye=\count@%
+    \divide\count@\@f                                  \@yd=\count@%
+    \multiply\count@-\@f       \advance\count@\@ye     \@ye=\count@%
+    %
+    \edef\@frac{}                              % digits of fractional part
+    % 
+    \@mul ee         \relax\@shift             % 10^-18
+    \@mul de ed       \relax\@shift            % 10^-15
+    \@mul ce ec dd    \relax\@shift            % 10^-12
+    \@mul be eb cd dc \relax\@saveshift                % 10^-9
+    \@mul bd db cc    \relax\@saveshift                % 10^-6
+    \@mul ae ea bc cb \relax\@saveshift                % 10^-3
+    \multiply\@xa\@f  \multiply\@xc\@f         % 10^3
+    \@mul ad da ac ca \relax%                  
+}
+
+\def\@mul#1#2#3{%
+  \count@=\csname @x#1\endcsname%
+  \multiply\count@\csname @y#2\endcsname%
+  \advance\@product\count@%
+  %
+  \ifx#3\relax%
+    \let\next=\relax% 
+  \else%
+    \let\next=\@mul%
+  \fi%
+  \next#3%
+}
+
+\def\@shift{%
+  \divide\@product\@f%
+}
+
+\def\@saveshift{%
+  % Save rightmost digits 
+  \count@=\@product%
+  \divide\@product\@f%
+  \multiply\@product\@f%
+  \advance\count@-\@product%
+  \advance\count@\@f%
+  \edef\@frac{\expandafter\@ignorenext\number\count@\@frac}%
+  %
+  \divide\@product\@f%
+}
+
+%%     \Rdiv<macro><value><value>              Division
+\def\Rdiv#1#2#3{\@callc\@Radd#1{#2}{#3}}
+
+\def\@Rdiv#1#2.#3.#4\relax#5.#6.#7\relax{%
+  % #1 Macro, witch gets the result
+  % #2 integer part of 1st value 
+  % #3 fractional part of 1st value
+  % #4 dummy to swallow everthing after the 2nd '.'
+  % #5 integer part of 2nd value 
+  % #6 fractional part of 2nd value
+  % #7 dummy to swallow everthing after the 2nd '.'
+  %
+  \message{Error: Rdiv not ready}
+  %
+  \@readvalue\@xs\@xi\@xf{#2}{#3}%
+  \@readvalue\@ys\@yi\@yf{#5}{#6}%
+  %
+  \ifnum\@yi=\@zero
+    \@xi=\@zero
+  \else
+    \divide\@xi\@yi
+  \fi
+  %
+  \@store#1\@xi\@xf%
+}
+
+%%     \Rneg<macro><value>             Negation
+\def\Rneg#1#2{%
+  % Expand the value and split it into the integer and the fractional part
+  \edef\next{\noexpand\@Rneg\noexpand#1#2..\noexpand\relax}%
+  \next%
+}
+
+\def\@Rneg#1#2.#3.#4\relax{
+  % #1 Macro, witch gets the result
+  % #2 Integer part of value
+  % #3 Fractional part of value
+  % #4 Remaining tokens
+  %
+  \@readvalue\@xs\@xi\@xf{#2}{#3}%
+  %
+  % Change sign
+  \multiply\@xi-\@ne%
+  \multiply\@xf-\@xs%
+  % 
+  % Store result
+  \@store#1\@xi\@xf%
+}
+
+%%
+%%     \Rtrunc<macro><precision><value> Truncate value to specified precision
+\def\Rtrunc#1#2#3{%
+  % Expand parameter and split the value into the integer and fractional part 
+  \edef\next{\noexpand\@Rtrunc\noexpand#1#2#3..\noexpand\relax}%
+  \next%
+}
+
+\def\@Rtrunc#1#2#3.#4.#5\relax{%
+  % #1 Macro, witch gets the result
+  % #2 Number of decimal places
+  % #3 Integer part of value
+  % #4 Fractional part of value
+  % #5 dummy to swallow everthing after the 2nd '.'
+  %
+  \count@=#2%
+  \edef\next{\empty}%
+  \ifnum\count@>\@zero%
+    \expandafter\@@Rtrunc#4000000000\relax%
+  \fi%
+  \edef#1{#3\next}%
+}
+
+\def\@@Rtrunc#1#2#3#4#5#6#7#8#9{%
+  % #1...#9 fractional part, padded with trailing zeros
+  \edef\next{.#1%
+    \ifnum\count@>1 #2\fi%
+    \ifnum\count@>2 #3\fi%
+    \ifnum\count@>3 #4\fi%
+    \ifnum\count@>4 #5\fi%
+    \ifnum\count@>5 #6\fi%
+    \ifnum\count@>6 #7\fi%
+    \ifnum\count@>7 #8\fi%
+    \ifnum\count@>8 #9\fi%
+  }%
+  \@swallow%
+}
+
+%%
+%%     \Rifle<value><value>            Test v1 < v2
+\def\Rifle#1#2{\@callb\@Rifle{#1}{#2}}
+
+\def\@Rifle#1.#2.#3\relax#4.#5.#6\relax{%
+  % #1 integer part of 1st value 
+  % #2 fractional part of 1st value
+  % #3 dummy to swallow everthing after the 2nd '.'
+  % #4 integer part of 2nd value 
+  % #5 fractional part of 2nd value
+  % #6 dummy to swallow everthing after the 2nd '.'
+  %
+  \@readvalue\@xs\@xi\@xf{#1}{#2}%
+  \@readvalue\@ys\@yi\@yf{#4}{#5}%
+  %
+  \ifnum\@xs<\@ys% 
+    \Rtesttrue% 
+  \else%
+    \ifnum\@xs>\@ys% 
+      \Rtestfalse%
+    \else%
+      \Rtestfalse%
+      \ifnum\@xi<\@yi \Rtesttrue \fi%
+      \ifnum\@xi=\@yi%
+       \multiply\@xf\@xs \multiply\@yf\@ys%
+       \ifnum\@xf<\@yf \Rtesttrue \fi% 
+      \fi%
+    \fi%
+  \fi%
+  %
+  \ifRtest%
+}
+
+%%     \Rifeq<value><value>            Test v1 = v2
+\def\Rifeq#1#2{\@callb\@Rifeq{#1}{#2}}
+
+\def\@Rifeq#1.#2.#3\relax#4.#5.#6\relax{%
+  % #1 integer part of 1st value 
+  % #2 fractional part of 1st value
+  % #3 dummy to swallow everthing after the 2nd '.'
+  % #4 integer part of 2nd value 
+  % #5 fractional part of 2nd value
+  % #6 dummy to swallow everthing after the 2nd '.'
+  %
+  \@readvalue\@xs\@xi\@xf{#1}{#2}%
+  \@readvalue\@ys\@yi\@yf{#4}{#5}%
+  %
+  \Rtestfalse%
+  \ifnum\@xi=\@yi\ifnum\@xf=\@yf \Rtesttrue \fi\fi%
+  \ifRtest%
+}
+
+%%     \Rifgt<value><value>            Test v1 > v2
+\def\Rifgt#1#2{\@callb\@Rifgt{#1}{#2}}
+
+\def\@Rifgt#1.#2.#3\relax#4.#5.#6\relax{%
+  % #1 integer part of 1st value 
+  % #2 fractional part of 1st value
+  % #3 dummy to swallow everthing after the 2nd '.'
+  % #4 integer part of 2nd value 
+  % #5 fractional part of 2nd value
+  % #6 dummy to swallow everthing after the 2nd '.'
+  %
+  \@readvalue\@xs\@xi\@xf{#1}{#2}%
+  \@readvalue\@ys\@yi\@yf{#4}{#5}%
+  %
+  \ifnum\@xs>\@ys% 
+    \Rtesttrue% 
+  \else%
+    \ifnum\@xs<\@ys% 
+      \Rtestfalse% 
+    \else%
+      \Rtestfalse%
+      \ifnum\@xi>\@yi \Rtesttrue \fi%
+      \ifnum\@xi=\@yi% 
+       \multiply\@xf\@xs \multiply\@yf\@ys%
+       \ifnum\@xf>\@yf \Rtesttrue \fi% 
+      \fi%
+    \fi%
+  \fi%
+  %
+  \ifRtest%
+}
+
+%%     \Rifneg<value>                  Test v < 0
+\def\Rifneg#1{\@calla\@Rifneg{#1}}
+
+\def\@Rifneg#1.#2.#3\relax{%
+  % #1 Integer part of value
+  % #2 Fractional part of value
+  % #3 dummy to swallow everthing after the 2nd '.'
+   %
+   \@readvalue\@xs\@xi\@xf{#1}{#2}%
+   %
+   \ifnum\@xs<0 \Rtesttrue \else \Rtestfalse \fi%
+   \ifRtest%
+ }
+
+%%     \Rifzero<value>                 Test v = 0
+\def\Rifzero#1{\@calla\@Rifzero{#1}}
+
+\def\@Rifzero#1.#2.#3\relax{%
+  % #1 Integer part of value
+  % #2 Fractional part of value
+  % #3 dummy to swallow everthing after the 2nd '.'
+  %
+  \@readvalue\@xs\@xi\@xf{#1}{#2}%
+  %
+  \Rtestfalse%
+  \ifnum\@xi=\@zero \ifnum\@xf=\@zero \Rtesttrue \fi \fi%
+  \ifRtest%
+}
+
+%%     \Rifpos<value>                  Test v >= 0
+%%                                     Take care to have a corresponding \fi
+\def\Rifpos#1{\@calla\@Rifpos{#1}}
+
+\def\@Rifpos#1.#2.#3\relax{%
+  % #1 Integer part of value
+  % #2 Fractional part of value
+  % #3 dummy to swallow everthing after the 2nd '.'
+  %
+  \@readvalue\@xs\@xi\@xf{#1}{#2}%
+  %
+  \ifnum\@xs<0 \Rtestfalse \else \Rtesttrue \fi%
+  \ifRtest%
+}
+
+%%     \Rifint<value>                  Test v is an integer value
+%%                                     Take care to have a corresponding \fi
+\def\Rifint#1{\@calla\@Rifint{#1}}
+
+\def\@Rifint#1.#2.#3\relax{%
+  % #1 Integer part of value
+  % #2 Fractional part of value
+  % #3 dummy to swallow everthing after the 2nd '.'
+  %
+  \@readvalue\@xs\@xi\@xf{#1}{#2}%
+  %
+  \ifnum\@xf=0 \Rtesttrue \else \Rtestfalse \fi%
+  \ifRtest%
+}
+
+% Utility macros
+
+\def\@calla#1#2{%
+  % #1 Macro to call
+  % #2 Value
+  % Expand the value and split them into the integer and the fractional part
+  \edef\next{\noexpand#1#2..\noexpand\relax}%
+  \next%
+}
+
+\def\@callb#1#2#3{%
+  % #1 Macro to call
+  % #2 1st value
+  % #3 2nd value
+  % Expand the values and split them into the integer and the fractional parts 
+  \edef\next{\noexpand#1#2..\noexpand\relax#3..\noexpand\relax}%
+  \next%
+}
+
+\def\@callc#1#2#3#4{%
+  % #1 Macro to call
+  % #2 Macro, witch gets the result
+  % #3 1st value
+  % #4 2nd value
+  % Expand the values and split them into the integer and the fractional parts
+  \edef\next{\noexpand#1\noexpand#2#3..\noexpand\relax#4..\noexpand\relax}%
+  \next%
+}
+
+%%     \ifRtest ... \else ... \fi      Re-execute the last test
+\newif\ifRtest
+
+%
+% Read value
+%
+\def\@readvalue#1#2#3#4#5{%
+  % #1   macro to catch the sign ( -1 or 1 )
+  % #2   macro to catch the integer part (maybe negative)
+  % #3   macro to catch the fractional part (positive)
+  % #4.#5 value
+  %
+  % Regular expression [-...d]d...["."[d...]]
+  % Attention: There has to be at least one digit between "-" and "."!
+  %
+  % Integer part
+  \if !#4! #2=\@zero \else #2=#4 \fi%
+  %
+  % Sign
+  \ifnum#2<\@zero #1=-\@ne \else #1=\@ne \fi%
+  \ifnum#2=\@zero \ifnum #4#5<\@zero #1=-\@ne \fi \fi%
+  %
+  % Fractional part
+  \if !#5!% 
+    #3=\@zero%
+  \else%
+    \@@setcount@#5000000000\relax%
+    #3=\count@%
+  \fi%
+}
+
+% Set count@ to fractional part with trailing zeros
+\def\@@setcount@#1#2#3#4#5#6#7#8#9{%
+  % #1...#9 fractional part, padded with '0'
+  \count@=#1#2#3#4#5#6#7#8#9%
+  \@swallow%
+}
+
+% Swallow everything up to next \relax
+\def\@swallow#1\relax{}
+
+%
+% Store result 
+%
+\def\@store#1#2#3{%
+  % #1 marcro to catch the result
+  % #2 counter with integer part (maybe negative)
+  % #3 counter with fractional part (maybe negative}
+  % 
+  % Sign
+  \edef#1{}%
+  \count@=#3%
+  \ifnum\count@<\@zero% 
+    \count@=-\count@%
+    \ifnum#2=\@zero% 
+      \edef#1{-}%
+    \fi%
+  \fi%
+  %
+  % Pad fractional part with leading zeros
+  \advance\count@\@mil%
+  %
+  % Store result 
+  \edef#1{#1\number#2.\expandafter\@ignorenext\number\count@}%
+}
+
+% Ignore next token
+\def\@ignorenext#1{}
+
+% Restore catcode of "@"
+\catcode`\@=\catamp
diff --git a/.texmf/tex/latex/rotis-ss.sty b/.texmf/tex/latex/rotis-ss.sty
new file mode 100644 (file)
index 0000000..9bc8f8d
--- /dev/null
@@ -0,0 +1,3 @@
+\RequirePackage{rotis}
+
+\renewcommand{\familydefault}{\sfdefault}
diff --git a/.texmf/tex/latex/today.sty b/.texmf/tex/latex/today.sty
new file mode 100644 (file)
index 0000000..4b9d3a1
--- /dev/null
@@ -0,0 +1,7 @@
+\newcommand{\mytoday} {
+  \number\day\space
+  \ifcase\month\or
+    Jan\or Feb\or Mar\or Apr\or May\or Jun\or Jul\or Aug\or Sep\or Oct\or Nov\or Dec\fi
+  \space\number\year
+}
+\def\today{\mytoday}
diff --git a/.texmf/tex/latex/utf8.sty b/.texmf/tex/latex/utf8.sty
new file mode 100644 (file)
index 0000000..0a34cc7
--- /dev/null
@@ -0,0 +1,5 @@
+%\RequirePackage{ucs}
+%\RequirePackage{inputenc}
+%\inputencoding{utf8x}
+%  http://tug.org/pipermail/texhax/2007-October/009150.html
+\RequirePackage[utf8]{inputenc}
diff --git a/.var/texmf/.gitignore b/.var/texmf/.gitignore
new file mode 100644 (file)
index 0000000..7c04f7f
--- /dev/null
@@ -0,0 +1 @@
+/fonts