読者です 読者をやめる 読者になる 読者になる

Acetaminophen’s diary

化学に関すること、TeXに関すること、ゆきだるまに関すること。

新しい pLaTeX の話:非公式リリースノート 2016 年版 (3)

TeX

本ブログでは、先月「コミュニティ版 pLaTeX」の 2016/05/07 について勝手に解説しました。割と好評でしたので、今回はそれ以降にリリースされた 2016/06/10、2016/06/10 patch level 1、2016/07/01 の 3 回分の(正味の)変更内容を勝手に解説します。

昨日 pLaTeX <2016/07/01> と upLaTeX <2016/07/01u01> がリリースされました。お手元の TeX Live にも数日以内に更新が反映されるはずです。

正式なリリース告知と重要なお知らせ(開発に関する議論)を、forum:1967 に出してあります。こちらもあわせてご参照ください。

以前の記事はこちらから:

目次

 

1. トラブル続きの「アクセント文字パッチ」を削除(重要:バグ修正)

コミュニティ版に導入した「アクセント文字パッチ」については、先月「ベースライン補正(縦組)で「Å」が乱れる問題を解消」として説明しました。しかし、このパッチに対してトラブル報告が相次いでしまいました (forum:1941 / forum:1951 / forum:1958) 。2016/06/10 版と 2016/06/10 patch level 1 版で修正を試みましたが、それでも完全な修正には至りませんでした。この 3 件連続したトラブルを重くみて、2016/07/01 版以降、安全を確認するまでの間、いったんアクセント文字を合成するコードへのパッチを削除することになりました

結果として、アスキー版の頃と同じ「元の LaTeX によるアクセント文字の定義」がそのまま使われます。要するに、上記の意図しなかったバグたちはすべていったん消滅しますが、一方で、アスキー版に存在した既知の問題点(後述)が再燃することに注意してください。(将来的にはこの問題点にも対処したいと、個人的には考えています。)

 

2. 8-bit encoding の欧文文字周囲の \xkanjiskip を適切に設定

ちょっと紛らわしい気もしますが、上の「アクセント文字パッチ」(=主に OT1 エンコーディングなどでアクセントを合成するために用いるコマンドに対するパッチ)とはまったくの別件です。

アスキーpLaTeX が作られた頃に比べて、最近は T1 エンコーディングなどの 8-bit フォントエンコーディングが多く用いられるようになりました*1。しかし、pLaTeX が作られた頃はまだ 8-bit エンコーディングはほとんど用いられていませんでしたので、128--255 (80--ff) は欧文文字扱いしていませんでした。このため、T1 エンコーディングを使うと

\documentclass{jarticle}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\begin{document}
allerの複合過去形は\^etre all\'eです。
\end{document}

f:id:acetaminophen:20160702040540p:plain

のように、アクセント文字の前後に四分アキが入っていませんでした。新しい pLaTeX 2016/06/10 以降では、T1 エンコーディングを想定した 128--255 に対する設定 (\xspcode=3) を kinsoku.tex にちゃんと加えて、T1 エンコーディングのアクセント文字前後に \xkanjiskip が正しく入るようにしました

ここで、あれ? と思う方がいらっしゃるとすれば鋭いです。実は、jsarticle などの「新ドキュメントクラス」や upLaTeX は、従来からこの範囲の文字に対してちゃんと設定していました。このため、今回の変更は「pLaTeX で縦組クラスを使う場合」にいちばん有難みがわかるかもしれません。

f:id:acetaminophen:20160702040553p:plain

【もっと詳しく】pTeX には、和文文字と欧文文字の間に四分アキ (\xkanjiskip) を自動で挿入する機能があります。挿入するかどうかは、連続する和文文字と欧文文字それぞれにあらかじめ設定された \inhibitxspcode\xspcode の値により決定されます(詳細はアスキーの説明を参照)。たとえば「ある文字が欧文文字である」という場合、前後に \xkanjiskip を挿入する必要がありますので、その文字の \xspcode を 3 に設定しておきます(参考)。pTeXバイナリ組み込みのデフォルトでは「A-Za-z と 0-9 だけ 3、ほかは未設定(=初期値 0)」としてあり、その他の文字は kinsoku.tex というファイル(フォーマット作成時に読まれます)で設定されています。

 

3. 縦組で graphics/color の Incompatible direction list ... エラー解消

本項のタイトルは若干本質とずれていますが、わかりやすいので敢えてそう書きました。より正確には

縦組クラスで \AtBeginDocument{\AtBeginDvi{}} というコードが
Incompatible direction list can't be unboxed.
というエラーになる問題に対処

です。2016/06/10 patch level 1 までは、以下のソースでエラーが出ます。そして、その具体例がタイトルに掲げた「graphics/color パッケージの dvips オプションの最新版」です。

\documentclass{tarticle}
\AtBeginDocument{\AtBeginDvi{}}
\begin{document}
あいうえお
\end{document}

修正内容の詳細は forum:1956 に書いたとおりです。これで、縦組でも graphics/color パッケージ用 dvips オプションの最新版が使えます。

【補足】ちなみに、\AtBeginDocument{\AtBeginDvi{}} を使ったコードが最新版 dvips.def のどこに登場するかというと、用紙サイズを指定する papersize special の発行です。これが 2016 年 6 月のいまになって導入されたのは、用紙サイズを pdflatex / lualatex / latex + dvips で互換にするためだそうです:

platex + dvips も、この恩恵を受けることができます。

\documentclass[a5paper]{jarticle}
\usepackage[dvips]{color}
\begin{document}
あいうえお
\end{document}

従来は、このソースを pLaTeX → dvips → ps2pdf で PDF にした場合、「レイアウトは A5 っぽいのに用紙サイズは A4」で、左上に片寄った印刷結果になっていました。新しい dvips.def は、papersize special を設定してくれますので、ちゃんと A5 用紙になります。

 

4. 起動時に platex.cfg というファイルが見つかれば読み込む(新機能)

platex コマンドを起動したとき、もし platex.cfg というファイルが見つかればそれを読み込みます。「見つかる場所」とは、たとえばカレントディレクトリや $TEXMF/tex/platex/config など、TeX エンジンが探すことのできる場所です。uplatex は代わりに uplatex.cfg を使います。いろいろ応用がきくと思います。この機能を付けた理由は、後ほどの説明でおわかりいただけるでしょう。

 

5. pfltrace パッケージの追加(LaTeX への追随)

あまり重要ではないですが、一応載せておきますと:2014 年に、本家 LaTeX が追加してきた「fltrace パッケージ」の pLaTeX 版です。図表などのフロートの配置を pLaTeX が決定するときに使われるパラメータを、デバッグ目的などで外から追跡したい場合に使うことができます。

 

テストのお願い!

すでに 1. で述べたとおり、「アクセント文字パッチ」をいったん除去しました。しかし、 将来的には再度パッチを入れたいと考えています。

今回のパッチ削除に伴い、いくつかの問題が再燃します。たとえば、以下の縦組ソースを pLaTeX で処理してみると

  • \AA の直前に \xkanjiskip が入らない
  • \AA のアクセント「○」がずれて変になる

という問題に気づくでしょう。

\documentclass{tarticle}
\begin{document}
あaあAあ\par{\aa}{\AA}\end{document}

ここでは単純な例として縦組で示しましたし、アクセント文字も「Å」だけがマズイように見えるかもしれません。しかし、\xkanjiskip が入らない問題は縦横どちらでも成り立ちますし、アクセントがずれる問題は pTeX の ベースライン補正量(\ybaselineshift\tbaselineshift)がゼロでない場合に成り立ちます

こうした問題に対処しようとしてパッチを入れたところ、考慮すべきケースに漏れがあったことが原因で、forum:1941 / forum:1951 / forum:1958 の 3 回のバグになってしまいました。どうも開発側だけではテストしきれないということで

「ユーザの方々に動かしていただきながらバグ出しをする試み」

を始めます。pLaTeX 2016/07/01 に添付している「exppl2e パッケージ*2」が、今回削除したパッチを改善したものです。少なくとも上記 3 件のバグレポートは解決できているように見えますが、まだ問題があるかもしれません。そして、これは pLaTeX や upLaTeX に限った問題ではなく、LuaTeX-ja でも似たような不都合が生じているという状況です。将来の pLaTeX / upLaTeX / LuaTeX-ja のためにも、ぜひテストにご協力ください。

 

テストのやりかた

テストなんてやったことがないという方でも安心です。ただパッケージをひとつ読み込んで、それを読み込まない場合と比べて変なことになっていないかチェックするだけで結構です。

普段みなさんが書いていらっしゃるファイルをそのままテストに使ってください。そして、ぜひいろいろなファイルで試してみてください。そのほうが、開発側の思いもよらないバグをみいだしてくれると期待しています。

「テストしてもいいよ!」と思ってくださったときは、exppl2e パッケージを読み込みます。あとは pLaTeX でタイプセットして、exppl2e を読まない場合と比べて

  • 出力がマチガッタことになっていないか
  • 不自然な警告が増えていないか

ということをチェックします。ここで、オススメは自動化です。今回の pLaTeX / upLaTeX に導入された新機能「platex.cfg があれば読み込む」がここで活きてきます(以下は pLaTeX で例示しますが、upLaTeX の場合は platex.cfg → uplatex.cfg と読み替えてください)。

オススメのテスト方法:テストを自動化しましょう

platex.cfg というファイルに次の内容を書き込み、TeX から見つかる場所たとえば

  • カレントディレクトリ(← この方法なら「テストしたいときだけそのフォルダ内で作業」のような柔軟な対応ができます)
  • $TEXMF/tex 以下の適当な場所(← たとえば ~/texmf/tex/platex/config$TEXMFLOCAL/tex/platex/test など)

に置いておきます。

\RequirePackage{exppl2e}

すると、pLaTeX を起動したときに必ず

*************************
* Loading platex.cfg.
*************************

と出て、直後に「テスト用ですよ!」という警告を出しながら exppl2e のパッチコードが読まれます。あとは変なことが起きないかチェックするだけ。

もうひとつのテスト方法:チョットだけなら…

「さすがにそれはマッチョすぎる…でもチョットだけテストしてみたい!」な方は、お持ちの TeX ファイル冒頭に \RequirePackage{exppl2e} と書くだけでも結構です。たとえばこんな感じです。

\RequirePackage{exppl2e}
\documentclass{jsarticle}

これもやっぱり立派なテストです。あとは変なことが起きていないかチェックするだけ。

【参考】「不自然な警告が増えていないか」と書きましたが、意図的に出すことにしてある警告もありますので、参考までに挙げておきます:

Package exppl2e Warning: This is the unstable, experimental part of pLaTeX2e.
(exppl2e)                This package may contain:
(exppl2e)                * future patches to pLaTeX
(exppl2e)                * experimental new features
(exppl2e)                Please note that these can be removed without any
(exppl2e)                announcement at some point in the future, and may
(exppl2e)                also have some critical bugs. We appreciate any
(exppl2e)                reports and comments. Thank you for your cooperation.

これは exppl2e がテスト版であることを警告しています。

続いて latexrelease / platexrelease が読み込まれ、それぞれが Current format date selected, no patches applied. などと警告してきます。テストしていただくのを「最新版の pLaTeX + 実験パッチ」であることを保証したいという意図ですので、この警告は気にしなくて結構です。

 

まとめ

新しい pLaTeX のリリース内容の詳細、および将来の pLaTeX のための話(そしてちょっとだけ LuaTeX-ja に絡む話)をしてきました。ぜひ理解にお役立てください & テストにご協力ください。

追記 (2016-09-03):次の 2016/09/03 版についての解説も書きました。

*1:LaTeX のデフォルトは OT1 エンコーディングという 7-bit のものですので収録文字数が少なく、アクセント付文字はすべて「ベースとなるアルファベット+アクセント」で合成する必要がありますが、8-bit の T1 エンコーディングならほとんどの言語に対応できます。よりわかりやすい ZR さんの記事も参照。

*2:EXPerimental な PLatex2E の略です。LaTeX3 の expl3 パッケージと LaTeX2e の fixltx2e パッケージをもじりました。