From e0c6872cf40896c7be36b11dcc744620f10adf1d Mon Sep 17 00:00:00 2001
From: Norbert Preining <norbert@preining.info>
Date: Mon, 2 Sep 2019 13:46:59 +0900
Subject: Initial commit

---
 macros/latex/contrib/milog/milog.dtx | 1180 ++++++++++++++++++++++++++++++++++
 1 file changed, 1180 insertions(+)
 create mode 100644 macros/latex/contrib/milog/milog.dtx

(limited to 'macros/latex/contrib/milog/milog.dtx')

diff --git a/macros/latex/contrib/milog/milog.dtx b/macros/latex/contrib/milog/milog.dtx
new file mode 100644
index 0000000000..3309c39a80
--- /dev/null
+++ b/macros/latex/contrib/milog/milog.dtx
@@ -0,0 +1,1180 @@
+% \iffalse meta-comment
+% !TEX program  = pdfLaTeX
+%<*internal>
+\iffalse
+%</internal>
+%<*readme>
+# README #
+
+Seit dem 1. Januar 2015 gilt in Deutschland grundsätzlich für alle Arbeitnehmer
+ein flächendeckender gesetzlicher Mindestlohn in Höhe von
+derzeit 8,50€ pro Stunde. Mit Wirkung ab 1. August 2015 wurden die
+Dokumentations- und Aufzeichnungspflichten gelockert. Nach §17 MiLoG,
+muss Beginn, Ende und Dauer der täglichen Arbeitszeit der in §22 MiLoG
+definierten Arbeitnehmern (formlos) aufgezeichnet werden. Zusätzlich
+ermöglicht `milog.cls` aus praktischen Gründen die Aufzeichnug von unbezahlten
+Pausen und Bemerkungen (Ruhetag, Urlaub, Krank, ...).
+
+Die Erfassung der Arbeitszeiten erfolgt in einer simplen CSV-Datei, aus
+der die Klasse automatisch einen Arbeitszeitnachweis erstellt. Alternativ
+können die Daten auch durch einen CSV-Export — mit eventueller Nachbearbeitung
+— einer geeigneteten App erhoben werden.
+
+
+The `milog.cls` class provides means to fulfill the documentation duties
+by the German minimum wage law MiLoG. The recording of working hours
+is carried out in a simple CSV file from which the class will automatically
+create a time sheet. Alternatively, data can also be collected by a CSV
+export of a suitable app.
+
+License: LPPL
+%</readme>
+%<*milogcfg>
+\milogsetup{company={\TeX\ Satz GmbH},name={Mustermann, Max},id={01.01.1970/0815}}
+%</milogcfg>
+%<*csvdoc>
+tag  beginn  pause  ende   dauer   bemerkung
+01   06:20   \{\}     12:00  05:40   \{\}
+02   \{\}      \{\}     \{\}     \{\}      Ruhetag
+03   \{\}      \{\}     \{\}     \{\}      Ruhetag
+04   06:20   \{\}     12:00  05:40   \{\}
+05   06:20   \{\}     12:00  05:40   \{\}
+06   06:20   \{\}     12:05  05:45   \{\}
+07   06:20   \{\}     12:10  05:50   \{\}
+08   06:20   \{\}     12:05  05:45   \{\}
+09   \{\}      \{\}     \{\}     \{\}      Ruhetag
+10   \{\}      \{\}     \{\}     \{\}      Ruhetag
+nan  nan     nan    nan    32:20   nan
+%</csvdoc>
+%<*exdat>
+Arbeitszeiten von Max Mustermann;;;;; Mai 2016;;;;TeX Satz GmbH
+
+;;1. Schicht;;;;Arbeitszeit;;Arbeitszeit;
+Tag;Datum;von;bis;von;bis;Brutto;Pausen;Netto;Visum
+So.;1;Ruhetag;Ruhetag;;;;;;;;
+Mo.;2;6:20;12:15;;;5:55;0:00;5:55;;;
+Di.;3;6:20;12:05;;;5:45;0:00;5:45;;;
+Mi.;4;6:20;13:15;;;6:55;1:00;5:55;;;
+Do.;5;Feiertag;Feiertag;;;;;;;;
+Fr.;6;Ferien/Urlaub;Ferien/Urlaub;;;;;;;;
+Sa.;7;Ruhetag;Ruhetag;;;;;;;;
+So.;8;Ruhetag;Ruhetag;;;;;;;;
+Mo.;9;6:20;12:25;;;6:05;0:00;6:05;;;
+Di.;10;6:20;12:10;;;5:50;0:00;5:50;;;
+Mi.;11;6:20;12:25;;;6:05;0:00;6:05;;;
+Do.;12;6:20;12:20;;;6:00;0:00;6:00;;;
+Fr.;13;6:20;12:10;;;5:50;0:00;5:50;;;
+Sa.;14;Ruhetag;Ruhetag;;;;;;;;
+So.;15;Ruhetag;Ruhetag;;;;;;;;
+Mo.;16;Feiertag;Feiertag;;;;;;;;
+Di.;17;6:20;12:05;;;5:45;0:00;5:45;;;
+Mi.;18;6:20;12:10;;;5:50;0:00;5:50;;;
+Do.;19;6:20;12:20;;;6:00;0:00;6:00;;;
+Fr.;20;6:20;12:00;;;5:40;0:00;5:40;;;
+Sa.;21;Ruhetag;Ruhetag;;;;;;;;
+So.;22;Ruhetag;Ruhetag;;;;;;;;
+Mo.;23;6:20;12:05;;;5:45;0:00;5:45;;;
+Di.;24;6:20;12:10;;;5:50;0:00;5:50;;;
+Mi.;25;6:20;13:10;;;6:50;0:00;6:50;;;
+Do.;26;Feiertag;Feiertag;;;;;;;;
+Fr.;27;Ferien/Urlaub;Ferien/Urlaub;;;;;;;;
+Sa.;28;Ruhetag;Ruhetag;;;;;;;;
+So.;29;Ruhetag;Ruhetag;;;;;;;;
+Mo.;30;6:20;12:05;;;5:45;0:00;5:45;;;
+Di.;31;6:20;12:05;;;5:45;0:00;5:45;;;
+;;;;;Total;;;100:35
+;;;;;Saldo aktueller Monat;;;100:35
+;;;;;S. Vormonat;;;0:00
+;;;;;Bezahlte Überstunden;;;0:00
+;;;;;Saldo per 31.05.2016;;;100:35
+%</exdat>
+%<*excsv>
+tag	beginn	pause	ende	dauer	bemerkung
+1	{}	{}	{}	{}	Ruhetag
+2	6:20	{}	12:15	5:55	{}
+3	6:20	{}	12:05	5:45	{}
+4	6:20	1:00	13:15	5:55	Arztbesuch
+5	{}	{}	{}	{}	Feiertag
+6	{}	{}	{}	{}	Urlaub
+7	{}	{}	{}	{}	Ruhetag
+8	{}	{}	{}	{}	Ruhetag
+9	6:20	{}	12:25	6:05	{}
+10	6:20	{}	12:10	5:50	{}
+11	6:20	{}	12:25	6:05	{}
+12	6:20	{}	12:20	6:00	{}
+13	6:20	{}	12:10	5:50	{}
+14	{}	{}	{}	{}	Ruhetag
+15	{}	{}	{}	{}	Ruhetag
+16	{}	{}	{}	{}	Feiertag
+17	6:20	{}	12:05	5:45	{}
+18	6:20	{}	12:10	5:50	{}
+19	6:20	{}	12:20	6:00	{}
+20	6:20	{}	12:00	5:40	{}
+21	{}	{}	{}	{}	Ruhetag
+22	{}	{}	{}	{}	Ruhetag
+23	6:20	{}	12:05	5:45	{}
+24	6:20	{}	12:10	5:50	{}
+25	6:20	{}	13:10	6:50	{}
+26	{}	{}	{}	{}	Feiertag
+27	{}	{}	{}	{}	Urlaub
+28	{}	{}	{}	{}	Ruhetag
+29	{}	{}	{}	{}	Ruhetag
+30	6:20	{}	12:05	5:45	{}
+31	6:20	{}	12:05	5:45	{}
+nan	nan	nan	nan	100:35	nan
+%</excsv>
+%<*bibfile>
+@misc{bib:pgfplotstable,
+ author               = {Dr. Christian Feuersänger},
+ note                 = {\href{http://mirrors.ctan.org/graphics/pgf/contrib/pgfplots/doc/pgfplotstable.pdf}{http://mirrors.ctan.org/graphics/pgf/contrib/pgfplots/doc/pgfplotstable.pdf}},
+ title                = {{Manual for Package pgfplotstable}},
+ year                 = {2016},
+ }
+ 
+@misc{bib:xkeyval,
+ author               = {Hendri Adriaens},
+ note                 = {\href{http://mirrors.ctan.org/macros/latex/contrib/xkeyval/xkeyval.pdf}{http://mirrors.ctan.org/macros/latex/contrib/xkeyval/xkeyval.pdf}},
+ title                = {{The xkeyval package}},
+ year                 = {2014},
+ } 
+ 
+@misc{bib:geometry,
+ author               = {Hideo Umeki},
+ note                 = {\href{http://mirrors.ctan.org/macros/latex/contrib/geometry/geometry.pdf}{http://mirrors.ctan.org/macros/latex/contrib/geometry/geometry.pdf}},
+ title                = {{The geometry package}},
+ year                 = {2010},
+ } 
+ 
+@misc{bib:tabularx,
+ author               = {David Carlisle},
+ note                 = {\href{http://mirrors.ctan.org/macros/latex/required/tools/tabularx.pdf}{http://mirrors.ctan.org/macros/latex/required/tools/tabularx.pdf}},
+ title                = {{The tabularx package}},
+ year                 = {2014},
+ } 
+ 
+@misc{bib:booktabs,
+ author               = {Simon Fear},
+ note                 = {\href{http://mirrors.ctan.org/macros/latex/contrib/booktabs/booktabs.pdf}{http://mirrors.ctan.org/macros/latex/contrib/booktabs/booktabs.pdf}},
+ title                = {{Publication quality tables in \LaTeX}},
+ year                 = {2005},
+ } 
+ 
+@misc{bib:colortbl,
+ author               = {David Carlisle},
+ note                 = {\href{http://mirrors.ctan.org/macros/latex/contrib/colortbl/colortbl.pdf}{http://mirrors.ctan.org/macros/latex/contrib/colortbl/colortbl.pdf}},
+ title                = {{The colortbl package}},
+ year                 = {2012},
+ } 
+
+@misc{bib:xifthen,
+ author               = {Josselin Noirel},
+ note                 = {\href{http://mirrors.ctan.org/macros/latex/contrib/xifthen/xifthen.pdf}{http://mirrors.ctan.org/macros/latex/contrib/xifthen/xifthen.pdf}},
+ title                = {{The xifthen package}},
+ year                 = {2015},
+ } 
+
+@misc{bib:background,
+ author               = {Gonzalo Medina},
+ note                 = {\href{http://mirrors.ctan.org/macros/latex/contrib/background/background.pdf}{http://mirrors.ctan.org/macros/latex/contrib/background/background.pdf}},
+ title                = {{The background package}},
+ year                 = {2014},
+ } 
+ 
+@misc{bib:transparent,
+ author               = {Heiko Oberdiek},
+ note                 = {\href{http://mirrors.ctan.org/macros/latex/contrib/oberdiek/transparent.pdf}{http://mirrors.ctan.org/macros/latex/contrib/oberdiek/transparent.pdf}},
+ title                = {{The transparent package}},
+ year                 = {2016},
+ } 
+
+@misc{bib:milog,
+ author               = {{Bundesministerium der Justiz und für Verbraucherschutz (in Zusammenarbeit mit der juris GmbH)}},
+ note                 = {\href{https://www.gesetze-im-internet.de/bundesrecht/milog/gesamt.pdf}{https://www.gesetze-im-internet.de/bundesrecht/milog/gesamt.pdf}},
+ title                = {{Gesetz zur Regelung eines allgemeinen Mindestlohns (Mindestlohngesetz - MiLoG)}},
+ year                 = {2014},
+ } 
+ 
+@misc{app:arbeitszeiterfassung,
+ author               = {{askanimus}},
+ note                 = {\newline\href{https://play.google.com/store/apps/details?id=askanimus.arbeitszeiterfassung}{https://play.google.com/store/apps/details?id=askanimus.arbeitszeiterfassung}},
+ title                = {{Arbeitszeiterfassung}},
+ year                 = {2016},
+ } 
+%</bibfile>
+%<*examplefile>
+\documentclass{milog}
+\usepackage[utf8]{inputenc}
+\usepackage[T1]{fontenc}
+\usepackage{libertine}
+\begin{document}
+\milog[month={05/2016},cc=true]{201605.csv}
+\end{document}
+%</examplefile>
+%<*exform>
+\documentclass{milog}
+\usepackage[utf8]{inputenc}
+\usepackage[T1]{fontenc}
+\usepackage{libertine}
+\begin{document}
+\milog[company={},name={},id={\space}]{\Formular}
+\end{document}
+%</exform>
+%<*manifest>
+This work consists of the following files:
+
+milog.dtx
+milog.pdf
+milog-example.pdf
+milog-formular.pdf
+README.md
+makefile
+
+Files packaged in milog.dtx:
+
+milog.cls
+milog.cfg
+milog
+milog-example.tex
+milog-formular.tex
+201605.dat
+201605.csv
+manifest.txt
+%</manifest>
+%<*internal>
+\fi
+\def\nameofplainTeX{plain}
+\ifx\fmtname\nameofplainTeX\else
+  \expandafter\begingroup
+\fi
+%</internal>
+%<*install>
+\input docstrip.tex
+\keepsilent
+\askforoverwritefalse
+\preamble
+
+Copyright (C) 2016 by:
+Josef Kleber
+<josef.kleber@gmx.de>
+
+This file may be distributed and/or modified under the conditions of
+the LaTeX Project Public License, either version 1.3 of this license
+or (at your option) any later version.  The latest version of this
+license is in:
+
+   http://www.latex-project.org/lppl.txt
+
+and version 1.3 or later is part of all distributions of LaTeX version
+2003/12/01 or later.
+
+This work has the LPPL maintenance status "maintained".
+
+The Current Maintainer of this work is Josef Kleber.
+
+This work consists of all files listed in manifest.txt.
+
+\endpreamble
+
+\usedir{tex/latex/milog}
+\generate{
+  \file{\jobname.cls}{\from{\jobname.dtx}{class}}
+}
+\generate{
+  \file{\jobname-example}{\from{\jobname.dtx}{examplefile}}
+}
+\generate{
+  \file{\jobname-formular}{\from{\jobname.dtx}{exform}}
+}
+\generate{
+  \file{\jobname.cfg}{\from{\jobname.dtx}{milogcfg}}
+}
+%</install>
+%<install>\endbatchfile
+%<*internal>
+\nopreamble\nopostamble
+\usedir{doc/latex/milog}
+\generate{
+  \file{README.md}{\from{\jobname.dtx}{readme}}
+}
+\generate{
+  \file{manifest.txt}{\from{\jobname.dtx}{manifest}}
+}
+\generate{
+  \file{\jobname.bib}{\from{\jobname.dtx}{bibfile}}
+}
+\generate{
+  \file{mlgdoc.csv}{\from{\jobname.dtx}{csvdoc}}
+}
+\generate{
+  \file{milog.sh}{\from{\jobname.dtx}{milogsh}}
+}
+\generate{
+  \file{201605.dat}{\from{\jobname.dtx}{exdat}}
+}
+\generate{
+  \file{201605.csv}{\from{\jobname.dtx}{excsv}}
+}
+\ifx\fmtname\nameofplainTeX
+  \expandafter\endbatchfile
+\else
+  \expandafter\endgroup
+\fi
+%</internal>
+%<*driver>
+\documentclass[a4paper]{ltxdoc}%
+\usepackage[ngerman]{babel}%
+\usepackage[utf8]{inputenc}%
+\usepackage[T1]{fontenc}%
+\usepackage{textcomp}%
+\usepackage{lmodern}%
+\usepackage{bera}%
+\usepackage{microtype}%
+\usepackage{cite}%
+\usepackage{csquotes}%
+\usepackage{marginnote}%
+\usepackage[svgnames,rgb]{xcolor}%
+\usepackage{listings}%
+\usepackage{makeidx}
+\usepackage{eurosym}
+\usepackage{tocstyle}
+\usetocstyle{standard}
+\usepackage[numbered]{hypdoc}
+\usepackage{ragged2e}%
+\usepackage{url}%
+\usepackage[automark,nouppercase]{scrpage2}
+\usepackage{tikz}
+\usetikzlibrary{calc}%
+% turn off idiotic tikz error in doc generation
+\makeatletter
+\global\let\tikz@ensure@dollar@catcode=\relax
+\makeatother
+\usepackage{alltt}%
+\usepackage{hyperref}
+\EnableCrossrefs
+\CodelineIndex
+\RecordChanges
+\makeatletter
+\setlength{\headheight}{1.1\baselineskip}%
+\renewcommand\paragraph{\@startsection{paragraph}{4}{\z@}%
+            {-2.5ex\@plus -1ex \@minus -.25ex}%
+            {1.25ex \@plus .25ex}%
+            {\normalfont\normalsize\bfseries}}
+\setcounter{secnumdepth}{5}
+\setcounter{tocdepth}{5}
+\hypersetup{colorlinks=true,urlcolor=NavyBlue,linkcolor=NavyBlue,citecolor=CornflowerBlue}%
+\lstset{literate=%
+    {Ö}{{\"O}}1
+    {Ä}{{\"A}}1
+    {Ü}{{\"U}}1
+    {ß}{{\ss}}1
+    {ü}{{\"u}}1
+    {ä}{{\"a}}1
+    {ö}{{\"o}}1
+    {~}{{\textasciitilde}}1
+}
+\lstset{language=[LaTeX]TeX,numbers=left,numberstyle=\tiny, basicstyle=\ttfamily, aboveskip=\baselineskip, frame=single, backgroundcolor=\color{LightGoldenrodYellow}, keywordstyle=\color{Blue},
+emph={}}
+\renewcommand{\maketitle}%
+{%
+  \thispagestyle{empty}%
+  \pagecolor{Ivory}%
+  \begin{titlepage}%
+    \begin{tikzpicture}[remember picture,overlay]%
+      \node[yshift=-2cm] at (current page.north west)%
+      {%
+        \begin{tikzpicture}[remember picture, overlay]%
+          \draw[fill=CornflowerBlue,color=CornflowerBlue] (0,0) rectangle%
+            (\paperwidth,2cm);%
+          \draw[anchor=west,yshift=-4cm,xshift=3cm,color=NavyBlue] (0,0) node%
+            {\parbox{15cm}{\RaggedRight\Huge\sffamily\textbf{\@title}}};%
+          \draw[anchor=west,yshift=-6cm,xshift=3cm,color=NavyBlue] (0,0) node%
+            {\parbox{15cm}{\huge\sffamily\textbf{\@fileversion}}};%
+          \draw[anchor=west,yshift=-9cm,xshift=3cm,color=NavyBlue] (0,0) node%
+            {\parbox{15cm}{\RaggedRight\huge\sffamily\textbf{\@subtitle}}};%
+          \draw[anchor=west,yshift=-18cm,xshift=3cm,color=NavyBlue] (0,0) node%
+            {\parbox{15cm}{\huge\sffamily\textbf{\@date}}};%
+          \draw[anchor=west,yshift=-20cm,xshift=3cm,color=NavyBlue] (0,0) node%
+            {\parbox{15cm}{\Large\sffamily{\@authorline\\\textbf{\@author}}}};%
+        \end{tikzpicture}%
+      };%
+      \node[yshift=0cm] at (current page.south west)%
+      {%
+        \begin{tikzpicture}[remember picture, overlay]%
+          \draw[fill=NavyBlue,color=NavyBlue,yshift=6cm,xshift=2cm] (0,0) rectangle (0.2cm,19cm);%
+          \draw[fill=CornflowerBlue,color=CornflowerBlue] (0,0) rectangle (\paperwidth,2cm);%
+          \draw[anchor=west,yshift=1cm,xshift=3cm,color=NavyBlue] (0,0) node%
+            {\parbox{15cm}{\large\sffamily{\@refline}}};%
+        \end{tikzpicture}%
+      };%
+    \end{tikzpicture}%
+  \end{titlepage}%
+  \pagecolor{white}%
+}%
+%
+\newcommand*{\@tikzhead}[1]%
+{%
+  \begin{tikzpicture}[remember picture,overlay]%
+    \node[yshift=-2cm] at (current page.north west)%
+    {%
+      \begin{tikzpicture}[remember picture, overlay]%
+        \draw[fill=CornflowerBlue] (0,0) rectangle (\paperwidth,2cm);%
+        \draw[anchor=west,yshift=1cm,xshift=1.5cm,color=NavyBlue] (0,0) node%
+          {\parbox{15cm}{\LARGE\sffamily\textbf{\@title}}};%
+        \node[anchor=east,xshift=.9\paperwidth,rectangle,%
+              rounded corners=15pt,inner sep=11pt,fill=NavyBlue]%
+              {\color{white}\textsc{#1}};%
+      \end{tikzpicture}%
+    };%
+  \end{tikzpicture}%
+}%
+\clearscrheadings%
+\ihead{\@tikzhead{\headmark}}%
+\cfoot{\upshape\thepage}%
+\pagestyle{scrheadings}%
+%
+\newcommand*{\Headline}[1]{\@mkboth{#1}{#1}\markright{#1}}%
+%
+\renewcommand{\headfont}{\normalfont\mdseries\scshape}
+%
+\gdef\@subtitle{}%
+\providecommand*{\Subtitle}[1]{\gdef\@subtitle{#1}}%
+\gdef\@fileversion{}%
+\providecommand*{\Fileversion}[1]{\gdef\@fileversion{#1}}%
+\gdef\@author{}%
+\providecommand*{\Author}[1]{\gdef\@author{#1}}%
+\gdef\@authorline{Package author:}%
+\providecommand*{\Authorline}[1]{\gdef\@authorline{#1}}%
+\gdef\@refline{}%
+\providecommand*{\Refline}[1]{\gdef\@refline{#1}}%
+\gdef\and{\unskip{}, }%
+\newcommand\doubledash{-\kern0.5pt-}
+\def\enoteformat{\rightskip\z@ \leftskip\z@ \parindent=1em\leavevmode\llap{\makeenmark}}
+\def\XeLaTeX{Xe\LaTeX}%
+%
+\newenvironment{optionlist}
+{\begin{trivlist}\setlength\leftskip{2em}}
+{\end{trivlist}}
+\newcommand\optitem[3]{\item [\texttt{\textbf{\textcolor{DodgerBlue}{#1}} \lbrack\textcolor{Crimson}{#2}\rbrack}] #3}
+\renewcommand\tableofcontents%
+{%
+  %\section*{\contentsname}%
+  %\@mkboth{%
+  %\MakeUppercase\contentsname}{\MakeUppercase\contentsname}%
+  \Headline{\MakeUppercase\contentsname}
+  \@starttoc{toc}%
+}%
+%
+%\newcommand\env[1]{\texttt{#1}}%
+\newcommand\layer[1]{\texttt{#1}\SortIndex{#1}{\texttt{#1} (PGF layer)}%
+                     \SortIndex{PGF layer>#1}{\texttt{#1}}}%
+\newcommand\styleoption[1]{\texttt{#1}\SortIndex{#1}{\texttt{#1} (Style option)}%
+                     \SortIndex{Style option>#1}{\texttt{#1}}}%
+\newcommand\envoption[1]{\texttt{#1}\SortIndex{#1}{\texttt{#1} (Puzzle option)}%
+                     \SortIndex{Puzzle option>#1}{\texttt{#1}}}%
+\newcommand\stylename[1]{\texttt{#1}\SortIndex{#1}{\texttt{#1} (Style file)}%
+                     \SortIndex{Style file>#1}{\texttt{#1}}}%
+\newcommand\package[1]{\texttt{#1}\SortIndex{#1}{\texttt{#1} (Package)}%
+                     \SortIndex{Package>#1}{\texttt{#1}}}%
+\newcommand\class[1]{\texttt{#1}\SortIndex{#1}{\texttt{#1} (Class)}%
+                     \SortIndex{Class>#1}{\texttt{#1}}}%
+\newcommand*\margcs[1]{\marginnote{\hbadness=10000\RaggedLeft\scriptsize #1}}%
+\def\PrintIndex{\clearpage\Headline{\thechapter Index}\@input@{\jobname.ind}%
+                \global\let\PrintIndex\@empty}
+                \renewenvironment{theindex}
+               {\if@twocolumn
+                  \@restonecolfalse
+                \else
+                  \@restonecoltrue
+                \fi
+                \columnseprule \z@
+                \columnsep 35\p@
+\def\see##1##2{\textit{See} ##1}%
+\def\seealso##1##2{\textit{See also} ##1}%
+\long\def\cmd##1{\cs{\expandafter\cmd@to@cs\string##1}}%
+\def\@url##1{\url@break\ttt{##1}\endgroup}%
+\def\ttt{\begingroup\@sanitize\ttfamily\@ttt}%
+\def\@ttt##1{##1\endgroup}%
+\mathchardef\save@secnumdepth\c@secnumdepth
+\c@secnumdepth\m@ne
+                \phantomsection%
+                \twocolumn%[\section{\indexname}]%
+                \refstepcounter{section}
+                \addcontentsline{toc}{section}{\protect\numberline{\thesection}Index}%
+\c@secnumdepth\save@secnumdepth
+                %\thispagestyle{plain}
+                \parindent\z@
+                \parskip\z@ \@plus .3\p@\relax
+                \let\item\@idxitem}
+               {\if@restonecol\onecolumn\else\clearpage\fi}
+\setlength\parindent{0pt}%
+\newcommand*\myref[1]{(siehe Abschnitt \ref{#1} auf Seite \pageref{#1})}
+\makeatother
+\begin{document}
+  \DocInput{\jobname.dtx}
+\end{document}
+%</driver>
+% \fi
+%
+% \GetFileInfo{\jobname.cls}
+% \def\filename{milog.cls}
+% \def\filedate{2016/07/01}
+% \def\fileversion{v1.0}
+% \hypersetup{pdfauthor={Josef Kleber},pdftitle={Eine LaTeX-Klasse zur Erfüllung der Dokumentationspflichten nach dem Mindestlohngesetz (MiLoG)},pdfsubject={Dokumentation der LaTeX-Klasse \filename}}%
+% \lstset{language=[LaTeX]TeX,numbers=left,numberstyle=\tiny, basicstyle=\ttfamily, aboveskip=\baselineskip, frame=single, backgroundcolor=\color{LightGoldenrodYellow}, keywordstyle=\color{Blue},
+% emph={milog},emphstyle=\color{Tomato}, 
+% emph={[2]color,companyname,company,namename,name,idname,id,monthname,month,heading},emphstyle={[2]\color{OliveDrab}},
+% morekeywords={milog}}
+% \DoNotIndex{\(,\),\1,\t,\,,\\,\begin,\end,\begingroup,\endgroup,\csname,\def,\else,\endcsname,\equal,\expandafter,
+% \fi,\gdef,\ifnum,\ifthenelse,\immediate,\MessageBreak,\NeedsTeXFormat,\newcommand,\renewcommand,\newif,
+% \PackageInfo,\PackageError,\ProcessOptionsX,\ProvidesPackage,\relax,\RequirePackage,
+% \space,\errmessage,\ExecuteOptionsX,}
+%
+% \bibliographystyle{plain}
+% \title{\filename}%
+% \Subtitle{Eine \LaTeX -Klasse zur Erfüllung der Dokumentationspflichten nach dem Mindestlohngesetz (MiLoG)}%
+% \author{Josef Kleber}
+% \Fileversion{\fileversion}
+% \date{\filedate}
+% \Refline{\href{mailto:milog@jklatex.de}{\texttt{milog@jklatex.de}}\\\href{http://milog.jklatex.de/}{\texttt{http://milog.jklatex.de/}}}
+% \maketitle
+% \stepcounter{page}
+% \tableofcontents
+% \clearpage
+% \setlength\parskip{6pt}%
+%
+%
+%\StopEventually{^^A
+% {
+% \clearpage
+% \raggedright
+% \nocite{*}
+% \bibliography{\jobname}
+% }
+% \clearpage
+%  \PrintChanges
+%  \PrintIndex
+%}
+%
+% \Headline{Zusammenfassung}
+% \begin{abstract}
+% Seit dem 1. Januar 2015 gilt in Deutschland grundsätzlich für alle Arbeitnehmer ein flächendeckender gesetzlicher Mindestlohn in Höhe von derzeit 8,50\,\euro\ pro Stunde.
+% Mit Wirkung ab 1. August 2015 wurden die Dokumentations- und Aufzeichnungspflichten gelockert.
+% Nach \S 17 MiLoG, muss Beginn, Ende und Dauer der täglichen Arbeitszeit der in \S 22 MiLoG definierten Arbeitnehmern (formlos) aufgezeichnet werden.
+% Zusätzlich ermöglicht \class{milog.cls} aus praktischen Gründen die Aufzeichnug von unbezahlten Pausen und Bemerkungen (Ruhetag, Urlaub, Krank, ...).
+%
+% Die Erfassung der Arbeitszeiten erfolgt in einer simplen CSV-Datei, aus der die Klasse automatisch einen Arbeitszeitnachweis erstellt.
+% Alternativ können die Daten auch durch einen CSV-Export --- mit eventueller Nachbearbeitung --- einer geeigneteten App erhoben werden.
+%
+% \vspace{1cm}
+%
+% The \class{milog.cls} class provides means to fulfill the documentation duties by the German minimum wage law MiLoG.
+% The recording of working hours is carried out in a simple \texttt{CSV} file from which the class will automatically create a time sheet.
+% Alternatively, data can also be collected by a CSV export of a suitable app.
+% \end{abstract}
+% \clearpage
+% \tableofcontents
+% \Headline{Klassenoptionen}
+%
+% \clearpage
+%
+% \Headline{Klassenoptionen}
+%
+% \section{Klassenoptionen}
+% \Headline{Klassenoptionen}
+% Grundsätzlich handelt es sich bei \class{milog.cls} um eine Wrapper-Klasse um \class{article.cls}, d.\,h. es können grundsätzlich die \enquote{normalen} Klassenoptionen vergewendet werden.
+% Dies sollte jedoch nicht nötig sein, da diese Klasse ein bestimmtes Formulardesign umsetzt! Sie bietet daher die folgenden Optionen, die auch mit lokaler Wirkung im \cmd\milog\ Makro angewendet werden können:
+% \begin{optionlist}
+% \optitem{heading}{Arbeitszeitnachweis nach dem Mindestlohngesetz (\S 17 MiLoG)}{Überschrift}
+% \optitem{cc}{false}{erstellt -- falls auf \texttt{true} gesetzt -- einen Durchschlag mit dem Wasserzeichen \enquote{Kopie}}
+% \optitem{companyname}{Firma}{Bezeichnung der Arbeitgeberorganisation}
+% \optitem{company}{}{Firmenname}
+% \optitem{namename}{Name, Vorname}{Bezeichnung der Personenidentifikation}
+% \optitem{name}{}{Name}
+% \optitem{idname}{Geburtsdatum, Personalnummer}{Bezeichnung einer zusätzlichen Personenidentifikation}
+% \optitem{id}{}{Zusatz-Id}
+% \optitem{monthname}{Monat/Jahr}{Bezeichnung der Aufzeichnungsperiode}
+% \optitem{month}{}{Aufzeichnungsperiode}
+% \optitem{color}{gray!40}{Farbvariation der Aufzeichnungsliste}
+% \end{optionlist}
+% \section{Die Konfigurationsdatei \texttt{milog.cfg}}
+% \label{sec:milogcfg}
+% Falls vorhanden, wird die Konfigurationsdatei \texttt{milog.cfg} eingebunden. Darin können etwa das Festlegen neuer Defaults für die oben angegebenen Optionen \myref{sec:milogsetup} oder auch 
+% Redefinitionen des Layouts ausgelagert werden. Dies kann sowohl systemweit in einem (lokalen) \TeX-Tree erfolgen oder auch lokal im aktuellen Arbeitsverzeichnis!
+% \section{Das CSV-Datenformat}
+% \label{sec:csvformat}
+% Das folgende Beispiel zeigt den Aufbau der CSV-Dateien für den Arbeitszeitnachweis. Die einzelnen Spalten sind dabei durch Spaces oder Tabulatoren zu trennen.
+% Dadurch müssen \enquote{leere} Spalten durch die speziellen Marker \texttt{\{\}} bzw. \texttt{nan} gekennzeichnet werden. Diese werden in der ausgegebenen Tabelle
+% durch \enquote{--} bzw. \enquote{\cmd\space} ersetzt.
+%
+% \begin{center}
+%   \begin{alltt}\input{mlgdoc.csv}\end{alltt}
+% \end{center}
+%
+% Eine Besonderheit stellt die letzte Zeile dar, in der die Gesamtarbeitszeit angegeben werden kann. Die Abschlusslinie der Tabelle wird \textbf{vor} der letzten Zeile gesetzt.
+% Es muss daher eine letzte Zeile mit \texttt{nan}-Einträgen vorhanden sein, falls die Ausgabe der Gesamtarbeitszeit nicht gewünscht sein sollte.
+% \section{Befehle}
+% \subsection{\textbackslash{}milog}
+% Das \cmd\milog{}\marginnote{\cmd\milog\\\oarg{Optionen}\marg{CSV-Datei}} Makro liest die \marg{CSV-Datei} ein und erstellt daraus
+% automatisch den gewünschten Arbeitszeitnachweis.
+% \subsection{\textbackslash{}Formular}
+% \label{sec:Formular}
+% Das \cmd\Formular{}\marginnote{\cmd\Formular} Makro stellt ein Blankoformular in Form einer \enquote{inline table} zur Verfügung.
+% Es kann anstatt einer \texttt{CSV}-Datei im \cmd\milog\ Makro verwendet werden.
+% \subsection{\textbackslash{}milogsetup}
+% \label{sec:milogsetup}
+% Das \cmd\milogsetup{}\marginnote{\cmd\milogsetup\marg{Optionen}} Makro dient dem erneuten Setzen der globalen Optionen.
+% Insbesonders in Verbindung mit der Konfigurationsdatei \texttt{milog.cfg} \myref{sec:milogcfg} zum Setzen systemweiter oder auf das aktuelle Verzeichnis bezogene Defaults.
+% \section{Beispiel}
+% Im folgenden Beispiel setzen wir die persönlichen Angaben in der Konfigurationsdatei \texttt{milog.cfg}.
+% \iffalse
+%<*example>
+% \fi
+\begin{lstlisting}
+\milogsetup{company={\TeX\ Satz GmbH},name={Mustermann, Max},
+            id={01.01.1970/0815}}
+\end{lstlisting}
+% \iffalse
+%</example>
+% \fi
+% Anstatt in der Konfigurationsdatei könnten die persönlichen Angaben auch als Klassenoptionen gesetzt werden.
+% Den Zeitraum des Arbeitszeitnachweises setzen wir als lokale Option im \cmd\milog\ Makro.
+% Außerdem erzwingen wir durch Setzen der Option \texttt{cc} einen Durchschlag.
+% \iffalse
+%<*example>
+% \fi
+\begin{lstlisting}
+\documentclass{milog}
+\usepackage[utf8]{inputenc}
+\usepackage[T1]{fontenc}
+\usepackage{libertine}
+\begin{document}
+\milog[month={05/2016},cc=true]{201605.csv}
+\end{document}
+\end{lstlisting}
+% \iffalse
+%</example>
+% \fi
+% \section{An app a day keeps the work away}
+% Abschließend möchte ich noch eine Möglichkeit zur weitestgehend automatischen Erstellung des Arbeitszeitnachweises aus dem
+% \texttt{CSV}-Export einer Arbeitszeit-App aufzeigen. Exemplarisch nutzen wir hierzu die Android-App \enquote{Arbeitszeiterfassung}\cite{app:arbeitszeiterfassung}.
+% Dazu wandeln wir den \texttt{CSV}-Export der App mit Hilfe des \texttt{milog} Bash-Scripts \myref{sec:milogimpl} in das von
+% \class{milog.cls} benötigte \texttt{CSV}-Format \myref{sec:csvformat}.
+% Grundsätzlich ermöglicht die App das Erfassen von zwei Schichten. Zur Vereinfachung wertet das Skript jedoch nur die erste Schicht aus.
+% \iffalse
+%<*example>
+% \fi
+\begin{lstlisting}
+$ milog -i 201605.dat
+reading 201605.dat
+writing _milog_.csv
+creating milog.pdf
+
+\end{lstlisting}
+% \iffalse
+%</example>
+% \fi
+% Insbesonders verwenden wir für den Namen der \texttt{CSV}-Exportdatei das Format \texttt{YYYYMM}. Das Script setzt damit
+% die \texttt{month} Option automatisch. Die Angaben zur Person setzen wir mit Hilfe des \cmd\milogsetup\ Makros \myref{sec:milogsetup}
+% in der Konfigurationsdatei \texttt{milog.cfg} \myref{sec:milogcfg}. Alternativ wäre auch eine Anpassung der \texttt{HERE}-Datei 
+% innerhalb des Scripts möglich. Die Verwendung der Konfigurationsdatei im jeweiligen Arbeitsverzeichnis ermöglicht jedoch
+% die Erstellung eines Arbeitszeitnachweises für unterschiedliche Personen mit demselben Script.
+%
+% Falls Anpassungen der \texttt{CSV}-Datei --- etwa in der Spalte \texttt{bemerkung} --- nötig sein sollten, kann die Erstellung 
+% der \texttt{PDF}-Datei in zwei Schritten erfolgen!
+% \iffalse
+%<*example>
+% \fi
+\begin{lstlisting}
+$ milog -i 201605.dat -o 201605.csv -c
+reading 201605.dat
+writing 201605.csv
+
+[ ... Bearbeitung der CSV-Datei ... ]
+
+$ milog -i 201605.csv -p 201605 -l
+creating 201605.pdf
+
+\end{lstlisting}
+% \iffalse
+%</example>
+% \fi
+% \section{Implementierung}
+% \subsection{milog.cls}
+% \changes{v0.1}{2016/05/07}{initial version}
+% \changes{v1.0}{2016/07/01}{IPO CTAN}
+%    \begin{macrocode}
+%<*class>
+%    \end{macrocode}
+% Zunächst stellen wir die \LaTeX\ Klasse \class{milog.cls} bereit.
+%    \begin{macrocode}
+\NeedsTeXFormat{LaTeX2e}%
+\ProvidesClass{milog}[2016/07/01 class for MiLoG documentation v1.0]%
+%    \end{macrocode}
+% Wir laden die Pakete \package{xkeyval} und \package{xkvlxp} um geschweifte Klammern und etwas mehr in den globalen Klassenoptionen zu erlauben.
+%    \begin{macrocode}
+\RequirePackage{xkeyval}%
+\RequirePackage{xkvltxp}%
+%    \end{macrocode}
+% Wir stellen das Makro \cmd\MLG@JK@define@key zur Verfügung, das die Klassenoptionen mit globaler Wirkung%
+% und Optionen für das \cmd\milog\ Makro mit lokaler Wirkung definiert. Es bietet vier Argumente \marg{prefix},%
+% \marg{class},\marg{option} and \marg{default}.
+%    \begin{macrocode}
+\newcommand*\MLG@JK@define@key[4]%
+{%
+  \expandafter\gdef\csname#1@#3\endcsname{#4}%
+  \define@key{#2.cls}{#3}[#4]%
+  {%
+    \expandafter\gdef\csname#1@#3\endcsname{##1}%
+  }%
+  \define@key{#2}{#3}%
+  {%
+    \expandafter\def\csname#1@#3\endcsname{##1}%
+  }%
+}%
+%    \end{macrocode}
+% Damit können wir nun unsere Optionen definieren.
+% \changes{v0.5}{2016/06/03}{changed \texttt{color} default to \texttt{gray\string!40}}
+% \changes{v0.5}{2016/06/03}{added option \texttt{cc}}
+%    \begin{macrocode}
+\MLG@JK@define@key{MLG@JK}{milog}{color}{gray!40}%
+\MLG@JK@define@key{MLG@JK}{milog}{companyname}{Firma}%
+\MLG@JK@define@key{MLG@JK}{milog}{company}{}%
+\MLG@JK@define@key{MLG@JK}{milog}{namename}{Name, Vorname}%
+\MLG@JK@define@key{MLG@JK}{milog}{name}{}%
+\MLG@JK@define@key{MLG@JK}{milog}{idname}{Geburtsdatum/Personalnummer}%
+\MLG@JK@define@key{MLG@JK}{milog}{id}{}%
+\MLG@JK@define@key{MLG@JK}{milog}{monthname}{Monat/Jahr}%
+\MLG@JK@define@key{MLG@JK}{milog}{month}{}%
+\MLG@JK@define@key{MLG@JK}{milog}{heading}{Arbeitszeitnachweis nach %
+dem Mindestlohngesetz (\S 17 MiLoG)}%
+\MLG@JK@define@key{MLG@JK}{milog}{cc}{false}%
+%    \end{macrocode}
+% Jetzt wenden wir die Klassenoptionen an und setzen damit die Optionsmakros mit den Default-Werten.
+%    \begin{macrocode}
+\DeclareOptionX*{\PassOptionsToClass{\CurrentOption}{article}}%
+\ExecuteOptionsX{color,companyname,company,namename,name,idname,id,%
+                 monthname,month,heading,cc}%
+\ProcessOptionsX*\relax%
+%    \end{macrocode}
+% Wir laden die \class{article.cls} Klasse und müssen daher nichts weiter definieren.
+%    \begin{macrocode}
+\LoadClass{article}%
+%    \end{macrocode}
+% Wir laden weitere benötigte Pakete.
+%    \begin{macrocode}
+\RequirePackage[margin={2cm,2cm}]{geometry}%
+\RequirePackage{tabularx}%
+\RequirePackage{booktabs}%
+\RequirePackage{colortbl}%
+\RequirePackage{xifthen}%
+\RequirePackage[pages=some]{background}%
+\RequirePackage{transparent}%
+\RequirePackage{pgfplotstable}%
+%    \end{macrocode}
+% Für unser \enquote{Formular} benötigen wir keinen Absatzeinzug und keine Seitenzahlen.
+%    \begin{macrocode}
+\setlength{\parindent}{0pt}%
+\pagestyle{empty}%
+%    \end{macrocode}
+% Definitionen: Überschrift
+%    \begin{macrocode}
+\newcommand*\MLG@JK@heading@font@size{\Large}%
+\newcommand*\MLG@JK@heading@font@style{\bfseries}%
+%    \end{macrocode}
+% Definitionen: Abstände der Formularelemente
+%
+% Durch die Verwendung von \cmd\vfill\ wird der verbleibende Abstand gleichmäßig verteilt,
+% insbesonders bei unterschiedlich langen Monaten. Bei kürzeren Zeitabschnitten (wöchentlich) evtl. auf feste Abstände umdefinieren.
+%    \begin{macrocode}
+\newcommand*\MLG@JK@idtab@topskip{\vfill}%
+\newcommand*\MLG@JK@csvtab@topskip{\vfill}%
+\newcommand*\MLG@JK@signaturebox@topskip{\vfill\vfill}%
+%    \end{macrocode}
+% Definitionen: Tabelle (persönliche Daten)
+%    \begin{macrocode}
+\newcommand*\MLG@JK@idtab@width{13cm}%
+\newcommand*\MLG@JK@idtab@as{1.3}%
+%    \end{macrocode}
+% Definitionen: Tabelle (Arbeitszeitnachweis aus csv)
+%    \begin{macrocode}
+\newcommand*\MLG@JK@csvtab@as{1.15}%
+\newcommand*\MLG@JK@csvtab@opacity{0.5}%
+%    \end{macrocode}
+% Definitionen: cc (Optionen für \cmd\backgroundsetup)
+%    \begin{macrocode}
+\newcommand*\MLG@JK@bgopt@contents{Kopie}%
+\newcommand*\MLG@JK@bgopt@color{gray!30}%
+\newcommand*\MLG@JK@bgopt@opacity{0.5}%
+\newcommand*\MLG@JK@bgopt@scale{25}%
+%    \end{macrocode}
+% Definitionen: Unterschriftenabschnitt
+%    \begin{macrocode}
+\newcommand*\MLG@JK@signaturebox@space{3cm}%
+%    \end{macrocode}
+% Definitionen: Unterschrift
+%    \begin{macrocode}
+\newcommand*\MLG@JK@signature@width{6cm}%
+\newcommand*\MLG@JK@signature@labelskip{2ex}%
+\newcommand*\MLG@JK@signature@employee{Arbeitnehmer}%
+\newcommand*\MLG@JK@signature@employer{Arbeitgeber}%
+%    \end{macrocode}
+% Wir definieren die Ausgestaltung der Tabelle (csv). Insbesonders definieren wir die Ersetzungen \enquote{\texttt{nan}} $\rightarrow$ \enquote{\cmd\space} und \enquote{empty cells} $\rightarrow$ \enquote{--}.
+%    \begin{macrocode}
+\pgfplotstableset%
+{%
+  columns/tag/.style={string type,%
+                      column name={Tag},%
+                      string replace={nan}{\space}},%
+  columns/beginn/.style={string type,%
+                         column name={Arbeitsbeginn},%
+                         string replace={nan}{\space}},%
+  columns/pause/.style={string type,%
+                        column name={Unbezahlte Pause},%
+                        string replace={nan}{\space}},%
+  columns/ende/.style={string type,%
+                       column name={Arbeitsende},%
+                       string replace={nan}{\space}},%
+  columns/dauer/.style={string type,%
+                        column name={Arbeitsdauer},%
+                        string replace={nan}{\space}},%
+  columns/bemerkung/.style={string type,%
+                            column name={Bemerkung},%
+                            string replace={nan}{\space}},%
+  empty cells with={--},%
+  every head row/.style={before row=\toprule,after row=\midrule},%
+  every even row/.style={before row={\rowcolor{\MLG@JK@color}}},%
+%    \end{macrocode}
+% Wir helfen uns hier mit einem \enquote{dirty trick}! Die Abschlusslinie der Tabelle setzen wir \textbf{vor} der letzten Zeile!
+% Damit kann und \textbf{muss} die letzte Zeile die Gesamtzahl der geleisteten Arbeitstunden bzw. \enquote{nan} enthalten. 
+%    \begin{macrocode}
+  every last row/.style={before row=\bottomrule}%
+}%
+%    \end{macrocode}
+% \changes{v0.5}{2016/06/03}{made \enquote{\texttt{colortbl}} transparent}
+% Wir definieren ein Makro, das ein \package{colortbl}-Makro ändert um Transparenz in farbigen Tabellenzeilen zu erlauben.
+%
+% Siehe: \href{https://tex.stackexchange.com/questions/56424/alpha-channel-in-colortbl}{https://tex.stackexchange.com/questions/56424/alpha-channel-in-colortbl}
+%    \begin{macrocode}
+\newcommand*\MLG@JK@colortbl@transparent%
+{%
+  \def\CT@@do@color%
+  {%
+    \global\let\CT@do@color\relax%
+    \@tempdima\wd\z@%
+    \advance\@tempdima\@tempdimb%
+    \advance\@tempdima\@tempdimc%
+    \kern-\@tempdimb%
+    \transparent{\MLG@JK@csvtab@opacity}%
+    \leaders\vrule%
+    \hskip\@tempdima\@plus 1fill%
+    \kern-\@tempdimc%
+    \hskip-\wd\z@ \@plus -1fill%
+  }%
+}%
+%    \end{macrocode}
+% \changes{v0.4}{2016/05/26}{added \cmd\Formular}
+% \begin{macro}{\Formular}
+% Das Makro \cmd\Formular\ erlaubt das Setzen eines Blankoformulars für die Arbeitszeiterfassung.
+%
+% \cs{Formular}
+%    \begin{macrocode}
+\pgfplotstableread{%
+tag  beginn  pause  ende  dauer  bemerkung
+1    nan     nan    nan   nan    nan
+2    nan     nan    nan   nan    nan
+3    nan     nan    nan   nan    nan
+4    nan     nan    nan   nan    nan
+5    nan     nan    nan   nan    nan
+6    nan     nan    nan   nan    nan
+7    nan     nan    nan   nan    nan
+8    nan     nan    nan   nan    nan
+9    nan     nan    nan   nan    nan
+10   nan     nan    nan   nan    nan
+11   nan     nan    nan   nan    nan
+12   nan     nan    nan   nan    nan
+13   nan     nan    nan   nan    nan
+14   nan     nan    nan   nan    nan
+15   nan     nan    nan   nan    nan
+16   nan     nan    nan   nan    nan
+17   nan     nan    nan   nan    nan
+18   nan     nan    nan   nan    nan
+19   nan     nan    nan   nan    nan
+20   nan     nan    nan   nan    nan
+21   nan     nan    nan   nan    nan
+22   nan     nan    nan   nan    nan
+23   nan     nan    nan   nan    nan
+24   nan     nan    nan   nan    nan
+25   nan     nan    nan   nan    nan
+26   nan     nan    nan   nan    nan
+27   nan     nan    nan   nan    nan
+28   nan     nan    nan   nan    nan
+29   nan     nan    nan   nan    nan
+30   nan     nan    nan   nan    nan
+31   nan     nan    nan   nan    nan
+nan  nan     nan    nan   nan    nan
+}\Formular%
+%    \end{macrocode}
+% \end{macro}
+% Wir laden --- falls vorhanden --- die Datei \texttt{milog.cfg}
+% \changes{v0.2}{2016/05/20}{added loading of milog.cfg}
+%    \begin{macrocode}
+\AtBeginDocument%
+{%
+  \IfFileExists{milog.cfg}%
+  {%
+    \input{milog.cfg}%
+  }{}%
+}%
+%    \end{macrocode}
+% Wir setzen die persönlichen Daten innerhalb einer Tabelle mit erhöhtem Zeilenabstand.
+% \changes{v0.4}{2016/05/26}{made \texttt{id} optional in idtab}
+%    \begin{macrocode}
+\newcommand*\MLG@JK@idtab%
+{%
+  \MLG@JK@idtab@topskip%
+  \renewcommand{\arraystretch}{\MLG@JK@idtab@as}%
+  \begin{tabularx}{\MLG@JK@idtab@width}{>{\bfseries}r<{:}X}%
+  \MLG@JK@companyname & \MLG@JK@company \\%
+  \MLG@JK@namename & \MLG@JK@name \\%
+  \ifthenelse{\equal{\MLG@JK@id}{}}%
+  {}%
+  {\MLG@JK@idname & \MLG@JK@id \\}%
+  \MLG@JK@monthname & \MLG@JK@month%
+  \end{tabularx}%
+}%
+%    \end{macrocode}
+% Wir setzen die Arbeitszeiten (csv) innerhalb einer Tabelle mit leicht erhöhtem Zeilenabstand.
+%    \begin{macrocode}
+\newcommand*\MLG@JK@csvtab[1]%
+{%
+  \MLG@JK@csvtab@topskip%
+  \renewcommand{\arraystretch}{\MLG@JK@csvtab@as}%
+  \pgfplotstabletypeset{#1}%
+}%
+%    \end{macrocode}
+% Wir setzen Unterschriftslinien mit zentriertem Label.
+%    \begin{macrocode}
+\newcommand*\MLG@JK@signature[1]%
+{%
+  \parbox{\MLG@JK@signature@width}%
+  {%
+    \dotfill\\[\MLG@JK@signature@labelskip]%
+    \centering\footnotesize Datum,  Unterschrift (#1)%
+  }%
+}%
+%    \end{macrocode}
+% Wir setzen ein Unterschriftenblock für Arbeitnehmer und Arbeitgeber.
+%    \begin{macrocode}
+\newcommand*\MLG@JK@signaturebox%
+{%
+  \MLG@JK@signaturebox@topskip%
+  \MLG@JK@signature{\MLG@JK@signature@employee}%
+  \hspace{\MLG@JK@signaturebox@space}%
+  \MLG@JK@signature{\MLG@JK@signature@employer}%
+}%
+%    \end{macrocode}
+% Wir definieren ein Makro für den Aufbau des Arbeitszeitnachweises.
+%    \begin{macrocode}
+\newcommand*\MLG@JK@doc@body[1]%
+{%
+  {\MLG@JK@heading@font@size\MLG@JK@heading@font@style\MLG@JK@heading}%
+  \MLG@JK@idtab%
+  \MLG@JK@csvtab{#1}%
+  \MLG@JK@signaturebox%
+}%
+%    \end{macrocode}
+% \changes{v0.2}{2016/05/20}{added \cmd\milogsetup}
+% \begin{macro}{\milogsetup}
+% Das Makro \cmd\milogsetup\ ermöglicht das erneute Setzen der globalen Optionen, z. B. in der Datei \texttt{milog.cfg}.
+%
+% \cs{milogsetup}\marg{Optionen}
+%    \begin{macrocode}
+\newcommand*\milogsetup[1]%
+{%
+  \setkeys{milog.cls}{#1}%
+}%
+%    \end{macrocode}
+% \end{macro}
+% \begin{macro}{\milog}
+% Nun können wir das Usermakro \cmd\milog\ definieren
+%
+% \cs{milog}\oarg{Optionen}\marg{CSV-Datei}
+%    \begin{macrocode}
+\newcommand\milog[2][]%
+{%
+%    \end{macrocode}
+% Zunächst setzen die die Optionen für das Paket \package{background}.
+% Wir starten eine Gruppe um die Wirkung der Optionen lokal zu halten und
+% setzen abschließend die verschiedenen Formularabschnitte.
+% Falls ein cc (Carbon copy/Kopie) gewünscht wird, setzen wir den Dokumentbody erneut auf einer neuen Seite
+% und setzen auch das entsprechende Wasserzeichen im Hintergrund.
+%    \begin{macrocode}
+  \centering%
+  \backgroundsetup%
+  {%
+    contents=\MLG@JK@bgopt@contents,%
+    color=\MLG@JK@bgopt@color,%
+    opacity=\MLG@JK@bgopt@opacity,%
+    scale=\MLG@JK@bgopt@scale%
+  }%
+  \begingroup%
+    \setkeys{milog}{#1}%
+    \MLG@JK@colortbl@transparent%
+    \MLG@JK@doc@body{#2}%
+    \ifthenelse{\equal{\MLG@JK@cc}{true}}%
+    {%
+      \newpage%
+      \BgThispage%
+      \MLG@JK@doc@body{#2}%
+    }%
+    {}%
+  \endgroup%
+}%
+%    \end{macrocode}
+% \end{macro}
+%    \begin{macrocode}
+%</class>
+%    \end{macrocode}
+%    \begin{macrocode}
+%<*milogsh>
+%    \end{macrocode}
+% \subsection{milog}
+% \label{sec:milogimpl}
+% \changes{v0.3}{2016/05/22}{added milog bash script}
+% Das folgende \texttt{milog} Bash-Script zeigt beispielhaft eine mögliche Implementierung zur automatischen Auswertung eines \texttt{CSV}-Exports 
+% aus einer Arbeitszeiterfassungs"=App am Beispiel \enquote{Arbeitszeiterfassung}\cite{app:arbeitszeiterfassung}.
+%    \begin{macrocode}
+#!/bin/bash
+#
+VERSION="v1.0 (C) Josef Kleber (LPPL)"
+%    \end{macrocode}
+% Zunächst definieren wir einige Defaults, insbesondere für die \texttt{CSV}- und \texttt{PDF}-Ausgabedatei, sowie \enquote{boolsche} Schalter für die \enquote{CSV} und \enquote{LATEX} Durchgänge.
+%    \begin{macrocode}
+INPUT=""
+OUTPUT="_milog_.csv"
+DATE=""
+PDF="milog"
+CSV="true"
+LATEX="true"
+#
+%    \end{macrocode}
+% Nun können wir die Kommandozeilen-Argumente auswerten:
+%
+% \begin{description}
+% \item[-i] \texttt{CSV}-Eingabedatei
+% \item[-o] \texttt{CSV}-Ausgabedatei
+% \item[-p] \texttt{PDF}-Ausgabedatei
+% \item[-d] Datum/Zeitspanne, üblicherwiese im Format MM/YYYY
+% \item[-c] CSV only $\rightarrow$ \texttt{LATEX="false"}
+% \item[-l] LATEX only
+% \end{description}
+%    \begin{macrocode}
+while getopts "i:o:d:p:cl" flag
+do
+  case "$flag" in
+    i) INPUT="$OPTARG";;
+    o) OUTPUT="$OPTARG";;
+    p) PDF="$OPTARG";;
+    d) DATE="$OPTARG";;
+    c) LATEX="false";;
+    l) CSV="false";;
+  esac
+done
+#
+%    \end{macrocode}
+% Falls kein Datum übergeben wurde, versuchen wir den Namen der \texttt{CSV}-Eingabedatei im Format YYYYMM auszuwerten.
+%    \begin{macrocode}
+if [ "$DATE" = "" ]
+then
+%    \end{macrocode}
+% Zunächst definieren wir eine \enquote{regular expression} für eine sechsstellige Zahl und besorgen uns den Namen der \texttt{CSV}-Eingabedatei ohne Dateiendung.
+%    \begin{macrocode}
+  regex='^[0-9]{6}$'
+  YEARMONTH=`echo "$INPUT" | cut -d'.' -f1`
+%    \end{macrocode}
+% Gelingt ein \enquote{Match}, belegen wir \texttt{DATE} entsprechend im Format \texttt{MM/YYYY}.
+%    \begin{macrocode}
+  if [[ "$YEARMONTH" =~ $regex ]]
+  then
+    YEAR=`echo "$YEARMONTH" | cut -c1-4`
+    MONTH=`echo "$YEARMONTH" | cut -c5-6`
+    DATE="$MONTH/$YEAR"
+  fi
+fi
+#
+%    \end{macrocode}
+% Im \texttt{CSV}-Durchgang lesen wir zunächst die \texttt{CSV}-Eingabedatei ein, transformieren sie in das von \class{milog.cls} benötigte Format und schreiben sie in die \texttt{CSV}-Ausgabedatei.
+%    \begin{macrocode}
+if [ "$CSV" = "true" ]
+then
+  echo "reading $INPUT"
+  cat "$INPUT" | \
+  # delete first 3 lines
+  head -n -4 | \
+  # delete last 3 lines
+  tail -n +4 | \
+  # deal with "empty" lines
+  sed -e 's/;;;;;;;;;$/{};{};{};{};{};{};{};{};{}/' | \
+  # delete some columns we don't need
+  cut -d ';' -f 2-4,8-10 | \
+  # replace the last ';' with ';{}'
+  sed -e 's/;$/;{}/' | \
+  # replace header keys
+  sed -e 's/Datum/tag/' -e 's/von/beginn/' -e 's/bis/ende/' -e 's/Pausen/pause/' -e 's/Netto/dauer/' -e 's/Visum/bemerkung/' | \
+  # change 'Ruhetag' lines
+  sed -e 's/\(.*\);Ruhetag;Ruhetag;.*/\1;{};{};{};{};Ruhetag/' | \
+  # change 'Ferien/Urlaub' lines
+  sed -e 's#\(.*\);Ferien/Urlaub;Ferien/Urlaub;.*#\1;{};{};{};{};Urlaub#' | \
+  # change 'Krank' lines
+  sed -e 's/\(.*\);Krank;Krank;.*/\1;{};{};{};{};Krank/' | \
+  # change 'Feiertag' lines
+  sed -e 's/\(.*\);Feiertag;Feiertag;.*/\1;{};{};{};{};Feiertag/' | \
+  # change last line with total hours
+  sed -e 's/^;;;;\(.*\)/nan;nan;nan;nan;\1;nan/' | \
+  # replace '0:00' with '{}'
+  sed -e 's/0:00/{}/g' | \
+  # change order of columns and field seperator (';' -> '\t')
+  awk 'BEGIN { OFS="\t"; FS=";" } { print $1, $2, $4, $3, $5, $6 }' >"$OUTPUT"
+  echo "writing $OUTPUT"
+fi
+#
+%    \end{macrocode}
+% Im \texttt{LATEX}-Durchgang prüfen wir zuerst auf \enquote{\texttt{LATEX} only} und passen die \texttt{CSV}-Ausgabedatei entsprechend an.
+%    \begin{macrocode}
+if [ "$LATEX" = "true" ]
+then
+  if [ "$CSV" = "false" ]
+  then
+    if [ -z "$INPUT" ]
+    then
+      OUTPUT="_milog_.csv"
+    else
+      OUTPUT="$INPUT"
+    fi
+  fi
+%    \end{macrocode}
+% Wir definieren eine \texttt{HERE}-\LaTeX-Datei ...
+%    \begin{macrocode}
+  cat >"$PDF.tex" <<EOF
+\documentclass{milog}
+\usepackage[utf8]{inputenc}
+\usepackage[T1]{fontenc}
+\usepackage{libertine}
+\begin{document}
+\milog[month={$DATE}]{$OUTPUT}
+\end{document}
+EOF
+  echo "creating $PDF.pdf"
+%    \end{macrocode}
+% und erzeugen damit unsere \texttt{PDF}-Datei.
+%    \begin{macrocode}
+  pdflatex "$PDF" 2>&1 >/dev/null
+  rm "$PDF".tex "$PDF".aux "$PDF".log
+fi
+#
+exit 0
+%    \end{macrocode}
+%    \begin{macrocode}
+%</milogsh>
+%    \end{macrocode}
+%\Finale
\ No newline at end of file
-- 
cgit v1.2.3

