wochenbericht

[de] LaTeX-Vorlage für Wochenberichte
git clone git://git.hanetzok.net/wochenbericht
Log | Files | Refs | README | LICENSE

commit 61c82b7f176d6cab5e00ff4c5a5bb8196628185a
Author: Markus Hanetzok <markus@hanetzok.net>
Date:   Thu, 16 Mar 2023 10:42:09 +0100

Initial commit

Diffstat:
A.gitignore | 5+++++
ALICENSE | 13+++++++++++++
AREADME.md | 33+++++++++++++++++++++++++++++++++
Aexample/betrieb.tex | 1+
Aexample/extern.tex | 1+
Aexample/schule.tex | 1+
Aexample/wochenbericht.pdf | 0
Aexample/wochenbericht.tex | 81+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Atex/template/wochenbericht.tex | 81+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Awochenbericht.sh | 143+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
10 files changed, 359 insertions(+), 0 deletions(-)

diff --git a/.gitignore b/.gitignore @@ -0,0 +1,5 @@ +*.aux +*.log +tex/history +out/* +user.csv diff --git a/LICENSE b/LICENSE @@ -0,0 +1,13 @@ +DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE + Version 2, December 2004 + + Copyright (C) 2004 Sam Hocevar <sam@hocevar.net> + + Everyone is permitted to copy and distribute verbatim or modified + copies of this license document, and changing it is allowed as long + as the name is changed. + + DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. You just DO WHAT THE FUCK YOU WANT TO. diff --git a/README.md b/README.md @@ -0,0 +1,33 @@ +# Wochenbericht LaTeX-Template + +LaTeX Vorlage zum Erstellen von Wochenberichten inklusive Hilfsskript. + +## Abhängigkeiten + +Folgende Programme werden zum Ausführen des Helferskripts benötigt: + +- `dialog` +- `pdflatex` (siehe [TeX Live](https://wiki.archlinux.org/title/TeX_Live)) +- `vipe` (in moreutils enthalten) + +## Anwendung + +Das Helferskript kann durch folgenden Befehl aufgerufen werden: + +``` +cd /Pfad/zum/Skript +chmod +x wochenbericht.sh +./wochenbericht.sh +``` + +Nach der Abfrage der grundlegenden Daten öffnet sich der Standardeditor um +die Inhalte der einzelnen Rubriken einzutragen. + +(`vipe` nutzt dazu die `$EDITOR` Umgebungsvariable) + +## Anpassung + +Der Pfad zur Template Datei und zum Ausgabeverzeichnis können direkt im Skript +mit den Variablen `tex_dir` und `out_dir` angepasst werden. +Wenn eine andere TeX-Distro genutzt werden soll kann die `tex_cmd` Funktion +angespasst werden. diff --git a/example/betrieb.tex b/example/betrieb.tex @@ -0,0 +1 @@ +Betriebliche Tätigkeiten werden hier eingetragen. diff --git a/example/extern.tex b/example/extern.tex @@ -0,0 +1 @@ +Außerbetriebliche Tätigkeiten werden hier eingetragen. diff --git a/example/schule.tex b/example/schule.tex @@ -0,0 +1 @@ +Berufsschulinhalte werden hier eingetragen. diff --git a/example/wochenbericht.pdf b/example/wochenbericht.pdf Binary files differ. diff --git a/example/wochenbericht.tex b/example/wochenbericht.tex @@ -0,0 +1,81 @@ +\documentclass{article} +\usepackage[a4paper, left=1.5cm, right=1.5cm, top=2.5cm, bottom=2cm]{geometry} + +\begin{document} +\thispagestyle{empty} % Um Seitenzahlanzeige zu unterdrücken + +% Titel +\begin{center} + \fbox{ + \begin{minipage}{16.5 cm} + \begin{center} + \begin{Large} + \textbf{Wochenbericht}\\ + \textbf{von}\\ + \textbf{John Doe}\\ + \end{Large} + \end{center} + \end{minipage} + }\\ + \vspace{2mm} + % Abteilung und Datum + \noindent\begin{minipage}{17cm} + \framebox[17cm]{ + \textbf{Abteilung:} Application Development | + \textbf{Woche:} 05.01.1970 - 11.01.1970 | + \textbf{Ausbildungsjahr:} 1 + } + \end{minipage}\\ + \vspace{2mm} + % Tätigkeiten + \fbox{ + \begin{minipage}[t][5cm]{16.5 cm} + \textbf{Betriebliche Tätigkeit}\\ + \line(1,0){16.4 cm} + \include{betrieb.tex} + \end{minipage} + }\\ + \vspace{2mm} + \fbox{ + \begin{minipage}[t][5cm]{16.4 cm} + \textbf{Außerschulische Tätigkeit}\\ + \line(1,0){16.4 cm} + \include{extern.tex} + \end{minipage} + }\\ + \vspace{2mm} + \fbox{ + \begin{minipage}[t][5cm]{16.4 cm} + \textbf{Berufsschule}\\ + \line(1,0){16.4 cm} + \include{schule.tex} + \end{minipage} + }\\ + \vspace{2mm} + % Unterschriftenfelder + \fbox{ + \begin{minipage}{5.1 cm} + Datum: \\ + \line(1,0){5 cm}\\ + \vspace{2.5cm}\\ + Unterschrift Auszubildender + \end{minipage} + } + \fbox{ + \begin{minipage}{5.1 cm} + Datum: \\ + \line(1,0){5 cm}\\ + \vspace{2.5cm}\\ + Unterschrift Ausbildender + \end{minipage} + } + \fbox{ + \begin{minipage}{5.1 cm} + Datum: \\ + \line(1,0){5 cm}\\ + \vspace{2.5cm}\\ + Unterschrift Sichtvermerk + \end{minipage} + } +\end{center} +\end{document} diff --git a/tex/template/wochenbericht.tex b/tex/template/wochenbericht.tex @@ -0,0 +1,81 @@ +\documentclass{article} +\usepackage[a4paper, left=1.5cm, right=1.5cm, top=2.5cm, bottom=2cm]{geometry} + +\begin{document} +\thispagestyle{empty} % Um Seitenzahlanzeige zu unterdrücken + +% Titel +\begin{center} + \fbox{ + \begin{minipage}{16.5 cm} + \begin{center} + \begin{Large} + \textbf{Wochenbericht}\\ + \textbf{von}\\ + \textbf{NAME}\\ + \end{Large} + \end{center} + \end{minipage} + }\\ + \vspace{2mm} + % Abteilung und Datum + \noindent\begin{minipage}{17cm} + \framebox[17cm]{ + \textbf{Abteilung:} ABTEILUNG | + \textbf{Woche:} WOCHE | + \textbf{Ausbildungsjahr:} AUSBILDUNGSJAHR + } + \end{minipage}\\ + \vspace{2mm} + % Tätigkeiten + \fbox{ + \begin{minipage}[t][5cm]{16.5 cm} + \textbf{Betriebliche Tätigkeit}\\ + \line(1,0){16.4 cm}\\ + \include{betrieb.tex} + \end{minipage} + }\\ + \vspace{2mm} + \fbox{ + \begin{minipage}[t][5cm]{16.4 cm} + \textbf{Außerschulische Tätigkeit}\\ + \line(1,0){16.4 cm}\\ + \include{extern.tex} + \end{minipage} + }\\ + \vspace{2mm} + \fbox{ + \begin{minipage}[t][5cm]{16.4 cm} + \textbf{Berufsschule}\\ + \line(1,0){16.4 cm}\\ + \include{schule.tex} + \end{minipage} + }\\ + \vspace{2mm} + % Unterschriftenfelder + \fbox{ + \begin{minipage}{5.1 cm} + Datum: \\ + \line(1,0){5 cm}\\ + \vspace{2.5cm}\\ + Unterschrift Auszubildender + \end{minipage} + } + \fbox{ + \begin{minipage}{5.1 cm} + Datum: \\ + \line(1,0){5 cm}\\ + \vspace{2.5cm}\\ + Unterschrift Ausbildender + \end{minipage} + } + \fbox{ + \begin{minipage}{5.1 cm} + Datum: \\ + \line(1,0){5 cm}\\ + \vspace{2.5cm}\\ + Unterschrift Sichtvermerk + \end{minipage} + } +\end{center} +\end{document} diff --git a/wochenbericht.sh b/wochenbericht.sh @@ -0,0 +1,143 @@ +#!/bin/bash + +# Copyright © 2022 Markus Hanetzok <markus@hanetzok.net> +# This work is free. You can redistribute it and/or modify it under the +# terms of the Do What The Fuck You Want To Public License, Version 2, +# as published by Sam Hocevar. See the COPYING file for more details. + +### VARIABLES +# Determine the locations the script needs to know +script_dir="$(dirname $(realpath $0))" +tex_dir="$script_dir/tex" +out_dir="$script_dir/out" +user_data="$script_dir/user.csv" + +### FUNCTIONS + +tex_cmd() { + pdflatex -output-directory "$out_dir" -jobname "$1" "$2" + rm "$out_dir"/*.aux "$out_dir"/*.log +} + +dialog_helper() { + dialog --"$1" "$2" 0 0 --output-fd 1 +} + +error() { + clear + printf "ERROR: $1\n" + exit 1 +} + +read_data() { # Get the values from user.csv + while IFS=, read -r key value; do + case "$key" in + "NAME") name="$value" ;; + "TRAIN_YEAR") train_year="$value" ;; + "CAL_YEAR") cal_year="$value" ;; + "CAL_WEEK") cal_week="$value" ;; + "DEPARTMENT") department="$value" ;; + *) ;; + esac + done < "$user_data" +} + +get_data() { # Get data via user input + name="$(dialog_helper "inputbox" "Name des Auszubildenden:")" + train_year="$(dialog_helper "inputbox" "Ausbildungsjahr:")" + cal_year="$(dialog_helper "inputbox" "Kalenderjahr des Berichts:")" + cal_week="$(dialog_helper "inputbox" "Kalenderwoche des Berichts:")" + department="$(dialog_helper "inputbox" "Abteilung:")" +} + +# Function that determines the first and last day of the chosen week +get_date_range() { + local first_Mon + local date_fmt="+%d.%m.%Y" + local mon sun + + if (($(date -d $cal_year-01-01 +%W))); then + first_Mon=$cal_year-01-01 + else + first_Mon=$cal_year-01-$((01 + (7 - $(date -d $cal_year-01-01 +%u) + 1) )) + fi + + mon=$(date -d "$first_Mon +$(($cal_week - 1)) week" "$date_fmt") + sun=$(date -d "$first_Mon +$(($cal_week - 1)) week + 6 day" "$date_fmt") + date_range="$mon - $sun" +} + +vipe_cmd() { # Helper function to call vipe + echo "$1 (DIESE ZEILE LÖSCHEN!)" | vipe > "$current_tex/$2.tex" +} + +### SCRIPT + +dialog_helper "msgbox" "Willkommen im Wochenberichtsskript!" || error "dialog needs to be installed to run this script!" + +# When tex dir is not found, script will exit, because it won't find template +[ -d "$tex_dir" ] || error "Cannot find given tex directory: $tex_dir" + +[ -d "$out_dir" ] || mkdir -p "$out_dir" + +while true; do + [ -f "$user_data" ] && read_data || get_data + get_date_range "$cal_week" "$cal_year" + + # Let user validate inputs, let him redo the inputs if something is wrong + while true; do + dialog_helper "yesno" "Name: $name\nAusbildungsjahr: $train_year\nAusbildungsjahr: $train_year\nKalenderjahr: $cal_year\nAbteilung: $department\nWoche: $date_range\n\nSind die Angaben korrekt?" + + case "$?" in + '0' ) break ;; + '1' ) get_data; get_date_range ;; + * ) error "Invalid case" ;; + esac + + done + + # Write the current data to user.csv + echo -e "NAME,$name\n\ + TRAIN_YEAR,$train_year\n\ + CAL_YEAR,$cal_year\n\ + CAL_WEEK,$cal_week"\n\ + DEPARTMENT,$department > "$user_data" + + # Copy template and insert data into copied file + current_tex="$tex_dir/history/$cal_year/$cal_week" + mkdir -p "$current_tex" || error "Could not create directory for .tex files $current_tex" + + cp -f "$tex_dir/template/wochenbericht.tex" "$current_tex/wochenbericht.tex" + sed -i "s/NAME/$name/" "$current_tex/wochenbericht.tex" + sed -i "s/WOCHE/$date_range/" "$current_tex/wochenbericht.tex" + sed -i "s/AUSBILDUNGSJAHR/$train_year/" "$current_tex/wochenbericht.tex" + sed -i "s/ABTEILUNG/$department/" "$current_tex/wochenbericht.tex" + + # Use vipe to let user enter their report text + vipe_cmd "Betriebliche Tätigkeiten" betrieb + vipe_cmd "Außerbetriebliche Tätigkeiten" extern + vipe_cmd "Berufsschule" schule + + # Compile via pdflatex, remove *.log and *.aux files + cd "$current_tex" + tex_cmd "$cal_year-$cal_week" "wochenbericht.tex" + + # Increment cal_week and check if it was the last week of the year + if [ "$cal_week" == 52 ]; then + cal_week="1" + ((cal_year=cal_year+1)) + sed -i "s/CAL_WEEK.*/CAL_WEEK,$cal_week/" "$user_data" + sed -i "s/CAL_YEAR.*/CAL_YEAR,$cal_year/" "$user_data" + else + ((cal_week=cal_week+1)) + sed -i "s/CAL_WEEK.*/CAL_WEEK,$cal_week/" "$user_data" + fi + + # Ask user if he wants to create the next report as well + dialog_helper "yesno" "Noch einen Bericht erstellen?" + case "$?" in + '0' ) break ;; + '1' ) clear; exit 0 ;; + * ) error "Invalid case" ;; + esac +done