[Tex/LaTex] condition if/else

conditionals

In the following example I want write Tuesday if the variable dia is Monday. The following example write rest not matter the string of variable dia.

\documentclass{article}
\def\dia#1{\if{#1=monday}{tuesday}\else{rest}\fi}
\begin{document}
    \dia{monday}
\end{document}

Best Answer

There are many ways to do it. The following also works with plain TeX and without e-TeX or other extensions. However, it is not expandable, but this does not seems to be needed here.

\documentclass{article}
\newcommand*{\dia}[1]{%
  \begingroup % keep macro definitions local
    \def\param{#1}%
    \def\monday{monday}%
    \ifx\param\monday
      Tuesday%
    \else
      Rest%
    \fi
  \endgroup
}
\begin{document}
  \dia{monday}
\end{document}

Result

Links:

An expandable solution without direct string comparison:

\documentclass{article}

\makeatletter
\@namedef{dia@Monday}{Tuesday}
\@namedef{dia@Tuesday}{Wednesday}
\@namedef{dia@Wednesday}{Thursday}
\@namedef{dia@Thursday}{Friday}
\@namedef{dia@Friday}{Saturday}
\@namedef{dia@Saturday}{Sunday}
\@namedef{dia@Sunday}{Monday}
\newcommand*{\dia}[1]{%
  \expandafter\ifx\csname dia@#1\endcsname\relax
    Rest%
  \else
    \csname dia@#1\endcsname
  \fi
}
\makeatother

\begin{document}
  \dia{Monday}
  \dia{\dia{Monday}}
  \dia{\dia{\dia{Monday}}}
  \dia{\dia{\dia{\dia{Monday}}}}
  \dia{\dia{\dia{\dia{\dia{Monday}}}}}
  \dia{\dia{\dia{\dia{\dia{\dia{Monday}}}}}}
  \dia{\dia{\dia{\dia{\dia{\dia{\dia{Monday}}}}}}}
  \dia{\dia{\dia{\dia{\dia{\dia{\dia{\dia{Monday}}}}}}}}
\end{document}

Result

Related Question