alt text

Ich habe hier einen Algorithmus, der mit pgfmath das Osterdatum berechnet. \Easter liefert z.B. 2018-04-01.

Allerdings kann ich das Ergebnis scheints nicht in der Form
\calendar[] if (equals=\Easter)[red];
verwenden.

Was muss ich anders machen?
Günstig wäre dieses berechnete Osterdatum als pgfkey zu haben, weil ich dann die von Ostern abgeleiteten Feiertage berechnen/hervorheben könnte, z.B. Easter=39 für Ostertag + 39 Tage = Christi Himmelfahrt.
Wie kann ich dass machen

Öffne in Overleaf
\documentclass[margin=5mm, varwidth]{standalone}
\usepackage{tikz}
 \usetikzlibrary{calendar}

\pgfmathtruncatemacro{\year}{2018}
\begin{document}

% Ostersonntag 
% https://www.tondering.dk/claus/cal/easter.php
\newcommand*{\Easter}[1][\year]{%        \Easter[year]
\pgfmathtruncatemacro{\G}{mod(#1,19)}%
\pgfmathtruncatemacro{\C}{floor(#1/100)}%
\pgfmathtruncatemacro{\H}{mod(\C-floor(\C/4)-floor((8*\C+13)/25)+19*\G+15,30)}%
\pgfmathtruncatemacro{\I}{\H-floor(\H/28)*(1-floor(29/(\H+1))*floor((21-\G)/11))}%
\pgfmathtruncatemacro{\J}{mod(#1+floor(#1/4)+\I+2-\C+floor(\C/4),7)}
\pgfmathtruncatemacro{\L}{\I-\J}%
\pgfmathtruncatemacro{\eastermonth}{3+floor((\L+40)/44)}%
\pgfmathsetmacro{\EasterMonth}{"0\eastermonth"}%   
\pgfmathtruncatemacro{\easterday}{\L+28-31*floor(\eastermonth/4)}%
\pgfmathsetmacro{\EasterDay}{\easterday < 10 ? "0\easterday" : "\easterday"}%
%
#1-\EasterMonth-\EasterDay%
}
Easterdate: \Easter, 
\year-\EasterMonth-\EasterDay

\pgfkeys{/pgf/calendar/Easter/.default = 0}
\pgfkeys{/pgf/calendar/Easter/.code ={     ? ? ? 
}}

\begin{tikzpicture}
\calendar[dates=\year-04-01 to \year-05-last, week list, 
month label above centered, month text=\%mt \%y-
]
if ( 
%    Easter=-3, % Maundy Thursday
%        Easter=-2, % Good Friday
%        Easter,    % Easter Sunday
%        Easter=1,  % Easter Monday
%        Easter=39, % Feast of the Ascension
%        Easter=49, % Pentecost
%        Easter=50 % Whit Monday
)[red]
if (equals=2018-4-1) [red]; % geht
if (equals=\year-\EasterMonth-\EasterDay) [red] % geht
%if (equals=\Easter) [red]  % geht nicht.
;
\end{tikzpicture}

\end{document}

gefragt 26 Nov, 10:44

cis's gravatar image

cis
8.5k16172275
Akzeptiert: 68%

bearbeitet 26 Nov, 10:47

Definiere nicht \year um. Das ist ein reserviertes Register.

(26 Nov, 11:05) Ulrike Fischer

OK, hatte eigentlich \Year, war noch aus älteren Versuchen. Aber: hat das mit dem Problem zu tun?

(26 Nov, 14:36) cis

Ebenso solltest du nicht \H und \L umdefinieren: \H{o} und H{u} geben die ungarischen Buchstaben ő und ű, \L gibt den polnischen Buchstaben Ł.

(26 Nov, 15:53) Henri

Das ist keine komplette Antwort, aber wie aus Ulrike's Antwort implizit hervorgeht, ist das Problem, dass das \Easter nicht "expandable" ist. Sei es wie es sei, das funktioniert.

Öffne in Overleaf
\documentclass[margin=5mm, varwidth]{standalone}
\usepackage{tikz}
 \usetikzlibrary{calendar}

\pgfmathtruncatemacro{\year}{2018}
\begin{document}

% Ostersonntag 
% https://www.tondering.dk/claus/cal/easter.php
\newcommand*{\Easter}[1][\year]{%        \Easter[year]
\pgfmathtruncatemacro{\G}{mod(#1,19)}%
\pgfmathtruncatemacro{\C}{floor(#1/100)}%
\pgfmathtruncatemacro{\H}{mod(\C-floor(\C/4)-floor((8*\C+13)/25)+19*\G+15,30)}%
\pgfmathtruncatemacro{\I}{\H-floor(\H/28)*(1-floor(29/(\H+1))*floor((21-\G)/11))}%
\pgfmathtruncatemacro{\J}{mod(#1+floor(#1/4)+\I+2-\C+floor(\C/4),7)}
\pgfmathtruncatemacro{\L}{\I-\J}%
\pgfmathtruncatemacro{\eastermonth}{3+floor((\L+40)/44)}%
\pgfmathsetmacro{\EasterMonth}{"0\eastermonth"}%   
\pgfmathtruncatemacro{\easterday}{\L+28-31*floor(\eastermonth/4)}%
\pgfmathsetmacro{\EasterDay}{\easterday < 10 ? "0\easterday" : "\easterday"}%
%
#1-\EasterMonth-\EasterDay%
}
Easterdate: \Easter, 
\year-\EasterMonth-\EasterDay

\edef\myEaster{\year-\EasterMonth-\EasterDay}

\pgfkeys{/pgf/calendar/Easter/.default = 0}
\pgfkeys{/pgf/calendar/Easter/.code ={     ? ? ? 
}}

\begin{tikzpicture}
\calendar[dates=\year-04-01 to \year-05-last, week list, 
month label above centered, month text=\%mt \%y-
]
if ( 
%    Easter=-3, % Maundy Thursday
%        Easter=-2, % Good Friday
%        Easter,    % Easter Sunday
%        Easter=1,  % Easter Monday
%        Easter=39, % Feast of the Ascension
%        Easter=49, % Pentecost
%        Easter=50 % Whit Monday
)[red]
%if (equals=2018-4-1) [red]; % geht
%if (equals=\year-\EasterMonth-\EasterDay) [red] % geht
if (equals=\myEaster) [red]  % geht nicht.
;
\end{tikzpicture}

\end{document}

Mir ist leider nicht klar, was Du mit \pgfkeys{/pgf/calendar/Easter/.code ={ ? ? ? }} im Sinn hast. (Darüber hinaus habe ich nicht gewusst, dass man Ostern berechnen kann. Ich dachte immer, das sei der Sonntag 2 Monate nachdem die ersten Schokohasen die Supermärkte bevölkern. ;-)

Permanenter link

beantwortet 26 Nov, 19:53

Murmeltier's gravatar image

Murmeltier
2.0k64

Aus meiner Antwort ging implizit gar nichts hervor, ich hatte bei einem (kurzen Besuch) nur das damals noch vorhandene (und bei dir noch enthaltene) \pgfmathtruncatemacro{\year}{2018} kommentiert. Abgesehen davon hast du natürlich recht, dass es um Expandierbarkeit geht. Aber ich fürchte, wir werden noch viele Fragen von cis sehen, bevor er/sie einsieht, dass das ein wichtiges Konzept ist und die richtigen Tools dafür benützt.

(27 Nov, 03:50) Ulrike Fischer

Ach so, ja gut, das konnte man nicht wissen. Hier hat er Easter derart, dass Easter gleich Easter=0 ist, aber z.B. Easter=-2 wäre Ostern weniger 2 Tage, also Karfreitag. Ich konnte aber seine Methode nicht auf meine Berechnung anwenden.
Das macht nämlich Sinn, da, bis auf lokale Ausnahmen, alle beweglichen Feiertage von Ostern abgeleitet werden. Z.B. Easter=+39 gleich Ostern plus 39 Tage gleich Christi Himmelfahrt.
Kann man das evtl ergänzen?

(27 Nov, 09:46) cis
Deine Antwort auf die Frage (nicht auf andere Antworten)
Knebel-Vorschau

Folge dieser Frage

Per E-Mail:

Wenn Du Dich anmeldest, kannst Du Updates hier abonnieren

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üge einfach zwei Leerzeichen an die Stelle ein, an der die neue Zeile sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Zugeordnete Themen:

×627
×11

Frage gestellt: 26 Nov, 10:44

Frage wurde angeschaut: 631 Mal

Zuletzt aktualisiert: 27 Nov, 09:46