Aus LinuxUser 01/2021
Kalender mit LaTeX erstellen
© Brian Jackson, 123RF
Alle Jahre wieder
Daniel Tibi
Ob Jahresplaner, Monatsübersicht, Einlagen für Systemplaner oder Bildkalender – mit LaTeX erstellen Sie Ihre Kalender im Handumdrehen selbst.
Alle Jahre wieder gilt es, neue Kalender anzuschaffen. Mit dem Textsatzsystem LaTeX erstellen Sie Jahres-, Monats- und Wandkalender sowie Einleger für Systemplaner maßgeschneidert einfach selbst. Beim Gestalten der Kalenderblätter hält LaTeX Ihnen beinahe alle Möglichkeiten offen. Obendrein brauchen Sie die einmal erstellten Skripte nur marginal anzupassen, um auch für zukünftige Jahre die passenden Kalender zu erzeugen.
Jahresplaner
Einen Jahresplaner erzeugen Sie mit dem Paket tikz-kalender [1], das auf TikZ [2] aufbaut (Listing 1). Legen Sie zunächst tikz-kalender als Dokumentenklasse fest (Zeile 1), und wählen Sie die passenden Zeichensätze aus (Zeilen 2 und 3).
Anschließend bestimmen Sie das Aussehen des Jahresplaners. Mit der Wahl der Papiergröße A4 (Zeile 5) setzen Sie einen handlichen Kalender, der sich einfach ausdrucken lässt. Bei Bedarf legen Sie an dieser Stelle auch ein größeres Format fest, etwa für einen Wandkalender, oder geben ein kleineres Format vor, um einen Kalender für die Brieftasche zu erzeugen.
Danach definieren Sie das Jahr, für das Sie einen Kalender erstellen möchten (Zeile 6). Zeile 7 bestimmt die Überschrift des Blatts. Alternativ lässt sich stattdessen beispielsweise ein Logo einfügen. Sollen Wochennummern im Kalender erscheinen, darf der Befehl aus Zeile 8 nicht fehlen.
Listing 1
Jahresplaner
\documentclass{tikz-kalender}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\setup{
paper=a4,
year=2021,
title={Jahreskalender},
showweeknumbers,
titleColor=black,
monthBGcolor=black,
saturdayColor=red!20,
sundayColor=red,
eventColor=red,
periodColor=gray!20,
lang=german,
events={tikz-kalender_2021_feiertage,tikz-kalender_2021_schulferien}
}
\begin{document}
\makeKalender
\end{document}
Es folgen Kommandos, mit denen Sie die Farben des Kalenders beeinflussen. Für die Farbwerte greift tikz-kalender auf das Paket xcolor [3] zurück. Im Beispiel setzen wir den Titel (Zeile 9) sowie den Hintergrund der Monatsnamen (Zeile 10) in Schwarz. Samstage und Sonntage erscheinen der Übersichtlichkeit halber mit jeweils eigenen Farben (Zeilen 11 und 12), ebenso die Feiertage (Zeile 13). Auch zusammenhängende Zeiträume, beispielsweise Schulferien oder Urlaubszeiten, heben Sie durch eine gesonderte Farbe hervor (Zeile 14). In welcher Sprache die Wochentage im Kalender erscheinen, legt der Eintrag in Zeile 15 fest. Dazu bedient sich tikz-kalender des Pakets babel [4].
Nach dem Festlegen des Aussehens gilt es, den Kalender mit Daten zu befüllen. Um Feiertage und Schulferien zu ergänzen, bindet Zeile 16 zwei externe Dateien ein. Dabei handelt es sich um Textdateien mit der Endung .events. Listing 2 zeigt den Inhalt der Datei tikz-kalender_2021_feiertage.events mit den Feiertagen, von denen jeder eine eigene Zeile beansprucht. Zunächst geben Sie das Datum an und danach den Text, der zu diesem Datum im Kalender erscheinen soll.
Das Beispiel zeigt als Erstes die Feiertage mit feststehenden Daten, bei denen \year als Platzhalter für die Jahreszahl dient. Der Vorteil dieser Methode: Sie können diese Zeilen einfach ohne Änderungen weiterverwenden, wenn Sie im nächsten Jahr einen neuen Kalender erstellen. Nur bei den Feiertagen mit variablem Datum gilt es, jedes Jahr das passende Datum neu einzutippen.
Leiten Sie eine Zeile mit \event* (mit Stern) ein, markiert LaTeX das Datum im Kalender als Feiertag mit der Farbe aus Listing 1, Zeile 13. Entscheiden Sie sich stattdessen für \event (ohne Stern) entfällt die farbliche Markierung. Die erste Variante eignet sich, um arbeitsfreie Feiertage einzutragen, die zweite, um nicht arbeitsfreie Feiertage einzutragen. Auf dieselbe Weise ergänzen Sie beispielsweise auch Geburtstage oder andere Jubiläen.
Listing 2
Kalender-Events
\event*{\year-01-01}{Neujahr}
\event*{\year-01-06}{Heilige Drei Könige}
\event*{\year-05-01}{Tag der Arbeit}
\event*{\year-08-15}{Mariä Himmelfahrt}
\event*{\year-10-03}{Tag der deutschen Einheit}
\event*{\year-11-01}{Allerheiligen}
\event{\year-12-24}{Heiligabend}
\event*{\year-12-25}{1. Weihnachtstag}
\event*{\year-12-26}{2. Weihnachtstag}
\event{2021-02-17}{Aschermittwoch}
\event{2021-04-01}{Gründonnerstag}
\event*{2021-04-02}{Karfreitag}
\event*{2021-04-04}{Ostern}
\event*{2021-04-05}{Ostermontag}
\event*{2021-05-13}{Christi Himmelfahrt}
\event*{2021-05-23}{Pfingsten}
\event*{2021-05-24}{Pfingstmontag}
\event*{2021-06-03}{Fronleichnam}
\event{2021-11-28}{1. Advent}
\event{2021-12-05}{2. Advent}
\event{2021-12-12}{3. Advent}
\event{2021-12-19}{4. Advent}
\endinput
Über die Datei tikz-kalender_2021_schulferien.events (Listing 3) finden die Schulferien ihren Weg in den Kalender. Jede Zeile der Datei enthält einen Zeitraum, der im Kalender in der Farbe erscheint, die Sie in Listing 1, Zeile 14 festgelegt haben. Auf diese Weise integrieren Sie auch Urlaubszeiten in den Kalender. Fügen Sie einer Zeile eine bestimmte Farbe in eckigen Klammern an, wird der Eintrag in der gewählten Farbe gesetzt. So unterscheiden Sie beispielsweise Schulferien und Urlaub farblich voneinander, oder Sie weisen die Urlaubszeiten verschiedener Kollegen in unterschiedlichen Farben aus.
Listing 3
Schulferien
\period{2020-12-23}{2021-01-09}
\period{2021-02-15}{2021-02-19}
\period{2021-03-29}{2021-04-10}
\period{2021-05-25}{2021-06-04}
\period{2021-07-30}{2021-09-13}
\period{2021-11-02}{2021-11-05}
\period{2021-12-24}{2022-01-08}
\endinput
Der Hauptteil der LaTeX-Datei fällt kurz aus (Listing 1, Zeile 18 bis 20) und enthält nur den Befehl, der den Kalender tatsächlich ausgibt (Abbildung 1).
b01-jahreskalender

Abbildung 1: Mit wenigen Steuerdateien erstellen Sie mit LaTeX einen ansprechenden Jahreskalender.
Monatsübersicht
Wenn Sie sich mit Kalendern in LaTeX beschäftigen, lohnt sich in jedem Fall ein Blick auf das Paket calendar [5]. Aus dessen vielfältigen Möglichkeiten demonstrieren wir das Erstellen einer Monatsübersicht und von Wochenübersichten als Einlagen für Systemplaner.
Mit den wenigen Zeilen Code aus Listing 4 setzen Sie Monatsübersichten für ein komplettes Jahr, wobei jeder Monat auf einer Seite erscheint. Als Dokumentenklasse kommt scrartcl aus dem deutschsprachigen KOMA-Script [6] zum Einsatz, als Papierformat dient DIN A4 quer (Zeile 1). Die passenden Zeichensätze (Zeile 2 und 3) kennen Sie schon aus dem vorherigen Beispiel. Das Paket, das in diesem Fall für den Kalender verantwortlich zeichnet, heißt monthly und gibt die Monatsnamen und Wochentage in Deutsch aus (Zeile 4). Mit dem Paket xcolor (Zeile 5) bringen Sie Farbe ins Spiel.
Monatskalender
\documentclass[a4paper,landscape]{scrartcl}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[German]{monthly}
\usepackage{xcolor}
\begin{document}
\begin{monthly}%
{titletype=\large\sffamily\bfseries,daynametype=\normalfont,datetype=\footnotesize\sffamily\bfseries,texttype=\tiny\sffamily\bfseries}
{calendar_2021_feiertage:red}
1 jan 2021 to 31 dec 2021
\end{monthly}
\end{document}
Im Hauptteil finden alle erforderlichen Angaben in der Umgebung monthly ihren Platz (Zeile 7 bis 11). In der ersten geschweiften Klammer beeinflussen Sie das Aussehen der einzelnen Elemente. Hier greift das für die Monatsnamen, die als Titel über jeder Seite stehen, die Wochentagsnamen, die Zahlen der Wochentage sowie die Eintragungen. Dabei gelten die in LaTeX üblichen Formatierungsbefehle (Zeile 8).
Danach binden Sie die Dateien ein, in denen die Eintragungen stehen, die im Kalender erscheinen sollen (Zeile 9). Schließlich legen Sie den Zeitraum fest, für den Sie einen Kalender erzeugen möchten. Hier verwenden Sie stets die englischen Monatsnamen, auch wenn Sie den Kalender in einer anderen Sprache erstellen. Damit steht das Layout der Monatsübersicht.
Als Nächstes gilt es, den Kalender mit Daten zu befüllen. Die Eintragungen für den Kalender speichern Sie in einer Textdatei mit der Endung .cld, in unserem Fall calendar_2021_feiertage.cld (Listing 5). Auf das Datum, ebenfalls mit englischen Monatsnamen, folgt der passende Eintrag in geschweiften Klammern.
Listing 5
Feiertage
1 jan 2021 {Neujahr}
6 jan 2021 {Heilige Drei Könige}
17 feb 2021 {Aschermittwoch}
1 apr 2021 {Gründonnerstag}
2 apr 2021 {Karfreitag}
4 apr 2021 {Ostern}
5 apr 2021 {Ostermontag}
1 may 2021 {Tag der Arbeit}
13 may 2021 {Christi Himmelfahrt}
23 may 2021 {Pfingsten}
24 may 2021 {Pfingstmontag}
3 jun 2021 {Fronleichnam}
15 aug 2021 {Mariä Himmelfahrt}
3 oct 2021 {Tag der deutschen Einheit}
1 nov 2021 {Allerheiligen}
28 nov 2021 {1. Advent}
5 dec 2021 {2. Advent}
12 dec 2021 {3. Advent}
19 dec 2021 {4. Advent}
24 dec 2021 {Heiligabend}
25 dec 2021 {1. Weihnachtstag}
26 dec 2021 {2. Weihnachtstag}
Der Dateiname findet seinen Platz in der LaTeX-Datei wie in Listing 4, Zeile 9 angegeben. Hinter dem Dateinamen geben Sie nach einem Doppelpunkt die Farbe an, in der die Software die Daten in den Kalender aufnimmt. Durch Komma getrennt fügen Sie weitere Dateien hinzu. So tragen Sie beispielsweise auch Geburtstage ein und setzen diese durch eine andere Farbe von den Feiertagen ab (Abbildung 2).
b02-monatsuebersicht
Listing 4
Abbildung 2: Wie von LaTeX gewohnt, fällt die Monatsübersicht zwar schlicht aus, aber durchaus ansprechend.
Systemplaner-Einlagen
Auch Einlagen für Ihren Systemplaner erstellen Sie mit LaTeX selbst. Dazu genügt die kurze Datei aus Listing 6, bei der wiederum das Paket calendar zum Einsatz kommt. Es bringt dazu die Dokumentenklasse weekly mit, die auch deutsche Monats- und Wochentagsnamen ausgibt (Zeile 1). Die passenden Zeichensätze sind schon bestens bekannt (Zeilen 2 und 3). Für farbigen Text sorgt wiederum das Paket xcolor.
Der Hauptteil gestaltet sich analog zum vorherigen Beispiel. Diesmal kommt die Umgebung weekly zum Einsatz (Zeilen 6 bis 10). In der ersten geschweiften Klammer passen Sie das Layout an, wobei das Beispiel diesmal alles bei den Standardeinstellungen belässt (Zeile 7). Die Feiertage aus Listing 5 kommen auch in dieser Datei zum Einsatz; diesmal erscheinen sie in roter Farbe (Zeile 8). Auch hier erstellen Sie wieder einen Kalender für das gesamte Jahr 2021 (Zeile 9).
Listing 6
Einlagen für Systemplaner
\documentclass[German]{weekly}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{xcolor}
\begin{document}
\begin{weekly}%
{}
{calendar_2021_feiertage:red}
1 jan 2021 to 31 dec 2021
\end{weekly}
\end{document}
<code>
{{:pasted:20241006-132803.png}}
Das Ergebnis unterscheidet sich deutlich vom vorherigen Beispiel. Diesmal erhalten Sie Einlagen im Wochenformat für Ihren Systemplaner (Abbildung 3).
b03-wochenuebersicht
Abbildung 3: Einlagen für Ihren Systemplaner erstellen Sie mit LaTeX einfach selbst.
Wandkalender
LaTeX eignet sich nicht nur zum Erstellen praktischer Taschenkalender, Sie können damit auch dekorative Wandkalender gestalten (Abbildung 4). Dazu kommt das Paket wallcalendar [7] zum Einsatz.
b04-bildkalender
{{:pasted:20241006-132846.png}}
Abbildung 4: Auch das Erstellen dekorativer Wandkalender meistert LaTeX mühelos.
Listing 7 enthält ein Beispiel für zwei Kalenderblätter für Januar und Februar mit verschiedenen Layouts. Zunächst gilt es aber noch, sich für zwölf Bilder zu entscheiden, die Sie im Kalender verwenden möchten und die Sie in einem eigenen Unterordner abspeichern. Als Dokumentenklasse dient diesmal wallcalendar, in deren Optionen Sie das Jahr festlegen, für das Sie einen Wandkalender erstellen möchten, dessen Sprache sowie das Unterverzeichnis mit den Bildern (Zeilen 1 bis 6). Daran schließt sich die Auswahl der passenden Zeichensätze an (Zeilen 7 und 8).
Listing 7
<code>
Wandkalender
\documentclass[%
year=2021,
language=german,
imageFolder=./bilder/
]
{wallcalendar}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\SetPhoto[file={januar}, xOffset=0mm, yOffset=-155mm]{January}
\SetQuote{January}{%
\centering
\color{darkgray}
\sffamily\bfseries
Blicke in dein Inneres! Da drinnen ist eine Quelle des Guten, die niemals aufhört zu sprudeln, solange du nicht aufhörst nachzugraben.\\
(Marc Aurel)
}
\SetCalendar{January}
\SetEvents{January}{}{01.01. Neujahr; 06.01. Heilige Drei Könige}
\SetPhoto[file={februar}]{February}
\SetQuote[xOffset=10mm, yOffset=12mm]{February}{%
\raggedleft
\color{white}
\small\sffamily\bfseries
Ich kann sagen, dass ich nur in Rom empfunden habe, was eigentlich ein Mensch sei.\\
Zu diesem Glück der Empfindung bin ich später nie wieder gekommen.\\
(Johann Wolfgang von Goethe)
}
\SetCalendar{February}
\SetEvents{February}{}{17.02. Aschermittwoch}
%%% usw. für die weiteren Monate %%%
\begin{document}
\MonthPage[layout=small landscape, put photo=full width]{January}
\MonthPage[layout=full page, put photo=full page]{February}
%%% usw. für die weiteren Monate %%%
\end{document}
Der weitere Code ist weniger kompliziert, als er auf den ersten Blick erscheint. Für jeden Monat gilt es, vier Befehle anzugeben, mit denen Sie ein Foto auswählen, ein Zitat beifügen, den Kalenderteil ausgeben und Feiertage benennen.
Das Bild für den Januar bestimmen Sie, wie in Zeile 9 zu sehen. Der richtige Monat steht in der geschweiften Klammer des Befehls, wobei Sie hier die Monatsnamen wieder auf Englisch eintragen müssen. In der eckigen Klammer findet der Dateiname des Fotos seinen Platz, gefolgt von der Verschiebung des Fotos auf der X- und Y-Achse. Letzteres ermitteln Sie durch Auszuprobieren, bis das Bild richtig sitzt.
Ein Zitat fügen Sie wie in den Zeilen 10 bis 16 angegeben ein. In der ersten geschweiften Klammer steht der Name des Monats, wiederum stets auf Englisch, gefolgt von dem Zitat, das auf dem Kalenderblatt für diesen Monat erscheinen soll. Hier sind die LaTeX-üblichen Auszeichnungen erlaubt. Im Beispiel zentriert das Skript den Text (Zeile 11), färbt ihn dunkelgrau ein (Zeile 12) und verwendet dafür gefettete, serifenlose Schrift. Möchten Sie kein Zitat unter dem Foto, geben Sie den Befehl trotzdem an, lassen aber die zweite geschweifte Klammer leer.
Unterhalb von Foto und Zitat findet der Kalenderteil seinen Platz (Zeile 17). In Zeile 18 ergänzen Sie den Kalender um die Feiertage des fraglichen Monats. Der Text, den Sie hier eintragen, erscheint unterhalb des Kalenderteils.
Die Zeilen 19 bis 29 enthalten nach demselben Prinzip den Code für den Februar; analog dazu ergänzen Sie ihn für die restlichen Monate. Das Paket wallcalendar bringt verschiedene Layouts mit, die das Handbuch zum Paket beschreibt. Im Hauptteil erzeugen die Zeilen 31 bis 35 für jeden Monat über einen eigenen Befehl ein Kalenderblatt. In der geschweiften Klammer dieses Befehls findet der passende Monatsname in englischer Sprache seinen Platz, in der eckigen Klammer entscheiden Sie sich für ein Layout. Unser Beispiel verwendet für Januar und Februar unterschiedliche Layouts. Die Kalenderblätter für die weiteren Monate geben Sie analog aus. Zum Erstellen kommt LuaTeX [8] zum Einsatz.
Fazit
Alle Jahre wieder die gleichen Rituale? Probieren Sie doch mal etwas Neues, und erstellen Sie Ihre Kalender einfach selbst. Einen Jahresplaner in Ihren Wunschfarben, mit den passenden Daten befüllt; praktische Monatsübersichten; selbstgemachte Einlagen für Ihren Systemplaner; einen Wandkalender mit Ihren schönsten Fotos – all das realisieren Sie schnell und einfach mit LaTeX. (tle)
Infos
Tikz-kalender: https://ctan.org/pkg/tikz-kalender TikZ-Projektseite: https://github.com/pgf-tikz/pgf Xcolor: Daniel Tibi, “Farbenfroh”, LU 01/2014, S. 82, https://www.linux-community.de/31562 Babel: https://ctan.org/pkg/babel Calendar: https://ctan.org/pkg/calendar KOMA-Skript: https://komascript.de Wallcalendar: https://ctan.org/pkg/wallcalendar LuaTeX: http://www.luatex.org