
if ステートメントの実装で問題があります。今日と 5 日後が同じ月かどうか知りたいのです。対応する月の正しい値は印刷できますが、両方の数値が等しいかどうかをテストしたいときには機能しません。テストは常に false です。おそらく、期待される結果を保存しない \newcommand などと関係があるのでしょうが、回避策が見つかりません。
\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}
ありがとう!
答え1
マクロは を\dd
直接配信するのではなく\the\month
、それを取得するためにいくつかの割り当て命令を実行します。
また、 へのグローバル割り当ても実行しないでください\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}