Hatena::ブログ(Diary)

アセトアミノフェンの気ままな日常

2016-09-19

LaTeX パッケージ作者もオプションには空白を含めないほうがよい話

前回の記事に関連したタレコミが。

\begin{filecontents}{test3.sty}
\DeclareOption{foo}{\typeout{*** FOO OPTION ***}}
\DeclareOption{bar}{\typeout{*** BAR OPTION ***}}
\DeclareOption{baz}{\typeout{*** BAZ OPTION ***}}
\DeclareOption{qux}{\typeout{*** QUX OPTION ***}}
\ExecuteOptions{foo, bar}
\ProcessOptions\relax
\end{filecontents}

\documentclass{article}
\usepackage[baz, qux]{test3}
\begin{document}
a
\end{document}

パッケージが既定で foo と bar を実行し(パッケージ内で作者が \ExecuteOptions で指定)、さらにユーザが baz と qux を指定する(\usepackage のオプション)ので、全部で四つのメッセージが出そうである。ところが

*** FOO OPTION ***
*** BAZ OPTION ***
*** QUX OPTION ***

あれ、BAR が出ない! という話。\usepackage はコンマの周りに空白があってもよいのに、\ExecuteOptions はダメ、というトラップだそうだ。

LaTeX team も「20年経って今頃なんでこんなに…?」と戸惑っていました…次回全部(これで3つめ?)直すらしい。

追記:対処されたらしい (2016-10-04)

LaTeX2e public svn のほうをみると、2016/10/02 付けで「\ExecuteOptions に空白があるとオプションを無視する話」と「\@if@pti@ns で空白があると Option clash する話」について対処された (r1227) 。いちばん難しい「\ProcessOptions の干渉」はまだの模様(処理が難しい上、バグが入ったら影響が大きいため慎重にしているっぽい)。次の LaTeX リリースは 2016/12/01 なのかな?

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証