4

While reading "TeX for the impatient" on the topics of iftrue and iffalse, I encountered this example,

\def\isbigger{\let\bigger=\iftrue}
\def\isnotbigger{\let\bigger=\iffalse}
\def\test#1#2{\ifnum #1>#2 \isbigger \else \isnotbigger \fi}

\test{3}{6} \bigger$3>6$\else$3\le6$\fi \par

thinking I can do better than that, as shown below

\def\true#1#2{$#1>#2$}
\def\false#1#2{$#1\le#2$}
\def\test#1#2{\ifnum #1>#2 \true#1#2 \else \false#1#2 \fi}

\test{3}{6} \par
\test{6}{3} \par.

But wait, the book example, I wonder, may have an unsound signal(s) burried in it which I did not notice. So I explored and located this (What is iffalse for What is \iffalse for?), addressed in to find a direction leading to newif command, thus continuing my try of what follows

\newif\ifbigger
\def\test#1#2{\ifnum #1>#2 \biggertrue \else \biggerfalse \fi
\ifbigger$3>6$\else$3\le6$\fi}
\test{3}{6} \par
\test{6}{3} \par.

Satisfied with the exercies tried, I still have some concerns. Is this the burried signal I am looking for? Are there other directions that the shown programming techniques in the book are useful/crucial?

7
  • I don't understand. What does "unsound" or "buried signals" mean?
    – Werner
    Aug 19, 2013 at 7:02
  • What I tried to say is that my code, in my view, can achieve the same results as those in the book. Is there an untold story on when to use \iftrue or \iffalse notion for that example on page 239? What are the focus/situation of using \iftrue or \iffalse?
    – Jesse
    Aug 19, 2013 at 8:32
  • After \newif\ifbigger, \biggertrue and \biggerfalse are just \let\ifbigger=\iftrue and \let\ifbigger=\iffalse, so the third code is exactly the same as the first one.
    – egreg
    Aug 19, 2013 at 8:46
  • @egreg -- Is it fair to say that one should avoid using \iftrue or \iffalse because \newif technique is sufficient?
    – Jesse
    Aug 19, 2013 at 10:37
  • 1
    @Jesse \iftrue and \iffalse can sometimes get handy, but in general the \newif abstraction is better.
    – egreg
    Aug 19, 2013 at 10:45

1 Answer 1

8

Your original example is somewhat odd. The idea behind it is to define a new command \bigger which you can use in subsequent tests. The whole point is that \bigger is separate from \test, so your second example doesn't replicate its functionality. The reason I call it ‘odd’ is that the code

\bigger
  % true code
\else
  % false code
\fi

doesn't quite ring true to me — but I'm long accustomed to seeing such conditionals begin with \if….

The \bigger definition code is how \newif works internally, which you've now discovered. For what you're interested in, it's a reasonable approach to take. You may, however, be interested in alternative approaches (https://tex.stackexchange.com/a/5896/179). In terms of traps to be aware of, it can be better to avoid using \iftrue and \iffalse in general (https://tex.stackexchange.com/a/2951/179).

1
  • thanks for the speedy response and directions. Oh, just to clarify, the odd code is from the book which indeed puzzles me too, but it works.
    – Jesse
    Aug 19, 2013 at 17:02

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .