Какая документация подробно объясняет, как использовать условные операторы TeX?

Какая документация подробно объясняет, как использовать условные операторы TeX?

У меня есть документ, в котором требуется большое количество простых условных операторов TeX, например:

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

Я нашел ограниченную документацию по этой теме, и большая ее часть довольно кратка и нелегка для понимания, или они просто описывают отдельные компоненты, но не объясняют, как они используются вместе. Какая документация подробно описывает, как создавать простые условные операторы TeX, при этом предоставляя обширные примеры кода и показывая, как избежать распространенных ошибок?

решение1

Как упоминалось в комментариях, TeXBook является основным справочником по этим вещам. Но также стоит упомянуть терминологию, которая может помочь при поиске бесплатной документации на этом сайте или где-либо еще.

Сами условные операторы \if \ifnumи их друзья — это TeXпримитивыа не определены в простом TeX. Сам TeX не предоставляет булевых операторов, таких как OR и AND, хотя, конечно, различные макропакеты реализуют их (путем подходящего вложения примитивных конструкций if), но простой TeX на самом деле не определяет никаких таких макросов. Поэтому буквальное прочтение (но не такое полезное) прочтение вашего вопроса приведет к ответу, что документации нет, поскольку в простом TeX нет AND или OR. (есть примитив, \orкоторый используется с, \ifcaseно это не инфиксный соединитель, подразумеваемый вашим вопросом).

Ваш первый пример:

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

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

Ваш второй пример, здесь вам придется быть более конкретным

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

должно #1быть задано как {tree}или \def\x{tree}..... {\x}считается как истина, и если да, то вы просто хотите разрешить один уровень расширения или произвольное число. Тестирование в каждом случае довольно различно.

Но возможно

\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

На самом деле, этот такой же, как и первый.

IF 10 > #1 > 2

Связанный контент