% \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