勿論、\unless
付の if-トークンは、原理的にはその後の「真の時の処理」と「偽の時の処理」を逆にしたものに等価であるはずであるが、機械的には置き換えられない場合もある。変則的なマクロで、可変な条件部を if-トークンで直接指定する場合等が考えられる。例えば、plain TeX のマクロ(LaTeX でも使える)の \loop...\repeat
が該当する:
\xx@cnt=0 \loop % \xx@cnt, \xx@foo は整数レジスタ
%...
\xx@foo=\csname xx@foo/\the\xx@cnt\endcsname\relax
\advance\xx@cnt1
\ifnum\xx@foo=2 \repeat
上の例ではループ継続条件を「\xx@foo が 2 である」としているが、これを「\xx@foo が 2 でない」に変更したいとする。最後の行を次のように変えるのはエラーになり失敗する:
\ifnum\xx@foo=2 \else \repeat
これに対して、\unless
を用いれば期待通りの動作になる:
\unless\ifnum\xx@foo=2 \repeat
ちなみに、\else
を用いた方が失敗するのは、「plain TeX の \loop ... \repeat
がそういう仕様だから」であって、これを \else
が使えるように再定義することは勿論可能である。