diff --git a/booklet_auto.tex b/booklet_auto.tex new file mode 100644 index 0000000..0d37cf9 --- /dev/null +++ b/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} \ No newline at end of file diff --git a/combine.tex b/combine.tex new file mode 100644 index 0000000..37a9447 --- /dev/null +++ b/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} + \ No newline at end of file diff --git a/combine2.tex b/combine2.tex new file mode 100644 index 0000000..3bdca59 --- /dev/null +++ b/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} + \ No newline at end of file diff --git a/combine_a7.tex b/combine_a7.tex new file mode 100644 index 0000000..1a05e48 --- /dev/null +++ b/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} diff --git a/dates.py b/dates.py new file mode 100644 index 0000000..a245f3c --- /dev/null +++ b/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 \ No newline at end of file diff --git a/run.py b/run_1week.py similarity index 70% rename from run.py rename to run_1week.py index cb2d991..e4da2e5 100755 --- a/run.py +++ b/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") diff --git a/run_2weeks.py b/run_2weeks.py index 9c31ae2..9362601 100755 --- a/run_2weeks.py +++ b/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() diff --git a/umlauts.py b/umlauts.py new file mode 100644 index 0000000..4b88505 --- /dev/null +++ b/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 diff --git a/vorlagen/week_2pages.tex b/vorlagen/week_2pages.tex index 42de192..dba25d4 100644 --- a/vorlagen/week_2pages.tex +++ b/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} diff --git a/vorlagen/week_2pages_start.tex b/vorlagen/week_2pages_start.tex index e20b9e0..d39371f 100644 --- a/vorlagen/week_2pages_start.tex +++ b/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,152 +54,203 @@ \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{\printweek}[7]{ - % KW - %monday date of month - %monday special text - %tuesday date of month - %tuesday special text - %Wednesday date of month - %Wednesday special text - - \begin{tikzpicture}[xscale = 1.08, - yscale=-1,% CAUTION: axis direction reversed! - ] - - \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 - - - \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, 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} - } - - \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, 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} - } - - \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, 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} - } - - \taskbox{0}{18}{15.5}{16.5}{28.5} - - - \node at (6, 15.25) [daynumber] {}; +\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); + } +} - \end{tikzpicture}% +\newcommand{\printweek}[7]{ + % KW + %monday date of month + %monday special text + %tuesday date of month + %tuesday special text + %Wednesday date of month + %Wednesday special text + + \begin{tikzpicture}[xscale = 1.08, + yscale=-1,% CAUTION: axis direction reversed! + ] + + \node at (0,-0.3) {}; + \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, 1.0) [daynumber] {#2}; + \node at (1.5,1.0) [dayname] {\monday}; + } { + \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, 1.0) [daynumber] {#4}; + \node at (7.5,1.0) [dayname] {\tuesday}; + } { + \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, 1.0) [daynumber] {#6}; + \node at (13.5,1.0) [dayname] {\wednesday}; + } { + \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} + + + \node at (6, 15.25) [daynumber] {}; + + \end{tikzpicture}% } \newcommand{\printweekend}[9]{ - % KW - %thursday date of month - %thursday special text - %Friday date of month - %Friday special text - %Saturday date of month - %Saturday special text - %Sunday date of month - %Sunday special text - % - - \begin{tikzpicture}[ - xscale = 1.08, - yscale=-1, % CAUTION: axis direction reversed! - ] - - \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 - - \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, 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} - } - - - \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, 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} - }% - - \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, 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} - }% - - \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} - - - \node at (6, 15.25) [daynumber] {}; - \end{tikzpicture}% + %KW + %thursday date of month + %thursday special text + %Friday date of month + %Friday special text + %Saturday date of month + %Saturday special text + %Sunday date of month + %Sunday special text + + \begin{tikzpicture}[ + xscale = 1.08, + yscale=-1, % CAUTION: axis direction reversed! + ] + + \node at (0,-0.3) {}; + \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, 1.0) [daynumber] {#2}; + \node at (0.5,1.0) [dayname] {\thursday}; + } { + \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, 1.0) [daynumber] {#4}; + \node at (6.5,1.0) [dayname] {\friday}; + } {% + \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, 1.0) [daynumber,color=orange] {#6}; + \node at (12.5,1.0) [dayname,color=orange] {\saturday}; + } {% + \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}; + } {% + \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}; + }% + + \taskbox{0}{11.9}{15.5}{16.5}{28.5} + + + \node at (6, 15.25) [daynumber] {}; + \end{tikzpicture}% } - diff --git a/yearly_view.py b/yearly_view.py new file mode 100644 index 0000000..4a51305 --- /dev/null +++ b/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 +%%%%%%%%%%%%%%%%%%%%%%%%%%% +''') \ No newline at end of file