From e0c6872cf40896c7be36b11dcc744620f10adf1d Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Mon, 2 Sep 2019 13:46:59 +0900 Subject: Initial commit --- macros/latex/contrib/milog/README.md | 23 + macros/latex/contrib/milog/makefile | 68 ++ macros/latex/contrib/milog/milog-example.pdf | Bin 0 -> 176038 bytes macros/latex/contrib/milog/milog-formular.pdf | Bin 0 -> 169243 bytes macros/latex/contrib/milog/milog.dtx | 1180 +++++++++++++++++++++++++ macros/latex/contrib/milog/milog.pdf | Bin 0 -> 132309 bytes 6 files changed, 1271 insertions(+) create mode 100644 macros/latex/contrib/milog/README.md create mode 100644 macros/latex/contrib/milog/makefile create mode 100644 macros/latex/contrib/milog/milog-example.pdf create mode 100644 macros/latex/contrib/milog/milog-formular.pdf create mode 100644 macros/latex/contrib/milog/milog.dtx create mode 100644 macros/latex/contrib/milog/milog.pdf (limited to 'macros/latex/contrib/milog') diff --git a/macros/latex/contrib/milog/README.md b/macros/latex/contrib/milog/README.md new file mode 100644 index 0000000000..6619f0e9bd --- /dev/null +++ b/macros/latex/contrib/milog/README.md @@ -0,0 +1,23 @@ +# 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 diff --git a/macros/latex/contrib/milog/makefile b/macros/latex/contrib/milog/makefile new file mode 100644 index 0000000000..f099041b0b --- /dev/null +++ b/macros/latex/contrib/milog/makefile @@ -0,0 +1,68 @@ +TEXMF = $(shell kpsewhich -var-value TEXMFLOCAL) +RM = rm -f +PKGNAME = milog + +all: package doc example + +doc: git example + pdflatex $(PKGNAME).dtx + bibtex $(PKGNAME) + makeindex -s gind.ist $(PKGNAME).idx + makeindex -s gglo.ist $(PKGNAME).glo -o $(PKGNAME).gls + pdflatex $(PKGNAME).dtx + bibtex $(PKGNAME) + makeindex -s gind.ist $(PKGNAME).idx + makeindex -s gglo.ist $(PKGNAME).glo -o $(PKGNAME).gls + pdflatex $(PKGNAME).dtx + bibtex $(PKGNAME) + makeindex -s gind.ist $(PKGNAME).idx + makeindex -s gglo.ist $(PKGNAME).glo -o $(PKGNAME).gls + sed -i -e '17,27d' $(PKGNAME).ind + pdflatex $(PKGNAME).dtx + +package: + pdftex $(PKGNAME).dtx + mv milog.sh milog + mv README.md ./../README.md + +example: + pdflatex $(PKGNAME)-example + pdflatex $(PKGNAME)-example + pdflatex $(PKGNAME)-formular + pdflatex $(PKGNAME)-formular + + +install: doc + mkdir -p ${TEXMF}/doc/latex/${PKGNAME} + cp README.md ${TEXMF}/doc/latex/${PKGNAME}/ + cp *.txt ${TEXMF}/doc/latex/${PKGNAME}/ + cp *.tex ${TEXMF}/doc/latex/${PKGNAME}/ + cp *.cfg ${TEXMF}/doc/latex/${PKGNAME}/ + cp *.dat ${TEXMF}/doc/latex/${PKGNAME}/ + cp *.csv ${TEXMF}/doc/latex/${PKGNAME}/ + cp *.pdf ${TEXMF}/doc/latex/${PKGNAME}/ + mkdir -p ${TEXMF}/tex/latex/${PKGNAME} + cp *.cls ${TEXMF}/tex/latex/${PKGNAME}/ + texhash + +uninstall: + rm -rf ${TEXMF}/doc/latex/${PKGNAME} + rm -rf ${TEXMF}/tex/latex/${PKGNAME} + texhash + +git: package + cp *.cls ./../tex/latex/${PKGNAME} + +ctan: git + ./copyCTAN + +clean: + $(RM) *.aux *.fdb_latexmk *.fls *.ind *.idx *.ilg *.glo *.gls \ + *.log *.lol *.m *.out *.tmp *.toc *.sh *.hd mlgdoc.csv \ + *.bbl *.blg *.ins *.bib *.sty + +cleanall: clean + $(RM) $(PKGNAME).pdf $(PKGNAME)-example.pdf $(PKGNAME)-formular.pdf \ + $(PKGNAME) README.md *.cfg *.csv *.dat *.tex *.txt *.cls + +.PHONY: all doc package example install uninstall git ctan clean cleanall diff --git a/macros/latex/contrib/milog/milog-example.pdf b/macros/latex/contrib/milog/milog-example.pdf new file mode 100644 index 0000000000..b7f259adc7 Binary files /dev/null and b/macros/latex/contrib/milog/milog-example.pdf differ diff --git a/macros/latex/contrib/milog/milog-formular.pdf b/macros/latex/contrib/milog/milog-formular.pdf new file mode 100644 index 0000000000..26c675faba Binary files /dev/null and b/macros/latex/contrib/milog/milog-formular.pdf differ 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 +% +%<*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 +% +%<*milogcfg> +\milogsetup{company={\TeX\ Satz GmbH},name={Mustermann, Max},id={01.01.1970/0815}} +% +%<*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 +% +%<*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 +% +%<*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 +% +%<*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}, + } +% +%<*examplefile> +\documentclass{milog} +\usepackage[utf8]{inputenc} +\usepackage[T1]{fontenc} +\usepackage{libertine} +\begin{document} +\milog[month={05/2016},cc=true]{201605.csv} +\end{document} +% +%<*exform> +\documentclass{milog} +\usepackage[utf8]{inputenc} +\usepackage[T1]{fontenc} +\usepackage{libertine} +\begin{document} +\milog[company={},name={},id={\space}]{\Formular} +\end{document} +% +%<*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 +% +%<*internal> +\fi +\def\nameofplainTeX{plain} +\ifx\fmtname\nameofplainTeX\else + \expandafter\begingroup +\fi +% +%<*install> +\input docstrip.tex +\keepsilent +\askforoverwritefalse +\preamble + +Copyright (C) 2016 by: +Josef Kleber + + +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}} +} +% +%\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 +% +%<*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} +% +% \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 +% +% \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 +% +% \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 +% +% \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 +% +% \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} +% +% \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" <&1 >/dev/null + rm "$PDF".tex "$PDF".aux "$PDF".log +fi +# +exit 0 +% \end{macrocode} +% \begin{macrocode} +% +% \end{macrocode} +%\Finale \ No newline at end of file diff --git a/macros/latex/contrib/milog/milog.pdf b/macros/latex/contrib/milog/milog.pdf new file mode 100644 index 0000000000..667715d715 Binary files /dev/null and b/macros/latex/contrib/milog/milog.pdf differ -- cgit v1.2.3