
我在執行 if 語句時遇到問題。我想知道今天和五天後是否發生在同一個月。我得到了要列印的相應月份的正確值,但是當我想測試兩個數字是否相等時,它不起作用。測試總是錯誤的。它可能與不儲存預期結果或類似結果的 \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}