Формальный термин для сокращенного обозначения LaTeX

Формальный термин для сокращенного обозначения LaTeX

В LaTeX можно записывать выражения типа \frac12, которые должны быть эквивалентны выражениям типа \frac{1}{2}. Существует ли формальный термин для первой формы записи?

решение1

Нет.


Это всего лишь часть обычного способа, которым TeX поглощает неразделенные макроаргументы. Если вы определяете

\def\foo#1{Something using #1 (or not).}

или эквивалентно

\newcommand\foo[1]{Something using #1 (or not).}

когда \fooрасширяется, он поглощает следующий токен или сбалансированную группу во входном потоке в качестве своего аргумента (который доступен как #1в определении). Предполагая нормальные коды категорий

  • токен — это один символ (за исключением \, {, }, %пробела или символа новой строки (поскольку они игнорируются)) или последовательность команд (что-то начинающееся с \),
  • сбалансированная группа начинается {и заканчивается первым }, который не принадлежит другой группе (которая началась позже). Скобки удаляются из группы при поглощении (то есть #1не содержит их).

Вот почему \foo xи \foo{x}, \newcommand{\foo}и \newcommand\fooили \frac 12, \frac{1}{2}и эквивалентны \frac{1}2.\frac1 2

Хорошей практикой является выбор версии, которая наиболее понятна, что обычно означает использование группы. Лично я явно опускаю группу в тех случаях, когда япридетсявведите один токен, например \newcommand\foo.

решение2

Возможно, стоит добавить, что различие между аргументами с одним токеном и аргументами в фигурных скобках более явно в LaTeX3/ expl3. По соглашению каждое expl3имя макроса должно заканчиваться на , :за которым следует последовательность букв, называемых спецификаторами аргументов, каждая из которых отражает тип соответствующего аргумента.

Помимо многих других у нас есть

  • nдля аргументов с фигурными скобками или однозначных аргументов, и
  • Nтолько для однозначных аргументов, обычно имен макросов/функций или имен переменных.

Эти спецификаторы по-прежнему не изменяют способ обработки отдельных аргументов (La)TeX, но дают пользователю подсказку о том, как аргументы используются внутри макроса.

Например, l3tlпакет предоставляет две функции \tl_if_empty:nTFи \tl_if_empty:NTF. Хотя обе функции проверяют, является ли список токенов пустым, и выполняют код условно, первая, как ожидается, будет вызвана с группой токенов в фигурных скобках, тогда как вторая ожидает переменную списка токенов, которая сначала раскрывается, прежде чем будет выполнена проверка ее содержимого.

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