
У меня возникли проблемы с реализацией оператора if. Я хочу узнать, относятся ли сегодняшний день и пять дней с настоящего момента к одному и тому же месяцу. Я получаю правильные значения соответствующего месяца для печати, но когда я хочу проверить, равны ли оба числа, это не работает. Проверка всегда ложна. Вероятно, это как-то связано с командой \new, которая не сохраняет ожидаемый результат, или с чем-то в этом роде, но я не могу найти обходного пути.
\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}