Верстальная программа TeX: какие изменения сделаны в 2021 году
Обсуждая разработку свободного программного обеспечения, коллеги пишут, что ПО развивается — и только TEX Дональда Кнута завершён и остановлен. Однако в 2021 году TEX перешёл от версии 3.14159265 к версии 3.141592653. Давайте посмотрим, что изменилось в программе, которая считается образцовой и примерной.
Дональд Кнут выпустил 3.141592653 версию в феврале 2021 года. С 2014 по 2020 год в программе было найдено более 250 проблем. Вместе с тем Кнут считает, что любой нетривиальный код не оптимален, и хотя его можно улучшать — однако не нужно.
У новой версии пять крупных отличий, которые связаны с обработкой ошибок и восстановлением после ошибок.
❶ Иногда TEX переходил в режим \batchmode, но продолжал принимать команды с терминала.
❷ Иногда TEX предлагал закончить сборку документа и перейти в редактор там, где это не нужно, совсем не при чтении исходного файла. Обе ошибки приводили к зависанию.
❸ Иногда TEX зависал в режиме \tracingparagraphs. Причина была в том, что TEX писал сообщение об ошибке в лог-файл, не писал о нём на экране и ждал ответа с терминала. Теперь программа будет жаловаться и в файл, и на экран.
❹ Следующая ошибка не интерактивная. Скорее всего, она уже мешала людям в предыдущие годы. Раньше TEX ошибочно применял (раскрывал) значение параметра, переданного макросу, сразу же после #\bgroup
, хотя в инструкции говорилось иначе. Теперь строка
\def\cs#1#\bgroup hi#1}
будет приводить к ошибке. Чтобы повторить прежний результат, следует писать такое:
\def\cs#1\bgroup{hi#1\bgroup}
Здесь исправлен не вполне естественный способ определения макросов. Впрочем, они все там не вполне естественные.
❺ Пусть написана команда с девятью параметрами, от #1 до #9. После этого нельзя использовать символ # в значениях этих параметров, потому что TEX допускает только девять параметров, то есть #9 — это наибольший допустимый параметр. Видя ещё один диез, TEX сообщит об ошибке и скажет, что игнорирует этот диез. Теперь поведение исправлено и TEX будет игнорировать всё, что следует за диезом.
Таковы крупные ошибки. Были и мелкие. Они относились к выводу лога на терминал, к переполнению переменной при обработке переносов в чрезвычайно длинных словах, к обработке курсива в специально испорченном шрифте.
Предыдущие обновления были в 2008 и 2014 годах. Кнут предполагает, что следующие обновления будут в 2028, 2037 и 2047 годах.
Литература
— Knuth, D. The TEX tuneup of 2021 // TUGboat. — 2021. — № 1.
— Обсуждение всех исправлений на сайте Stackexchange.
………
Текст: PereslavlFoto, CC-BY-SA 3.0.