Верстальная программа TeX: какие изменения сделаны в 2021 году

19e98d2f466a1b40aea223297865c079

Обсуждая разработку свободного программного обеспечения, коллеги пишут, что ПО развивается — и только 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.

© Habrahabr.ru