Hallo ihr Lieben!

Der Nutzer Namens Stefan meinte, dass ich meine Frage in kleinere aufteilen sollte. Die alte Frage sollte trotzdem erhalten bleiben, damit die Problematik der gestellten Frage in handliche Teilchen aufgeteilt wird, und Dank dieser Teilchen ni der erwähnten ersten Frage wieder gesammelt werden kann. Ich gebe mir mühe bei meiner Frage so gut zu helfen wie möglich :-) ... Danke schon mal für Hilfe!

Meine Teilfrage

Sobald ich die CSV Datei eingelesen habe und sie nutzen kann, wie platziere ich die Daten dann in dem Kalender nach Datum und Uhrzeit?

Daten der CSV-Datei

Open in Online-Editor
Lineare Algebra TÜ [Übungsraum (3322-316)],01/28/15,08:15:00,01/28/15,10:00:00
Lineare Algebra TÜ [Übungsraum (3322-316)],02/04/15,08:15:00,02/04/15,10:00:00
Lineare Algebra TÜ [Übungsraum (3322-316)],02/11/15,08:15:00,02/11/15,10:00:00
Lineare Algebra TÜ [Übungsraum (3322-316)],02/18/15,08:15:00,02/18/15,10:00:00
Lineare Algebra TÜ [Übungsraum (3322-316)],02/25/15,08:15:00,02/25/15,10:00:00
Lineare Algebra TÜ [Übungsraum (3322-316)],03/04/15,08:15:00,03/04/15,10:00:00
Lineare Algebra TÜ [Übungsraum (3322-316)],03/11/15,08:15:00,03/11/15,10:00:00
Lineare Algebra TÜ [Übungsraum (3322-316)],04/15/15,08:15:00,04/15/15,10:00:00
Lineare Algebra TÜ [Übungsraum (3322-316)],04/22/15,08:15:00,04/22/15,10:00:00
Lineare Algebra TÜ [Übungsraum (3322-316)],04/29/15,08:15:00,04/29/15,10:00:00
Lineare Algebra TÜ [Übungsraum (3322-316)],05/06/15,08:15:00,05/06/15,10:00:00
Lineare Algebra TÜ [Übungsraum (3322-316)],05/13/15,08:15:00,05/13/15,10:00:00
Lineare Algebra TÜ [Übungsraum (3322-316)],05/20/15,08:15:00,05/20/15,10:00:00
Lineare Algebra TÜ [Übungsraum (3322-316)],05/27/15,08:15:00,05/27/15,10:00:00
Lineare Algebra Lab. [Übungsraum (2226-114)],01/26/15,14:15:00,01/26/15,17:00:00
Lineare Algebra Lab. [Übungsraum (2226-114)],02/02/15,14:15:00,02/02/15,17:00:00
Lineare Algebra Lab. [Übungsraum (2226-114)],02/09/15,14:15:00,02/09/15,17:00:00
Lineare Algebra Lab. [Übungsraum (2226-114)],02/16/15,14:15:00,02/16/15,17:00:00
Lineare Algebra Lab. [Übungsraum (2226-114)],02/23/15,14:15:00,02/23/15,17:00:00
Lineare Algebra Lab. [Übungsraum (2226-114)],03/02/15,14:15:00,03/02/15,17:00:00
Lineare Algebra Lab. [Übungsraum (2226-114)],03/09/15,14:15:00,03/09/15,17:00:00
Lineare Algebra Lab. [Übungsraum (2226-114)],04/13/15,14:15:00,04/13/15,17:00:00
Lineare Algebra Lab. [Übungsraum (2226-114)],04/20/15,14:15:00,04/20/15,17:00:00
Lineare Algebra Lab. [Übungsraum (2226-114)],04/27/15,14:15:00,04/27/15,17:00:00
Lineare Algebra Lab. [Übungsraum (2226-114)],05/04/15,14:15:00,05/04/15,17:00:00
Lineare Algebra Lab. [Übungsraum (2226-114)],05/11/15,14:15:00,05/11/15,17:00:00
Lineare Algebra Lab. [Übungsraum (2226-114)],05/18/15,14:15:00,05/18/15,17:00:00
Lineare Algebra Lab. [Übungsraum (2226-114)],05/25/15,14:15:00,05/25/15,17:00:00
Lineare Algebra Lab. [Übungsraum (2226-114)],06/01/15,14:15:00,06/01/15,17:00:00

Hier ist was ich bisher versucht habe

Der Grundquelltext stammt von Laurent Dutriauxs Arbeit, veröffentlicht am 06.05.2009.

Open in Online-Editor
Open in Online-Editor
%!TEX encoding = UTF-8 Unicode
% Author: Laurent Dutriaux
\documentclass[a4paper,11pt]{article}
\usepackage{csvsimple}
\usepackage[utf8]{inputenc}
\usepackage{fourier} % Utilisation des polices texte
\usepackage{tikz}
\usetikzlibrary[positioning]
\usetikzlibrary{patterns}
\usepackage[french]{babel} % styles français
\title{A simple Timetable}
\author{Laurent Dutriaux}
\date{\today}
\newcommand{\daywidth}{2.2 cm}
\begin{document}

\maketitle

\begin{tikzpicture}[x=\daywidth, y=-1cm, node distance=0 cm,outer sep = 0pt]
% Style for Days
\tikzstyle{day}=[draw, rectangle,  minimum height=1cm, minimum width=\daywidth, fill=yellow!20,anchor=south west]
% Style for hours
\tikzstyle{hour}=[draw, rectangle, minimum height=1 cm, minimum width=1.5 cm, fill=yellow!30,anchor=north east]

% Styles for events
% Duration of sequences
\tikzstyle{hours}=[rectangle,draw, minimum width=\daywidth, anchor=north west,text centered,text width=5 em]
\tikzstyle{1hour}=[hours,minimum height=1cm]
\tikzstyle{2hours}=[hours,minimum height=2cm]
\tikzstyle{3hours}=[hours,minimum height=3cm]
%Style for type of sequence 
\tikzstyle{Ang2h}=[2hours,fill=green!20]
\tikzstyle{Phys2h}=[2hours,fill=red!20]
\tikzstyle{Math2h}=[2hours,fill=blue!20]
\tikzstyle{TIPE2h}=[2hours,fill=blue!10]
\tikzstyle{TP2h}=[2hours, pattern=north east lines, pattern color=magenta]
\tikzstyle{G3h}=[3hours, pattern=north west lines, pattern color=magenta!60!white]
\tikzstyle{Planche}=[1hour,fill=white]
% Positioning labels for days and hours
\node[day] (lundi) at (1,8) {Lundi};
\node[day] (mardi) [right = of lundi] {Mardi};
\node[day] (mercredi) [right = of mardi] {Mercredi};
\node[day] (jeudi) [right = of mercredi] {Jeudi};
\node[day] (vendredi) [right = of jeudi] {Vendredi};
\node[hour] (8-9) at (1,8) {8-9};
\node[hour] (9-10) [below = of 8-9] {9-10};
\node[hour] (10-11) [below= of 9-10] {10-11};
\node[hour] (11-12) [below = of 10-11] {11-12};
\node[hour] (12-13) [below  = of 11-12] {12-13};
\node[hour] (13-14) [below = of 12-13] {13-14};
\node[hour] (14-15) [below = of 13-14] {14-15};
\node[hour] (15-16) [below = of 14-15] {15-16};
\node[hour] (16-17) [below = of 15-16] {16-17};
\node[hour] (17-18) [below = of 16-17] {17-18};
\node[hour] (18-19) [below = of 17-18] {18-19};
%Position of sequences
\node[Ang2h] at (1,10) {Anglais};
\node[Phys2h] at (1,8) {Physique};
\node[Phys2h] at (2,8) {Physique};
\node[Phys2h] at (4,8) {Physique};
\node[Phys2h] at (5,10) {Physique};
\node[Math2h] at (2,10) {Maths};
\node[Math2h] at (2,14) {Maths};
\node[Math2h] at (3,8) {Maths};
\node[Math2h] at (4,10) {Maths};
\node[Math2h] at (5,8) {Maths};
\node[TIPE2h] at (1,14) {TIPE};
\node[TIPE2h] at (1,16) {TIPE};
\node[TIPE2h] at (2,16) {TIPE};
\node[TIPE2h] at (3,10) {TIPE};
\node[TIPE2h] at (5,14) {TIPE};
\node[TIPE2h] at (5,16) {TIPE};
\node[TP2h] at (3,14) {Phys ou SI};
\node[TP2h] at (3,16) {SI ou Phys};
\node[Planche] at (1,13) {Planche};
\node[Planche] at (1,18) {Colle};
\node[Planche] at (4,13.5) {Planche};
\end{tikzpicture}

\end{document}

gefragt 14 Apr '15, 13:38

Basilius%20Sapientia's gravatar image

Basilius Sap...
510143442
Akzeptiert-Rate: 33%

Das wird ganz schnell ganz kompliziert, wenn sich Einträge überlappen. Gibt es Einträge, die sich auf mehrere Tage verteilen? Gibt es Einträge am Wochenende (ich vermute mal nicht)?

(19 Apr '15, 02:26) Qrrbrbirlbel

Wir machen es uns erstmal einfach.

Es gibt pro y-Höhe nur einen Eintrag pro Tag, es überlappen sich also keine Termine.

Anstatt CSV-Einlese-Spielerein zu machen, habe ich die Liste kurzerhand umformatiert, aus den , wurde ein ; und aus den Zeilenumbrüchen wurde ein , und schon ist die „CSV“ \foreach-kompatibel. (Achtung, die letzte Zeile darf nicht mit eine , enden!)

Der scan and store-Style wird nun mit dieser Liste gefüttert, und für jeden Tag schreibt er nur in ein Value-Key (also letztlich einfach ein Makro/eine Token List) eine weitere Liste, die \foreach-kompatibel ist.

Dabei wird der Tag vom MM/DD/YY- ins JJJJ-MM-TT-Format umformatiert, sowie die Uhrzeit in ein Dezimalbruch umgerechnet. Da der Tag erst um acht Uhr anfängt (und da auch y = 0) ist, ziehe ich erst noch acht Stunden von der Uhrzeit ab.

Das Makro \stripFirstZero ist notwendig, damit führende Nullen von PGFMath nicht als Oktalzahl interpretiert werden (was bei 00 bis 07 kein Problem ist, aber natürlich bei 08 und 09 ein Fehler erzeugt).

Die \expandafter-Kette innerhalb des day codes ist notwendig, um das führende Komma , aus der Liste zu entfernen. Direkt darüber, wird mit \ifx\DAY\relax getestet, ob es für den Tag überhaupt Einträge gibt, falls nein, bekommen wir nämlich von PGFKeys nur ein \relax zurück.

Die obere rechte Ecke der ersten Stunde bekommt ein Dummy-Alias @, sodass ich sie im Kalendar dann einfach referenzieren kann.

Apropos Kalendar. Der TikZ-Kalendar nutzt – unüberraschend – die \pgfcalendar-Funktion, die nichts anderes macht, über die angegebenen Tage zu iterieren. TikZ führt dabei in jeder Iteration folgendes aus:

  • Vor dem Tag
  • (Gruppe) Anfang des Tages
  • (Gruppe) Ifs
  • (Gruppe) Tag
  • (Gruppe) Ende des Tages
  • Nach dem Tag

Diese „Hooks“ sind mit

  • execute before day scope
  • (Gruppe) execute at begin day scope
  • (Gruppe) if
  • (Gruppe) day code
  • (Gruppe) execute at end day scope
  • execute after day scope

anpassbar. Die Hooks innerhalb der (Gruppe) werden in einer TeX-Group ausgeführt.

Die mitgelieferten Styles von TikZ (zum Beispiel week list) versetzt ständig das Koordinatensystem, um den day code (normalerweise einfach eine Node) an unterschiedlichen Stellen zu platzieren.
Dieses Vorgehen umgehe ich komplett, und nutze einfach nur relatives Positionieren zum weekday node, die alle @ als Alias bekommen (und ihre Vorgänge damit dauernd überschreiben). Außerdem nutze ich aus, dass die y = 0 eben genau bei 8 Uhr ist.

Code

%\documentclass[a4paper, 11pt, ngerman, multi=tikzpicture]{standalone}
\documentclass[a4paper, 11pt, ngerman]{article}
\usepackage{fourier}
\usepackage{babel, translator}
\usepackage{tikz}
\usetikzlibrary{calendar}
\newcommand*\bscalset{\pgfqkeys{/tikz/bscal}}
\newcommand*\bsvo[1]{\pgfkeysvalueof{/tikz/bscal/#1}}
\bscalset{
  .code=\bscalset{#1},
  day width/.initial=2.2cm,
  hour height/.initial=1.0cm,
  hour width/.initial=1.5cm,
  weekday height/.initial=.8cm,
  hour node/.style args={#1-#2}{
    fill=yellow!30,
    minimum width=\bsvo{hour width},
    minimum height=\bsvo{hour height},
    draw,
    outer sep=+0pt,
    node contents={%
      \ifnum#1<10 \hphantom{0}\fi#1--\ifnum#2<10 \hphantom{0}\fi#2},
  },
  day node/.style={
    draw,
    outer sep=+0pt,
    text width={\bsvo{day width}-2*(\pgfkeysvalueof{/pgf/inner xsep})},
    align=center,
  },
  weekday node/.style={
    bscal/day node,
    at=(@.south east),
    name=@,
    anchor=south west,
    minimum height=\bsvo{weekday height},
    node contents={\%w., \%d-.\,\%m-.},
    text depth=+0pt,
  },
  month node/.style={
    bscal/hour node={0-0},
    fill=blue!20,
    node contents=\%m.,
    anchor=south east,
    at=(@),
    text depth=+0pt,
    minimum height=\bsvo{weekday height},
  },
  calendar/.style={
    execute before day scope={
      \ifdate{equals=\pgfcalendarbeginiso}{
        \node[bscal/month node];
      }{}
      \node[bscal/weekday node];
    },
    day code={
      \pgfkeysgetvalue{/tikz/bscal/storage/%
        \pgfcalendarcurrentyear-\pgfcalendarcurrentmonth-\pgfcalendarcurrentday}\DAY
      \unless\ifx\DAY\relax
        \expandafter\expandafter\expandafter\def
        \expandafter\expandafter\expandafter\DAY
        \expandafter\expandafter\expandafter{\expandafter\stripFirstAnything\DAY}
        \foreach \TIMES/\TIMEE/\TEXT/\ROOM in \DAY {
          \node[bscal/day node, anchor=north west,
            minimum height=(\TIMEE-\TIMES)*\bsvo{hour height}]
            at (@.south west|-0,-\TIMES*\bsvo{hour height})
            {\tiny\TEXT\par\tiny\ROOM\par};
        }
      \fi
    }
  },
  scanner/day/.code args={#1/#2/#3:#4}{\def#4{20#3-#1-#2}},
  scanner/time/.code args={#1:#2:#3/#4}{%
    \pgfmathsetmacro#4{(\stripFirstZero{#1}-8)
                      +(\stripFirstZero{#2}/60)
                      +(\stripFirstZero{#3}/3600)}},
  scan and store/.style args={#1 [#2];#3;#4;#5;#6}{
    scanner/day={#3:\DAY},
    scanner/time={#4/\TIMES},
    scanner/time={#6/\TIMEE},
    storage/\DAY/.append/.expanded={%
      ,\TIMES/\TIMEE/{\unexpanded{#1}}/{\unexpanded{#2}}}
  }
}
\newcommand*\stripFirstAnything[1]{}
\newcommand*\stripFirstZero[1]{\if0#1\else#1\fi}
\bscalset{
  scan and store/.list={
    Lineare Algebra TÜ [Übungsraum (3322-316)];01/28/15;08:15:00;01/28/15;10:00:00,
    Lineare Algebra TÜ [Übungsraum (3322-316)];02/04/15;08:15:00;02/04/15;10:00:00,
    Lineare Algebra TÜ [Übungsraum (3322-316)];02/11/15;08:15:00;02/11/15;10:00:00,
    Lineare Algebra TÜ [Übungsraum (3322-316)];02/18/15;08:15:00;02/18/15;10:00:00,
    Lineare Algebra TÜ [Übungsraum (3322-316)];02/25/15;08:15:00;02/25/15;10:00:00,
    Lineare Algebra TÜ [Übungsraum (3322-316)];03/04/15;08:15:00;03/04/15;10:00:00,
    Lineare Algebra TÜ [Übungsraum (3322-316)];03/11/15;08:15:00;03/11/15;10:00:00,
    Lineare Algebra TÜ [Übungsraum (3322-316)];04/15/15;08:15:00;04/15/15;10:00:00,
    Lineare Algebra TÜ [Übungsraum (3322-316)];04/22/15;08:15:00;04/22/15;10:00:00,
    Lineare Algebra TÜ [Übungsraum (3322-316)];04/29/15;08:15:00;04/29/15;10:00:00,
    Lineare Algebra TÜ [Übungsraum (3322-316)];05/06/15;08:15:00;05/06/15;10:00:00,
    Lineare Algebra TÜ [Übungsraum (3322-316)];05/13/15;08:15:00;05/13/15;10:00:00,
    Lineare Algebra TÜ [Übungsraum (3322-316)];05/20/15;08:15:00;05/20/15;10:00:00,
    Lineare Algebra TÜ [Übungsraum (3322-316)];05/27/15;08:15:00;05/27/15;10:00:00,
    Lineare Algebra Lab. [Übungsraum (2226-114)];01/26/15;14:15:00;01/26/15;17:00:00,
    Lineare Algebra Lab. [Übungsraum (2226-114)];02/02/15;14:15:00;02/02/15;17:00:00,
    Lineare Algebra Lab. [Übungsraum (2226-114)];02/09/15;14:15:00;02/09/15;17:00:00,
    Lineare Algebra Lab. [Übungsraum (2226-114)];02/16/15;14:15:00;02/16/15;17:00:00,
    Lineare Algebra Lab. [Übungsraum (2226-114)];02/23/15;14:15:00;02/23/15;17:00:00,
    Lineare Algebra Lab. [Übungsraum (2226-114)];03/02/15;14:15:00;03/02/15;17:00:00,
    Lineare Algebra Lab. [Übungsraum (2226-114)];03/09/15;14:15:00;03/09/15;17:00:00,
    Lineare Algebra Lab. [Übungsraum (2226-114)];04/13/15;14:15:00;04/13/15;17:00:00,
    Lineare Algebra Lab. [Übungsraum (2226-114)];04/20/15;14:15:00;04/20/15;17:00:00,
    Lineare Algebra Lab. [Übungsraum (2226-114)];04/27/15;14:15:00;04/27/15;17:00:00,
    Lineare Algebra Lab. [Übungsraum (2226-114)];05/04/15;14:15:00;05/04/15;17:00:00,
    Lineare Algebra Lab. [Übungsraum (2226-114)];05/11/15;14:15:00;05/11/15;17:00:00,
    Lineare Algebra Lab. [Übungsraum (2226-114)];05/18/15;14:15:00;05/18/15;17:00:00,
    Lineare Algebra Lab. [Übungsraum (2226-114)];05/25/15;14:15:00;05/25/15;17:00:00,
    Lineare Algebra Lab. [Übungsraum (2226-114)];06/01/15;14:15:00;06/01/15;17:00:00%
  }
}
\begin{document}
\foreach \weekoffset in {0, 7, ..., 126}{%
\noindent
\begin{tikzpicture}
\coordinate (@);
\foreach [count=\e from 9] \s in {8, ..., 18}
  \node[name=@, at=(@.south), anchor=north, bscal/hour node=\s-\e];
\coordinate (@) at (0,0-|@.east);
\calendar[
  dates=2015-01-26+\weekoffset to 2015-01-26+\pgfinteval{\weekoffset+4},
  bscal/calendar
];
\end{tikzpicture}
\par
\pagebreak}
\end{document}

Ergebnis

alt text

Permanenter link

beantwortet 14 Dez '22, 22:28

Qrrbrbirlbel's gravatar image

Qrrbrbirlbel
2.9k3815
Akzeptiert-Rate: 53%

bearbeitet 15 Dez '22, 18:08

Ich habe das zwar überhaupt nicht verstanden, finde aber den einsatz, eine frage nach mehr als sieben jahren noch zu beantworten, mehr als lobenswert.

(14 Dez '22, 23:38) huibub

@huibub Irgendwas läuft er noch nicht richtig. Weder passen die Uhrzeiten noch sind alle Einträge im Kalender.

(15 Dez '22, 11:39) Qrrbrbirlbel
Deine Antwort
Vorschau umschalten

Folgen dieser Frage

Per E-Mail:

Wenn sie sich anmelden, kommen Sie für alle Updates hier in Frage

Per RSS:

Antworten

Antworten und Kommentare

Markdown-Grundlagen

  • *kursiv* oder _kursiv_
  • **Fett** oder __Fett__
  • Link:[Text](http://url.com/ "Titel")
  • Bild?![alt Text](/path/img.jpg "Titel")
  • nummerierte Liste: 1. Foo 2. Bar
  • zum Hinzufügen ein Zeilenumbruchs fügen Sie einfach zwei Leerzeichen an die Stelle an der die neue Linie sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Frage-Themen:

×729
×14

gestellte Frage: 14 Apr '15, 13:38

Frage wurde gesehen: 4,937 Mal

zuletzt geändert: 15 Dez '22, 18:08