新しい pLaTeX の話:非公式リリースノート 2016 年版 (3)
本ブログでは、先月「コミュニティ版 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. トラブル続きの「アクセント文字パッチ」を削除(重要:バグ修正)
- 2. 8-bit encoding の欧文文字周囲の
\xkanjiskip
を適切に設定 - 3. 縦組で graphics/color の Incompatible direction list ... エラー解消
- 4. 起動時に platex.cfg というファイルが見つかれば読み込む(新機能)
- 5. pfltrace パッケージの追加(LaTeX への追随)
- 今後の改善のために…テストのお願い!
続きを読む
単独でタイプセットできるパッケージファイル
この記事は、サブブログの 2016-06-25 投稿記事を移転してきたものです。
パッケージとそのドキュメントを一緒に開発したいとき、最もよく使われていると思われるのは「docstrip」という仕組みである。最近よく見かける docstrip の使い方は
dtx ファイル(コードとドキュメント本体)+ ins ファイル(dtx から sty をストリップするためのバッチファイル)のセット
だろう。あまり書き方を説明したオンライン日本語文献はほぼ見当たらないが、例えば、ut さんちの「dtx ファイル一般の話とサンプル」の節に
例として、いんちきな dtx ファイルを用意してみました (foobar.dtx.txt):
として簡単な dtx サンプルも付いた記事がある。
以下では「通常の docstrip については既知である」と仮定して(相当読者が絞られるが…)話を進める。もし知らなかった場合は、TeX Live に付属する sty2dtx という Perl スクリプトに適当なパッケージ (hoge.sty) を与えれば、それらしい hoge.dtx が得られるので試してみてほしい*1。
でも:パッケージファイルひとつにしてみたい
確かに「コードの間近に説明を書き込めて、しかも LaTeX で処理して PDF ドキュメントまで作れる*2」という点は便利である。しかし、いちいち dtx から sty をストリップするのは面倒であるし、わかりづらい。
そうなると、「こんなことはできないだろうか」と考えたくなるのは自然であろう:
- sty ファイルを直に配布
- 当然これは
\usepackage
できる - 時に
\documentclass
より前で\RequirePackage
されうる
- 当然これは
- sty ファイル単独でもコンパイルが通る(→ PDF 化できる)
- dtx 同様のコード解説を含められる
…と思ったのだが、この試みは案外なされていない。そこでやってみた。
- tcstyalone.sty (aminophen's gist)
実用に供するパッケージではなく、あくまで実装の例示である。 → と思っていたのだが、結局後で実際に exppl2e.sty(pLaTeX の実験的コードを含めたパッケージ)で実践活用することとなる。
ちょっとだけ解説
コード中に解説は書いたが、トリッキーなのでもう少し詳しく。
トリックの中心は
\ifx\undefined\@undefined\relax % (パッケージの宣言) \else % (ドキュメント用「ドライバ」コード) \fi
の部分である(以下「トリックコード」と呼ぶ)。これは〈@〉のカテゴリーコードが「パッケージとして読まれた場合」と「TeX ファイルとして読まれた場合」で異なることを利用している。
case 1: パッケージとして読まれた場合
\usepackage{tcstyalone}
あるいは
\RequirePackage{tcstyalone}
の場合、上記「トリックコード」実行時には \makeatletter
が有効になっている。すなわち \ifx
が比較するトークンは \undefined
と \@undefined
である。どちらのコントロール・シーケンスも「未定義」なので、判定は真となり(パッケージの宣言)が実行される。
case 2: TeX ファイルとして読まれた場合
$ pdflatex tcstyalone.sty
あるいは
\input{tcstyalone.sty}
のように読まれた場合、上記「トリックコード」は \makeatletter
無効である。この場合、\ifx
が比較するトークンは \undefined
と \@
である。\@
はコントロール・シンボルで、LaTeX では
\spacefactor\@m{}
と定義されている*3ため「未定義」とは異なる。すなわち判定は偽となり(ドキュメント用「ドライバ」コード)が実行される。判定部の後にくっついている undefined\relax
なる部分は、真の場合のコードの一部とみなされて、必ずすっ飛ばされることに注意。
さらなる帳尻合わせ
ここで sty を単独でタイプセットしたい場合、「ドライバ」コード部には
\documentclass{...} \begin{document} ... \end{document}
を含める必要があるのだが、先の「トリックコード」では \fi
が \end{document}
より後に来てしまう。つまり、case 1 では既に \if...\fi
が釣り合っている一方で、このままでは「case 2 の場合だけ一回分 \fi
が足りない」という問題が発生する:
(\end occurred when \ifx on line 15 was incomplete)
これを解消するため、ここでは docstrip の「\DocInput
では行頭の %
が無視される」という仕様を利用してみた。case 2 だけ余分の \fi
を %
付きで発行するのである。そうして書いたのが、例の gist のコードである。
先行研究の例
以上の実装コードを書いたあとで、別解らしきものを見つけた。
*1:実際に sty2dtx を使った例として、pLaTeX がコミュニティ版に移行した後の ascmac パッケージ (tascmac.sty) とそのドキュメント (ascmac.pdf) が挙げられる。アスキーによる tascmac.sty は元々説明なしにコードが書かれていたが、コミュニティ版では sty2dtx で ascmac.dtx を作成したのち文書が書き下ろされている。
*2:もちろん普通の sty でも「%」を使ってコメントを付ければよいわけだが、そのまま LaTeX でタイプセットして PDF 化することはできない。
*3:2014 年までは {} が無かったが、ここではどうでもいい。
TeX Live 2016 の先へ:今後の注目ポイントまとめ
ついに先日、TeX Live 2016 がリリースされました。早速、TeX Live メンテナのお一人である Norbert Preining さんのブログ(英文)に、変更点が簡潔にまとまっています。
また、id:doraTeX さんのブログでも、日本語ユーザ目線で主要な変更点がわかりやすくまとめられています(ナントカBox に記事の多くを割く力の入れよう、doraTeX さんらしさが滲み出ている気がします)。
これらの良記事に触発されて、私もと「個人的に注目した変更点」をまとめることにしました。私らしさ(?)を出すために、大事なところは id:doraTeX さんにお任せすることにして、私は「TeX Live 2016 の先へ向けてぜひ注目したいところ」に重点をおいてみます。ちなみに昨年版(2015)はこちら。
目次
- (1):pLaTeX と upLaTeX が新しくなった
- (2):(e-)pTeX のプリミティブ追加と挙動の改善
- (3):dvipdfmx (extractbb) の機能追加と挙動の改善
- (4):索引作成ツール upmendex が追加された
- (5):次世代 LuaTeX と XeTeX の話
- (6):deterministic (reproducible) な出力のサポート
- (7):デフォルトで IPAex フォント埋め込みになった(← 2016/06/10、2016/06/22 追記!)
続きを読む
新しい pLaTeX の話:非公式リリースノート 2016 年版 (2)
前回の続きです(新しい pLaTeX の概要や全体の目次は前回の記事を参照)。
【追記:2016-06-11】コミュニティ版 2016/05/07 には、本稿の 5. で解説している「ベースライン補正(縦組)で「Å」が乱れる問題を解消」という修正のやりかたがマズかったことにより、「すべてのアクセント文字」について多くの critical な副作用が生じてしまいました。
- TeX Live 2016のuplatexとucsパッケージ (forum:1941)
- pLaTeX が新しくなってアレ(マクロツイーター)
コミュニティ版 2016/06/10 では修正されています(参考:Issue #5)。TeX Live や W32TeX にも一両日中に反映されると思いますので、pLaTeX 2016/05/07 または 2016/04/17 をお持ちの方は 2016/06/10 に更新してください。
【追記:2016-06-20】コミュニティ版 2016/06/10 には、同じ「アクセント付き文字」でまた別の副作用(特別扱いされる i
のアクセントに関係)が入っていました。
これはコミュニティ版 2016/06/10 patch level 1 (2016-06-19) で修正されました。TeX Live や W32TeX にも一両日中に反映されると思いますので、再度更新してください。
【追記:2016-07-01】トラブルが相次いだことから、この「アクセント付き文字」のパッチだけを一旦リセットし、アスキー版の頃の挙動に戻しました。
コミュニティ版 2016/07/01 のほかの変更点も含め、こちらの記事を参照してください。
続きを読む
新しい pLaTeX の話:非公式リリースノート 2016 年版 (1)
TeX Live 2016 には「日本語 TeX 開発コミュニティ」によってカスタマイズされた新しい pLaTeX がインストールされます。W32TeX では 2016/05/02 以降は新しい pLaTeX が配布されていますし、TeX Live 2016 pretest をインストールした方も 2016/05/10 以降は新しい pLaTeX を持っていることになります。従来のものと何が変わったのか、ここで実際の画像を見ていただきながら説明していこうと思います。
あくまでこのブログは「日本語 TeX 開発コミュニティによる公式見解」ではなく、その中の一個人が独断と偏見を交えつつ(?)説明しようという試みであり、それ以上の意味を持たないことをことわっておきます。公式な告知は TeX Forum に出してあります。
変更点の超ダイジェスト(兼・目次)
詳しく説明する前に、ダイジェストで画像と一文解説だけ示しておきます。
- コミュニティ版 pLaTeX とは?
- 「私の pLaTeX は新しい?」
- 脚注番号前後の不自然なアキの削除(重要:pTeX 仕様変更への追随)
- tabular 環境前後のアキの削除(pTeX 仕様変更への追随)
\parbox[c]
(minipage 環境)、\underline
前後のアキの削除(仕様変更)- 縦組クラスでの overfull 警告の解消(バグ修正)
- ベースライン補正(縦組)で「Å」が乱れる問題を解消(重要:バグ修正)
- トンボが縮む問題への対処(対症療法あるいは予防策)
\eminnershape
の採用(LaTeX への追随)- platexrelease パッケージの追加(LaTeX への追随)
- ascmac パッケージの更新(バグ修正・仕様変更)
- その他:添付ドキュメントの追加や更新など
それでは、実際にみていくことにします。各項目についている番号は、pLaTeX News Community Edition, Issue 1 (plnewsc01.tex) のセクションに対応しています。
続きを読む