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 '18, 16:44

cis's gravatar image

cis
9.5k93459491
Akzeptiert-Rate: 29%

bearbeitet 26 Nov '18, 16:47

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

(26 Nov '18, 17:05) Ulrike Fischer

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

(26 Nov '18, 20: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 '18, 21:53) Henri

Ich verstehe nicht ganz, die Frage und die Antworten sind doch schon länger online als die Frage und die Mathematik ist gelöst. Mittlerweile ist der Easter-Test auch in PGF enthalten. (Implementiert mit plain eTeX.) Ich habe in einem anderen Zusammenhang mal versucht mit PGFMath Ganzzahl-Berechnungen zu machen, aber die haben nicht zum Ergebnis geführt, vermutlich wegen der schlechten Genauigkeit. Die Lösung war dann einfach auf die Ganzzahl-Arithemtik von TeX zurück zugreifen. (\pgfinteval oder \inteval mit L3.)

(15 Dez '22, 00:08) Qrrbrbirlbel

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 27 Nov '18, 01:53

Community's gravatar image

Community
21
Akzeptiert-Rate: 56%

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 '18, 09: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 '18, 15:46) cis
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:

×730
×14

gestellte Frage: 26 Nov '18, 16:44

Frage wurde gesehen: 5,947 Mal

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