pLaTeX kernel 本体は「latexrelease が使われたのに platexrelease が使われていない」場合に警告を出す。また、仮に「読み込まれた latexrelease について pLaTeX が未知である」なら、platexrelease が万全ではないため警告を出す。
- \RequirePackage[yyyy/mm/dd]{platexrelease} とすると「yyyy/mm/dd 時点の LaTeX kernel を読み込んだ後に、同じく yyyy/mm/dd 時点の pLaTeX kernel を読み込んだもの」をエミュレートする。
- オプション current と latest は、latexrelease の仕様を踏襲する。
- current ならば「何もしない」、すなわち今ある \pfmtversion そのままの挙動。
- latest ならば「latexrelease が知っている最新の LaTeX kernel を読み込んだ後に、platexrelease が知っている最新の pLaTeX kernel を読み込んだもの」をエミュレートする。
以下、開発者向け。今後 ptex-texmf のカーネルやパッケージを改変する方法:
- 古いコードを \plIncludeInRelease{日付}{ラベル}{メッセージ} … \plEndIncludeInRelease に挟み、全体を
<platexrelease>
ガードの下に置く。新しいコードと区別がつくように、すべての行にガードを付ける。 - 新しいコードも \plIncludeInRelease{日付}{ラベル}{メッセージ} … \plEndIncludeInRelease に挟む。コード部分は
<*plナントカ|platexrelease>
ガードの中、\plIncludeInRelease と \plEndIncludeInRelease には<platexrelease>
ガードを付ける。 - すべてのコードは
<*plナントカ>
ガードの中にあるはずなので、\begin{macrocode} 直後にいったん<*plナントカ>
ガードを終了し \end{macrocode} 直前にもう一度<*plナントカ>
ガードを開始する。
日付は 2006/11/10 時点のアスキー版のコードなら「0000/00/00」とし、その後なら「次回リリース予定日」とする。日付ブロックは降順に並べるとよい。
典型例:commit 3b92701
% \begin{macro}{\em}
% \begin{macro}{\emph}
% \begin{macro}{\eminnershape}
% \changes{v1.3d}{1997/06/25}{\cs{em},\cs{emph}で和文を強調書体に}
% \changes{v1.6}{2016/02/01}{\LaTeX\ \texttt{!<2015/01/01!>}での\cs{em}の
% 定義変更に対応。\cs{eminnershape}を追加。}
% 従来は|\em|, |\emph|で和文フォントの切り替えは行っていませんでしたが、
% 和文フォントも|\gtfamily|に切り替えるようにしました。
% \LaTeX\ \texttt{<2015/01/01>}で追加された|\eminnershape|も取り入れ、
% 強調コマンドを入れ子にする場合の書体を自由に再定義できるようになりました。
% \begin{macrocode}
%</pldefs>
%<platexrelease>\plIncludeInRelease{2016/04/17}{\eminnershape}{\eminnershape}%
%<*pldefs|platexrelease>
\DeclareRobustCommand\em
{\@nomath\em \ifdim \fontdimen\@ne\font >\z@
\eminnershape \else \gtfamily \itshape \fi}%
\def\eminnershape{\mcfamily \upshape}%
%</pldefs|platexrelease>
%<platexrelease>\plEndIncludeInRelease
%<platexrelease>\plIncludeInRelease{0000/00/00}{\eminnershape}{\eminnershape}%
%<platexrelease>\DeclareRobustCommand\em
%<platexrelease> {\@nomath\em \ifdim \fontdimen\@ne\font >\z@
%<platexrelease> \mcfamily \upshape \else \gtfamily \itshape \fi}
%<platexrelease>\let\eminnershape\@undefined
%<platexrelease>\plEndIncludeInRelease
%<*pldefs>
% \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
あとは、\ProvidesFile のバージョン番号とか \CheckSum とか \changes といった従来と同じ変更を行う。
フォーマットにかかわる場合と異なる点は、<platexrelease>
ガードが不要であるという点である。
- 古いコードを \plIncludeInRelease{日付}[フォーマットの日付]{ラベル}{メッセージ} … \plEndIncludeInRelease に挟む。
- 新しいコードは \plIncludeInRelease{日付}[フォーマットの日付]{ラベル}{メッセージ} … \plEndIncludeInRelease に挟む。
日付は 2006/11/10 時点のアスキー版のコードなら「0000/00/00」とし、その後なら「次回リリース予定日」とする。[フォーマットの日付] というオプション引数はなくてもよい。日付ブロックは降順に並べるとよい。
ちなみに,「\IncludeInRelease を使って完全に latexrelease の機構の上に載せる」ではなく「\plIncludeInRelease を新たに定義して独自に platexrelease の機構をつくる」とした理由は,pLaTeX2e kernel の変更は LaTeX2e kernel への追随に限らず,pLaTeX2e 特有の定義変更も想定しているから。
もう一点,\plIncludeInRelease(または \IncludeInRelease)の日付を「LaTeX2e が変更された日付」に合わせてしまうと,あたかも「pLaTeX2e が即日 LaTeX2e の変更をサポートした」かのようになってしまう。それは事実ではないため,LaTeX2e をサポートできていなかったという状況そのものをエミュレートするために「plcore.ltx に修正を入れた日付」としてみた。