Acetaminophen’s diary

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

TeX Live 2016 の先へ:今後の注目ポイントまとめ

ついに先日、TeX Live 2016 がリリースされました。早速、TeX Live メンテナのお一人である Norbert Preining さんのブログ(英文)に、変更点が簡潔にまとまっています。

また、id:doraTeX さんのブログでも、日本語ユーザ目線で主要な変更点がわかりやすくまとめられています(ナントカBox に記事の多くを割く力の入れよう、doraTeX さんらしさが滲み出ている気がします)。

これらの良記事に触発されて、私もと「個人的に注目した変更点」をまとめることにしました。私らしさ(?)を出すために、大事なところは id:doraTeX さんにお任せすることにして、私は「TeX Live 2016 の先へ向けてぜひ注目したいところ」に重点をおいてみます。ちなみに昨年版(2015)はこちら

 

目次

 

変わったこと (1):pLaTeX と upLaTeX が新しくなった

たったいま「大事なところは~お任せすることにして」と言ったばかりですし、既に TeX Forum (forum:1934) でも告知してあるとおりですし、詳細もすでに本ブログで解説したとおりですが…やっぱり大事なことなので繰り返しておきます。

今後は日本語 TeX 開発コミュニティを中心に、pLaTeX / upLaTeX のメンテナンスがオープンに議論されることを願っています。ご興味のある方は是非 GitHub の議論 (pLaTeX / upLaTeX) にご参加ください。← これが言いたかった。

【注意】コミュニティ版 (u)pLaTeX には、既に [forum:1941] や「pLaTeX が新しくなってアレ」で指摘されているバグがあり、現在進行形で修正中です。いましばらくお待ちください…

【追記 2016-06-11】バグ修正を施したバージョン 2016/06/10 をリリースしました。コミュニティ版 2016/05/07 または 2016/04/17 をお持ちの方は、2016/06/10 に更新してください。

 

変わったこと (2):(e-)pTeX のプリミティブ追加と挙動の改善

今回も pTeX や e-pTeX にパッチが入りました。それ自体も非常によいことですが、より注目に値する変化があると私は考えています。それは、pLaTeX / upLaTeX がコミュニティ版になった結果として

TeX Live 2016 以降はマクロ (u)pLaTeX とエンジン (e-)(u)pTeX
一貫してコミュニティベースで議論・開発できるようになった

ということです。これで、今後は「pTeX を変えると pLaTeX に副作用が出るかも?」のような懸念が少々和らぐ効果も期待できます。日本語組版に関する議論に多くの方々(読者の皆様も!)が参加して下さることを願います。

(2-1) pTeX / e-pTeX 共通:数式内ボックスにかかるベースライン補正の調整

まず pTeX の話です。従来は [qa:54286], [qa:54294] で話題になっているように

文中数式モードでは自動的に全体にベースライン補正がかかり,その結果 $\hbox{漢字ABC}$ では「漢字」に一重,「ABC」に二重にベースライン補正が適用される

という挙動でした。新しい (e-)pTeX では北川さんのパッチで

\displaystyle, \textstyle での明示的なボックスの「シフト打ち消し」量を指定する \textbaselineshiftfactor(標準値は 1000: 1倍)と,同様の \scriptbaselineshiftfactor(標準値は 700: 0.7倍), \scriptscriptbaselineshiftfactor(標準値は 500: 0.5倍)を作り,利用者が設定できるようにしています.

のように変更されました (TeX Live r39938) 。日本語組版に関わる割と重要な改善点だと思います。詳しくは以下の議論や解説を参照してください。

(2-2) e-pTeX\pdfmdfivesum プリミティブの追加

pdfTeX の同名プリミティブと同様です。一般ユーザが直接使うことは少ないと思いますが、従来 movie15 パッケージや media9 パッケージを pLaTeX で使うために一工夫必要だった難点は、この \pdfmdfivesum が (e-)pTeX に無いことが一因でした。今後は pLaTeX でこれらの動画埋め込みパッケージが使いやすくなると思います。

(2-3) e-pTeX\epTeXinputencoding プリミティブの追加

今度も e-pTeX 特有のプリミティブです。阿部さんによって「現在読み込んでいるソースファイルの、以降の行の文字コードを指定する」という \epTeXinputencoding プリミティブが実装されました。従来の -kanji=ナントカ では “インプットするすべてのファイルを特定の文字コードで読む” ことしかできませんでしたが、新しい \epTeXinputencoding では “プリミティブが発行されたファイルだけ” さらに “プリミティブを発行した次の行から” 文字コード指定が有効になりますです。ASCII 文字以外を含んだクラスファイルやパッケージを強制的に特定の文字コードで読ませたい場合などに便利かもしれません。

 

変わったこと (3):dvipdfmx (extractbb) の機能追加と挙動の改善

PDF の pagebox の指定が可能になったことについては、id:doraTeX さんが超わかりやすくまとめてくださっているので言うことはありません*1。というわけで、他のことを書きます。

(3-1) 新しい special(dvipdfmx special)

dvipdfmx のコマンドラインオプションと同じ効果を TeX ソース中から指定するのに便利な新しい special が、細田さんによって実装されました。たとえば「PDF 圧縮抑止」

$ dvipdfmx -z 0 foo.dvi

が、次のような dvipdfmx:config という special で可能になりました。

\special{dvipdfmx:config z 0}

実装者自身の超わかりやすい解説がありますので、ぜひ活用したいところです。

(3-2) PDF の xref table に寛容になった

(La)TeX + dvipdfmx で「挿入する図の PDF ファイルが警告にはじかれて使えない」というケースが何度か報告されていました。

extractbb:warning: Invalid xref table entry [0]. PDF file is corrupt...
extractbb:warning: Error while parsing PDF file.
extractbb:warning: hoge.pdf does not look like a PDF file...

中には本当に PDF ファイルが壊れている or 不正な場合もありましたが、仕様に則っているはずの PDF まではじかれているのではないかという指摘が散見されました。阿部さん・平田さん・角藤さんによる改修で、従来より xref table の読み取りに成功しやすくなったようです。具体的には、MuPDF の mutool や Java の FreeHEP ライブラリ依存ツール(GeoGebra など)の PDF が読み取れるようになりました! ← これ結構重要ですね。

(3-3) ToUnicode 変換の改善

なんか改善したそうです…が私はついていけていませんので以下を参照してください。今度私自身が勉強するときのために、リンクしておくと便利なので貼っておきます。

(3-4) おまけ:バグ修正(?)

こんなよくわからないバグも修正していただきました ;)

 

変わったこと (4):索引作成ツール upmendex が追加された

upTeX の田中さんによって、mendex に代わる索引作成ツール処理として upmendex が開発されてきました。これがついに TeX Live に取り込まれました。アスキー・メディアワークスによる mendex は最近は UTF-8 入力に対応しているものの、内部処理が Unicode 化されていませんでした。upmendex は内部 Unicodeを施し、ICUソート順もカスタマイズできるようになっています。まだベータ版ということらしいので、今後の発展を大いに期待しています。

 

変わったこと (5):次世代 LuaTeX と XeTeX の話

LuaTeX の劇的な変化については本ブログで説明済みですので詳細は省きます。LuaTeX 愛好者の方は試練をなんとか乗り切りましょう。そして来るべきバージョン 1.0 に期待です。

LuaTeX と同じく Unicode 対応かつ PDF 直接出力な TeX エンジンとして知られる XeTeX のほうは、注目は \XeTeXgenerateactualtext プリミティブです。これは、PDF からのテキストのコピー&ペーストで正しい文字情報が取れるという新機能です。サンスクリット語ヒンディー語などのデーバナーガリーを PDF にするときなどに効果を発揮するようです。

 

変わったこと (6):deterministic (reproducible) な出力のサポート

個人的には面白い傾向だと思っています。従来、各種 TeX エンジンや DVI ドライバは「実行ごとに毎回異なるバイナリファイル」を出力していました。今回、それらのうちいくつか(pdfTeX や dvipdfmx を含む)が deterministic な出力をサポートしました。

例を挙げます:たとえば、何か適当な DVI ファイル (test.dvi) を用意して

$ export SOURCE_DATE_EPOCH=1456304492
$ dvipdfmx test.dvi

のように実行(数値は適当な例です;Windows では export の代わりに set です)し、できた test.pdf を test1.pdf とリネームしておきましょう。もう一回

$ dvipdfmx test.dvi

を実行してできた test.pdf を test2.pdf としましょう。TeX Live 2015 の頃は

$ diff test1.pdf test2.pdf
Binary files test1.pdf and test2.pdf differ

だったのですが、TeX Live 2016 ではバイナリ一致します。この機能は、いろいろな OS や開発環境の複数人で git や svn などでバージョン管理するときに、いつどこでドキュメントを build しても同じになるというメリットがあるかもしれません(ただし、pLaTeX / pTeX などは私の見た限りサポート外のようです)。

 

変わったこと (7):デフォルトで IPAex フォント埋め込みになった

いちばん大事なことを忘れていました… TeX Live 2015 までは「noEmbed」すなわち (u)pLaTeX + dvipdfmx などで PDF を作ると日本語フォントが埋め込まれない状態でした。このため、日本語ユーザは updmap を実行して ipaex フォントを埋め込むように設定しなおす必要がありました。これはあまり嬉しくないので、TeX Live 2016 ではデフォルトで IPAex フォントを埋め込む設定が採用されました。

さらに(TeX Live に最初から TeXworks が付属してくる Windows 特有の話題ではありますが)、TeX Live にバンドルされている TeXworks をインストールした時点で(OS が日本語環境の場合に限り)日本語向け設定 (ptex2pdf, (u)pbibtex, (up)mendex) が追加されるようになりました。従来は TeX Live インストール完了後に各自設定する必要がありましたが、ptex2pdf バンドルに同梱された Perl スクリプトが勝手にやってくれます。便利ですね!

追記 (2016-06-22):Norbert さんがこの TeXworks 日本語設定スクリプトについて解説してくださっています。OS が日本語でない場合に postaction を実行する方法も、以下の記事で解説されています。

 

以上、私目線の「TeX Live 2016 で注目の変更点」でした。単に「新しくなりました!」といっても実感がわかないこともあると思いますが、「何が変わったか?」「今後どこに注目したらよいか?」というまとめを読んで興味を持ってくださるとうれしいです。

*1:PDF の「5 種類の ナントカBox」の扱いがバラバラでヤヤコシイという話を、以前にこのブログで書きました。

こちらもぜひ参考にしてください。