commit 61c82b7f176d6cab5e00ff4c5a5bb8196628185a
Author: Markus Hanetzok <markus@hanetzok.net>
Date: Thu, 16 Mar 2023 10:42:09 +0100
Initial commit
Diffstat:
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