From c8df5630b863d139aa13d8a0b1dbc0f477727fb3 Mon Sep 17 00:00:00 2001 From: Christian Merten Date: Sun, 6 Apr 2025 00:11:39 +0200 Subject: [PATCH] refactor(latex): add base template and unify designs We add a base template for all latex documents to unify the desings and improve maintainability. Also the table definitions are simplified fixing the various width issues. --- .../members/crisis_intervention_list.tex | 77 +--------- .../templates/members/notelist_summary.tex | 39 ++---- .../members/templates/members/notes_list.tex | 51 ++----- .../templates/members/seminar_report.tex | 132 ++---------------- .../members/templates/members/tex_base.tex | 98 +++++++++++++ 5 files changed, 136 insertions(+), 261 deletions(-) create mode 100644 jdav_web/members/templates/members/tex_base.tex diff --git a/jdav_web/members/templates/members/crisis_intervention_list.tex b/jdav_web/members/templates/members/crisis_intervention_list.tex index dd15edf..8aaea17 100644 --- a/jdav_web/members/templates/members/crisis_intervention_list.tex +++ b/jdav_web/members/templates/members/crisis_intervention_list.tex @@ -1,74 +1,9 @@ +{% extends "members/tex_base.tex" %} {% load static common tex_extras %} -\documentclass[a4paper]{article} +{% block title %}Teilnehmer*innenliste Sektionsveranstaltung{% endblock %} -\usepackage[utf8]{inputenc} -% remove all undefined unicode characters instead of throwing an error -\makeatletter -\def\UTFviii@undefined@err#1{} -\makeatother -\usepackage{booktabs} -\usepackage{amssymb} -\usepackage{cmbright} -\usepackage{graphicx} -\usepackage{textpos} -\usepackage[colorlinks, breaklinks]{hyperref} -\usepackage{float} -\usepackage[margin=2cm]{geometry} -\usepackage{array} -\usepackage{tabularx} -\usepackage{ltablex} - -\newcommand{\picpos}[4]{ - \begin{textblock*}{#1}(#2, #3) - \includegraphics[width=\textwidth]{#4} - \end{textblock*} -} - -% custom url command for properly formatting emails -\DeclareUrlCommand\Email{\urlstyle{same}} -% allow linebreak after every character -\expandafter\def\expandafter\UrlBreaks\expandafter{\UrlBreaks -\do\/\do\a\do\b\do\c\do\d\do\e\do\f\do\g\do\h\do\i\do\j\do\k -\do\l\do\m\do\n\do\o\do\p\do\q\do\r\do\s\do\t\do\u\do\v -\do\w\do\x\do\y\do\z -\do\A\do\B\do\C\do\D\do\E\do\F\do\G\do\H\do\I\do\J\do\K -\do\L\do\M\do\N\do\O\do\P\do\Q\do\R\do\S\do\T\do\U\do\V -\do\W\do\X\do\Y\do\Z} - -\renewcommand{\arraystretch}{1.5} - -\newcolumntype{L}{>{\hspace{0pt}\raggedright\arraybackslash}X} -\newcolumntype{S}{>{\raggedright\arraybackslash\hsize=0.7\hsize}X} - -\newcommand{\tickedbox}{ - \makebox[0pt][l]{$\square$}\raisebox{.15ex}{\hspace{0.1em}$\checkmark$} -} -\newcommand{\checkbox}{ - \makebox[0pt][l]{$\square$} -} -\begin{document} -% HEADER RIGHT -{% settings_value 'DEFAULT_STATIC_PATH' as static_root %} -\picpos{4.5cm}{11.5cm}{0cm}{% -{{ static_root }}/general/img/dav_logo_sektion.png% -} -\begin{textblock*}{5cm}(12cm, 2.3cm) - \begin{flushright} - \small - \noindent Deutscher Alpenverein e. V. \\ - Sektion {{ settings.SEKTION }} \\ - {{ settings.SEKTION_STREET }} \\ - {{ settings.SEKTION_TOWN }} \\ - Tel.: {{ settings.SEKTION_TELEPHONE }} \\ - Fax: {{ settings.SEKTION_TELEFAX }} \\ - {{ settings.SEKTION_CONTACT_MAIL }} \\ - \end{flushright} -\end{textblock*} - -% HEADLINE -{\noindent\LARGE{Teilnehmer*innenliste\\[2mm]Sektionsveranstaltung}}\\[1mm] -\textit{Erstellt: {{ creation_date }} }\\ +{% block content %} % DESCRIPTION TABLE \begin{table}[H] @@ -89,7 +24,7 @@ \end{tabular} \end{table} -\begin{tabularx}{1\linewidth}{lSLSL} +\begin{tabularx}{.97\linewidth}{lXXXX} \toprule \# & \textbf{Name} & \textbf{Anschrift} & \textbf{Telefon} & \textbf{Notfallkontakte} \\ \midrule @@ -98,7 +33,7 @@ \endfoot {% for m in memberlist.membersonlist.all %} - {{ forloop.counter }} & + {{ forloop.counter }} & {{ m.member.name|esc_all }} & {{ m.member.address_multiline|esc_all }} & {{ m.member.contact_phone_number|esc_all }} & @@ -115,4 +50,4 @@ \noindent Bitte die ausgefüllte Teilnehmerliste vor Antritt der Aktivität per E-Mail an \href{mailto:{{ settings.SEKTION_CRISIS_INTERVENTION_MAIL }}}{ {{ settings.SEKTION_CRISIS_INTERVENTION_MAIL }} } senden. -\end{document} +{% endblock content %} diff --git a/jdav_web/members/templates/members/notelist_summary.tex b/jdav_web/members/templates/members/notelist_summary.tex index 182132a..7a96ade 100644 --- a/jdav_web/members/templates/members/notelist_summary.tex +++ b/jdav_web/members/templates/members/notelist_summary.tex @@ -1,34 +1,12 @@ -{% load tex_extras %} +{% extends "members/tex_base.tex" %} +{% load static common tex_extras %} -\documentclass{article} +{% block title %}{{ memberlist.title|esc_all }}{% endblock %} +{% block contact %}{% endblock %} -\usepackage[utf8]{inputenc} -% remove all undefined unicode characters instead of throwing an error -\makeatletter -\def\UTFviii@undefined@err#1{} -\makeatother -\usepackage{booktabs} -\usepackage{tabularx} -\usepackage{ragged2e} -\usepackage{amssymb} -\usepackage{cmbright} -\usepackage{graphicx} -\usepackage{textpos} -\usepackage[colorlinks]{hyperref} -\usepackage{float} -\usepackage[margin=1cm]{geometry} +{% block content %} -\renewcommand{\arraystretch}{1.5} - -\newcolumntype{Y}{>{\RaggedRight\arraybackslash}X} -\begin{document} - -% HEADLINE -{\noindent\LARGE\textsc{ {{ memberlist.title|esc_all }} }}\\ -\textit{Erstellt: {{ creation_date }} }\\ - -\begin{table}[H] - \begin{tabularx}{\textwidth}{@{} l l Y @{}} +\begin{tabularx}{\textwidth}{l X} \toprule \textbf{Name} & \textbf{Kommentare} \\ \midrule @@ -36,7 +14,6 @@ {{ m.member.name|esc_all }} & {{ m.comments_tex|esc_all }} \\ {% endfor %} \bottomrule - \end{tabularx} -\end{table} +\end{tabularx} -\end{document} +{% endblock %} diff --git a/jdav_web/members/templates/members/notes_list.tex b/jdav_web/members/templates/members/notes_list.tex index e7ed249..39f8b0a 100644 --- a/jdav_web/members/templates/members/notes_list.tex +++ b/jdav_web/members/templates/members/notes_list.tex @@ -1,32 +1,9 @@ -{% load tex_extras %} +{% extends "members/tex_base.tex" %} +{% load static common tex_extras %} -\documentclass[a4paper]{article} +{% block title %}Teilnehmer*innenübersicht{% endblock %} -\usepackage[utf8]{inputenc} -% remove all undefined unicode characters instead of throwing an error -\makeatletter -\def\UTFviii@undefined@err#1{} -\makeatother -\usepackage{booktabs} -\usepackage{tabularx} -\usepackage{ragged2e} -\usepackage{amssymb} -\usepackage{cmbright} -\usepackage{graphicx} -\usepackage{textpos} -\usepackage[colorlinks]{hyperref} -\usepackage{float} -\usepackage[margin=1cm]{geometry} -\usepackage{ltablex} - -\renewcommand{\arraystretch}{1.5} - -\newcolumntype{Y}{>{\RaggedRight\arraybackslash}p{0.4\linewidth}} -\begin{document} - -% HEADLINE -{\noindent\LARGE{Teilnehmer*innenübersicht}}\\[1mm] -\textit{Erstellt: {{ creation_date }} }\\ +{% block content %} % DESCRIPTION \begin{table}[H] @@ -40,20 +17,21 @@ \end{tabular} \end{table} -\begin{tabularx}{1\linewidth}{ l l l Y} +\begin{tabularx}{.97\linewidth}{lXXX} \toprule \# & \textbf{Name} & \textbf{Fähigkeiten (max. 100)} & \textbf{Kommentare} \\ \midrule + \endhead + \bottomrule + \endfoot + {% for p in people %} {{ forloop.counter }} & {{ p.name|esc_all }} & {{ p.qualities|esc_all }} & {{ p.comments|esc_all }} \\ {% endfor %} - \bottomrule \end{tabularx} - -\noindent\large Fähigkeiten der Gruppe\\ -\begin{table}[H] - \begin{tabular*}{1\linewidth}{@{\extracolsep{\fill}}llll} +\noindent{\large Fähigkeiten der Gruppe}\\ +\begin{tabularx}{.97\linewidth}{Xlll} \toprule \textbf{Name} & \textbf{Durchschnitt} & \textbf{Minimum} & \textbf{Maximum} \\ \midrule @@ -61,9 +39,6 @@ {{ skill.name|esc_all }} & {{ skill.skill_avg|esc_all }} & {{ skill.skill_min|esc_all }} & {{ skill.skill_max|esc_all }} \\ {% endfor %} \bottomrule - \end{tabular*} -\end{table} - -\vspace{1cm} +\end{tabularx} -\end{document} +{% endblock %} diff --git a/jdav_web/members/templates/members/seminar_report.tex b/jdav_web/members/templates/members/seminar_report.tex index 8a6420e..1366d88 100644 --- a/jdav_web/members/templates/members/seminar_report.tex +++ b/jdav_web/members/templates/members/seminar_report.tex @@ -1,80 +1,9 @@ +{% extends "members/tex_base.tex" %} {% load static common tex_extras %} -\documentclass[a4paper]{article} +{% block title %}Seminarbericht{% endblock %} -\usepackage[utf8]{inputenc} -% remove all undefined unicode characters instead of throwing an error -\makeatletter -\def\UTFviii@undefined@err#1{} -\makeatother -\usepackage{booktabs} -\usepackage{amssymb} -\usepackage{cmbright} -\usepackage{graphicx} -\usepackage{textpos} -\usepackage[colorlinks, breaklinks]{hyperref} -\usepackage{float} -\usepackage[margin=1in]{geometry} -\usepackage{array} -\usepackage{ragged2e} -\usepackage{tabularx} -\usepackage{titlesec} -\usepackage{ltablex} - -\titleformat{\section} - {\Large\slshape}{\thesection\;} - {0em}{} - -\newcommand{\picpos}[4]{ - \begin{textblock*}{#1}(#2, #3) - \includegraphics[width=\textwidth]{#4} - \end{textblock*} -} - -% custom url command for properly formatting emails -\DeclareUrlCommand\Email{\urlstyle{same}} -% allow linebreak after every character -\expandafter\def\expandafter\UrlBreaks\expandafter{\UrlBreaks -\do\/\do\a\do\b\do\c\do\d\do\e\do\f\do\g\do\h\do\i\do\j\do\k -\do\l\do\m\do\n\do\o\do\p\do\q\do\r\do\s\do\t\do\u\do\v -\do\w\do\x\do\y\do\z -\do\A\do\B\do\C\do\D\do\E\do\F\do\G\do\H\do\I\do\J\do\K -\do\L\do\M\do\N\do\O\do\P\do\Q\do\R\do\S\do\T\do\U\do\V -\do\W\do\X\do\Y\do\Z} - -\renewcommand{\arraystretch}{1.5} - -\newcolumntype{L}{>{\hspace{0pt}}X} -\newcolumntype{Y}{>{\RaggedRight\arraybackslash}X} - -\newcommand{\tickedbox}{ - \makebox[0pt][l]{$\square$}\raisebox{.15ex}{\hspace{0.1em}$\checkmark$} -} -\newcommand{\checkbox}{ - \makebox[0pt][l]{$\square$} -} -\begin{document} -% HEADER RIGHT -{% settings_value 'DEFAULT_STATIC_PATH' as static_root %} -\picpos{4.5cm}{11.5cm}{0cm}{% -{{ static_root }}/general/img/dav_logo_sektion.png% -} -\begin{textblock*}{5cm}(11.5cm, 2.3cm) - \begin{flushright} - \small - \noindent Deutscher Alpenverein e. V. \\ - Sektion {{ settings.SEKTION }} \\ - {{ settings.SEKTION_STREET }} \\ - {{ settings.SEKTION_TOWN }} \\ - Tel.: {{ settings.SEKTION_TELEPHONE }} \\ - Fax: {{ settings.SEKTION_TELEFAX }} \\ - {{ settings.RESPONSIBLE_MAIL }} \\ - \end{flushright} -\end{textblock*} - -% HEADLINE -{\noindent\LARGE{Seminarbericht}}\\[1mm] -\textit{Erstellt: {{ creation_date }} }\\ +{% block content %} % DESCRIPTION TABLE \begin{table}[H] @@ -89,54 +18,14 @@ \end{tabular} \end{table} -{% if mode == 'full' %} -{% if memberlist.ljpproposal %} - -\section{Alpintechnische Ziele} - -{{ memberlist.ljpproposal.goals_alpinistic|esc_all }} - -\section{Pädagogische Ziele} - -{{ memberlist.ljpproposal.goals_pedagogic|esc_all }} - -\section{Inhalte und Methoden} - -{{ memberlist.ljpproposal.methods|esc_all }} - -\section{Wertung} - -{{ memberlist.ljpproposal.evaluation|esc_all }} - -\section{Erfahrungen und Verbesserungsvorschläge} - -{{ memberlist.ljpproposal.experiences|esc_all }} - -\section{Zeitlicher und methodischer Ablauf} - -\begin{table}[H] - \begin{tabularx}{1\linewidth}{@{}l l Y @{}} - \toprule - \textbf{Zeitpunkt} & \textbf{Dauer} & \textbf{Art der Aktion inkl. Methode} \\ - \midrule - {% for intervention in memberlist.ljpproposal.intervention_set.all %} - {{ intervention.date_start|datetime_short }} & {{ intervention.duration }} h & {{ intervention.activity|esc_all }} \\ - {% endfor %} - \bottomrule - \end{tabularx} -\end{table} - -{% endif %} -{% endif %} - \section{Teilnehmer*innenliste} -\begin{tabularx}{1\linewidth}{p{0.01\linewidth}>{\RaggedRight\arraybackslash}p{0.22\linewidth}>{\RaggedRight\arraybackslash}p{0.38\linewidth}p{0.14\linewidth}|c|c|c} - \hline +\begin{tabularx}{.97\linewidth}{lp{0.2\textwidth}Xlccc} + \toprule \# & \textbf{Name} & \textbf{Anschrift} & \textbf{Geburtsdatum} & \textbf{m} & \textbf{w} & \textbf{d} \\ - \hline + \midrule \endhead - \hline + \bottomrule \endfoot {% for m in memberlist.membersonlist.all %} {{ forloop.counter }} & {{ m.member.name|esc_all }} & {{ m.member.address|esc_all }} & {{ m.member.birth_date_str|esc_all }} @@ -150,7 +39,7 @@ \section{Kosten} -\begin{tabularx}{1\linewidth}{@{\extracolsep{\fill}}Lr} +\begin{tabularx}{.97\textwidth}{Xr} \toprule \textbf{Beschreibung} & \textbf{Betrag} \\ \midrule @@ -160,10 +49,11 @@ {% for bill in memberlist.statement.grouped_bills %} {{ bill.short_description|esc_all }} & {{ bill.amount }} € \\ {% endfor %} + \midrule + Gesamt & {{ memberlist.statement.total_theoretic }} € \\ \bottomrule - Gesamt & {{ memberlist.statement.total_theoretic }} € \\ \end{tabularx} {% endif %} -\end{document} +{% endblock %} diff --git a/jdav_web/members/templates/members/tex_base.tex b/jdav_web/members/templates/members/tex_base.tex new file mode 100644 index 0000000..ec9c852 --- /dev/null +++ b/jdav_web/members/templates/members/tex_base.tex @@ -0,0 +1,98 @@ +{% load static common tex_extras %} + +\documentclass[a4paper]{article} + +\usepackage[utf8]{inputenc} +% remove all undefined unicode characters instead of throwing an error +\makeatletter +\def\UTFviii@undefined@err#1{} +\makeatother +\usepackage{booktabs} +\usepackage{amssymb} +\usepackage{cmbright} +\usepackage{graphicx} +\usepackage{textpos} +\usepackage[colorlinks, breaklinks]{hyperref} +\usepackage{float} +\usepackage[margin=2cm]{geometry} +\usepackage{array} +\usepackage{tabularx} +\usepackage{ltablex} +\usepackage{ragged2e} +\usepackage{titlesec} + +\keepXColumns + +\titleformat{\section} + {\Large\slshape}{\thesection\;} + {0em}{} + +\newcommand{\picpos}[4]{ + \begin{textblock*}{#1}(#2, #3) + \includegraphics[width=\textwidth]{#4} + \end{textblock*} +} + +% custom url command for properly formatting emails +\DeclareUrlCommand\Email{\urlstyle{same}} +% allow linebreak after every character +\expandafter\def\expandafter\UrlBreaks\expandafter{\UrlBreaks +\do\/\do\a\do\b\do\c\do\d\do\e\do\f\do\g\do\h\do\i\do\j\do\k +\do\l\do\m\do\n\do\o\do\p\do\q\do\r\do\s\do\t\do\u\do\v +\do\w\do\x\do\y\do\z +\do\A\do\B\do\C\do\D\do\E\do\F\do\G\do\H\do\I\do\J\do\K +\do\L\do\M\do\N\do\O\do\P\do\Q\do\R\do\S\do\T\do\U\do\V +\do\W\do\X\do\Y\do\Z} + +\renewcommand{\arraystretch}{1.5} + +\newcolumntype{L}{>{\hspace{0pt}\raggedright\arraybackslash}X} +\newcolumntype{S}{>{\raggedright\arraybackslash\hsize=0.7\hsize}X} +\newcolumntype{Y}{>{\RaggedRight\arraybackslash}p{0.4\linewidth}} + +\newcommand{\tickedbox}{ + \makebox[0pt][l]{$\square$}\raisebox{.15ex}{\hspace{0.1em}$\checkmark$} +} +\newcommand{\checkbox}{ + \makebox[0pt][l]{$\square$} +} + +{% block extra-preamble %} +{% endblock extra-preamble %} + +\begin{document} + +{% block contact %} + +% HEADER RIGHT +{% settings_value 'DEFAULT_STATIC_PATH' as static_root %} +\picpos{4.5cm}{11.7cm}{0cm}{% +{{ static_root }}/general/img/dav_logo_sektion.png% +} +\begin{textblock*}{5cm}(11.7cm, 2.3cm) + \begin{flushright} + \small + \noindent Deutscher Alpenverein e. V. \\ + Sektion {{ settings.SEKTION }} \\ + {{ settings.SEKTION_STREET }} \\ + {{ settings.SEKTION_TOWN }} \\ + Tel.: {{ settings.SEKTION_TELEPHONE }} \\ + Fax: {{ settings.SEKTION_TELEFAX }} \\ + {{ settings.RESPONSIBLE_MAIL }} \\ + \end{flushright} +\end{textblock*} + +{% endblock contact %} + +{% block headline %} + +% HEADLINE +{\LARGE{\noindent {% block title %}{% endblock title %} }}\\[1mm] +\textit{Erstellt: {{ creation_date }} }\\ + +{% endblock headline %} + +{% block content %} +{% endblock content %} + +\end{document}