
Рассмотрим следующие м(не-)мы:
\documentclass{standalone}
\begin{document}
Foo & Bar
\end{document}
Сборка завершится ошибкой
! Misplaced alignment tab character &.
&
в то время как при удалении символа из кода будет создан совершенно правильный PDF-файл .
Даже простой TeX ведет себя так и
Foo & Bar
\bye
выдает ту же ошибку.
Я видел, &
как это используется только в табличной и массивной среде, никогда вне ее. Почему так?
Нельзя ли определить, например, \tabular
что \endtabular
-то &
особенное только внутри среды и просто обычный персонаж за ее пределами?
Почему &
выход за пределы табличной и массивной среды должен приводить к поломке документа?
Перефразируя вопрос: что такое символ табуляции выравнивания и где мы его обычно размещаем?
решение1
Предположим, что формат или пользователь не установил глобальное значение catcode для & (или любого другого символа) равным 4.
Каковы будут последствия, если предположить, что вы все равно захотите иметь локально такой символ (и не использовать команды типа \nc
«новый столбец» все время)?
- Каждыйтабличная среда должна была бы убедиться, что установила символ в качестве табуляции выравнивания, и они должны были бы договориться, какой из них использовать. Это потребовало бы большого количества исправлений. Это, естественно, не аргумент, почему это не было сделано при написании формата.
- Невозможно использовать этот символ, если табличный элемент используется в аргументе какой-либо команды. Например, вы столкнетесь с проблемами при использовании табличных элементов в нижних и верхних колонтитулах, в адресах писем, в списках авторов, в кадрах бимера. Естественно, можно определить команду как замену, но пользователи должны понимать, когда эта команда нужна.
Было бы довольно сложно отключить локально вкладку выравнивания. Например, в настоящее время вы можете легко ввести таблицу с большим количеством &, как здесь:
\documentclass{article} \begin{document} \begingroup \catcode`\&=12 \catcode`!=4 \begin{tabular}{ll} a & b ! c & d \end{tabular} \endgroup \end{document}
Но если табличный сбрасывает catcode &, то он больше не будет работать. Так что вам понадобятся некоторые хуки, чтобы разрешить такие манипуляции — и снова в каждой табличной среде.
В целом многое станет намного сложнее для авторов пакетов и для пользователей. Легче научиться печатать \&
.
решение2
Ты спрашиваешь:
Почему & имеет особое значение за пределами табличной среды?
Я думаю, что вопрос поставлен не совсем корректно. Я бы сказал, что &
это нечто особенное.повсюду, а не только внешняя tabular
среда. Персонаж &
имееткод категории 4-- "выравнивание табуляции" -- во всех форматах TeX и LaTeX, с которыми я когда-либо сталкивался. Эта настройка catcode позволяет использовать его в качестве символа выравнивания табуляции не только в tabular
-подобных средах (например, tabular*
, tabularx
, longtable
, и т. д.), но и array
средах, устаревшей eqnarray
среде, некоторых средах отображения математических вычислений пакета amsmath
, IEEEeqnarray
среде пакета IEEEtrantools
и, вероятно, довольно многих дополнительных средах.
Преимущество назначения catcode 4 &
по умолчанию заключается в том, что все разработчики пакетов могут (и, честно говоря,должен) пишут свой код, предполагая, что &
у него catcode 4. Без этого значения по умолчанию некоторые разработчики пакетов выбирали бы &
в качестве символа табуляции выравнивания, тогда как другие могли бы выбрать @
или кто знает что еще. Такой результат был бы явно хуже для большинства пользователей, поскольку им пришлось бы запоминать, какой символ или символы служат функцией табуляции выравнивания в какой среде.
И наоборот, если кто-то не хочет &
быть особенным и не хочет изменять свой catcode, его нужно ввести как \&
.