Problem mit einem Test in einer if-Anweisung

Problem mit einem Test in einer if-Anweisung

Ich habe Probleme mit der Implementierung einer if-Anweisung. Ich möchte wissen, ob heute und in fünf Tagen im selben Monat liegen. Ich bekomme die korrekten Werte des entsprechenden Monats zum Ausdrucken, aber wenn ich testen möchte, ob beide Zahlen gleich sind, funktioniert es nicht. Der Test ist immer falsch. Es hat wahrscheinlich etwas mit dem \newcommand zu tun, der das erwartete Ergebnis nicht speichert oder so etwas in der Art, aber ich kann keine Problemumgehung finden.


\documentclass{article}
\usepackage{advdate}

\makeatletter
\renewcommand\AdvanceDate[1][\@ne]{\global\advance\day#1 \FixDate}
\makeatother
\usepackage{ifthen}

\begin{document}
\SetDate[30/08/2020]

\newcommand{\dd}{{\AdvanceDate[0]\the\month}}
\newcommand{\ddo}{{\AdvanceDate[1]\the\month}}
\newcommand{\ddf}{{\AdvanceDate[5]\the\month}}


\today \quad is during month \dd \quad and tomorrow is during month \ddo \quad but we are still {\AdvanceDate[-1]\today}
\newline

\today \quad is during month \dd \quad and five days from now is during month \ddf \quad but we are still {\AdvanceDate[-5]\today}
\newline

"Today and tomorrow happen in the same month" is \ifthenelse{\equal{\dd}{\ddo}}{TRUE}{FALSE} and we are still \today
\newline

"Today and five days from now happen in the same month" is \ifthenelse{\equal{\dd}{\ddf}}{TRUE}{FALSE} but we are still {\AdvanceDate[-5]\today}

\end{document}

Danke!

Antwort1

Das Makro \ddliefert nicht direkt \the\month, sondern führt mehrere Zuweisungsanweisungen aus, um daran zu gelangen.

Sie möchten auch keine globalen Zuweisungen an durchführen \day.

\documentclass{article}
\usepackage{advdate}
\usepackage{ifthen}

\newcommand{\ifsamemonthTF}[4]{%
  \begingroup % compute the first date's month
  \AdvanceDate[#1]%
  \edef\x{\endgroup\def\noexpand\firstincrementmonth{\the\month}}\x
  \begingroup % compute the first date's month
  \AdvanceDate[#2]%
  \edef\x{\endgroup\def\noexpand\secondincrementmonth{\the\month}}\x
  \ifthenelse{\firstincrementmonth=\secondincrementmonth}{#3}{#4}%
}
\newcommand{\dd}{{\AdvanceDate[0]\the\month}}
\newcommand{\ddo}{{\AdvanceDate[1]\the\month}}
\newcommand{\ddf}{{\AdvanceDate[5]\the\month}}

\begin{document}
\SetDate[30/08/2020]

\today\ is during month \dd\ and tomorrow is during 
month \ddo\ but we are still \today

\today\ is during month \dd\ and five days from now is during 
month \ddf\ but we are still \today

``Today and tomorrow happen in the same month'' is 
\ifsamemonthTF{0}{1}{TRUE}{FALSE} and we are still \today

``Today and five days from now happen in the same month'' is 
\ifsamemonthTF{0}{5}{TRUE}{FALSE} but we are still \today

\end{document}

Bildbeschreibung hier eingeben

verwandte Informationen