Que documentação explica detalhadamente como usar condicionais TeX?

Que documentação explica detalhadamente como usar condicionais TeX?

Eu tenho um documento que precisa de uma grande variedade de condicionais TeX simples, por exemplo:

IF #1 >= 1 AND #2 >= 10
IF #1 != “tree” OR #2 == “mountain”
IF 10 > #1 > 2

Encontrei documentação limitada sobre este assunto e a maioria é bastante concisa e não é fácil de entender, ou apenas descreve os componentes individuais, mas não explica como eles são usados ​​em conjunto. Que documentação descreve detalhadamente como criar condicionais TeX simples, ao mesmo tempo que fornece um amplo exemplo de código e mostra como evitar erros comuns?

Responder1

Conforme mencionado nos comentários, o TeXBook é a referência definitiva para essas coisas. Mas também vale a pena mencionar a terminologia que pode ajudar na busca por documentação gratuita neste site ou em outro lugar.

As próprias condicionais \if \ifnume amigos são TeXprimitivosem vez de definido em TeX simples. O TeX em si não fornece operadores booleanos como OR e AND embora, é claro, vários pacotes de macro os implementem (através do aninhamento adequado das construções if primitivas), mas o TeX simples de fato não define tais macros. Portanto, uma leitura literal (mas não tão útil) de sua pergunta levaria à resposta de que não há documentação, pois o TeX simples não possui AND ou OR. (existe um \orprimitivo que é usado, \ifcasemas não é o conector infix implícito na sua pergunta).

Seu primeiro exemplo:

IF #1 >= 1 AND #2 >= 10

\ifnum#1>1 
  \ifnum#2>9
     yes
   \else
     no
   \fi
 \else
 no
\fi

Seu segundo exemplo, aqui você teria que ser mais específico

IF #1 != “tree” OR #2 == “mountain”

precisa #1ser fornecido como {tree}ou \def\x{tree}..... {\x}conta como verdadeiro e, nesse caso, você deseja apenas permitir um nível de expansão ou um número arbitrário. O teste é bastante diferente em cada caso.

Mas talvez

\def\treetest{tree}\def\mountaintest{mountain}
\def\testa{#1}\def\testb{#2}
\ifx\treetest\testa
   \ifx\mountaintest\testb
      yes
    \else
      no
    \fi
 \else
   yes
 \fi

Este é igual ao primeiro, na verdade.

IF 10 > #1 > 2

informação relacionada