LaTeX News斜め読み (5) Issue 41, 2025年6月発行

2025-06-23 (updated: 2025-06-25)  #LaTeX  #ltnews 

LaTeX Newsを斜め読みしていきます。完全な翻訳を目指す類のものではなく、私が興味を持った項目だけを、ざっくり説明しようと思います。網羅性と正確性には期待しないでください。

今回はLaTeX News Issue 41, June 2025 (LaTeX release 2025-06-01)を読んでいきます。


イントロダクション

LaTeXチームは引き続きタグ付きPDF出力のサポートとカーネル全般の開発に取り組んでいる。今回リリースにおける最も注目すべき変更点は、出力ルーチンマーク機構に関するもので、これらについては本ニュースの冒頭2節で説明する。

タグ付きプロジェクト向けのその他の機能の開発も進んでおり、特に注目すべきものとしては、新しいソケットの導入、グラフィックスに対するタグ付けの改善、数式モードのサポート強化、PDF 2.0対応の前進などが挙げられる。

タグ付きPDF以外の進展としては\NewDocumentEnvironmentとその変種で利用できる新しい引数タイプの導入によりverbatimなコンテンツの扱いが大幅に簡単になるほか、大文字・小文字の変換(case changing)のさらなる改善やバグ修正も行われた。

最後に、LaTeXカーネルの更新と並行して改善されているL3プログラミング層(expl3)における最近の変更点の一部も紹介する。従前は「実験的」扱いとなっていた複数のアイデアを、L3プログラミング層のコアに取り込んでいる。

柔軟な出力ルーチン

約40年の間、LaTeXの出力ルーチンはほとんどの部分がハードコーディングされたアルゴリズムとなっており、設定の自由度は非常に限られていた。そのため出力ルーチンの処理を少しでも変更する必要のあるパッケージは、内部処理を上書きする必要があり、こうした上書きによって典型的に発生する非互換性やLaTeXカーネルの更新にともなう不具合といった問題を抱えてきた。

この問題を改善し、タグ付きPDFの作成を支援するため、今回のリリースで出力ルーチンはリファクタリングされ、多くのフックやソケットが追加された。これによって、出力ルーチンをカスタマイズする必要のあるパッケージは、従来のように内部処理の上書きにともなうリスクを追うことなく、安全に独自の処理を挿入できるようになる。

出力ルーチンに追加されたフック

  • build/page/before, build/page/after: 各ページを処理する出力ルーチンが実行される前後の処理を追加するためのフック。具体的には\@outputpageの開始時と終了時にそれぞれ実行される。既存の多くのパッケージがまさにこれらの位置にコードを追加する目的で\@outputpageを上書きしているが、今後はこのフックにコードを追加するだけで済むようになる。
  • build/page/reset: 本文に対して特定の設定(例えばカテゴリーコードの変更)を行っているパッケージは、このフックを使用することで、そうした設定が出力ルーチン内で適用されることを回避できる。これにより、ヘッダーやフッターのような無関係な要素に設定の影響を及ぼさないようにすることが可能となる。
  • build/column/before, build/column/after: 各カラム(段組み)を処理する出力ルーチンが実行される前後の処理を追加するためのフック。具体的には\@makecolの開始時と終了時にそれぞれ実行される。これらの位置も既存の多くのパッケージがコードを挿入している。

出力ルーチンに追加されたソケット

出力ルーチンのアルゴリズム変更およびタグ付けをサポートするため、多数のソケットも導入した。このうち文書クラスやプリアンブル内で使用する上で特に有用なものは2つある。

build/column/outputboxソケット:要素の出力順と間隔

これは最も複雑なソケットで、カラム内本文テキスト、上部・下部のフロート要素、脚注をどのような順序・間隔で組み合わせて出力するかを制御する。したがって、レイアウト変更をするには、このソケットに対して次のように適切なプラグを割り当てるだけでよい。

\AssignSocketPlug{build/column/outputbox}{〈プラグ名〉}

このソケットに対応して用意されているプラグは以下の通りである。

  • space-footnotes-floats: 本文の後に\vfilを挿入し、その後に脚注、さらに下部のフロート要素を出力。
  • footnotes-space-floats: 1つ上のプラグと似ているが、\vfilは脚注とフロート要素の間に挿入される。
  • floats-space-footnotes: フロート要素が本文直後に配置され、\vfilを挟んで脚注がページ下部に配置される。
  • space-floats-footnotes: 要素と脚注の両方をページ下部に押し込む。脚注が最後となる1
  • floats-footnotes: 余ったスペースはすべてページにすでにあるグルーに分配される。配置順は本文、フロート要素、脚注の順。
  • footnotes-floats: 1つ上のプラグと同様だが、脚注とフロート要素の順が逆。\DocumentMetadataが使用されている新しいLaTeXのデフォルト。
  • footnotes-floats-legacy: 基本的にfootnotes-floatsと同様だが、LaTeXに昔から存在する「ボトムスキップバグ」が残っているもの。すなわち、脚注が本文に密着すべきラギッド・ボトムのレイアウトで\newpage\clearpageの直後では突然ページ下部に脚注が移動してしまう。これは明らかなバグだが、LaTeX 2.09以来この挙動が維持されており、互換性のために引き続き実装されている。\DocumentMetadataのない文書ではこのプラグがデフォルト。

build/column/baselineattachソケット:ベースラインからの距離測定

デフォルトでは、本文の最終行と脚注の間隔(\skip\footins)はその行のベースラインからではなくボトムから測定される。本文と下部フロート要素の間隔(\textfloatsep)も同様である。

これはplain TeXに由来する仕様だが、組版上最適とは言えない。例えば\flushbottomが有効な場合、最終行の位置が、文字にディセンダー(g, pなどのベースラインよりも下に出る部分)があるか否かによって変動してしまうためである。

build/column/baselineattachソケットは、この問題に対処するために新しく導入された。プラグonを使用することで、本文と脚注やフロート要素との間隔の基準位置がベースラインに変更される。互換性のためデフォルトではこのソケットはoffに設定されているが、将来的に\DocumentMetadataありの文書ではonがデフォルトに変更される可能性がある。

旧来マーク機構の置き換え

3年前のリリースで新しいマーク機構が導入されたが、これまではこの新しいマーク機構と旧来のマーク機構がそれぞれ完全に独立した実装として併存する状態が維持されてきた2。今回のリリースで、昔からあるマーク機構のユーザ用インターフェース\markboth, \markright, \leftmark, \rightmarkの内部実装も新しいマーク機構―すなわち内部的に\InsertMark等を使用するもの―に置き換えられる。これらのインターフェースを利用する既存の文書クラスや文書は、特に変更をしなくても機能し続けるが、内部実装が新しくなることにより、より柔軟な設定が行えるメリットを享受できる。例えば、旧来の\rightmarkでは最初の右マーク(\FirstMark{2e-right}に相当)しか取得できなかったが、今後は追加で最後の右マーク(\LastMark{2e-right})や上部の右マーク(\TopMark{2e-right})等にもアクセス可能である。

タグ付きPDFプロジェクトからのニュース

タグ付きPDFプロジェクトでは現在、いくつかの制約はあるものの、互換性のあるパッケージおよびクラス(増加中)を使用している限り、任意の複雑な文書に対してPDF/UA準拠のアクセシブルなPDF出力を生成可能な状態に到達した3。今回のリリースにおける注目ポイントは、タグ付けサポートのための特殊なソケットの追加、数式タグ付けの改善、さまざまな種類のグラフィックスに対するタグ付け対応の拡張にある。

新しいMetadataキーによるタグ付け有効化

これまではタグ付けを有効にするにはtestphaseキーを用いてlatex-labモジュールを読み込み、さらにタグ付けの詳細設定には\tagpdfsetupコマンドで個別に行う必要があった。しかし今回からは “test” という語を含まない正式なMetadataキーが用意され、タグ付きPDF生成機能が実運用レベル(production-ready)に達したことを反映している。

taggingキー

このキーはタグ付け機能の有効化、無効化、ドラフトモードを制御する。

  • on: タグ付けを有効化し、すべての推奨モジュールを読み込む4
  • off: 同じ推奨モジュールの読み込みは行われるが、class/beforeフックによりタグ付けコマンドを無効化。
  • draft: タグ付けを有効化するが、処理の最後に構造ツリーを出力する機能を無効化する。大きなドキュメントのドラフトを処理する際に時間の節約になる。

tagging-setupキー

このキーはタグ付け機能の詳細な設定を行うためのである。tagpdfsetupに渡すことのできるすべてのキーが利用できる。例えばmath/setup=mathml-SEで数式のタグ付け方式を指定したり、modulesキーで読み込むモジュールを上書きすることが可能である。またextra-modulesキーによりまだlatestには取り込まれていない実験的なモジュールを読み込むことも可能。

このキーを指定した場合はタグ付けは自動的に有効化されるため、tagging=onを重ねて明示する必要はない(tagging=offdraftを指定したい場合は必要)。

使用例

したがって、今回のリリース以降、標準的なMetadata宣言は次のような見た目となる。

\DocumentMetadata{
   pdfstandard={UA-2,A-4f},
   tagging=on,
   tagging-setup=
      {math/setup=mathml-SE,
       extra-modules=verbatim-alt}
}

testphaseキーの新しい値:latest

タグ付け有効化のための正式キーtaggingが導入されたことにより、testphaseキーの重要性は低下した。このキーは今後は主に開発者や後方互換性維持のためのものとなる。

今回のリリースでは、このキーに新たな値latestが追加された。これを指定した場合、その時点で推奨されているすべてのモジュールが自動的に読み込まれる。読み込まれたモジュールの一覧はログファイルに記録される。また、読み込まれるモジュールはタグ付きPDFプロジェクトの進行に応じて更新されていく。

タグ付けサポート用のソケット

タグ付け機能をサポートするためのソケット群は、それ以外の一般のソケットとは区別され、特殊な扱いとなっている。これらのタグ付けサポート用ソケットは\UseSocketではなく\UseTaggingSocketコマンドによってプラグが呼び出される。タグ付け機能を一時的停止または再開したい場合には、それぞれ\SuspendTagging\ResumeTaggingを使用することで、すべてのタグ付け用ソケットを一括で有効化もしくは無効化することができる。

今回のリリースでは、こうしたタグ付けサポート用のソケットのために、新たに3つの専用宣言コマンドが導入された:\NewTaggingSocket, \NewTaggingSocketPlug. \AssignTaggingSocketPlug

PDF 2.0出力

数式を多く含む文書にタグ付けを行う場合、PDF 2.0出力は重要である。これはPDF 2.0でないとMathMLの名前空間を自然に扱うことが難しいためである。したがって、\DocumentMetadataが指定された場合、LaTeXはデフォルトでPDF 2.0を指定して出力するように変更された。他のPDFバージョンを使用したい場合は、明示的にpdfversionキーを利用して指定することができる。

数式タグ付けの設定

LuaTeXエンジンを使用している場合は、数式のタグ付けのためにさまざまな選択肢が用意されている(詳細はlatex-lab-math.pdfを参照)。設定を簡素化するため、\tagpdfsetupコマンド(または先述のtagging-setupキー)で使用できる新しいキーmath/setupが導入された。このキーに対しては、以下の値をカンマ区切りで指定することができる。

  • mathml-SE: MathMLの構造要素(Structure Elements)を追加
  • mathml-AF: MathMLを関連ファイル(Associated Files)として添付
  • tex-AF: もとのTeXソースを関連ファイルとして添付

別行立て数式の$$$$の使用について

$$$$によって別行立て数式をマークアップするplain TeXの記法は、LaTeXでは正式にはサポートされていない。なぜなら、この記法を用いると固定された見た目の出力がされてしまい、fleqnオプションなどのスタイル変更が反映されないからである。そのためLaTeXでは\[\]displaymath環境の使用が推奨されている。しかし、実際には多くのLaTeXユーザがこの入力法を用いてしまっているので、タグ付きPDF出力においてもこの記法を可能な限りサポートするようにしている。とはいえ、ユーザはこのサポートが制限付きであることを理解しておくべきである。

一方、$$記法に関してタグ付きPDF生成をサポートするための内部調整が$$を直接使用する特別な数式環境(例えばamsmathパッケージが定義するようなもの)と干渉してしまう場合がある。そこで、LaTeXカーネルには新たに\dollardollar@begin\dollardollar@endコマンドが追加された。パッケージや文書クラスの開発者は、これらの新しいコマンドを用いて独自の数式環境内部で数式の開始・終了を明示的に示す必要がある。これにより、そのパッケージや文書クラスがタグ付きPDF出力に対応できるようになる。今後、コードに直接$$は書かないようにしてください!

パッケージや文書クラスの開発者は、以下のように定義を追加しておくことで、古いカーネルとの互換性も確保しつつ、新しい構文に対応できる。

\providecommand\dollardollar@begin{$$}
\providecommand\dollardollar@end{$$}

その上で、すべての$$\dollardollar@beginまたは\dollardollar@endに置き換えることで、タグ付け対応が可能になる。

別行立て数式の後のスペース修正

LaTeXがタグ付きPDFを生成する際には、各要素を明示的にタグ付けするために構造データをPDFに挿入する必要がある。pdfTeXエンジンを使用している場合、この処理は\pdfliteralを用いて行われる。これは\special\writeと同様のwhatsitノードに分類されるので、スペース処理に予期せぬ影響を与えてしまうことがある。たとえば、TeXはすでに処理したwhatsitノードを後方参照できないので、通常は連続するスペースが1つにまとめられる場面で、whatsitノードが挟まることで両方の空白が残ってしまうようなことが起こり得る。

この問題は特に別行立て数式で顕著になる。というのも、TeXは別行立て数式を処理する際にTeXは低レベルな処理においてペナルティやスペースを挿入しており、これらにはマクロレベルでは直接制御するのが困難だからである。しかし困ったことに、数式とそのタグ情報がページ改行によって分離されないようにするには、まさにその途中でタグ構造を挿入する必要がある。そのためタグ付きPDFプロジェクトでは、TeXの内部処理を無効化してマクロレベルで再実装するというかなり複雑な方法が採られている。

最初の試みでは、一部のケースで誤った\parskipスペースが挿入されてしまう不具合が発生していたが、今回のリリースではこの問題が修正された。この実装は難解なTeXコーディングの「興味深い」研究事例とも言える内容なので、興味があればlatex-lab-math.pdfを参照して欲しい。

なおLuaTeXを使用する場合は状況は遥かに良好で、必要な構造情報は数式の組版後に追加することが可能である。

数式周辺の局所的なスペース調整

TeXにおける別行立て数式の処理は低レベルで行われるため、タグ付けのためのコードを数式と確実に同じページ内に配置することはとても難しい。なぜなら、タグ付けのためのコードを数式の終了後、かつ\postdisplaypenaltyがページに追加される前に挿入しなければならないからである。しかし、このTeXの低レベル処理に介入する方法はないため、以下のようなトリッキーな手法が用いられている。

  1. \postdisplaypenaltyを一時的に10000(改ページを完全に禁止)に設定
  2. \belowdisplayskipを負の値にしておく
  3. TeXに通常の数式組版をさせる
  4. その後\aftergroupによって制御を取り戻し、タグ付けコードを挿入
  5. 最後に本来の\postdisplaypenaltyを追加し、スペースの補正を行う

これまでの実装では、数式内部でユーザが\postdisplaypenalty\belowdisplayskipを明示的に指定することはできなかったが、今回のリリースでユーザによる調整が可能になるようアルゴリズムを改良した。

グラフィックスのタグ付けサポートの拡張

グラフィックスに対するタグ付け処理は再実装され、上記で説明したタグ付け用ソケットを用いるようになった。文書の著者は、1つ1つの図について以下の4種類のタグ付けスタイルを選択できる:

  • 説明図(illustrative figures)
  • 装飾(artifact)
  • 記号の代替(symbol replacement)
  • 通常のテキスト(例:todoメモ)

これに対応するため、\includegraphicsコマンドとpicturetikzpicture環境は以下のキーを受け付けるように拡張された。

  • alt: 説明図の説明文
  • actualtext: 記号を設定
  • artifact: 装飾指定

この拡張はTikZやtodonotesパッケージで作成されたグラフィックスをサポートしている。また、latex-lab-graphics.pdfには、利用可能なオプションの全一覧と、他のグラフィック系パッケージの作者がタグ付けに対応する方法も詳しく説明されている。

新しいコマンドと改善されたコマンド

ソケット・プラグの条件分岐

指定したソケットやプラグが存在するか、あるいはあるプラグがある対応するソケットに差し込まれているかを判定し、その情報に基づいて処理を分岐させたい場面がある。今回のリリースでは、こうした状況に対応するため\IfSocketExistsTF等の条件分岐コマンドが新たに追加された。同様の関数はL3プラグラミング層でも提供されている。

「現在のカウンタ」へのアクセス

\alph\stepcounterなどのカウンタ関連コマンドでは、新たに*引数を用いて「現在のカウンタ」(\labelで取得できるものと同じ)にアクセスできるようになった。これはenumitemパッケージにおいて箇条書きのラベル設定を行う際の\alph*のような記法と互換性がある。ただし、すべてのカウンタ関連コマンドが*をサポートするわけではなく、例えば\counterwithin\counterwithoutでは依然として明示的なカウンタ名の指定が必須である。

環境の中身をverbatimに取得

\NewDocumentCommandなどのしくみは、多様なコマンドや環境を定義することができる。これには環境の中身全体を取得する機能や、verbatimに引数を取得する機能も含まれている。しかし、これまではこれらの2つの機能を同時に用いる(環境の内容全体をverbatimに取得)することはできなかった。今回のリリースでは、これを行う新しい引数指定子cが追加された(cは"collect code"の意)。この指定子は\NewDocumentEnvironmentやその変種で使用することができる。c指定子は、既存の+v指定子と同様、各行を特別な\obeyedlineマーカで区切るが、このマーカは規定で通常の段落を形成する。したがって、この指定子は組版にもファイル内容の取得にも利用することができる。

使用例:

\NewDocumentEnvironment
  {MyVerbatim}{!O{\ttfamily} c}
  {\begin{flushright}#1 #2\end{flushright}}
  {}

\begin{MyVerbatim}[\ttfamily\itshape]
  % Some code is shown here
  $y = mx + c$
\end{MyVerbatim}

このコードは以下の内容を右寄せ(flushright)で出力する。

  % Some code is shown here
  $y = mx + c$

コード改善

  • \MakeTitlecaseの改善
    • 事前に強制的な小文字化を行わないようにし、コマンドに格納されたテキストにも正しく動作するように改修した。
    • オプション引数に新しいキーを追加し、最初の単語のみに適用(デフォルト)するか全単語に適用するか選択可能になった。
  • ltnews38以降、\verb等ではタブ文字の扱いが変更になっている。今回のリリースでタブ文字も\dospecialsに追加され、例えばv指定子を使用したコマンドでも特別な準備なしにタブ文字を扱えるようになった。
  • v引数ではこれまですべての文字がカテゴリーコード12で保存されていたが、今後は元のカテゴリーコードを維持するようになる。
  • \DeclareTextSymbol, \DeclareTextCommandなどのコマンドは宣言内容をログに記録するとドキュメントされていたが、これまで実際にはログに記録されていなかった。数式関連の同様のコマンドではログに記録されており、挙動が一致していない状態が30年も続いていた。今回のリリースで、この問題は修正され、実際にログに記録されるように変更された。
  • 一部の幅属性(特に稀なもの)について\DeclareFontSeriesChangeRuleが不足しており、意図通りに組み合わされないケースがあった。今回のリリースで多数のルールが追加され、ulubの太さ、ucuxの幅すべての組み合わせに対応した。
  • フォントシェイプssc(spaced small capitals)とsw(swash)のフォント切り替えルールの不足を補充した。
  • 標準のLaTeXでは\label, \index, \glossaryはいずれも1つの必須引数を取るように定義されている。一方、indexやcleverefのような拡張パッケージはオプション引数や*付き変種を追加している。これらの拡張はこれまで、LaTeXが目次や柱内部で無効化するしくみ(単純に「1つの必須引数を取って、何もしない」ように再定義)と衝突していたが、今回のリリースでこの無効化のしくみが\label等の拡張構文を受け入れるように修正された。
  • ltnews33\tracingall\tracinglostcharsをエラー扱いするように変更すると宣言したが、この変更は今回リリースで取り消された。したがって、デフォルトでは欠落文字があると警告がログと端末に出力される。欠落文字をエラーとして扱いたい場合は\tracinglostchars=5を明示的に指定する必要がある。
  • カーネルが肥大化しているため、従来の最大256個のレジスタしか使わない従来方式へのロールバックは不可能になった。そのため、2015年以前のLaTeXへのロールバックを指定した場合も含めて、常に拡張レジスタプールが使用されるように変更された。
  • 通常のLaTeXの\inputは展開限定文脈(例えば表組みセルの先頭など)では使用できない。今回、そのような状況でも使用可能な\expandableinputが導入された。このコマンドはファイル名の記録とファイルフックの挿入を行わないが、それ以外の挙動は\inputと同様である。すなわち\@@input(TeXプリミティブ\inputの退避先)とは異なり\input@pathを利用したパス探索は行われる。

バグ修正

  • これまではverbatim系環境内でページ分割が起きた際、その環境における特殊なカテゴリーコード設定が出力ルーチンに影響を及ぼしてしまうことがあった。通常、ページの内容は予めトークン化されているのでカテゴリーコードの影響を受けることは稀だが、ヘッダー処理時にファイル読み込みや\scantokensのように再トークン化を行う命令が含まれている場合には異常が発生することがある。今回のリリースで、LaTeXは出力ルーチンの処理の開始前にカテゴリーコードを明示的にリセットするように修正された5
  • 非Unicode TeXエンジンでは、数式アルファベットの上限問題に対処するため、2021年以降\localmathalphabetsカウンタを導入することで、一部の数式アルファベットをグローバルに確保せず、数式ごとに利用できるようになっている。このしくみにより、大規模な文書でも数式フォントの不足が起こりにくくなっている(ltnews34参照)。しかし、この\localmathalphabetsを使用した機構はネストされた数式では誤ったグリフが使われてしまう不具合があったので、今回のリリースで修正された。
  • docsctripで生成しようとしているファイル名に\declarepreambleで宣言されたものと同名のものがある場合、プリアンブル定義が出力ストリームに割り当てるマクロと衝突して上書きされてしまう問題があった(\declarepostambleでも同様)。今回のリリースでは、このような状況を検出した場合にはエラーが発出されるようになった。エラーの回避策としては、\declarepreamble等で使用するマクロ名を変更すればよい。
  • これまでは\AddToHookを使用して、コマンド\FOOが未定義であってもcmd/FOO/...にフックを追加することができた(\FOO\relaxとして定義される)。この挙動は修正され、今後は\FOOがその後も未定義のまま文書で使用された場合には(\relaxとして動作するのではなく)エラーが発出されるようになった。
  • 2022年にkeyval形式のオプション処理をカーネルに導入(ltnews35)して以来、\documentclassに与えられたグローバルオプションが同じパッケージで複数回処理され、不必要に警告が出ている場合があった。今回のリリースで、各パッケージごとにグローバルオプションは1回のみ処理されるように修正された。
  • LaTeX初期の実装から、マーク(柱など)内で\label, \index, \glossaryを無視する処理の際に周囲の空白が正しく処理されておらず、空白が2つ出力されてしまう場合があった。今回リリースで、この問題は修正された。
  • \counterwithin\counterwithoutの引数を宣言時に完全展開し、引数に制御綴等が与えられた際に予期せぬ問題が発生するのを防ぐように変更された。
  • フロートアルゴリズムはフロート要素の配置位置を決定するために、各要素がフロート配置可能かどうかを何度もテストを行う。このテストの際、スペース量が内部変数に蓄積されたまま次のテストに使われてしまう場合があり、不必要に大きなスペースを要求するバグがあった。この問題は今回のリリースで修正された。
  • フォント制作者に対しては\DeclareEncodingSubsetを各ts1〈ファミリ名〉.fdファイルに記述することが推奨されている。しかし.fdファイルが読み込まれる前にこの宣言が評価されると、デフォルトのsubset 9が仮定されてしまうという問題が発生していたので、\DeclareEncodingSubsetは必要に応じて.fdを読み込んでから評価するように修正された。
  • 最終ページがshipoutされたあとに非\immediate\writeコマンドを実行しても、もはや出力トリガーが発生しないため実行されないまま失われてしまうという不具合があった。今回の修正では、最終ページのshipout後にすべての\writeを強制的に\immediateに変換することでこの問題を解消した。この強制変換は\end{document}の直前に実行されるenddocument/afterlastpage(これが\writeを含む可能性がある)の直前に適用される。

ドキュメント改善

\textcolorにおける空白の取り扱いを明確化

\textbf\textrmといった他の\text系コマンドとは異なり、\textcolorは**引数の先頭にある空白を取り除く(gobbleする)**という特徴がある。例えば

Hello\textcolor{red}{ World}

という入力に対しては、引数{ World}の先頭の空白は無視され、出力は「HelloWorld」のようになる。この挙動には技術的な理由および後方互換性の維持という理由があるため、今後も変更される予定はない。今回のリリースでは、これは仕様として正式にドキュメント化された。

L3プログラミング層に関する変更

L3プログラミング層(expl3)の開発はLaTeXカーネル全体の変更と並行して進められている。今回もこれまで以上に多くのコードがl3kernelバンドルに取り込まれ、LaTeX上で自動的に利用できるようになっている。

今回特に注目すべき変更として、コードのパフォーマンス測定ツールを提供するl3benchmarkがl3kernelに取り込まれた。これにより、追加のパッケージ読み込みを行うことなしに、ベンチマーク機能が利用できるようになる。

また、colorモジュールも拡張され、OklabおよびOklchカラーモデルがサポートされるようになった。

  • Oklab:知覚的に均等な色空間であり、CSSや現代的なウェブブラウザでもサポートされている(詳細はこちら)。
  • Oklch:Oklabを円筒座標(Hue、Chroma、Lightness)で表現するモデル。

これらの拡張により、LaTeX内でも現代的な色表現をより柔軟に扱うことができる。


  1. ほかにも残り2種類の順列が考えられるが、これまで要望がなかったので、デフォルトでは実装されていない。 ↩︎

  2. 詳しくはltnews35当ブログ『斜め読み』シリーズ (3) 中の解説を参照。 ↩︎

  3. 厳密に言えば、タグ付きPDF出力がサポートされるのは互換性のあるクラスとパッケージのみを使用している場合に限られる。互換性のあるクラス・パッケージの一覧:https://latex3.github.io/tagging-project/tagging-status/。 ↩︎

  4. testphase=latestと同様の効果。 ↩︎

  5. 前述のbuild/page/resetフックは、LaTeX標準のカテゴリーコードリセットをさらに上書きするためのものである。 ↩︎