
Tengo un documento que necesita una gran variedad de condicionales TeX simples, por ejemplo:
IF #1 >= 1 AND #2 >= 10
IF #1 != “tree” OR #2 == “mountain”
IF 10 > #1 > 2
He encontrado documentación limitada sobre este tema y la mayoría es bastante concisa y no es fácil de entender, o simplemente describen los componentes individuales, pero no explican cómo se usan juntos. ¿Qué documentación describe detalladamente cómo crear condicionales TeX simples, al mismo tiempo que proporciona un amplio código de ejemplo y muestra cómo evitar errores comunes?
Respuesta1
Como se menciona en los comentarios, el TeXBook es la referencia definitiva para estas cosas. Pero también vale la pena mencionar la terminología que puede ayudar a la hora de buscar documentación gratuita en este sitio o en otro lugar.
Los condicionales propios \if
\ifnum
y amigos son TeX.primitivosen lugar de definirse en TeX simple. TeX en sí no proporciona operadores booleanos como OR y AND aunque, por supuesto, varios paquetes de macros los implementan (mediante un anidamiento adecuado de las construcciones if primitivas), pero TeX simple, de hecho, no define ninguna de esas macros. Entonces, una lectura literal (pero no tan útil) de su pregunta llevaría a la respuesta de que no hay documentación, ya que TeX simple no tiene AND ni OR. (Hay una \or
primitiva que se usa \ifcase
pero que no es el conector infijo implícito en su pregunta).
Tu primer ejemplo:
IF #1 >= 1 AND #2 >= 10
\ifnum#1>1
\ifnum#2>9
yes
\else
no
\fi
\else
no
\fi
Tu segundo ejemplo, aquí tendrías que ser más específico.
IF #1 != “tree” OR #2 == “mountain”
tiene #1
que darse como verdadero {tree}
o \def\x{tree}..... {\x}
cuenta como verdadero y, de ser así, solo desea permitir un nivel de expansión o un número arbitrario. Las pruebas son bastante diferentes en cada caso.
Pero quizás
\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
Éste es igual que el primero, la verdad.
IF 10 > #1 > 2