Browse Source

add 2 weeks calender with special date markers

master
Schoenberger, Philipp 6 years ago
parent
commit
4492778a77
  1. 233
      run_2weeks.py
  2. 8
      vorlagen/week_2pages.tex
  3. 176
      vorlagen/week_2pages_start.tex

233
run_2weeks.py

@ -0,0 +1,233 @@
#!/usr/bin/python3
import math
import json
from datetime import timedelta
from datetime import date
import locale
import os
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": "orange!50!green",
"specialdays": "red!20!green",
"freedays": "blue!30!green",
"holidays": "blue!40!green",
}
dates = {
"birthdays": [
{ "date": "18.10", "title": "Theresa Voigt" },
{ "date": "13.11", "title": "Winfried Voigt"},
{ "date": "13.11", "title": "Monika Voigt"},
{ "date": "13.11", "title": "Ursula Donn"},
{ "date": "14.11", "title": "Philipp Schönberer" },
{ "date": "13.01", "title": "Astrid Schönberger" },
{ "date": "26.01", "title": "David Geiser" },
],
"birthdays": [
{ "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():
# german
locale.setlocale(locale.LC_TIME, "de_DE")
fd = open(main_tex, "w")
tex_write_header(fd)
#tex_write_calender_overview(fd)
tex_write_weekly(fd)
tex_write_footer(fd)
fd.close()
cmd = 'pdflatex ' + main_tex
os.system(cmd)
os.remove(main_aux)
os.remove(main_log)
def tex_write_header(fd):
start_fd = open("./vorlagen/week_2pages_start.tex", "r")
for line in start_fd:
fd.write(line)
fd.write("\\begin{document}\n");
return
def tex_write_footer(fd):
fd.write("\\end{document}\n");
return
def tex_write_calender_overview(fd):
return
def tex_write_weekly(fd):
print_start_date = start_date - timedelta(days=start_date.weekday())
print_end_date = end_date + timedelta(days=6 - end_date.weekday())
print(print_start_date.isoformat())
print(print_end_date.isoformat())
fd.write("%%%%%%%%%%%%%%%%%%%%%%%%%%%\n");
fd.write("% begin real calender \n");
curr_date = print_start_date;
print("year : " + str(curr_date.year))
last_year= ""
last_month= ""
while True:
if curr_date.weekday() == 0 or curr_date.weekday() == 3:
# new year to setup
if str(curr_date.year) != str(last_year):
last_year= curr_date.year
fd.write("\n\\renewcommand{\year}{"+ str(curr_date.year) +"}\n")
# new month to setup
if str(curr_date.month) != str(last_month):
last_month= curr_date.month
fd.write("\n\\renewcommand{\month}{" + curr_date.strftime('%B') + "}\n")
# should give
# \printweek{KW10}{1}{}{2}{}{3}{}
weeknumber = curr_date.strftime("%V")
daynumber = curr_date.strftime("%d")
devider = "\\newline \n"
special_text = get_special_text(curr_date, devider)
# check for new week
if curr_date.weekday() == 0: # monday
fd.write("\\printweek")
fd.write("{KW" + weeknumber + "}")
if curr_date.weekday() == 3: # thursday is on second page
fd.write("\n")
fd.write("\\newpage\n")
fd.write("\\printweekend")
fd.write("{KW" + weeknumber + "}")
# done for every day
fd.write("{" + daynumber + "}")
fd.write("{" + special_text + "}")
if curr_date.weekday() == 6: # sunday is end of week so close it
fd.write("\n")
# end of calender
if (print_end_date == curr_date):
break
#go to next day
next_date = curr_date + timedelta(days=1)
# use the new curr date and contiue
curr_date = next_date
# end of for each day
fd.write('''
% end real calender
%%%%%%%%%%%%%%%%%%%%%%%%%%%
''')
return
if __name__ == "__main__":
main()

8
vorlagen/week_2pages.tex

@ -0,0 +1,8 @@
\include{week_2pages_start}
\begin{document}
\renewcommand{\year}{2019}
\renewcommand{\month}{Dezember}
\printweek{KW10}{1}{}{2}{}{3}{}
\newpage
\printweekend{KW10}{4}{Knutzis duzis megapuspsi}{5}{}{6}{}{7}{}
\end{document}

176
vorlagen/week_2pages_start.tex

@ -0,0 +1,176 @@
\documentclass[tikz]{standalone}% Does not support leap years.
%% Load needed packages
\usepackage{lmodern}
\usepackage{tikz}
\usetikzlibrary{positioning}
\usepackage{ifthen}
\usepackage{xifthen}% provides \isempty test
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\tikzset{year/.style={minimum height = 2em}}
\tikzset{dayname/.style={node font=\large}}
\tikzset{daynumber/.style={node font=\large\bfseries}}
\tikzset{dayspecialname/.style={node font=\small\bfseries,anchor=west, align=left, text width=5.5cm }}
\tikzset{dayspecial/.style={color=blue!50!green}}
\tikzset{month/.style={node font=\large}}
\tikzset{kw/.style={node font=\large}}
\newcommand{\monday}[0]{Montag}
\newcommand{\tuesday}[0]{Dienstag}
\newcommand{\wednesday}[0]{Mittwoch}
\newcommand{\thursday}[0]{Donnerstag}
\newcommand{\friday}[0]{Freitag}
\newcommand{\saturday}[0]{Samstag}
\newcommand{\sunday}[0]{Sonntag}
\newcommand{\daylines}[5]{
\foreach \i in {#1, #2, ..., #3}{%
\draw [black!30!white, thin] (#4,\i) -- (#5,\i);
}
}
\newcommand{\taskbox}[5]{
\foreach \i in {#1, #2, ..., #3}{%
\draw [black!30!white, thin,dotted] (#4,\i) -- (#5,\i);
}
\draw [gray, thin,dotted] (#5, #1) -- (#5,#3);
\foreach \i in {0, 0.3, ..., 1}{%
\draw [black!30!white, thin,dotted] (#4+\i, #1) -- (#4+\i,#3);
}
}
\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}[inner sep=3 pt,
xscale = 3,
yscale=-1.5,% CAUTION: axis direction reversed!
]
\node at (0,0) [year] {\year}; %prints year number
\node at (0.5,0) [month] {\month}; %prints month name
\node at (1.25,0) [kw] {#1}; %prints month name
\ifthenelse{\isempty{#3}} {
\node at (0, 0.3) [daynumber] {#2};
\node at (0.5,0.3) [dayname] {\monday};
} {
\node at (0, 0.3) [dayspecial,daynumber] {#2};
\node at (0, 0.7) [dayspecial,dayspecialname] {#3};
\node at (0.5,0.3) [dayspecial,dayname] {\monday};
}
\daylines{1}{1.5}{6.5}{0}{1.9}
\ifthenelse{\isempty{#5}} {
\node at (2, 0.3) [daynumber] {#4};
\node at (2.5,0.3) [dayname] {\tuesday};
} {
\node at (2, 0.3) [dayspecial,daynumber] {#4};
\node at (2, 0.7) [dayspecial,dayspecialname] {#5};
\node at (2.5,0.3) [dayspecial,dayname] {\tuesday};
}
\daylines{1}{1.5}{6.5}{2}{3.9}
\ifthenelse{\isempty{#7}} {
\node at (4, 0.3) [daynumber] {#6};
\node at (4.5,0.3) [dayname] {\wednesday};
} {
\node at (4, 0.3) [dayspecial,daynumber] {#6};
\node at (4, 0.7) [dayspecial,dayspecialname] {#7};
\node at (4.5,0.3) [dayspecial,dayname] {\wednesday};
}
\daylines{1}{1.5}{6.5}{4}{5.9}
\taskbox{7}{7.4}{15}{0}{5.9}
\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}[inner sep=3 pt,
xscale = 3,
yscale=-1.5,% CAUTION: axis direction reversed!
]
\node at (5.0,0) [year] {\year}; %prints year number
\node at (5.5,0) [month] {\month}; %prints month name
\node at (4.5,0) [month] {#1}; %prints month name
\ifthenelse{\isempty{#3}} {
\node at (0, 0.3) [daynumber] {#2};
\node at (0.5,0.3) [dayname] {\thursday};
} {
\node at (0, 0.3) [dayspecial,daynumber] {#2};
\node at (0, 0.7) [dayspecial,dayspecialname] {#3};
\node at (0.5,0.3) [dayspecial,dayname] {\thursday};
}
\daylines{1}{1.5}{6.5}{0}{1.9}
\ifthenelse{\isempty{#5}} {
\node at (2, 0.3) [daynumber] {#4};
\node at (2.5,0.3) [dayname] {\friday};
} {%
\node at (2, 0.3) [dayspecial,daynumber] {#4};
\node at (2, 0.7) [dayspecial,dayspecialname] {#5};
\node at (2.5,0.3) [dayspecial,dayname] {\friday};
}%
\daylines{1}{1.5}{6.5}{2}{3.9}
\ifthenelse{\isempty{#7}} {
\node at (4, 0.3) [daynumber,color=orange] {#6};
\node at (4.5,0.3) [dayname,color=orange] {\saturday};
} {%
\node at (4, 0.3) [dayspecial,daynumber] {#6};
\node at (4, 0.7) [dayspecial,dayspecialname] {#7};
\node at (4.5,0.3) [dayspecial,dayname] {\saturday};
}%
\daylines{1}{1.5}{6.5}{4}{5.9}
\ifthenelse{\isempty{#9}} {
\node at (4, 6.8) [daynumber,color=red] {#8};
\node at (4.5,6.8) [dayname,color=red] {\sunday};
} {%
\node at (4, 6.8) [dayspecial,daynumber] {#8};
\node at (4, 7.2) [dayspecial,dayspecialname] {#9};
\node at (4.5,6.8) [dayspecial,dayname] {\sunday};
}%
\daylines{7.5}{8}{15}{4}{5.9}
\taskbox{7}{7.4}{15}{0}{3.9}
\node at (6, 15.25) [daynumber] {};
\end{tikzpicture}%
}
Loading…
Cancel
Save