\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

この変更がいつ、なぜ起こったのかを調べてみましたが、バージョン履歴やそれに類するものは見つかりませんでした。

私がこれを尋ねる理由の 1 つは、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}

注: 最初の行には 2 つの先頭タブが必要で、2 番目の行には 1 つの先頭タブが必要です (ここでは複数のスペースとして表示されます)。

の前の二重スペースを削除しました\end{alltt}。これにより行が追加されるからです。出力にインデントが必要な場合を除き、逐語的環境をインデントしないでください。

ここに画像の説明を入力してください

答え2

Fall 2023 より前は、verbatim のようなコンテキストのタブはデフォルトの動作のままで、通常のスペースに変換されていました。つまり、行の先頭では無視されていました。Fall 2023 リリース以降、タブは verbatim のような設定によって明示的に処理され、スペースと同じように制御できるようになりました。標準的な動作はスペースの動作に従い、保持されるようになりました。これが変更の理由です。

関連情報