latexrelase パッケージの概要
新しい LaTeX のメンテナンスポリシー(参照)において、厳密な互換性を確保するための機構が latexrelase パッケージである。
LaTeX ユーザ(文書作成者)がこの機構を利用するのは非常に簡単である。次のように、LaTeX 文書の先頭(\documentclass
よりも前)に latexrelase を読み込む命令を追加するだけである。((\documentclass
よりも前にパッケージを読み込む(稀な)場合は、\usepackage
ではなく \RequirePackage
という特別な命令を使用する。))
% LaTeX 文書 \RequirePackage[2015/01/01]{latexrelease} \documentclass[a4paper]{article} %...以下省略
パッケージオプション(上例の“2015/01/01
”)には以下のものが指定できる。
- 日付(
YYYY/MM/DD
形式): LaTeX カーネルのコードを当該の日付に相当するものに書き換える。 current
(既定): LaTeX カーネルの本来のリリース日付に合わせる ― つまり「何もしない」。latest
: LaTeX カーネルの“最新”の状態にする。通常はcurrent
と同じだが、“未来版の latexrelease”を使っている場合は、そのリリース日付に合わせられる。(後述)
注意事項。
- カーネルの更新リリースがある度にそのカーネルの状態が特定の「リリース日付」に結び付けられる。「特定の日付におけるカーネルの状態」はこのリリース日付を規準にして決められる。
現状ではカーネルの状態は 2 通りしかなく、2014 年版の状態が「初期リリース」*1、2015 年版の状態が「リリース日付 2015/01/01」となっている。したがって、latexrelase 読込において、2015/01/01 以降の日付を指定すると 2015 年版、それより前の日付を指定すると 2014 年版に書き換えられる。 - もちろん、(少なくとも今は)latexrelease で“バージョンを変えられる”のはカーネルだけである。LaTeX システムのインストール時期の違いによるトラブルが起こる場合、その原因はカーネルではなくパッケージにあることの方が圧倒的に多い。*2だから、カーネルだけ厳密にバージョンを制御できてもあまり有益ではないかも知れない。
- パッケージ開発者が、latexrelaase の機構を自身の作製するパッケージに適用させることは可能である。従って、将来は、一部のパッケージが latexrelaase で“バージョンを変えられる”ようになるかも知れない。
なお、インストールされている LaTeX のリリース日付を調べるには、LaTeX を起動したときに表示されるバナーを見ればよい。((カーネルのリリース日付を表すマクロ \fmtversion
も定義されている。latexrelease でカーネルを書き換えた場合は \fmtversion
の値も指定の日付に書き換わる。))
This is pdfTeX, Version 3.14159265-2.6-1.40.16 (TeX Live 2015/W32TeX) (preloaded format=latex) restricted \write18 enabled. entering extended mode (c:/usr/local/share/texmf-dist/tex/latex/base/small2e.tex LaTeX2e <2015/01/01> Babel <3.9l> and hyphenation patterns for 79 languages loaded.
簡単な例
例えば、次のような文書ソースを用意する。これは、カーネルで定義されている命令 \@
の定義を調べるものである。
%\RequirePackage[2014/11/08]{latexrelease}% 2014年版にする \show\@ % \@ の意味を調べる % あとはどうでもよい \documentclass{article} \begin{document} \end{document}
これを latex でコンパイルすると、以下のように表示される。
> \@=macro: ->\spacefactor \@m {}. l.2 \show\@
ここで、1 行目の %
を外して latexrelease の読込を有効にすると、以下の表示に変わる。\@
の定義が古いものに戻っていることが判る。
> \@=macro: ->\spacefactor \@m . l.2 \show\@
LaTeX を未来に進める
ある時にリリースされた LaTeX の配布は、当然ながら、そのリリース日付よりも未来における更新の情報を持っていない。このため、単にインストール済の latexrelease パッケージを利用するだけでは、“過去のバージョンに変える”ことしかできない。
しかし、カーネルよりも“未来にある”latexrelease パッケージを使った場合は話が違ってくる。現在の LaTeX のリリースポリシーでは、新しいカーネルがリリースされる際に、対応する(同じリリース日付をもつ)新しい latexrelease パッケージが公開される。かつ、インストール済の LaTeX について、“カーネルよりも新しい”latexrelease を読み込むことが可能であり、その場合は、カーネルよりも新しいリリース日付*3をオプションに指定することができる。
例えば、現在が 2017 年であり、2015/01/01 より後に、LaTeX について 2016/01/01 と 2017/01/01 の 2 回のリリースが行われていたとする。そして手許に 2015/01/01 の LaTeX がインストールされているとする。この時、CTAN から latexrelease パッケージ(これは 2017/01/01 のリリース日付をもつはずである((なお、一般にパッケージはそのバージョンを示す“リリース日付”を持っている(最新版(v1.0c)の latexrelease の場合は 2015/02/21)が、ここでいう“latexrelease のリリース日付”はそれではなく“対応するカーネルのリリース日付”のことを指すものとする。この値はパッケージ中でマクロ \latexreleaseversion
として定義されている。)))を入手して、LaTeX 文書の先頭で次のように読み込む。
\RequirePackage[2016/01/01]{latexrelease}
すると、カーネルのコードはリリース日付 2016/01/01 のものに更新される。また、この場合、オプション latest
は latexrelease のリリース日付である 2017/01/01 と同等になる。(それが可能な限りの“最新”なので。)((current
を指定した場合は、やはり「何もしない」。つまり、カーネルは 2015/01/01 の状態のままである。))