\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 年秋季版本以來,製表符由類似逐字設定的明確處理,允許以與空格相同的方式控制它們。現在的標準行為遵循空間的行為:它們被保留,因此發生了變化。

相關內容