%3F.png)
После переезда на новый компьютер (и установки текущей (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, что позволяет управлять ими так же, как и пробелами. Стандартное поведение теперь следует поведению пробелов: они сохраняются, отсюда и изменение.