在换了一台新电脑(并安装了最新的 (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
环境alltt
一直应该尊重行首的空格,但直到 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}
,因为它会导致多出一行。永远不要缩进逐字环境,除非您确实希望在输出中缩进。
答案2
在 2023 年秋季之前,逐字类上下文中的制表符保留其默认行为:转换为普通空格。在行首,这意味着它们被忽略。自 2023 年秋季发布以来,制表符由逐字类设置明确处理,允许以与空格相同的方式控制它们。标准行为现在遵循空格的行为:它们被保留,因此进行了更改。