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