213 lines
5.4 KiB
TeX
213 lines
5.4 KiB
TeX
\usepackage{ifthen}
|
|
\usepackage{tikz}
|
|
\usetikzlibrary{math, calc, patterns}
|
|
\usepackage{xcolor}
|
|
|
|
% % % % % %
|
|
% DESIGN %
|
|
% % % % % %
|
|
\usepackage{fontspec}
|
|
\setmainfont[Path=fonts/]{RobotoSlab-Regular.ttf}
|
|
\setsansfont[Path=fonts/]{Roboto-Regular.ttf}
|
|
|
|
\definecolor{themaFarbe}{HTML}{000000}
|
|
\usepackage{fancyhdr}
|
|
\renewcommand{\headrulewidth}{0pt}
|
|
\renewcommand{\footrulewidth}{4pt}
|
|
\pagestyle{fancy}
|
|
\fancyhead{}
|
|
\fancyhead[C]{
|
|
\begin{tikzpicture}
|
|
\fill[fill=themaFarbe] (0pt,0pt) rectangle (\linewidth,8pt);
|
|
\end{tikzpicture}
|
|
}
|
|
\fancyfoot{}
|
|
\fancyfoot[L]{Fachschaft Informatik}
|
|
\fancyfoot[C]{}
|
|
\fancyfoot[R]{TU Darmstadt}
|
|
|
|
|
|
% % % % % % %
|
|
% BEFEHLE %
|
|
% % % % % % %
|
|
\newenvironment{stundenplan}[2]{
|
|
\newcounter{tagcounter}
|
|
\newcounter{slotcounter}
|
|
\newcounter{farbcounter}
|
|
\newcounter{notizcounter}
|
|
|
|
\centering \huge \textbf{#1}
|
|
\vspace{0.5cm}
|
|
\newcommand{\scaling}{#2}
|
|
|
|
\begin{center}
|
|
\begin{tikzpicture}[draw]
|
|
}{
|
|
\drawstupla
|
|
\end{tikzpicture}
|
|
\end{center}
|
|
}
|
|
|
|
\tikzmath{
|
|
function daywidth(\n) {
|
|
return \linewidth / (\n + 1.0);
|
|
};
|
|
function xpos(\n, \t, \o) {
|
|
return (\t + \o) * daywidth(\n);
|
|
};
|
|
function ypos(\s) {
|
|
return -0.1 - (\s - 480) / \scaling * 1.15;
|
|
};
|
|
}
|
|
|
|
\newcommand\farbe[3]{
|
|
\definecolor{#1}{HTML}{#3}
|
|
|
|
\stepcounter{farbcounter}
|
|
\expandafter\gdef\csname slotfarbename\thefarbcounter \endcsname{#2}
|
|
\expandafter\gdef\csname slotfarbe\thefarbcounter \endcsname{#1}
|
|
}
|
|
|
|
\newenvironment{tag}[1]{
|
|
\stepcounter{tagcounter}
|
|
\expandafter\gdef\csname tag\thetagcounter\endcsname{#1}
|
|
}{
|
|
}
|
|
|
|
\newcommand{\slot}[5]{
|
|
\stepcounter{slotcounter}
|
|
\expandafter\gdef\csname slotstart\theslotcounter \endcsname{\tominutes{#1}}
|
|
\expandafter\gdef\csname slotend\theslotcounter \endcsname{\tominutes{#2}}
|
|
\expandafter\gdef\csname slotname\theslotcounter \endcsname{#3}
|
|
\expandafter\gdef\csname slotort\theslotcounter \endcsname{#4}
|
|
\expandafter\gdef\csname slottyp\theslotcounter \endcsname{#5}
|
|
\newcounter{slottag\theslotcounter}
|
|
\setcounter{slottag\theslotcounter}{\thetagcounter}
|
|
}
|
|
\newcommand{\zeit}[2]{
|
|
\slot{#1}{#2}{#1-#2}{}{zeit}
|
|
}
|
|
\definecolor{zeit}{HTML}{ffffff}
|
|
|
|
\newcommand{\notiz}[1]{
|
|
\stepcounter{notizcounter}
|
|
\expandafter\gdef\csname notiz\thenotizcounter \endcsname{#1}
|
|
}
|
|
|
|
|
|
\newcommand{\tominutes}[1]{\splittime#1!}
|
|
\def\splittime#1:#2!{\the\numexpr #1 * 60 + #2\relax}
|
|
|
|
\newcommand{\drawstupla}{
|
|
|
|
\xdef\minslotstart{\csname slotstart1\endcsname}
|
|
\xdef\maxslotend{\csname slotstart1\endcsname}
|
|
\foreach \s in {1,...,\theslotcounter}{
|
|
\ifnum \csname slotstart\s\endcsname<\minslotstart\relax
|
|
\xdef\minslotstart{\csname slotstart\s \endcsname}
|
|
\fi
|
|
\ifnum \csname slotend\s\endcsname>\maxslotend\relax
|
|
\xdef\maxslotend{\csname slotend\s \endcsname}
|
|
\fi
|
|
}
|
|
|
|
\sffamily
|
|
\foreach \s in {1,...,\theslotcounter}{
|
|
\ifnum \csname theslottag\s \endcsname=1 \normalsize \else \footnotesize \fi
|
|
\draw[thin, fill=\csname slottyp\s \endcsname] (
|
|
{xpos(\thetagcounter, \csname theslottag\s \endcsname, \ifnum \csname theslottag\s \endcsname=1 0.4 \else 0.0 \fi)},
|
|
{ypos(\csname slotstart\s \endcsname)}
|
|
) rectangle (
|
|
{xpos(\thetagcounter, \csname theslottag\s \endcsname, 1.0)},
|
|
{ypos(\csname slotend\s \endcsname)}
|
|
) node[pos=0.5,align=center] {
|
|
\noindent \csname slotname\s \endcsname
|
|
\ifthenelse{\equal{\csname slotort\s \endcsname}{\empty}}{}{
|
|
\\\noindent \csname slotort\s \endcsname
|
|
}
|
|
};
|
|
}
|
|
|
|
\draw[very thick,fill=black] (
|
|
{xpos(\thetagcounter, 1, 0.4)},
|
|
1.0
|
|
) rectangle (
|
|
{xpos(\thetagcounter, \thetagcounter, 1.0)},
|
|
1.1
|
|
);
|
|
\draw[very thick,fill=black] (
|
|
{xpos(\thetagcounter, 1, 0.4)},
|
|
-0.1
|
|
) rectangle (
|
|
{xpos(\thetagcounter, \thetagcounter, 1.0)},
|
|
0.0
|
|
);
|
|
\draw[very thick,fill=black] (
|
|
{xpos(\thetagcounter, 1, 0.4)},
|
|
{ypos(\maxslotend)}
|
|
) rectangle (
|
|
{xpos(\thetagcounter, \thetagcounter, 1.0)},
|
|
{ypos(\maxslotend) - 0.1}
|
|
);
|
|
|
|
\rmfamily
|
|
\normalsize
|
|
\foreach \t in {1,...,\thetagcounter}{
|
|
\draw[very thick,fill=white] (
|
|
{xpos(\thetagcounter, \t, \ifnum \t=1 0.4 \else 0.0 \fi)},
|
|
0.0
|
|
) rectangle (
|
|
{xpos(\thetagcounter, \t, 1.0)},
|
|
1.0
|
|
) node [align=center,pos=0.5] {
|
|
\textbf{\csname tag\t \endcsname}
|
|
};
|
|
}
|
|
|
|
\draw[very thick] (
|
|
{xpos(\thetagcounter, 1, 0.4)},
|
|
{ypos(\minslotstart)}
|
|
) -- (
|
|
{xpos(\thetagcounter, 1, 0.4)},
|
|
{ypos(\maxslotend)}
|
|
);
|
|
\foreach \t in {2,...,\the\numexpr \thetagcounter + 1\relax}{
|
|
\draw[very thick] (
|
|
{xpos(\thetagcounter, \t, 0.0)},
|
|
{ypos(\minslotstart)}
|
|
) -- (
|
|
{xpos(\thetagcounter, \t, 0.0)},
|
|
{ypos(\maxslotend)}
|
|
);
|
|
}
|
|
\draw[very thick] (
|
|
{xpos(\thetagcounter, 1, 0.4)},
|
|
{ypos(\maxslotend)}
|
|
) -- (
|
|
{xpos(\thetagcounter, \the\numexpr\thetagcounter + 1\relax, 0.0)},
|
|
{ypos(\maxslotend)}
|
|
);
|
|
|
|
\footnotesize
|
|
\foreach \i in {1,...,\thefarbcounter}{
|
|
\draw[thin,fill=\csname slotfarbe\i \endcsname] (
|
|
{1.02 * \linewidth},
|
|
{ypos(\the\numexpr 535 + 55 * \i\relax)}
|
|
) rectangle ++(
|
|
0.5,
|
|
0.5
|
|
) node[align=left,below right, xshift=0.005\linewidth] {
|
|
\csname slotfarbename\i \endcsname
|
|
};
|
|
}
|
|
|
|
\ifnum \thenotizcounter>1\relax
|
|
\linespread{0.8}\selectfont
|
|
\foreach \i in {1,...,\thenotizcounter}{
|
|
\node[align=left,below right,text width=3.5cm,align=justify] at ({1.02 * \linewidth}, {ypos(\the\numexpr 535 + 60 * (\thefarbcounter + \i)\relax)}) {\i) \csname notiz\i \endcsname};
|
|
}
|
|
\fi
|
|
|
|
% "Muster"-Text quer über die Seite, falls man es für Demo-Zwecke mit invaliden Daten nutzen möchte
|
|
% \node[rotate=30,scale=17,text opacity=0.1] at (0.65\textwidth, -0.35\textheight) {Muster};
|
|
}
|