\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

环境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 年秋季发布以来,制表符由逐字类设置明确处理,允许以与空格相同的方式控制它们。标准行为现在遵循空格的行为:它们被保留,因此进行了更改。

相关内容