PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : tikz Kalender mit Wochennummer



e271
28-11-2012, 16:46
Hallo,

wie kann man denn bei dem schönen Kalender unter http://www.texample.net/tikz/examples/a-calender-for-doublesided-din-a4/ die Wochennummern anzeigen?

Viele Grüße

e271

esdd
29-11-2012, 11:49
Hallo,

man könnte im Header folgendes definieren:

\newcounter{week}\setcounter{week}{0}
\newcommand\woche[2]{
\node [anchor=north east, align=right] at
($(#1.north east)+(0em, 0em)$) {\tiny{#2}.\,Woche};}
und dann den day code fürs erste Halbjahr wie folgt ergänzen:

\calendar[
...
day code=
{
...
\ifdate{Monday}{%
\stepcounter{week}\woche{\pgfcalendarsuggestedname }{\theweek}}{%
\ifdate{equals=\year-01-01}{%
\ifnum\pgfcalendarifdateweekday<4\relax%
\stepcounter{week}\woche{\pgfcalendarsuggestedname }{\theweek}\fi}{}}
},
...
]
und im zweiten Halbjahr:

\calendar[
...
day code=
{
...
\ifdate{Monday}{%
\ifdate{at least=\year-12-29}{%
\setcounter{week}{1}}{%
\stepcounter{week}}\woche{\pgfcalendarsuggestednam e}{\theweek}}{}
},
...
]
Gruß
Elke

e271
29-11-2012, 14:55
@Elke
Vielen Dank. Das funktioniert gut. Allerdings nur dann, wenn ich den Kalender am 1. Januar beginne.

Gibt es keine Möglichkeit, mir die Nummer der im Kalender aktuellen Woche anzuzeigen, z.B. wenn der Kalender am 1. August beginnt?

esdd
29-11-2012, 20:58
Hallo,

du kannst dann doch den Zähler week einfach entsprechend der letzten Juliwoche setzen? Falls in einem Kalenderteil ein Jahreswechsel drin ist, kannst du dir zusätzlich einen Befehl \nextyear definieren und für den Montag zwischen \year-12-29 und \nextyear-01-04 den Zähler week auf 1 setzen.

Ansonsten wäre ein Minimalbeispiel hilfreich, das zeigt, was du genau möchtest.

Gruß
Elke

TEX-er
02-12-2012, 11:06
Noch ne dumme Frage, weil ich durch den Code nicht so recht durchsteige:
Wie kann ich denn in die einzelnen Tage etwas eintragen?

esdd
02-12-2012, 11:40
Hallo,

du kannst das bereits definierte Makro \termin benutzen:

\termin{2013-10-31}{Halloween}
oder dir ein ähnliches eigenes definieren, falls die Eintragungen anders formatiert werden sollen. Die Eintragungen müssen natürlich immer innerhalb der entsprechenden tikzpicture Umgebungen erfolgen.

Gruß
Elke

TEX-er
02-12-2012, 14:06
Ne, das Termin-Makro schreibt ja keinen Eintrag in das Tageskästchen, sondern vermerkt hochgestellt eine sagen wir mal nähere Erläuterung zum Tag.
Gerade an der Frage, etwas ähnliches eigenes zu definieren, scheitere ich eben.

hakaze
02-12-2012, 14:40
Mach dir doch eine zweite Termin-Definition ohne \tiny !?! Zum Beispiel in halbfett:

\def\meintermin#1#2{
\node [anchor=north west, text width= 3.4cm] at
($(cal-#1.north west)+(3em, 0em)$) {\textbf{#2}};
}

esdd
02-12-2012, 15:04
Hallo,

dann ist hier mal noch ein Vorschlag, für einen Eintrag hinter dem Wochentag
mit der gleichen Schriftgröße wie die Abkürzungen der Wochentage:

\newcommand\mytermin[3][\footnotesize]{
\node [anchor=west, text width= 3.4cm] at
($(cal-#2.west)+(3em,-0.1ex)$) {#1#3\par};
}
Mit dem optionalen Parameter kann man die Schriftgröße noch auf \scriptsize ändern, um etwas mehr Text unterzubringen.

\mytermin[\scriptsize]{2013-10-29}{Infos am Tag vor Halloween und noch mehr}
\mytermin{2013-10-30}{Halloween}

Gruß
Elke

e271
02-12-2012, 15:09
@Elke
Vielen Dank für Deine Antwort. Das Minimalbeispiel findest Du unter dem Link im ersten Posting.

Dass ich die Wochennummer immer selber setzen kann, war mir schon klar. Mich würde aber interessieren, ob das auch in einer einfachen Weise automatisch geht? Wenn ich also zu einem beliebigen Datum in der Kalenderschleife \theweek eingebe, möchte ich, ohne die Wochennummer irgendwo definiert zu haben, zu dem aktuellen Datum die Wochennummer bekommen.

Gruß
e271

esdd
03-12-2012, 15:34
Hallo,


Das Minimalbeispiel findest Du unter dem Link im ersten Posting.


unter dem Link finde ich ein Beispiel für das komplette Jahr 2013 mit etlichen speziellen Termineinträgen für 2013. Und genau dafür habe ich auch schon einen Vorschlag gemacht, wie die Wochennummern eingetragen werden können.

Hier ist jetzt trotzdem noch ein Vorschlag, wie die Wochennummer eines anderen Starttages automatisch ermittelt werden könnte:


% basiert auf
% DIN-A4 doublesided year calendar
% Author: Robert Krause
% License : Creative Commons attribution license
% Submitted to TeXample.net on 13 July 2012
\documentclass[landscape,a4paper, ngerman, 10pt]{scrartcl}
\usepackage[utf8]{inputenc}
\usepackage[ngerman]{babel}
\usepackage[T1]{fontenc}
\usepackage{tikz} % Use the calendar.sty style

\usepackage{translator} % German Month and Day names
\usepackage{fancyhdr} % header and footer
\usepackage{fix-cm} % Large year in header

\usepackage[landscape, headheight = 2cm, margin=.5cm,
top = 3.2cm, nofoot]{geometry}
\usetikzlibrary{calc}
\usetikzlibrary{calendar}
\renewcommand*\familydefault{\sfdefault}

% User defined
\def\year{2013}
\newcommand\calstartdate{\year-08-01}
\newcommand\calenddate{2014-01-31}
% Names of Holidays are inserted by employing this macro
\def\termin#1#2{
\node [anchor=north west, text width= 3.4cm] at
($(cal-#1.north west)+(3em, 0em)$) {\tiny #2\par};
}
\newcommand\mytermin[3][\footnotesize]{
\node [anchor=west, text width= 3.4cm] at
($(cal-#2.west)+(3em,-0.1ex)$) {#1#3\par};
}

%Header
\renewcommand{\headrulewidth}{0.0pt}
\setlength{\headheight}{11ex}
\chead{
\fontsize{60}{70}\selectfont\textbf{\year}
\Large\textbf{Kalender}\hfill
}
%Footer
\cfoot{\footnotesize\texttt{http://www.texample.net/}}

\newcounter{week}
\newcommand\woche[2]{
\node [anchor=north east, align=right] at
($(#1.north east)+(0em, 0em)$) {\tiny{#2}.\,Woche};}


\begin{document}
\pagestyle{fancy}
\begin{center}
\begin{tikzpicture}[every day/.style={anchor = north}]%
\calendar[dates=\year-01-01 to \calstartdate,
day code=
{
\ifdate{Monday}{%
\ifdate{at least=\year-12-29}{%
\setcounter{week}{1}}{%
\stepcounter{week}}}{%
\ifdate{equals=\year-01-01}{%
\ifnum\pgfcalendarifdateweekday<4\relax%
\setcounter{week}{1}\else\setcounter{week}{0}\fi}{ }
}%
}%
];%
\calendar[dates=\calstartdate to \calenddate,
name=cal,
day yshift = 3em,
day code=
{
\node[name=\pgfcalendarsuggestedname,every day,shape=rectangle,
minimum height= .53cm, text width = 4.4cm, draw = gray]{\tikzdaytext};
\draw (-1.8cm, -0.1ex) node[anchor = west]
{
\footnotesize\pgfcalendarweekdayshortname{\pgfcale ndarcurrentweekday}
};
\ifdate{equals=\calstartdate}{%
\ifdate{Monday}{\woche{\pgfcalendarsuggestedname}{ \theweek}}{}}{%
\ifdate{Monday}{%
\ifdate{between=\year-12-29 and \year-12-31+4}{%
\setcounter{week}{1}}{%
\stepcounter{week}}\woche{\pgfcalendarsuggestednam e}{\theweek}}{}%
}%
},
execute before day scope=
{
\ifdate{day of month=1} {
% Shift right
\pgftransformxshift{4.8cm}
% Print month name
\draw (0,0)node [shape=rectangle, minimum height= .53cm,
text width = 4.4cm, fill = red, text= white, draw = red, text centered]
{
\textbf{\pgfcalendarmonthname{\pgfcalendarcurrentm onth}\strut}
};
}{}
\ifdate{workday}
{
\tikzset{every day/.style={fill=white}}
% Vacation (Germany Baden-Wuerrtemberg)
\ifdate{between=2012-12-24 and 2013-01-05}{%
\tikzset{every day/.style={fill=gray!30}}}{}
\ifdate{between=2013-03-25 and 2013-04-05}{%
\tikzset{every day/.style={fill=gray!30}}}{}
\ifdate{between=2013-05-21 and 2013-06-01}{%
\tikzset{every day/.style={fill=gray!30}}}{}
\ifdate{between=2013-07-25 and 2013-09-07}{%
\tikzset{every day/.style={fill=gray!30}}}{}
\ifdate{between=2013-10-28 and 2013-10-30}{%
\tikzset{every day/.style={fill=gray!30}}}{}
\ifdate{between=2013-12-23 and 2014-01-04}{%
\tikzset{every day/.style={fill=gray!30}}}{}
}{}
% Saturdays and half holidays (Christma's and New year's eve)
\ifdate{Saturday}{\tikzset{every day/.style={fill=red!10}}}{}
\ifdate{equals=12-24}{\tikzset{every day/.style={fill=red!10}}}{}
\ifdate{equals=12-31}{\tikzset{every day/.style={fill=red!10}}}{}
% Sundays and full holidays
\ifdate{Sunday}{\tikzset{every day/.style={fill=red!20}}}{}
\ifdate{equals=01-01}{\tikzset{every day/.style={fill=red!20}}}{}
\ifdate{equals=01-06}{\tikzset{every day/.style={fill=red!20}}}{}
\ifdate{equals=05-01}{\tikzset{every day/.style={fill=red!20}}}{}
\ifdate{equals=10-03}{\tikzset{every day/.style={fill=red!20}}}{}
\ifdate{equals=11-01}{\tikzset{every day/.style={fill=red!20}}}{}
\ifdate{equals=12-25}{\tikzset{every day/.style={fill=red!20}}}{}
\ifdate{equals=12-26}{\tikzset{every day/.style={fill=red!20}}}{}
% Christian holidays 2013
\ifdate{equals=2013-03-29}{\tikzset{every day/.style={fill=red!20}}}{}
\ifdate{equals=2013-04-01}{\tikzset{every day/.style={fill=red!20}}}{}
\ifdate{equals=2013-05-09}{\tikzset{every day/.style={fill=red!20}}}{}
\ifdate{equals=2013-05-20}{\tikzset{every day/.style={fill=red!20}}}{}
\ifdate{equals=2013-05-30}{\tikzset{every day/.style={fill=red!20}}}{}
},
execute at begin day scope=
{
% Each day is shifted down according to the day of month
\pgftransformyshift{-.53*\pgfcalendarcurrentday cm}
}
];
% Holidaynames
\termin{\year-10-03}{Tag der deutschen Einheit}
\termin{\year-11-01}{Allerheiligen}
\termin{\year-12-24}{Heilig Abend}
\termin{\year-12-25}{1.\ Weihnachtsfeiertag}
\termin{\year-12-26}{2.\ Weihnachtsfeiertag}
\termin{\year-12-31}{Silvester}
\termin{2014-01-01}{Neujahr}
\termin{2014-01-06}{Heilige Drei Könige}
%
\mytermin[\scriptsize]{\year-10-29}{Infos am Tag vor Halloween und noch mehr}
\mytermin{\year-10-30}{Halloween}
\end{tikzpicture}
\end{center}
\end{document}
Gruß
Elke