Изменилась ли обработка пробелов в \alltt в последнее время (т. е. с 2021 года)?

Изменилась ли обработка пробелов в \alltt в последнее время (т. е. с 2021 года)?

После переезда на новый компьютер (и установки текущей (2024) системы texlive) я заметил, что макет в моем документе был испорчен в нескольких местах. После некоторых экспериментов выяснилось, что это было связано с обработкой пробелов средой alltt. Точнее:

  • Символы табуляции, по-видимому, преобразуются в пробелы, ранее они игнорировались.
  • если перед \end{alltt} есть пробелы, между кодом и последующим текстом добавляется дополнительная пустая строка.

В качестве примера:

 \begin{alltt}
[tab][tab] line 1
[tab] line 2
  \end{alltt}
More text

ранее приводило к

line1
line2
More text

но теперь это дает мне

  line1
 line2

More text

Я пытался выяснить, почему и когда произошло это изменение, но не смог найти никакой истории версий или чего-либо подобного.

Одна из причин, по которой я это спрашиваю, заключается в том, что мне интересно, может ли это произойти в любой момент, когда я обновляю свою установку texlive. Я раньше думал, что (по крайней мере для основных команд) код был стабилен или, по крайней мере, достаточно стабилен, чтобы не менять вывод документов, которые работали с предыдущей версией.

решение1

Thealltt среда всегда должна была уважать пробелы в начале строк, но до 2023 года этого не делалось.вкладки.

Это было исправлено в версии 2023 года, и теперь табуляции ведут себя так же, как пробелы.

Вы можете вернуться к прежнему поведению, но это должно быть осознанным решением.

\documentclass{article}
\usepackage{alltt}
\usepackage{showframe}

\makeatletter
\AddToHook{env/alltt/begin}{\let\@xobeytab\relax}
\makeatother

\begin{document}

\begin{alltt}
                line 1
        line 2
  line 3
 line 4
\end{alltt}
More text

\end{document}

Примечание: первая строка должна содержать два начальных символа табуляции, а вторая — один начальный символ табуляции (здесь они будут отображаться как несколько пробелов).

Я удалил двойной пробел перед \end{alltt}, потому что это приводит к дополнительной строке. Никогда не делайте отступ в окружениях verbatim, если только вы действительно не хотите отступа в выводе.

введите описание изображения здесь

решение2

До осени 2023 года вкладки в контекстах, подобных verbatim, оставались с поведением по умолчанию: преобразованными в обычные пробелы. В начале строки это означало, что они игнорировались. С релиза осени 2023 года вкладки явно обрабатываются настройками verbatim, что позволяет управлять ими так же, как и пробелами. Стандартное поведение теперь следует поведению пробелов: они сохраняются, отсюда и изменение.

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