Browse Source

cleanup + add for combine for booklet and bookled a7 on a4 printed

master
Schoenberger, Philipp 3 years ago
parent
commit
c0360ba568
  1. 108
      booklet_auto.tex
  2. 62
      combine.tex
  3. 36
      combine2.tex
  4. 82
      combine_a7.tex
  5. 137
      dates.py
  6. 101
      run_1week.py
  7. 144
      run_2weeks.py
  8. 6
      umlauts.py
  9. 24
      vorlagen/week_2pages.tex
  10. 181
      vorlagen/week_2pages_start.tex
  11. 72
      yearly_view.py

108
booklet_auto.tex

@ -0,0 +1,108 @@
\documentclass[a4paper,landscape]{article}
\usepackage{geometry}
\pagestyle{empty}
\usepackage{xparse}
\usepackage{graphicx}
\usepackage{tikz}
\usetikzlibrary{calc}
\tikzset{
every node/.style = {
inner sep = 0pt,
anchor = north west,
}
}
\ExplSyntaxOn
\int_new:N \l_impose_repetitions_int
\int_new:N \l_impose_counter_int
\dim_new:N \l_impose_creep_dim
\int_new:N \l_impose_total_pages_int
\int_new:N \l_impose_total_pages_to_four_int
\cs_new:Npn \impose_get_page:nn #1#2 {
\int_compare:nT { ( #1 ) <= \l_impose_total_pages_int } {
\includegraphics [
width = 0.5\paperwidth,
page = #1,
] { #2 }
}
}
\NewDocumentCommand { \MakeBooklet } { O{0mm} m } {
\int_zero:N \l_impose_counter_int
\dim_zero:N \l_impose_creep_dim
\pdfximage { #2 .pdf }
\int_set:Nn \l_impose_total_pages_int
{ \the \pdflastximagepages }
\int_compare:nTF { \int_mod:nn { \l_impose_total_pages_int } { 4 } != 0 } {
\int_set:Nn \l_impose_total_pages_to_four_int
{ \l_impose_total_pages_int + 4 - \int_mod:nn { \l_impose_total_pages_int } { 4 } }
} {
\int_set_eq:NN \l_impose_total_pages_to_four_int \l_impose_total_pages_int
}
\int_set:Nn \l_impose_repetitions_int
{ \l_impose_total_pages_to_four_int / 2 }
\int_do_while:nn { \l_impose_counter_int < \l_impose_repetitions_int } {
\clearpage
\int_incr:N \l_impose_counter_int
\begin{tikzpicture}[remember~picture, overlay]
\node at ($
(current~page.north)
-
(\dim_use:N \l_impose_creep_dim, 0)
$) {
\impose_get_page:nn
{ \int_use:N \l_impose_counter_int }
{ #2 }
};
\node at ($
(current~page.north~west)
+
(\dim_use:N \l_impose_creep_dim, 0)
$) {
\impose_get_page:nn
{ \int_eval:n { \l_impose_total_pages_to_four_int - \l_impose_counter_int + 1 } }
{ #2 }
};
\end{tikzpicture}
\clearpage
\int_incr:N \l_impose_counter_int
\begin{tikzpicture}[remember~picture, overlay]
\node at ($
(current~page.north~west)
+
(\dim_use:N \l_impose_creep_dim, 0)
$) {
\impose_get_page:nn
{ \int_use:N \l_impose_counter_int }
{ #2 }
};
\node at ($
(current~page.north)
-
(\dim_use:N \l_impose_creep_dim, 0)
$) {
\impose_get_page:nn
{ \int_eval:n { \l_impose_total_pages_to_four_int - \l_impose_counter_int + 1 } }
{ #2 }
};
\end{tikzpicture}
\dim_set:Nn \l_impose_creep_dim {
#1 * \l_impose_counter_int / 2
}
}
}
\ExplSyntaxOff
\begin{document}
% #1 = Verschiebung pro Bogen (optional)
% #2 = Dateiname (ohne Endung!). Datei muss eine PDF sein!
\MakeBooklet[0.24mm]{calender}
\end{document}

62
combine.tex

@ -0,0 +1,62 @@
\documentclass{article}
\usepackage{pdfpages} % for \includepdf[pages=-]
\begin{document}
\includepdf[pages={107,1}, nup=1x2,landscape=true]{calender.pdf}
\includepdf[pages={2,106}, nup=1x2,landscape=true]{calender.pdf}
\includepdf[pages={105,3}, nup=1x2,landscape=true]{calender.pdf}
\includepdf[pages={4,104}, nup=1x2,landscape=true]{calender.pdf}
\includepdf[pages={103,5}, nup=1x2,landscape=true]{calender.pdf}
\includepdf[pages={6,102}, nup=1x2,landscape=true]{calender.pdf}
\includepdf[pages={101,7}, nup=1x2,landscape=true]{calender.pdf}
\includepdf[pages={8,100}, nup=1x2,landscape=true]{calender.pdf}
\includepdf[pages={99,9}, nup=1x2,landscape=true]{calender.pdf}
\includepdf[pages={10,98}, nup=1x2,landscape=true]{calender.pdf}
\includepdf[pages={97,11}, nup=1x2,landscape=true]{calender.pdf}
\includepdf[pages={12,96}, nup=1x2,landscape=true]{calender.pdf}
\includepdf[pages={95,13}, nup=1x2,landscape=true]{calender.pdf}
\includepdf[pages={14,94}, nup=1x2,landscape=true]{calender.pdf}
\includepdf[pages={93,15}, nup=1x2,landscape=true]{calender.pdf}
\includepdf[pages={16,92}, nup=1x2,landscape=true]{calender.pdf}
\includepdf[pages={91,17}, nup=1x2,landscape=true]{calender.pdf}
\includepdf[pages={18,90}, nup=1x2,landscape=true]{calender.pdf}
\includepdf[pages={89,19}, nup=1x2,landscape=true]{calender.pdf}
\includepdf[pages={20,88}, nup=1x2,landscape=true]{calender.pdf}
\includepdf[pages={87,21}, nup=1x2,landscape=true]{calender.pdf}
\includepdf[pages={22,86}, nup=1x2,landscape=true]{calender.pdf}
\includepdf[pages={85,23}, nup=1x2,landscape=true]{calender.pdf}
\includepdf[pages={24,84}, nup=1x2,landscape=true]{calender.pdf}
\includepdf[pages={83,25}, nup=1x2,landscape=true]{calender.pdf}
\includepdf[pages={26,82}, nup=1x2,landscape=true]{calender.pdf}
\includepdf[pages={81,27}, nup=1x2,landscape=true]{calender.pdf}
\includepdf[pages={28,80}, nup=1x2,landscape=true]{calender.pdf}
\includepdf[pages={79,29}, nup=1x2,landscape=true]{calender.pdf}
\includepdf[pages={30,78}, nup=1x2,landscape=true]{calender.pdf}
\includepdf[pages={77,31}, nup=1x2,landscape=true]{calender.pdf}
\includepdf[pages={32,76}, nup=1x2,landscape=true]{calender.pdf}
\includepdf[pages={75,33}, nup=1x2,landscape=true]{calender.pdf}
\includepdf[pages={34,74}, nup=1x2,landscape=true]{calender.pdf}
\includepdf[pages={73,35}, nup=1x2,landscape=true]{calender.pdf}
\includepdf[pages={36,72}, nup=1x2,landscape=true]{calender.pdf}
\includepdf[pages={71,37}, nup=1x2,landscape=true]{calender.pdf}
\includepdf[pages={38,70}, nup=1x2,landscape=true]{calender.pdf}
\includepdf[pages={69,39}, nup=1x2,landscape=true]{calender.pdf}
\includepdf[pages={40,68}, nup=1x2,landscape=true]{calender.pdf}
\includepdf[pages={67,41}, nup=1x2,landscape=true]{calender.pdf}
\includepdf[pages={42,66}, nup=1x2,landscape=true]{calender.pdf}
\includepdf[pages={65,43}, nup=1x2,landscape=true]{calender.pdf}
\includepdf[pages={44,64}, nup=1x2,landscape=true]{calender.pdf}
\includepdf[pages={63,45}, nup=1x2,landscape=true]{calender.pdf}
\includepdf[pages={46,62}, nup=1x2,landscape=true]{calender.pdf}
\includepdf[pages={61,47}, nup=1x2,landscape=true]{calender.pdf}
\includepdf[pages={48,60}, nup=1x2,landscape=true]{calender.pdf}
\includepdf[pages={59,49}, nup=1x2,landscape=true]{calender.pdf}
\includepdf[pages={50,58}, nup=1x2,landscape=true]{calender.pdf}
\includepdf[pages={57,51}, nup=1x2,landscape=true]{calender.pdf}
\includepdf[pages={52,56}, nup=1x2,landscape=true]{calender.pdf}
\includepdf[pages={55,53}, nup=1x2,landscape=true]{calender.pdf}
\includepdf[pages={54,54}, nup=1x2,landscape=true]{calender.pdf}
\end{document}

36
combine2.tex

@ -0,0 +1,36 @@
\documentclass{article}
\usepackage{pdfpages} % for \includepdf[pages=-]
\begin{document}
\includepdf[pages={1,3}, nup=1x2,landscape=false]{combine.pdf}
\includepdf[pages={2,4}, nup=1x2,landscape=false]{combine.pdf}
\includepdf[pages={5,7}, nup=1x2,landscape=false]{combine.pdf}
\includepdf[pages={6,8}, nup=1x2,landscape=false]{combine.pdf}
\includepdf[pages={9,11}, nup=1x2,landscape=false]{combine.pdf}
\includepdf[pages={10,12}, nup=1x2,landscape=false]{combine.pdf}
\includepdf[pages={13,15}, nup=1x2,landscape=false]{combine.pdf}
\includepdf[pages={14,16}, nup=1x2,landscape=false]{combine.pdf}
\includepdf[pages={17,19}, nup=1x2,landscape=false]{combine.pdf}
\includepdf[pages={18,20}, nup=1x2,landscape=false]{combine.pdf}
\includepdf[pages={21,23}, nup=1x2,landscape=false]{combine.pdf}
\includepdf[pages={22,24}, nup=1x2,landscape=false]{combine.pdf}
\includepdf[pages={25,27}, nup=1x2,landscape=false]{combine.pdf}
\includepdf[pages={26,28}, nup=1x2,landscape=false]{combine.pdf}
\includepdf[pages={29,31}, nup=1x2,landscape=false]{combine.pdf}
\includepdf[pages={30,32}, nup=1x2,landscape=false]{combine.pdf}
\includepdf[pages={33,35}, nup=1x2,landscape=false]{combine.pdf}
\includepdf[pages={34,36}, nup=1x2,landscape=false]{combine.pdf}
\includepdf[pages={37,39}, nup=1x2,landscape=false]{combine.pdf}
\includepdf[pages={38,40}, nup=1x2,landscape=false]{combine.pdf}
\includepdf[pages={41,43}, nup=1x2,landscape=false]{combine.pdf}
\includepdf[pages={42,44}, nup=1x2,landscape=false]{combine.pdf}
\includepdf[pages={45,47}, nup=1x2,landscape=false]{combine.pdf}
\includepdf[pages={46,48}, nup=1x2,landscape=false]{combine.pdf}
\includepdf[pages={49,51}, nup=1x2,landscape=false]{combine.pdf}
\includepdf[pages={50,52}, nup=1x2,landscape=false]{combine.pdf}
\includepdf[pages={53,54}, nup=1x2,landscape=false]{combine.pdf}
\includepdf[pages={54,54}, nup=1x2,landscape=false]{combine.pdf}
\end{document}

82
combine_a7.tex

@ -0,0 +1,82 @@
\documentclass[a4paper]{article}
\usepackage{geometry}
\pagestyle{empty}
\usepackage{pdfpages} % for \includepdf[pages=-]
\usepackage{xparse}
\usepackage{graphicx}
\usepackage{tikz}
\usetikzlibrary{calc}
\tikzset{
every node/.style = {
inner sep = 0pt,
anchor = north west,
}
}
\ExplSyntaxOn
\int_new:N \l_impose_repetitions_int
\int_new:N \l_impose_counter_int
\dim_new:N \l_impose_creep_dim
\int_new:N \l_impose_total_pages_int
\int_new:N \l_impose_total_pages_to_four_int
\cs_new:Npn \impose_get_page:nn #1#2#3 {
\int_compare:nT { ( #1 ) <= \l_impose_total_pages_int} {
\int_compare:nT { ( #2 ) <= \l_impose_total_pages_int} {
\includepdf[pages={#1,#2 }, nup=1x2,landscape=false]{#3}
%#1 , #2 \newline
}
}
}
\NewDocumentCommand { \MakeBooklet } { O{0mm} m } {
\int_zero:N \l_impose_counter_int
\dim_zero:N \l_impose_creep_dim
\pdfximage { #2 .pdf }
\int_set:Nn \l_impose_total_pages_int
{ \the \pdflastximagepages }
\int_compare:nTF { \int_mod:nn { \l_impose_total_pages_int } { 4 } != 0 } {
\int_set:Nn \l_impose_total_pages_to_four_int
{ \l_impose_total_pages_int + 4 - \int_mod:nn { \l_impose_total_pages_int } { 4 } }
} {
\int_set_eq:NN \l_impose_total_pages_to_four_int \l_impose_total_pages_int
}
\int_set:Nn \l_impose_repetitions_int
{ \l_impose_total_pages_to_four_int / 4 }
\int_do_while:nn { \l_impose_counter_int < \l_impose_repetitions_int } {
\clearpage
\int_incr:N \l_impose_counter_int
\impose_get_page:nn
{ \int_eval:n {(\l_impose_counter_int-1)*4 + 1} }
{ \int_eval:n {(\l_impose_counter_int-1)*4 + 3} }
{ #2 }\newpage
\impose_get_page:nn
{ \int_eval:n {(\l_impose_counter_int-1)*4 + 2} }
{ \int_eval:n {(\l_impose_counter_int-1)*4 + 4} }
{ #2 }\newpage
%\includepdf[pages={1,3}, nup=1x2,landscape=false]{#2}
%\includepdf[pages={2,4}, nup=1x2,landscape=false]{#2}
\dim_set:Nn \l_impose_creep_dim {
#1 * \l_impose_counter_int / 2
}
}
}
\ExplSyntaxOff
\begin{document}
% #1 = Verschiebung pro Bogen (optional)
% #2 = Dateiname (ohne Endung!). Datei muss eine PDF sein!
\MakeBooklet[0.24mm]{booklet_auto}
\end{document}

137
dates.py

@ -0,0 +1,137 @@
from datetime import timedelta
from datetime import date
from umlauts import escape_german_umlauts
dates_color = {
"birthdays": "green!50!black",
"specialdays": "green!50!white",
"freedays": "red!50!white",
"holidays": "blue!50!green",
}
dates = {
"birthdays": [
{ "date": "13.01", "title": "Astrid Schönberger" },
{ "date": "23.01", "title": "David Geiser" },
{ "date": "27.09", "title": "Monika Voigt"},
{ "date": "05.10", "title": "Franziska Geiser"},
{ "date": "18.10", "title": "Theresa Schönberger" },
{ "date": "13.11", "title": "Winfried Voigt"},
{ "date": "14.11", "title": "Philipp Schönberer" },
{ "date": "18.12", "title": "Ursula Donn"},
{ "date": "12.05", "title": "Felix Maximilian Schönberger"},
],
"specialdays": [
{ "date": "05.10", "title": "Obermegaknutztag" },
{ "date": "10.05", "title": "Hochzeitstag" },
],
"holidays": [
{ "date-start": "23.12.2019", "date-end": "04.01.2020", "title": "Weihnachtsferien" },
#ferien 2020 bw
{ "date-start": "06.04.2020", "date-end": "18.04.2020", "title": "Osterferien" },
{ "date-start": "02.06.2020", "date-end": "13.06.2020", "title": "Pfingstferien"},
{ "date-start": "30.07.2020", "date-end": "12.09.2020", "title": "Sommerferien"},
{ "date-start": "26.10.2020", "date-end": "30.10.2020", "title": "Herbstferien"},
{ "date-start": "23.12.2020", "date-end": "09.01.2021", "title": "Weihnachtsferien"},
#ferien 2021 bw
{ "date-start": "06.04.2021", "date-end": "10.04.2021", "title": "Osterferien" },
{ "date-start": "25.05.2021", "date-end": "06.06.2021", "title": "Pfingstferien"},
{ "date-start": "29.07.2021", "date-end": "12.09.2021", "title": "Sommerferien"},
{ "date-start": "30.10.2021", "date-end": "07.11.2021", "title": "Herbstferien"},
{ "date-start": "23.12.2021", "date-end": "09.01.2022", "title": "Weihnachtsferien"},
#ferien 2022 bw
{ "date-start": "14.04.2022", "date-end": "23.04.2022", "title": "Osterferien" },
{ "date-start": "07.06.2022", "date-end": "18.06.2022", "title": "Pfingstferien"},
{ "date-start": "28.07.2022", "date-end": "10.09.2022", "title": "Sommerferien"},
{ "date-start": "31.10.2022", "date-end": "04.11.2022", "title": "Herbstferien"},
{ "date-start": "21.12.2022", "date-end": "07.01.2022", "title": "Weihnachtsferien"},
#ferien 2023 bw
{ "date-start": "06.04.2022", "date-end": "15.04.2022", "title": "Osterferien" },
{ "date-start": "30.05.2022", "date-end": "09.06.2022", "title": "Pfingstferien"},
{ "date-start": "27.07.2022", "date-end": "09.09.2022", "title": "Sommerferien"},
{ "date-start": "30.10.2022", "date-end": "03.11.2022", "title": "Herbstferien"},
{ "date-start": "23.12.2022", "date-end": "05.01.2022", "title": "Weihnachtsferien"},
],
"freedays": [
{ "date": "01.01", "title": "Neujahr" },
{ "date": "06.01", "title": "Heilige Drei Könige" },
{ "date": "01.05", "title": "Tag der Arbeit" },
{ "date": "03.10", "title": "Tag der Deutschen Einheit"},
{ "date": "01.11", "title": "Allerheiligen" },
{ "date": "24.12", "title": "Weihnachtten" },
{ "date": "25.12", "title": "1. Weihnachtsfeiertag" },
{ "date": "26.12", "title": "2. Weihnachtsfeiertag" },
{ "date": "31.12", "title": "Silvester" },
#free 2021 bw
{ "date": "02.04.2021", "title": "Karfreitag" },
{ "date": "05.04.2021", "title": "Ostermontag" },
{ "date": "13.05.2021", "title": "Christi Himmelfahrt" },
{ "date": "24.05.2021", "title": "Pfingstmontag" },
{ "date": "03.06.2021", "title": "Fronleichnam" },
#free 2022 bw
{ "date": "15.04.2022", "title": "Karfreitag" },
{ "date": "18.04.2022", "title": "Ostermontag" },
{ "date": "26.05.2022", "title": "Christi Himmelfahrt" },
{ "date": "06.06.2022", "title": "Pfingstmontag" },
{ "date": "16.06.2022", "title": "Fronleichnam" },
#free 2023 bw
{ "date": "07.04.2022", "title": "Karfreitag" },
{ "date": "10.04.2022", "title": "Ostermontag" },
{ "date": "18.05.2022", "title": "Christi Himmelfahrt" },
{ "date": "29.05.2022", "title": "Pfingstmontag" },
{ "date": "08.06.2022", "title": "Fronleichnam" },
],
}
def get_special_text(date_to_check, divider):
return_str =""
for b in dates:
print(b)
for d in dates[b]:
if "date" in d:
start_day = d["date"].split(".")
if len(start_day)<3:
s_year = date_to_check.year
else:
s_year = int(start_day[2])
s_month = int(start_day[1])
s_day = int(start_day[0])
start_day = date(s_year, s_month, s_day)
if (start_day == date_to_check):
if return_str != "":
return_str += divider
return_str += "\\textcolor{"+dates_color[b]+"}{" + d["title"] + "}"
if "date-start" in d and "date-end" in d:
start_day = d["date-start"].split(".")
if len(start_day)<3:
s_year = date_to_check.year
else:
s_year = int(start_day[2])
s_month = int(start_day[1])
s_day = int(start_day[0])
start_day = date(s_year, s_month, s_day)
end_day = d["date-end"].split(".")
if len(end_day)<3:
e_year = date_to_check.year
else:
e_year = int(end_day[2])
e_month = int(end_day[1])
e_day = int(end_day[0])
end_day = date(e_year, e_month, e_day)
if date_to_check >= start_day and date_to_check <= end_day:
if return_str != "":
return_str += divider
return_str += "\\textcolor{"+dates_color[b]+"}{" + d["title"] + "}"
return_str = escape_german_umlauts(return_str)
return return_str

101
run.py → run_1week.py

@ -3,13 +3,16 @@
import math
from datetime import timedelta
from PyPDF2 import PdfFileReader
from datetime import date
import locale
import os
start_year = 2019
start_date = date(start_year, 1, 1)
end_date = date(start_year, 12, 31)
# local imports
from yearly_view import tex_write_year_overview
start_year = 2022
main_filename = "calender"
main_tex = main_filename + ".tex"
@ -34,24 +37,16 @@ color_sunday = "red"
color_weekday = "black"
color_lines = "black"
dates = '''
{
"Birthday": [
{ "date": "1.1.2020", "title": "Philipp1 Schoenberer" },
{ "date": "3.1.2020", "title": "Philipp3 Schoenberer" },
{ "date": "5.1.2020", "title": "Philipp5 Schoenberer" },
}
'''
def main():
# german
locale.setlocale(locale.LC_TIME, "de_DE")
locale.setlocale(locale.LC_TIME, "de_DE.UTF-8")
fd = open(main_tex, "w")
tex_write_header(fd)
tex_write_calender_overview(fd)
tex_write_year_overview(fd,start_year)
tex_write_weekly(fd)
@ -104,82 +99,9 @@ def tex_write_footer(fd):
''')
def tex_write_calender_overview(fd):
fd.write('''
\\thispagestyle{empty}
\\vspace*{-2em}
%\\renewcommand{\\arraystretch}{0.9}
%\\setlength{\\tabcolsep}{0.9mm}
\\begin{center}
\\Huge\\textbf{Jahres\\"ubersicht\\ ''')
fd.write(str(start_year))
fd.write('''}
\\end{center}
%%%%%%%%%%%%%%%%%%%%%%%%%%%
% begin overview calender
\\renewcommand{\\arraystretch}{1.0}
\\setlength{\\tabcolsep}{0.9mm}
''')
for month in range(1, 12 + 1):
m = date(start_year, month, 1)
if (month - 1) % 2 == 0:
fd.write('\\ \\newline\n\r')
fd.write('''\\begin{minipage}[t]{0.5\\textwidth}
\\centering
''')
fd.write('\\textbf{\\large ' + m.strftime('%B') + '} ')
fd.write('''\\\\
\\vspace{3mm}
\\tiny
\\begin{tabular}{ccccc|cc||}
''')
# print weeknames
for i in range(0, 6 + 1):
curr_date = date(start_year, month, 1)
curr_date = curr_date + timedelta(days=i - curr_date.weekday())
fd.write('\\textbf{' + curr_date.strftime('%a') + '} ')
if i == 6:
fd.write('\\\\\n\r')
else:
fd.write(' & ')
fd.write('\\hline')
curr_date = date(start_year, month, 1)
weekline = " " + " &" * curr_date.weekday()
next_date = curr_date
while curr_date.month == next_date.month:
curr_date = next_date
next_date = curr_date + timedelta(days=1)
weekline = weekline + " " + str(curr_date.day)
if (curr_date.weekday() == 6): # sunday
weekline = weekline + "\\\\\n\r "
else:
weekline = weekline + "&"
weekline = weekline + (" &" * (5 - curr_date.weekday())) + "\\\\\n\r"
fd.write(weekline)
fd.write('''
\\end{tabular}
\\end{minipage}''')
# if (month == 6):
# fd.write('\\newpage\n\r')
fd.write('''
% end overview calender
%%%%%%%%%%%%%%%%%%%%%%%%%%%
''')
def tex_write_weekly(fd):
start_date = date(start_year, 1, 1)
end_date = date(start_year, 12, 31)
print_start_date = start_date - timedelta(days=start_date.weekday())
print_end_date = end_date + timedelta(days=6 - end_date.weekday())
@ -206,7 +128,7 @@ def tex_write_weekly(fd):
fd.write('~' + curr_date.strftime('%Y'))
if (curr_date.month != last_weekday.month):
fd.write(' \\/*')
fd.write(' $-$')
fd.write('~' + last_weekday.strftime('%Y'))
fd.write('\\hrule')
@ -275,7 +197,6 @@ def gen_page_include(page1, page2, filename, maxpages, nup):
def combine_a7():
from PyPDF2 import PdfFileReader
pdf = PdfFileReader(open(main_pdf, 'rb'))
fd = open(combine_tex, "w")

144
run_2weeks.py

@ -1,4 +1,5 @@
#!/usr/bin/python3
# coding: utf-8
import math
import json
@ -7,133 +8,42 @@ from datetime import timedelta
from datetime import date
import locale
import os
from tracemalloc import start
from umlauts import escape_german_umlauts
from dates import get_special_text
from yearly_view import tex_write_year_overview
start_year = 2022
months_start = 1
months_end = 6
add_clock = False
def compile_tex(filename):
cmd = 'pdflatex ' + filename
os.system(cmd)
#os.remove(os.path(filename).stem + ".aux")
#os.remove(os.path(filename).stem + ".log")
start_year = 2020
start_date = date(start_year, 1, 1)
end_date = date(start_year, 12, 31)
main_filename = "calender"
main_tex = main_filename + ".tex"
main_aux = main_filename + ".aux"
main_log = main_filename + ".log"
main_pdf = main_filename + ".pdf"
dates_color = {
"birthdays": "green!50!black",
"specialdays": "green!50!white",
"freedays": "red!50!white",
"holidays": "blue!50!green",
}
dates = {
"birthdays": [
{ "date": "13.01", "title": "Astrid Schönberger" },
{ "date": "23.01", "title": "David Geiser" },
{ "date": "27.09", "title": "Monika Voigt"},
{ "date": "18.10", "title": "Theresa Schönberger" },
{ "date": "13.11", "title": "Winfried Voigt"},
{ "date": "14.11", "title": "Philipp Schönberer" },
{ "date": "18.12", "title": "Ursula Donn"},
],
"specialdays": [
{ "date": "05.10", "title": "Obermegaknutztag" },
{ "date": "10.05", "title": "Hochzeitstag" },
],
"holidays": [
{ "date-start": "23.12.2019", "date-end": "04.01.2020", "title": "Weihnachtsferien" },
#Faschingsferien
{ "date-start": "06.04.2020", "date-end": "18.04.2020", "title": "Osterferien" },
{ "date-start": "02.06.2020", "date-end": "13.06.2020", "title": "Pfingstferien"},
{ "date-start": "30.07.2020", "date-end": "12.09.2020", "title": "Sommerferien"},
{ "date-start": "26.10.2020", "date-end": "30.10.2020", "title": "Herbstferien"},
{ "date-start": "23.12.2020", "date-end": "09.01.2021", "title": "Weihnachtsferien"},
],
"freedays": [
{ "date": "01.01", "title": "Neujahr" },
{ "date": "06.01", "title": "Heilige Drei Könige" },
{ "date": "10.04", "title": "Karfreitag" },
{ "date": "13.04", "title": "Ostermontag" },
{ "date": "01.05", "title": "Tag der Arbeit" },
{ "date": "21.05", "title": "Christi Himmelfahrt" },
{ "date": "01.06", "title": "Pfingstmontag" },
{ "date": "11.06", "title": "Fronleichnam" },
{ "date": "03.10", "title": "Tag der Deutschen Einheit"},
{ "date": "01.11", "title": "Allerheiligen" },
{ "date": "24.12", "title": "Weihnachtten" },
{ "date": "25.12", "title": "1. Weihnachtsfeiertag" },
{ "date": "26.12", "title": "2. Weihnachtsfeiertag" },
{ "date": "31.12", "title": "Silvester" },
],
}
def get_special_text(date_to_check, divider):
return_str =""
for b in dates:
print(b)
for d in dates[b]:
if "date" in d:
start_day = d["date"].split(".")
if len(start_day)<3:
s_year = date_to_check.year
else:
s_year = int(start_day[2])
s_month = int(start_day[1])
s_day = int(start_day[0])
start_day = date(s_year, s_month, s_day)
if (start_day == date_to_check):
if return_str != "":
return_str += divider
return_str += "\\textcolor{"+dates_color[b]+"}{" + d["title"] + "}"
if "date-start" in d and "date-end" in d:
start_day = d["date-start"].split(".")
if len(start_day)<3:
s_year = date_to_check.year
else:
s_year = int(start_day[2])
s_month = int(start_day[1])
s_day = int(start_day[0])
start_day = date(s_year, s_month, s_day)
end_day = d["date-end"].split(".")
if len(end_day)<3:
e_year = date_to_check.year
else:
e_year = int(end_day[2])
e_month = int(end_day[1])
e_day = int(end_day[0])
end_day = date(e_year, e_month, e_day)
if date_to_check >= start_day and date_to_check <= end_day:
if return_str != "":
return_str += divider
return_str += "\\textcolor{"+dates_color[b]+"}{" + d["title"] + "}"
return return_str
def main():
main_tex = "calender.tex"
# german
locale.setlocale(locale.LC_TIME, "de_DE")
locale.setlocale(locale.LC_TIME, "de_DE.UTF-8")
fd = open(main_tex, "w")
tex_write_header(fd)
#tex_write_calender_overview(fd)
tex_write_year_overview(fd, start_year)
tex_write_weekly(fd)
tex_write_weekly(fd, start_year, add_clock)
tex_write_footer(fd)
fd.close()
compile_tex(main_tex)
cmd = 'pdflatex ' + main_tex
os.system(cmd)
os.remove(main_aux)
os.remove(main_log)
def tex_write_header(fd):
@ -148,11 +58,10 @@ def tex_write_footer(fd):
fd.write("\\end{document}\n");
return
def tex_write_calender_overview(fd):
return
def tex_write_weekly(fd):
def tex_write_weekly(fd, year, addclock):
start_date = date(year, months_start, 1)
end_date = date(year, months_end, 30)
print_start_date = start_date - timedelta(days=start_date.weekday())
print_end_date = end_date + timedelta(days=6 - end_date.weekday())
@ -228,6 +137,5 @@ def tex_write_weekly(fd):
return
if __name__ == "__main__":
main()

6
umlauts.py

@ -0,0 +1,6 @@
def escape_german_umlauts(return_str):
return_str = return_str.replace("ä","\\\"a")
return_str = return_str.replace("ö","\\\"o")
return_str = return_str.replace("ü","\\\"u")
return_str = return_str.replace("ß","\\ss{}")
return return_str

24
vorlagen/week_2pages.tex

@ -2,7 +2,27 @@
\begin{document}
\renewcommand{\year}{2019}
\renewcommand{\month}{Dezember}
\printweek{KW10}{1}{dd}{2}{}{3}{}
\printweek{KW10}{1}{
\textcolor{red!50!white}{Silvester}\newline
\textcolor{blue!50!green}{Weihnachtsferien}
}{2}{
\textcolor{red!50!white}{Silvester}\newline
\textcolor{blue!50!green}{Weihnachtsferien}}{3}{
\textcolor{red!50!white}{Silvester}\newline
\textcolor{blue!50!green}{Weihnachtsferien}}
\newpage
\printweekend{KW10}{4}{Knutzis duzis megapuspsi}{5}{d}{6}{d}{7}{d}
\printweekend{KW10}{4}{
\textcolor{red!50!white}{Silvester}\newline
\textcolor{blue!50!green}{Weihnachtsferien}}{5}{
\textcolor{red!50!white}{Silvester}\newline
\textcolor{blue!50!green}{Weihnachtsferien}}{6}{
\textcolor{red!50!white}{Silvester}\newline
\textcolor{blue!50!green}{Weihnachtsferien}}{7}{
\textcolor{red!50!white}{Silvester}\newline
\textcolor{blue!50!green}{Weihnachtsferien}}
\printweek{KW10}{1}{}{2}{}{3}{}
\newpage
\printweekend{KW10}{4}{}{5}{}{6}{}{7}{}
\end{document}

181
vorlagen/week_2pages_start.tex

@ -15,19 +15,22 @@
\usepackage{lmodern}
\usepackage{tikz}
\usetikzlibrary{positioning}
\usepackage[T1]{fontenc}
\usepackage{ifthen}
\usepackage{xifthen}% provides \isempty test
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%node font
\tikzset{year/.style={anchor=west, minimum height = 5mm}}
\tikzset{dayname/.style={anchor=west, font=\large}}
\tikzset{daynumber/.style={anchor=west, font=\large\bfseries}}
\tikzset{dayspecialname/.style={font=\small\bfseries,anchor=west, align=left, text width=5.5cm }}
\tikzset{year/.style={anchor=north west, minimum height = 5mm}}
\tikzset{dayname/.style={anchor=north west, font=\large}}
\tikzset{daynumber/.style={anchor=north west, font=\large\bfseries}}
\tikzset{dayspecialname/.style={font=\small\bfseries,anchor=north west, align=left, text width=5.5cm }}
\tikzset{dayspecial/.style={color=blue!50!green}}
\tikzset{month/.style={anchor=west, font=\large}}
\tikzset{kw/.style={anchor=west, font=\large}}
\tikzset{month/.style={anchor=north west, font=\large}}
\tikzset{kw/.style={anchor=north west, font=\large}}
\newcommand{\monday}[0]{Montag}
\newcommand{\tuesday}[0]{Dienstag}
@ -37,10 +40,13 @@
\newcommand{\saturday}[0]{Samstag}
\newcommand{\sunday}[0]{Sonntag}
\newcommand{\drawlinewidth}[0]{0.5mm}
\newcommand{\useclock}{true}
\newcommand{\daylines}[5]{
\foreach \i in {#3, #4, ..., #5}{%
\draw [black!30!white, thin] (#1,\i) -- (#2,\i);
\draw [black!30!white,line width=\drawlinewidth] (#1,\i) -- (#2,\i);
}
}
@ -48,18 +54,44 @@
\newcommand{\taskbox}[5]{
% horizontal lines
\foreach \i in {#3, #4, ..., #5}{%
\draw [black!30!white, thin,dotted] (#1,\i) -- (#2,\i);
\draw [black!30!white, line width=\drawlinewidth] (#1,\i) -- (#2,\i);
}
% last vertical
\draw [gray, thin,dotted] (#2, #3) -- (#2,#5);
\draw [gray, line width=\drawlinewidth] (#2, #3) -- (#2,#5);
% fist 3 vertical
\foreach \i in {0, 1, ..., 3}{%
\draw [black!30!white, thin,dotted] (#1+\i, #3) -- (#1+\i,#5);
\draw [black!30!white, line width=\drawlinewidth] (#1+\i, #3) -- (#1+\i,#5);
}
}
\newcommand{\clock}[2]
{
\node (A) at (#1,#2) {};
\filldraw [fill=gray!10!white] (A) circle [radius=2.4];
\filldraw [fill=gray!30!white] (A) circle [radius=2.2];
\foreach \angle in {0,7.5,...,360}
{
\draw[line width=0.5pt] (A.center)+(\angle:2.2) -- (A.center);
}
\foreach \angle in {0,15,...,360}
{
\draw[line width=2pt] (A.center)+(\angle:2.2) -- (A.center);
}
\filldraw [fill=white] (A) circle [radius=2];
\filldraw [fill=white] (A) circle [radius=1.5];
\filldraw [fill=black] (A) circle [radius=0.05];
\foreach \angle / \label in
{0/3, 30/4, 60/5, 90/6, 120/7, 150/8, 180/9,
210/10, 240/11, 270/12, 300/1, 330/2}
{
\draw (A)+(\angle:1.73) node{\textsf{\label}};
\draw[line width=0.1pt] (A.center)+(\angle:1.5) -- (A.center);
}
}
\newcommand{\printweek}[7]{
@ -76,42 +108,55 @@
]
\node at (0,-0.3) {};
\node at (0,0) [year] {\year}; %prints year number
\node at (1,0) [month] {\month}; %prints month name
\node at (4,0) [kw] {#1}; %prints month name
\node at (0,0.3) [kw] {#1}; %prints kw
\node at (1.25,0.3) [month] {\month}; %prints month
\node at (3,0.3) [year] {\year}; %prints year
\ifthenelse{\equal{true}{\useclock}} {
\daylines{0}{5.9}{3}{4}{5}
\clock{3}{7.6}
\daylines{0}{5.9}{11}{12}{15}
\daylines{ 6}{11.9}{3}{4}{5}
\clock{9}{7.6}
\daylines{ 6}{11.9}{11}{12}{15}
\daylines{ 12}{17.9}{3}{4}{5}
\clock{15}{7.6}
\daylines{ 6}{17.9}{11}{12}{15}
}{
\daylines{ 0}{ 5.9}{3}{4}{15}
\daylines{ 6}{11.9}{3}{4}{15}
\daylines{12}{17.9}{3}{4}{15}
}
\ifthenelse{\isempty{#3}} {
\node at (0, 0.7) [daynumber] {#2};
\node at (1.5,0.7) [dayname] {\monday};
\daylines{0}{5.9}{1}{1.5}{15}
\node at (0, 1.0) [daynumber] {#2};
\node at (1.5,1.0) [dayname] {\monday};
} {
\node at (0, 0.7) [dayspecial,daynumber] {#2};
\node at (0, 1.2) [dayspecial,dayspecialname] {#3};
\node at (1.5,0.7) [dayspecial,dayname] {\monday};
\daylines{0}{5.9}{2}{2.5}{15}
\node at (0, 1.5) [dayspecial,dayspecialname] {#3};
\node at (0, 1.0) [dayspecial,daynumber] {#2};
\node at (1.5,1.0) [dayspecial,dayname] {\monday};
}
\ifthenelse{\isempty{#5}} {
\node at (6, 0.7) [daynumber] {#4};
\node at (7.5,0.7) [dayname] {\tuesday};
\daylines{6}{11.9}{1}{1.5}{15}
\node at (6, 1.0) [daynumber] {#4};
\node at (7.5,1.0) [dayname] {\tuesday};
} {
\node at (6, 0.7) [dayspecial,daynumber] {#4};
\node at (6, 1.0) [dayspecial,dayspecialname] {#5};
\node at (7.5,0.7) [dayspecial,dayname] {\tuesday};
\daylines{6}{11.9}{2}{2.5}{15}
\node at (6, 1.5) [dayspecial, dayspecialname] {#5};
\node at (6, 1.0) [dayspecial, daynumber] {#4};
\node at (7.5,1.0) [dayspecial, dayname] {\tuesday};
}
\ifthenelse{\isempty{#7}} {
\node at (12, 0.7) [daynumber] {#6};
\node at (13.5,0.7) [dayname] {\wednesday};
\daylines{12}{17.9}{1}{1.5}{15}
\node at (12, 1.0) [daynumber] {#6};
\node at (13.5,1.0) [dayname] {\wednesday};
} {
\node at (12, 0.7) [dayspecial,daynumber] {#6};
\node at (12, 1.0) [dayspecial,dayspecialname] {#7};
\node at (13.5,0.7) [dayspecial,dayname] {\wednesday};
\daylines{12}{17.9}{2}{2.5}{15}
\node at (12, 1.5) [dayspecial, dayspecialname] {#7};
\node at (12, 1.0) [dayspecial, daynumber] {#6};
\node at (13.5,1.0) [dayspecial, dayname] {\wednesday};
}
\taskbox{0}{18}{15.5}{16.5}{28.5}
@ -133,7 +178,6 @@
%Saturday special text
%Sunday date of month
%Sunday special text
%
\begin{tikzpicture}[
xscale = 1.08,
@ -141,53 +185,67 @@
]
\node at (0,-0.3) {};
\node at (18,0) [year, anchor=east] {\year}; %prints year number
\node at (17,0) [month, anchor=east] {\month}; %prints month name
\node at (15,0) [kw, anchor=east] {#1}; %prints month name
\node at (18,0.3) [kw, anchor=east] {#1}; %prints month name
\node at (16.75,0.3) [month, anchor=east] {\month}; %prints month name
\node at (15,0.3) [year, anchor=east] {\year}; %prints year number
\ifthenelse{\isempty{#3}} {
\node at (0, 0.5) [daynumber] {#2};
\node at (0.5,0.5) [dayname] {\thursday};
\daylines{0}{5.9}{1}{1.5}{15}
\node at (0, 1.0) [daynumber] {#2};
\node at (0.5,1.0) [dayname] {\thursday};
} {
\node at (0, 0.5) [dayspecial,daynumber] {#2};
\node at (0, 1.0) [dayspecial,dayspecialname] {#3};
\node at (0.5,0.5) [dayspecial,dayname] {\thursday};
\daylines{0}{5.9}{2}{2.5}{15}
\node at (0, 1.5) [dayspecial, dayspecialname] {#3};
\node at (0, 1.0) [dayspecial, daynumber] {#2};
\node at (0.5,1.0) [dayspecial, dayname] {\thursday};
}
\ifthenelse{\equal{true}{\useclock}} {
\daylines{0}{5.9}{3}{4}{5}
\clock{3}{7.6}
\daylines{0}{5.9}{11}{12}{15}
\daylines{ 6}{11.9}{3}{4}{5}
\clock{9}{7.6}
\daylines{ 6}{11.9}{11}{12}{15}
\daylines{12}{17.9}{3}{4}{5}
\clock{15}{7.6}
\daylines{12}{17.9}{11}{12}{15}
\daylines{12}{17.9}{17.5}{18.5}{19.5}
\clock{15}{22.1}
\daylines{12}{17.9}{25.5}{26.5}{28.5}
}{
\daylines{ 0}{ 5.9}{3}{4}{15}
\daylines{ 6}{11.9}{3}{4}{15}
\daylines{12}{17.9}{3}{4}{15}
\daylines{12}{17.9}{17.5}{18.5}{28.5}
}
\ifthenelse{\isempty{#5}} {
\node at (6, 0.5) [daynumber] {#4};
\node at (6.5,0.5) [dayname] {\friday};
\daylines{6}{11.9}{1}{1.5}{15}
\node at (6, 1.0) [daynumber] {#4};
\node at (6.5,1.0) [dayname] {\friday};
} {%
\node at (6, 0.5) [dayspecial,daynumber] {#4};
\node at (6, 1.0) [dayspecial,dayspecialname] {#5};
\node at (6.5,0.5) [dayspecial,dayname] {\friday};
\daylines{6}{11.9}{2}{2.5}{15}
\node at (6, 1.0) [dayspecial, daynumber] {#4};
\node at (6.5,1.0) [dayspecial, dayname] {\friday};
\node at (6, 1.5) [dayspecial, dayspecialname] {#5};
}%
\ifthenelse{\isempty{#7}} {
\node at (12, 0.5) [daynumber,color=orange] {#6};
\node at (12.5,0.5) [dayname,color=orange] {\saturday};
\daylines{12}{17.9}{1}{1.5}{15}
\node at (12, 1.0) [daynumber,color=orange] {#6};
\node at (12.5,1.0) [dayname,color=orange] {\saturday};
} {%
\node at (12, 0.5) [dayspecial,daynumber] {#6};
\node at (12, 1.0) [dayspecial,dayspecialname] {#7};
\node at (12.5,0.5) [dayspecial,dayname] {\saturday};
\daylines{12}{17.9}{2}{2.5}{15}
\node at (12, 1.5) [dayspecial, dayspecialname] {#7};
\node at (12, 1.0) [dayspecial, daynumber] {#6};
\node at (12.5,1.0) [dayspecial, dayname] {\saturday};
}%
\ifthenelse{\isempty{#9}} {
\node at (12, 15.7) [daynumber,color=red] {#8};
\node at (12.5,15.7) [dayname,color=red] {\sunday};
\daylines{12}{17.9}{16}{16.5}{28.5}
} {%
\node at (12, 15.7) [dayspecial, daynumber] {#8};
\node at (12, 16.2) [dayspecial, dayspecialname] {#9};
\node at (13.5,15.7) [dayspecial, dayname] {\sunday};
\daylines{12}{17.9}{17}{17.5}{28.5}
}%
\taskbox{0}{11.9}{15.5}{16.5}{28.5}
@ -196,4 +254,3 @@
\node at (6, 15.25) [daynumber] {};
\end{tikzpicture}%
}

72
yearly_view.py

@ -0,0 +1,72 @@
from datetime import timedelta
from datetime import date
import locale
def tex_write_year_overview(fd,year):
fd.write('''
\\thispagestyle{empty}
\\vspace*{-4em}
\\begin{center}
\\Huge\\textbf{Jahres\\"ubersicht\\ ''')
fd.write(str(year))
fd.write('''}
\\end{center}
\\vspace*{-8pt}
%%%%%%%%%%%%%%%%%%%%%%%%%%%
% begin overview calender''')
for month in range(1, 12 + 1):
m = date(year, month, 1)
if (month - 1) % 2 == 0 and month != 1:
fd.write('\\newline')
fd.write('''
\\begin{minipage}[t]{0.5\\textwidth}
''')
fd.write('''
\\begin{tabular}{ccccc|cc||}
''')
fd.write('\\multicolumn{6}{c}{\\textbf{ ' + m.strftime('%B') + '}}\\\\\n ')
# print weeknames
for i in range(0, 6 + 1):
curr_date = date(year, month, 1)
curr_date = curr_date + timedelta(days=i - curr_date.weekday())
fd.write('\\textbf{' + curr_date.strftime('%a') + '} ')
if i == 6:
fd.write('\\\\\n\r')
fd.write(' \\hline\n\r')
else:
fd.write(' & ')
# monthly numbers
curr_date = date(year, month, 1)
weekline = " " + " &" * curr_date.weekday()
next_date = curr_date
while curr_date.month == next_date.month:
curr_date = next_date
next_date = curr_date + timedelta(days=1)
weekline = weekline + " " + str(curr_date.day)
if (curr_date.weekday() == 6): # sunday
weekline = weekline + "\\\\\n "
else:
weekline = weekline + "&"
weekline = weekline + (" &" * (5 - curr_date.weekday())) + "\\\\\n\r"
fd.write(weekline)
fd.write('''
\\end{tabular}
\\end{minipage}''')
# if (month == 6):
# fd.write('\\newpage\n\r')
fd.write('''
% end overview calender
%%%%%%%%%%%%%%%%%%%%%%%%%%%
''')
Loading…
Cancel
Save