From 26db8c4a83cf4c293f2b285fb398e8d676dff136 Mon Sep 17 00:00:00 2001
From: Norbert Preining <norbert@preining.info>
Date: Tue, 18 Jul 2023 03:01:03 +0000
Subject: CTAN sync 202307180301

---
 language/japanese/BX/bxjscls/bxjscls.dtx | 533 ++++++++++++++++++++++---------
 1 file changed, 375 insertions(+), 158 deletions(-)

(limited to 'language/japanese/BX/bxjscls/bxjscls.dtx')

diff --git a/language/japanese/BX/bxjscls/bxjscls.dtx b/language/japanese/BX/bxjscls/bxjscls.dtx
index 550795b7b2..99eb85ec9e 100644
--- a/language/japanese/BX/bxjscls/bxjscls.dtx
+++ b/language/japanese/BX/bxjscls/bxjscls.dtx
@@ -56,7 +56,8 @@
 %<*driver>
 \ProvidesFile{bxjscls.dtx}
 %</driver>
-  [2023/07/01 v2.8b BXJS document classes]
+  [2023/07/17 v2.9  BXJS document classes]
+% [2023/07/01 v2.8b BXJS document classes]
 % [2023/06/20 v2.8a BXJS document classes]
 % [2023/06/14 v2.8  BXJS document classes]
 % based on jsclasses [2023/02/23]
@@ -138,15 +139,17 @@
 %\usepackage[ipaex]{luatexja-preset}
 \renewcommand{\headfont}{\romanseries{sbc}\sffamily}
 \usepackage{bxtexlogo}
-\bxtexlogoimport{*}
+\bxtexlogoimport{*,JTeX}
 \usepackage{doc}
 \usepackage{color}
+\newcommand{\Strong}[1]{\textsf{#1}}
 \newcommand{\Pkg}[1]{\textsf{#1}}
 \newcommand{\Meta}[1]{$\langle$\mbox{}#1\mbox{}$\rangle$}
 \newcommand{\Note}{\par\noindent ※}
 \newcommand{\Means}{：\quad}
-\newcommand{\TODO}{\par\noindent
-  {\usefont{OT1}{cmss}{sbc}{n}\color{red}TODO:}\ }
+\newcommand{\TODO}[1][]{\par\noindent
+  {\usefont{OT1}{cmss}{sbc}{n}\color{red}TODO:%
+   \textsubscript{#1}}\ }
 \newcommand{\OR}{$\;|\;$}
 \newcommand{\ZRX}{☃}
 \newenvironment{ZRnote}
@@ -202,8 +205,24 @@
 % \section{はじめに}
 %
 % \begin{ZRnote}
-% この文書は「BXJSドキュメントクラス」のDocStrip形式のソースである。
-% インストール時のモジュール指定は以下のようである。
+% この文書は\Strong{「BXJSドキュメントクラス」}のDocStrip形式の
+% ソースである。
+% BXJSドキュメントクラス（以降では\Strong{「BXJSクラス」}と
+% 略称する）は
+% 奥村晴彦氏および日本語{\TeX}開発コミュニティによる
+% \Strong{「{\pLaTeXe}新ドキュメントクラス」}（以降では
+% \Strong{「JSクラス」}と呼ぶ）
+% に改変を加えたものである。
+%
+% BXJSクラスに関する解説と原版著者による原版に対する解説を
+% 区別するために、以下の規則を設ける。
+% \begin{itemize}
+% \item 見出しに“{\ZRX}”印が付いている節・小節・段落の記述は
+% BXJSクラスのものである。
+% \item \Strong{この形式の枠}の中の記述はBXJSクラスのものである。
+% \end{itemize}
+%
+% インストール時のモジュール指定は以下のものが用意されている。
 % \begin{quote}
 %   \begin{tabular}{lll}
 %     $\langle$\textsf{article}$\rangle$ & \texttt{bxjsarticle.cls}
@@ -234,11 +253,6 @@
 % \Note このソースには\texttt{jsclasses.dtx}との差分を抑制する
 % ために“jspf”・“kiyou”・“minijs”のモジュール指定を残しているが、
 % これらの指定が行われることは想定していない。
-%
-% 本ドキュメントクラスは奥村晴彦氏および日本語TeX開発コミュニティ
-% による「p\LaTeXe 新ドキュメントクラス」に改変を加えたものである。
-% 本ドキュメントクラスに関する説明は全てこの形式の枠の中に記す。
-% 枠の外にあるものは原版著者による原版に対する解説である。
 % \end{ZRnote}
 %
 % これは\LaTeX3 Projectの \texttt{classes.dtx} と
@@ -388,15 +402,15 @@
 %
 % \begin{macro}{\jsEngine}
 % 〔暗黙文字トークン〕
-% エンジン（{\TeX}の種類）の種別\Means
+% エンジン（{\TeX}処理系）の種別\Means
 % |j|＝{\pTeX}系、
 % |x|＝{\XeTeX}、
-% |p|＝{\pdfTeX}（含DVIモード）、
+% |p|＝{\pdfTeX}、
 % |l|＝{\LuaTeX}、
-% |J|＝NTT j{\TeX}、
+% |J|＝NTT {\JTeX}、
 % |O|＝Omega系、
 % |n|＝以上の何れでもない。
-%
+% \Note {\pdfTeX}と{\LuaTeX}についてはDVIモードの場合も含む。
 %    \begin{macrocode}
 \let\jsEngine=n
 \bxjs@test@engine\kanjiskip{\let\jsEngine=j}
@@ -408,29 +422,14 @@
 %    \end{macrocode}
 % \end{macro}
 %
-% 非サポートのエンジンの場合は強制終了させる。
-% \Note NTT j{\TeX}とOmega系。
-%    \begin{macrocode}
-\let\bxjs@tmpa\relax
-\ifx J\jsEngine \def\bxjs@tmpa{NTT-jTeX}\fi
-\ifx O\jsEngine \def\bxjs@tmpa{Omega}\fi
-\ifx\bxjs@tmpa\relax \expandafter\@gobble
-\else
-  \ClassError\bxjs@clsname
-   {The engine in use (\bxjs@tmpa) is not supported}
-   {It's a fatal error. I'll quit right now.}
-  \expandafter\@firstofone
-\fi{\endinput\@@end}
-%    \end{macrocode}
-%
-% 現状での処理系バージョン要件は以下の通りである
-% （{\XeTeX}のみの設定で、しかも現実離れしている）。
+% 現状での処理系バージョン要件は以下の通りである。
 % \begin{itemize}
 % \item \XeTeX\Means 0.997版（2007年）以上
 % \end{itemize}
-% \TODO 以下で3.0版での予定について述べておく。
 %
-% 3.0版での処理系バージョン要件は以下の通りである。
+% \TODO[3.0] 以下で3.0版でのバージョン要件の予定について述べておく。
+%
+% 3.0版での\Strong{クラス本体の}処理系バージョン要件は以下の通りである。
 % \begin{itemize}
 % \item \TeX\Means    3.0版[1990/03]以上
 % \item \pTeX\Means   2.0版[1995/03]以上
@@ -439,7 +438,12 @@
 % \item \LuaTeX\Means 0.60版[2010/04]以上
 % \item \XeTeX\Means  0.9994版[2009/06]以上
 % \end{itemize}
-% \Note 標準和文ドライバについてはまた別に要件を定める。
+% \Note OmegaとNTT {\JTeX}は“公式にはサポート外”の扱い
+% （動作は何も保証されない）
+% であるが、クラス本体では処理系の種類は敢えて検査しないことにする。
+% \Note クラス本体での要件は敢えて緩くしている。
+% 標準和文ドライバ（minimalも含む）についてまた別に要件を定めるので、
+% 実質的にはそちらの要件を満たすことが求められる。
 %
 % {\TeX}処理系のバージョンがサポート対象であるかを検査する。
 %    \begin{macrocode}
@@ -475,9 +479,39 @@
 \fi{\typeout{Farewell!}\endinput\@@end}
 %    \end{macrocode}
 %
+% \begin{macro}{\bxjs@if@format@at@least}
+% |\bxjs@if@format@at@least{|\Meta{日付}|}{|\Meta
+% {真}|}{|\Meta{偽}|}|\Means
+% {\LaTeX}カーネルの版が指定の日付以降であるか。
+%    \begin{macrocode}
+\def\bxjs@if@format@at@least{\@ifl@t@r\fmtversion}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\bxjs@if@package@at@least}
+% |\bxjs@if@package@at@least{|\Meta{名前}|}{|\Meta{日付}|}{|\Meta
+% {真}|}{|\Meta{偽}|}|\Means
+% ぞの名前のパッケージの指定の日付以降の版が読み込まれているか。
+% そもそも読み込まれていない場合は偽になる。
+% \Note 2017/04/15版より前のカーネルの |\@ifpackagelater| は
+% 非読込の場合に実行するとエラーになることに注意。
+%    \begin{macrocode}
+\bxjs@if@format@at@least{2017/04/15}{%
+  \let\bxjs@if@package@at@least\@ifpackagelater
+}{%else
+  \def\bxjs@if@package@at@least#1#2{%
+    \@ifpackageloaded{#1}{\@ifpackagelater{#1}{#2}}{\@secondoftwo}}}
+%    \end{macrocode}
+% \end{macro}
+%
 % \begin{macro}{\ifjsWithupTeX}
 % 〔スイッチ〕
-% エンジンが（内部漢字コードがUnicodeの）{\upTeX}であるか。
+% エンジンが「内部漢字コードがUnicodeの{\upTeX}」であるか。
+% \Note つまり、|\jsEngine|＝|j| である場合、このスイッチが真なら
+% {\upLaTeX}、偽なら{\pLaTeX}である。
+% 2023年6月に{\pLaTeX}の{\TeX}処理系が「{\epTeX}」から
+% 「内部漢字コードが非Unicodeの{\eupTeX}」に変わったが、
+% これによる影響はない。
 %    \begin{macrocode}
 \newif\ifjsWithupTeX
 \ifx\ucs\@undefined\else \ifnum\ucs"3000="3000
@@ -499,6 +533,9 @@
 % \begin{macro}{\ifjsWitheTeX}
 % 〔スイッチ〕
 % エンジンが{\eTeX}拡張をもつか。
+% \Note {\XeTeX}と{\LuaTeX}は{\eTeX}拡張をもつ版のみがあり、
+% NTT {\JTeX}はもたない版のみがある。
+% その他のエンジンは両方の版がある。
 %    \begin{macrocode}
 \newif\ifjsWitheTeX
 \bxjs@test@engine\eTeXversion{\jsWitheTeXtrue}
@@ -507,7 +544,7 @@
 %
 % \begin{macro}{\ifjsInPdfMode}
 % 〔スイッチ〕
-% {\pdfTeX}／{\LuaTeX}がPDFモードで動作しているか。
+% {\pdfTeX}・{\LuaTeX}がPDFモードで動作しているか。
 %    \begin{macrocode}
 \newif\ifjsInPdfMode
 \@nameuse{jsInPdfMode\ifnum0%
@@ -520,16 +557,33 @@
 % \begin{macro}{\ifbxjs@explIII}
 % 〔スイッチ〕
 % expl3がカーネルに組み込まれているか。
+% \Note 2020/02/02版以降のカーネルには組み込まれている。
 %    \begin{macrocode}
 \newif\ifbxjs@explIII
-\@ifl@t@r\fmtversion{2020/02/02}{\bxjs@explIIItrue}{}
+\bxjs@if@format@at@least{2020/02/02}{\bxjs@explIIItrue}{}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\ifbxjs@brace@safe}
+% 〔スイッチ〕
+% オプション中の波括弧の使用にカーネルが対応しているか。
+% \Note 正確に言うと、2021/06/01版以降のカーネルでは
+% 「未使用オプション判定」
+% の処理で |=| 以降のトークン列
+% （key-valueのvalueの部分）
+% を無視するので、この部分には波括弧を含めることができる。
+% \Note |\@removeelement| と |\in@| の実装は変更されておらず、
+% これらのマクロの第1引数には波括弧を含むトークン列を指定できない。
+%    \begin{macrocode}
+\newif\ifbxjs@brace@safe
+\bxjs@if@format@at@least{2021/06/01}{\bxjs@brace@safetrue}{}
 %    \end{macrocode}
 % \end{macro}
 %
 % \begin{macro}{\ifbxjs@TUenc}
 % 〔スイッチ〕
 % {\LaTeX}の既定のフォントエンコーディングがTUであるか。
-% \Note 2017年1月以降の{\LaTeX}カーネルにおいて
+% \Note 2017/01/01以降の{\LaTeX}カーネルにおいて
 % 「Unicodeを表す{\LaTeX}公式のフォントエンコーディング」
 % である“TU”が導入され、
 % これ以降の{\LaTeX}を{\XeTeX}または{\LuaTeX}で動かしている場合は、
@@ -546,11 +600,11 @@
 %
 % \begin{macro}{\ifbxjs@old@hook@system}
 % 〔スイッチ〕
-% {\LaTeX}の新しいフック管理システムが未導入であるか。
+% {\LaTeX}の新しいフック管理システムが\Strong{未導入}であるか。
 % \Note カーネルの2020/10/01版で導入された。
 %    \begin{macrocode}
 \newif\ifbxjs@old@hook@system
-\@ifl@t@r\fmtversion{2020/10/01}{}{\bxjs@old@hook@systemtrue}
+\bxjs@if@format@at@least{2020/10/01}{}{\bxjs@old@hook@systemtrue}
 %    \end{macrocode}
 % \end{macro}
 %
@@ -644,7 +698,7 @@
 % 例えば、|\bxjs@CGHN{package/PKG/after}| は旧仕様の{\LaTeX}では
 % “|package/after/PKG|”に展開される。
 %    \begin{macrocode}
-\@ifl@t@r\fmtversion{2021/11/15}{%
+\bxjs@if@format@at@least{2021/11/15}{%
   \def\bxjs@CGHN#1{#1}%
 }{%else
   \def\bxjs@CGHN#1{\bxjs@CGHN@a#1//}%
@@ -664,6 +718,8 @@
 %    \end{macrocode}
 % \end{macro}
 %
+% \TODO[2.9] |\bxjs@expanded| を定義する。
+%
 % \begin{macro}{\bxjs@cslet}
 % |\bxjs@cslet{|\Meta{名前1}|}\制御綴|\Means
 %    \begin{macrocode}
@@ -683,7 +739,7 @@
 % \begin{macro}{\bxjs@catopt}
 % |\bxjs@catopt{|\Meta{文字列1}|}{|\Meta{文字列2}|}|\Means
 % 2つの文字列を |,| で繋いだ文字列。
-% ただし片方が空の場合は |,| を入れない。
+% ただし少なくとも一方が空の場合は |,| を入れない。
 % 完全展開可能。
 %    \begin{macrocode}
 \def\bxjs@catopt#1#2{%
@@ -830,6 +886,19 @@
 %    \end{macrocode}
 % \end{macro}
 %
+% \begin{macro}{\bxjs@endpreamble@hook}
+% BXJSクラス用の |\AtEndPreamble| フック。
+% \Note |\AtEndPreamble| が利用できない場合は無効になる。
+%    \begin{macrocode}
+\@onlypreamble\bxjs@endpreamble@hook
+\let\bxjs@endpreamble@hook\@empty
+\AtEndOfClass{%
+  \ifx\AtEndPreamble\@undefined\else
+    \AtEndPreamble{\bxjs@endpreamble@hook}%
+  \fi}
+%    \end{macrocode}
+% \end{macro}
+%
 % 一時的な手続き用の制御綴。
 %    \begin{macrocode}
 \@onlypreamble\bxjs@tmpdo
@@ -1456,7 +1525,7 @@
 %
 % \paragraph{複合設定オプション \ZRX}
 % \mbox{}
-% \TODO |\bxjs@invscale| を書く場所を決める。
+% \TODO[3.x] |\bxjs@invscale| を書く場所を決める。
 % （JSクラスと同じにはできなそう。）
 % \begin{macro}{\bxjs@invscale}
 % |\bxjs@invscale| は{\TeX}における「長さのスケール」の逆関数を求めるもの。
@@ -1655,7 +1724,7 @@
 %
 % \paragraph{その他のBXJS独自オプション \ZRX}
 %
-% \TODO 互換用オプションを分離する（2.0版で？）。
+% \TODO[3.x] 互換用オプションを分離する。
 %
 % \begin{macro}{\bxjs@depre@opt}
 % \begin{macro}{\bxjs@depre@opt@do}
@@ -1716,22 +1785,61 @@
   \bxjs@oldfontcommandstrue}
 %    \end{macrocode}
 %
-% \paragraph{JSクラスのオプションで無効なもの \ZRX}
-% |ltjsclasses| に倣って警告を出す。
+% \paragraph{無効および廃止されたオプション \ZRX}
 %
+% \begin{macro}{\bxjs@register@badopt}
+% badoptマクロを登録する。
+% 文書本体開始時に、当該オプションが「未使用のグローバルオプション」に
+% なっている場合にbadoptマクロが実行される。
 %    \begin{macrocode}
-\DeclareOption{winjis}{%
-  \ClassWarningNoLine\bxjs@clsname
-   {This class does not support `winjis' option}%
-}
-\DeclareOption{mingoth}{%
-  \ClassWarningNoLine\bxjs@clsname
-   {This class does not support `mingoth' option}%
-}
-\DeclareOption{jis}{%
-  \ClassWarningNoLine\bxjs@clsname
-   {This class does not support `jis' option}%
-}
+\ifbxjs@brace@safe
+  \@onlypreamble\bxjs@register@badopt
+  \def\bxjs@register@badopt#1{%
+    \expandafter\@onlypreamble\csname bxjs@badopt/#1\endcsname
+    \@namedef{bxjs@badopt/#1}}
+  \g@addto@macro\bxjs@begin@document@hook{%
+    \@for\bxjs@tmpa:=\@unusedoptionlist\do{%
+      \@nameuse{bxjs@badopt/\bxjs@tmpa}}}
+\fi
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\bxjs@invalid@opt}
+% 無効オプションを宣言する。
+% そのオプションが指定された場合、それがグローバルオプションとして
+% 他のパッケージによって使用されていなければ、
+% 文書本体開始時にエラーを出す。
+% \Note 古いカーネルでは未使用検査ができないため、その場で警告を出す。
+%    \begin{macrocode}
+\@onlypreamble\bxjs@invalid@opt
+\ifbxjs@brace@safe
+  \def\bxjs@invalid@opt#1#2{%
+    \bxjs@register@badopt{#1}{\ClassError\bxjs@clsname{#2}\@ehc}}
+\else
+  \def\bxjs@invalid@opt#1#2{%
+    \DeclareOption{#1}{\ClassWarningNoLine\bxjs@clsname{#2}}}
+\fi
+%    \end{macrocode}
+% \end{macro}
+%
+% JSクラスにはあるがBXJSクラスにはないオプションを
+% 「無効オプション」として宣言する。
+% \Note |ltjsclasses| クラスでも警告を出している。
+%    \begin{macrocode}
+\bxjs@invalid@opt{winjis}{%
+  This class does not support 'winjis' option}
+\bxjs@invalid@opt{mingoth}{%
+  This class does not support 'mingoth' option}
+\bxjs@invalid@opt{jis}{%
+  This class does not support 'jis' option}
+\if j\jsEngine\else
+\bxjs@invalid@opt{tombo}{%
+  Option 'tombo' can be used only on (u)pLaTeX}
+\bxjs@invalid@opt{tombow}{%
+  Option 'tombow' can be used only on (u)pLaTeX}
+\bxjs@invalid@opt{mentuke}{%
+  Option 'mentuke' can be used only on (u)pLaTeX}
+\fi
 %    \end{macrocode}
 %
 % \paragraph{keyval型のオプション \ZRX}
@@ -1739,9 +1847,30 @@
 % その他のオプションは |keyval| の機構を用いて処理する。
 %    \begin{macrocode}
 \DeclareOption*{%
-  \def\bxjs@next{\bxjs@safe@setkeys{bxjs}}%
-  \expandafter\bxjs@next\expandafter{\CurrentOption}}
+  \bxjs@check@ja@prefix \ifx\bxjs@next\relax
+  \def\bxjs@next{\bxjs@cls@setkeys{bxjs}}%
+  \expandafter\bxjs@next\expandafter{\CurrentOption}%
+  \else
+%    \end{macrocode}
+% オプションが |ja:XXX| という形式である場合は |japaram={XXX}| に
+% 振り替える。
+%    \begin{macrocode}
+    \edef\bxjs@next{%
+      \noexpand\setkeys{bxjs}{japaram={\bxjs@next}}%
+    }\bxjs@next
+  \fi}
 %    \end{macrocode}
+% \begin{macro}{\bxjs@check@ja@prefix}
+% オプション文字列が |ja:| で始まるかを検査し、そうである場合は
+% 後続の文字列を |\bxjs@next| に代入する。
+%    \begin{macrocode}
+\def\bxjs@check@ja@prefix{%
+  \let\bxjs@next\relax
+  \expandafter\bxjs@check@ja@prefix@a\CurrentOption\@nil ja:\@nil\@nnil}
+\def\bxjs@check@ja@prefix@a#1ja:#2\@nil#3\@nnil{%
+  \ifx\@nil#1\@nil \def\bxjs@next{#2}\fi}
+%    \end{macrocode}
+% \end{macro}
 %
 % \begin{macro}{\bxjs@safe@setkeys}
 % 未知のキーに対してエラー無しで無視する |\setkeys|。
@@ -1754,6 +1883,21 @@
 %    \end{macrocode}
 % \end{macro}
 %
+% \begin{macro}{\bxjs@cls@setkeys}
+% 未知のキーに対して（エラー無しで）|\OptionNotUsed| を行う |\setkeys|。
+% |\DeclareOption*| 中で用いる。
+%    \begin{macrocode}
+\def\bxjs@cls@setkeys#1#2{%
+  \let\bxjs@save@KV@errx\KV@errx
+  \def\KV@errx##1{\OptionNotUsed}%
+  \setkeys{#1}{#2}%
+  \let\KV@errx\bxjs@save@KV@errx}
+\ifbxjs@brace@safe\else
+  \let\bxjs@cls@setkeys\bxjs@safe@setkeys
+\fi
+%    \end{macrocode}
+% \end{macro}
+%
 % \begin{macro}{\bxjs@declare@enum@option}
 % |\bxjs@declare@enum@option{|\Meta{オプション名}|}{|^^A
 %    \Meta{enum名}|}{|\Meta{初期値}|}|\par
@@ -1859,7 +2003,7 @@
 %    \end{macrocode}
 %
 % |noscale| オプションの処理。
-% \TODO |noscale| は3.0版で廃止の予定。
+% \TODO[3.0] |noscale| は廃止の予定。
 %    \begin{macrocode}
 \DeclareOption{noscale}{\bxjs@depre@opt@do{noscale}{scale=1}}
 %    \end{macrocode}
@@ -1896,7 +2040,7 @@
 %
 % |ja| オプションの処理。
 % \Note |jadriver| は0.9版で用いられた旧称。
-% \TODO |jadriver| は3.0版で廃止の予定。
+% \TODO[3.0] |jadriver| は廃止の予定。
 % \Note 単なる |ja| という指定は無視される（Pandoc 対策）。
 %    \begin{macrocode}
 \define@key{bxjs}{jadriver}{%
@@ -2153,7 +2297,7 @@
 %
 % \begin{macro}{\ifbxjs@usezw}
 % 〔スイッチ〕 |use-zw| の指定値。
-% \TODO |zw|/|nozw| は3.0版で廃止の予定。
+% \TODO[3.0] |zw|/|nozw| は廃止の予定。
 %    \begin{macrocode}
 \bxjs@declare@bool@option{use-zw}{usezw}{true}
 \DeclareOption{nozw}{\bxjs@depre@opt@do{nozw}{use-zw=false}}
@@ -2163,7 +2307,7 @@
 %
 % \begin{macro}{\ifbxjs@disguise@js}
 % 〔スイッチ〕 |disguise-js| の指定値。
-% \TODO |js|/|nojs| は3.0版で廃止の予定。
+% \TODO[3.0] |js|/|nojs| は廃止の予定。
 %    \begin{macrocode}
 \bxjs@declare@bool@option{disguise-js}{disguise@js}{true}
 \DeclareOption{nojs}{\bxjs@depre@opt@do{nojs}{disguise-js=false}}
@@ -2201,19 +2345,24 @@
 % \paragraph{オプションの実行}
 % \mbox{}
 % \begin{ZRnote}
-% {\LaTeX}の実装では、クラスやパッケージのオプションのトークン列の
-% 中に |{ }| が含まれると正常に処理ができない。
-% これに対処する為 |\@removeelement| の実装に少し手を加える
-% （仕様は変わらない）。
-% \Note クラスに |\DeclareOption*| がある場合は |\@unusedoptions|
+% {\LaTeX}カーネルの2021/06/01より前の版では、
+% クラスやパッケージのオプションのトークン列の中に波括弧が含まれると
+% 正常に処理ができない。
+% これに対処する為 |\@removeelement| の実装に少し手を加えて
+% 「第2引数が空の場合の処理をショートカットする」
+% ことにより、この場合に波括弧を含む第1引数が通るようにする。
+% \Note クラスに |\DeclareOption*| があり |\OptionNotUsed| を使って
+% いない場合は |\@unusedoptions|
 % は常に空のままであることを利用している。
 %    \begin{macrocode}
+\ifbxjs@brace@safe\else
 \let\bxjs@org@removeelement\@removeelement
 \def\@removeelement#1#2#3{%
   \def\reserved@a{#2}%
   \ifx\reserved@a\@empty \let#3\@empty
   \else \bxjs@org@removeelement{#1}{#2}{#3}%
   \fi}
+\fi
 %    \end{macrocode}
 %
 % \end{ZRnote}
@@ -2248,10 +2397,12 @@
 %
 % \paragraph{グローバルオプションの整理 \ZRX}
 %
+% 2021/06/01より前の版の{\LaTeX}カーネルでは、
 % グローバルオプションのトークン列に |{ }| が含まれていると、
-% やはり後のパッケージの読込処理で不具合を起こすようである
-% （|\ProcessOptions*| がエラーになる）。
+% 後のパッケージで |\ProcessOptions*| がエラーを起こす。
 % 従って、このようなオプションは除外することにする。
+% \TODO[3.0] 2021/06/01版以降のカーネルについてこの処理を廃止する。
+% （仕様変更に準じる扱いとする。）
 %    \begin{macrocode}
 \def\bxjs@tmpdo{%
   \def\bxjs@tmpa{\@gobble}%
@@ -2271,6 +2422,7 @@
 %
 % |papersize|、|10pt|、|noscale| の各オプションは他のパッケージと衝突を
 % 起こす可能性があるため、グローバルオプションから外す。
+% \TODO[3.0] |noscale| オプションは廃止予定。
 %
 %    \begin{macrocode}
 \@expandtwoargs\@removeelement
@@ -2722,27 +2874,17 @@
 % 以降のレイアウト指定ではこちらを使います。
 %
 % \begin{ZRnote}
-% |\mag| する場合（現状はこれが既定）にコードの変更を低減するために、
-% 以下では必要に応じて、|\jsc@mpt| を |\p@?| と書く。
-% その上で、|\mag| する場合は |?| を無視して |\p@| と解釈させ、
-% |\mag| しない場合は |?| を英字扱いにして |\p@?| という制御綴を
-% |\jsc@mpt| と同値にする。
-% \Note （多分2.0版あたりで）JSクラスに合わせるため |\p@?| 表記を
-% 止める予定。
+% \Note 2.9版において |\p@?| 表記を廃止。
 %    \begin{macrocode}
 \newdimen\jsc@mpt
 \newdimen\jsc@mmm
 \ifjsc@mag
   \jsc@mpt=1\p@
   \jsc@mmm=1mm
-  \catcode`\?=9 % \p@? read as \p@
 \else
   \jsc@mpt=\jsc@magscale\p@
   \jsc@mmm=\jsc@magscale mm
-  \catcode`\?=11 \let\p@?\jsc@mpt
 \fi
-\chardef\bxjs@qmcc=\catcode`\?\relax
-\g@addto@macro\bxjs@pre@jadriver@hook{\catcode`\?=12\relax}
 %    \end{macrocode}
 %
 % ここで{p\TeX}のzwに相当する単位として用いる長さ変数 |\jsZw| を作成する。
@@ -3505,7 +3647,7 @@
 % クラス読込中に複数回実行する。
 % 前回の実行直後から |\set@fontsize| が更新されている場合にのみ
 % 実際にパッチを当てる。
-% \TODO 新しい{\LaTeX}カーネルでは |selectfont| フックを利用したい。
+% \TODO[3.0] 新しい{\LaTeX}カーネルで |selectfont| フックを利用する。
 %    \begin{macrocode}
 %\let\bxjs@prev@set@fontsize\@undefined
 \@onlypreamble\bxjs@patch@set@fontsize
@@ -3526,7 +3668,7 @@
 % この場とパッケージ末尾で作動させる。
 %    \begin{macrocode}
 \bxjs@patch@set@fontsize
-\AtEndOfPackage{\bxjs@patch@set@fontsize}
+\AtEndOfClass{\bxjs@patch@set@fontsize}
 %    \end{macrocode}
 %
 % \begin{macro}{\jsFontSizeChanged}
@@ -3695,9 +3837,9 @@
 % いましたが，結局，微調節してみることにしました。
 %
 %    \begin{macrocode}
-  \abovedisplayskip 11\p@? \@plus3\p@? \@minus4\p@?
-  \abovedisplayshortskip \z@ \@plus3\p@?
-  \belowdisplayskip 9\p@? \@plus3\p@? \@minus4\p@?
+  \abovedisplayskip 11\jsc@mpt \@plus3\jsc@mpt \@minus4\jsc@mpt
+  \abovedisplayshortskip \z@ \@plus3\jsc@mpt
+  \belowdisplayskip 9\jsc@mpt \@plus3\jsc@mpt \@minus4\jsc@mpt
   \belowdisplayshortskip \belowdisplayskip
 %    \end{macrocode}
 %
@@ -3780,8 +3922,8 @@
 %<!kiyou>    \jsc@setfontsize\small\@ixpt{13}%
 %<kiyou>    \jsc@setfontsize\small{8.8888}{13.2418}%
   }%
-  \abovedisplayskip 9\p@? \@plus3\p@? \@minus4\p@?
-  \abovedisplayshortskip  \z@ \@plus3\p@?
+  \abovedisplayskip 9\jsc@mpt \@plus3\jsc@mpt \@minus4\jsc@mpt
+  \abovedisplayshortskip  \z@ \@plus3\jsc@mpt
   \belowdisplayskip \abovedisplayskip
   \belowdisplayshortskip \belowdisplayskip
   \def\@listi{\leftmargin\leftmargini
@@ -3806,8 +3948,8 @@
 %<!kiyou>    \jsc@setfontsize\footnotesize\@viiipt{11}%
 %<kiyou>    \jsc@setfontsize\footnotesize{8.8888}{13.2418}%
   }%
-  \abovedisplayskip 6\p@? \@plus2\p@? \@minus3\p@?
-  \abovedisplayshortskip  \z@ \@plus2\p@?
+  \abovedisplayskip 6\jsc@mpt \@plus2\jsc@mpt \@minus3\jsc@mpt
+  \abovedisplayshortskip  \z@ \@plus2\jsc@mpt
   \belowdisplayskip \abovedisplayskip
   \belowdisplayshortskip \belowdisplayskip
   \def\@listi{\leftmargin\leftmargini
@@ -4029,7 +4171,7 @@
 \ifjsc@mag
 \mag=\bxjs@param@mag
 \fi
-\setlength{\topskip}{10\p@?}
+\setlength{\topskip}{10\jsc@mpt}
 %    \end{macrocode}
 %
 % |\jsSetQHLength| のための和文単位の定義。
@@ -4833,7 +4975,7 @@
 % なので、実際の設定値を直接使うことにする。
 % \end{ZRnote}
 %    \begin{macrocode}
-\footnotesep=11\p@? \footnotesep=0.7\footnotesep
+\footnotesep=11\jsc@mpt \footnotesep=0.7\footnotesep
 %    \end{macrocode}
 % \end{macro}
 %
@@ -4844,7 +4986,7 @@
 % 和文の行送りを考えてもうちょっと大きくします。
 %
 %    \begin{macrocode}
-\setlength{\skip\footins}{16\p@? \@plus 5\p@? \@minus 2\p@?}
+\setlength{\skip\footins}{16\jsc@mpt \@plus 5\jsc@mpt \@minus 2\jsc@mpt}
 %    \end{macrocode}
 % \end{macro}
 %
@@ -4970,9 +5112,9 @@
 % |\intextsep| は本文の途中に出力されるフロートと本文との距離です。
 %
 %    \begin{macrocode}
-\setlength\floatsep    {12\p@? \@plus 2\p@? \@minus 2\p@?}
-\setlength\textfloatsep{20\p@? \@plus 2\p@? \@minus 4\p@?}
-\setlength\intextsep   {12\p@? \@plus 2\p@? \@minus 2\p@?}
+\setlength\floatsep    {12\jsc@mpt \@plus 2\jsc@mpt \@minus 2\jsc@mpt}
+\setlength\textfloatsep{20\jsc@mpt \@plus 2\jsc@mpt \@minus 4\jsc@mpt}
+\setlength\intextsep   {12\jsc@mpt \@plus 2\jsc@mpt \@minus 2\jsc@mpt}
 %    \end{macrocode}
 % \end{macro}
 % \end{macro}
@@ -4984,8 +5126,8 @@
 % 二段組のときの段抜きのフロートについての値です。
 %
 %    \begin{macrocode}
-\setlength\dblfloatsep    {12\p@? \@plus 2\p@? \@minus 2\p@?}
-\setlength\dbltextfloatsep{20\p@? \@plus 2\p@? \@minus 4\p@?}
+\setlength\dblfloatsep    {12\jsc@mpt \@plus 2\jsc@mpt \@minus 2\jsc@mpt}
+\setlength\dbltextfloatsep{20\jsc@mpt \@plus 2\jsc@mpt \@minus 4\jsc@mpt}
 %    \end{macrocode}
 % \end{macro}
 % \end{macro}
@@ -5000,9 +5142,9 @@
 % |\@fpsep| はフロート間に入ります。
 %
 %    \begin{macrocode}
-\setlength\@fptop{0\p@? \@plus 1fil}
-\setlength\@fpsep{8\p@? \@plus 2fil}
-\setlength\@fpbot{0\p@? \@plus 1fil}
+\setlength\@fptop{0\jsc@mpt \@plus 1fil}
+\setlength\@fpsep{8\jsc@mpt \@plus 2fil}
+\setlength\@fpbot{0\jsc@mpt \@plus 1fil}
 %    \end{macrocode}
 % \end{macro}
 % \end{macro}
@@ -5015,9 +5157,9 @@
 % 段抜きフロートについての値です。
 %
 %    \begin{macrocode}
-\setlength\@dblfptop{0\p@? \@plus 1fil}
-\setlength\@dblfpsep{8\p@? \@plus 2fil}
-\setlength\@dblfpbot{0\p@? \@plus 1fil}
+\setlength\@dblfptop{0\jsc@mpt \@plus 1fil}
+\setlength\@dblfpsep{8\jsc@mpt \@plus 2fil}
+\setlength\@dblfpbot{0\jsc@mpt \@plus 1fil}
 %    \end{macrocode}
 % \end{macro}
 % \end{macro}
@@ -5371,7 +5513,7 @@
 % |\subtitle| の定義を |\title| の実行まで遅延させることにする。
 % もしどうしても主題より前に副題を設定したい場合は、
 % |\jsSubtitle| 命令を直接用いればよい。
-% \TODO |\subtitle| の遅延処理はPandocモードに移す。
+% \TODO[3.0] |\subtitle| の遅延処理はPandocモードに移す。
 % 
 % 本体を |\jsSubtitle| として定義する。
 %    \begin{macrocode}
@@ -5473,7 +5615,7 @@
         \begin{center}
           \mbox{} \\[1\jsZw]
           \large
-          {\maybeblue\hrule height0\p@? depth2\p@?\relax}\par
+          {\maybeblue\hrule height0\jsc@mpt depth2\jsc@mpt\relax}\par
           \jsc@smallskip
           \@title
           \ifx\bxjs@subtitle\@undefined\else
@@ -5481,16 +5623,16 @@
             {\small \bxjs@subtitle\par}
           \fi
           \jsc@smallskip
-          {\maybeblue\hrule height0\p@? depth2\p@?\relax}\par
+          {\maybeblue\hrule height0\jsc@mpt depth2\jsc@mpt\relax}\par
           \vfill
           {\small \@author}%
         \end{center}
       \else
-      \vskip 60\p@?
+      \vskip 60\jsc@mpt
       \begin{center}%
         {\LARGE \@title \par}%
         \ifx\bxjs@subtitle\@undefined\else
-          \vskip5\p@?
+          \vskip5\jsc@mpt
           {\normalsize \bxjs@subtitle\par}
         \fi
         \vskip 3em%
@@ -5569,7 +5711,7 @@
       \let\footnote\thanks
       {\LARGE \@title \par}%
       \ifx\bxjs@subtitle\@undefined\else
-        \vskip3\p@?
+        \vskip3\jsc@mpt
         {\normalsize \bxjs@subtitle\par}
       \fi
       \vskip 1.5em
@@ -6190,7 +6332,7 @@
     \normalfont
     \ifnum \c@secnumdepth >-2\relax
       \huge\headfont \prepartname\thepart\postpartname
-      \par\vskip20\p@?
+      \par\vskip20\jsc@mpt
     \fi
     \Huge \headfont #2\par}%
   \@endpart}
@@ -7081,7 +7223,7 @@
 % |array| 環境の列間には |\arraycolsep| の2倍の幅の空きが入ります。
 %
 %    \begin{macrocode}
-\setlength\arraycolsep{5\p@?}
+\setlength\arraycolsep{5\jsc@mpt}
 %    \end{macrocode}
 % \end{macro}
 %
@@ -7090,7 +7232,7 @@
 % |tabular| 環境の列間には |\tabcolsep| の2倍の幅の空きが入ります。
 %
 %    \begin{macrocode}
-\setlength\tabcolsep{6\p@?}
+\setlength\tabcolsep{6\jsc@mpt}
 %    \end{macrocode}
 % \end{macro}
 %
@@ -7147,7 +7289,7 @@
 % |\fbox|，|\framebox| の罫線の幅です。
 %
 %    \begin{macrocode}
-\setlength\fboxsep{3\p@?}
+\setlength\fboxsep{3\jsc@mpt}
 \setlength\fboxrule{.4\p@}
 %    \end{macrocode}
 % \end{macro}
@@ -7357,8 +7499,8 @@
 %    \begin{macrocode}
 \newlength\abovecaptionskip
 \newlength\belowcaptionskip
-\setlength\abovecaptionskip{5\p@?} % 元: 10\p@
-\setlength\belowcaptionskip{5\p@?} % 元: 0\p@
+\setlength\abovecaptionskip{5\jsc@mpt} % 元: 10\p@
+\setlength\belowcaptionskip{5\jsc@mpt} % 元: 0\p@
 %    \end{macrocode}
 % \end{macro}
 % \end{macro}
@@ -7711,7 +7853,7 @@
   \ifnum \c@tocdepth >-2\relax
 %<!book&!report>    \addpenalty\@secpenalty
 %<book|report>    \addpenalty{-\@highpenalty}%
-    \addvspace{2.25em \@plus\p@?}%
+    \addvspace{2.25em \@plus\jsc@mpt}%
     \begingroup
       \parindent \z@
 %     \@pnumwidth should be \@tocrmarg
@@ -7742,7 +7884,7 @@
 \newcommand*{\l@chapter}[2]{%
   \ifnum \c@tocdepth >\m@ne
     \addpenalty{-\@highpenalty}%
-    \addvspace{1.0em \@plus\p@?}
+    \addvspace{1.0em \@plus\jsc@mpt}
 %   \vskip 1.0em \@plus\p@   % book.clsでは↑がこうなっている
     \begingroup
       \parindent\z@
@@ -7770,7 +7912,7 @@
 \newcommand*{\l@section}[2]{%
   \ifnum \c@tocdepth >\z@
     \addpenalty{\@secpenalty}%
-    \addvspace{1.0em \@plus\p@?}%
+    \addvspace{1.0em \@plus\jsc@mpt}%
     \begingroup
       \parindent\z@
 %     \rightskip\@pnumwidth
@@ -7897,7 +8039,7 @@
 \def\jsTocLine{\leaders\hbox{%
   $\m@th \mkern \@dotsep mu\hbox{.}\mkern \@dotsep mu$}\hfill}
 \def\@dottedtocline#1#2#3#4#5{\ifnum #1>\c@tocdepth \else
-  \vskip \z@ \@plus.2\p@?
+  \vskip \z@ \@plus.2\jsc@mpt
   {\leftskip #2\relax \rightskip \@tocrmarg \parfillskip -\rightskip
     \parindent #2\relax\@afterindenttrue
    \interlinepenalty\@M
@@ -8140,7 +8282,7 @@
 %<!book&!report>    \@mkboth{\indexname}{\indexname}%
     \plainifnotempty % \thispagestyle{plain}
     \parindent\z@
-    \parskip\z@ \@plus .3\p@?\relax
+    \parskip\z@ \@plus .3\jsc@mpt\relax
     \let\item\@idxitem
     \raggedright
     \footnotesize\narrowbaselines
@@ -8175,7 +8317,7 @@
 % 索引で先頭文字ごとのブロックの間に入るスペースです。
 %
 %    \begin{macrocode}
-\newcommand{\indexspace}{\par \vskip 10\p@? \@plus5\p@? \@minus3\p@?\relax}
+\newcommand{\indexspace}{\par \vskip 10\jsc@mpt \@plus5\jsc@mpt \@minus3\jsc@mpt\relax}
 %    \end{macrocode}
 % \end{macro}
 %
@@ -8274,9 +8416,9 @@
 %
 %    \begin{macrocode}
 \renewcommand{\footnoterule}{%
-  \kern-2.6\p@? \kern-.4\p@
+  \kern-2.6\jsc@mpt \kern-.4\p@
   \hrule width .4\columnwidth
-  \kern 2.6\p@?}
+  \kern 2.6\jsc@mpt}
 %    \end{macrocode}
 % \end{macro}
 %
@@ -8608,7 +8750,7 @@
 % \end{ZRnote}
 %    \begin{macrocode}
 \ifnum\bxjs@everyparhook=\bxjs@everyparhook@@none\else
-\AtEndOfPackage{%
+\AtEndOfClass{%
 \def\@gnewline #1{%
   \ifvmode
     \@nolnerr
@@ -9134,17 +9276,43 @@
 % 選択の余地がないため、このドライバにおいて、
 % 「JSクラスと同等の指定」を完成させるためのコードを記述する。
 %
-% \TODO 本来は「minimalにすら依存しない」はずのものがminimalの
-% コード中に書かれているような気がする……。
+% \TODO minimalのコード中に何を置くべきかについて検討する。
+% 現状では、本来は「minimalにすら依存しない」
+% はずのものがminimal中に置かれている。
+% \TODO[3.0] とりあえず、新しい補助ファイルを導入する。
+% 文書クラスや和文ドライバの種別に関わらず必ず読み込まれるもの。
 %
 %^^A----------------
-% \subsection{補助マクロ}
+% \subsection{準備}
 %
 %    \begin{macrocode}
 %<*minimal>
 %% このファイルは日本語文字を含みます
 %    \end{macrocode}
 %
+% \paragraph{環境検査}
+%
+% minimal和文ドライバの処理系バージョン要件はクラス本体と同じとする。
+% 
+% ただし「公式にはサポート外」のエンジンが使われている場合は
+% 強制終了させる。
+% \Note NTT {\JTeX}とOmega系。
+%    \begin{macrocode}
+\let\bxjs@tmpa\relax
+\ifx J\jsEngine \def\bxjs@tmpa{NTT-jTeX}\fi
+\ifx O\jsEngine \def\bxjs@tmpa{Omega}\fi
+\ifx\bxjs@tmpa\relax \expandafter\@gobble
+\else
+  \ClassError\bxjs@clsname
+   {The engine in use (\bxjs@tmpa) is not supported}
+   {It's a fatal error. I'll quit right now.}
+  \expandafter\@firstofone
+\fi{\endinput\@@end}
+%    \end{macrocode}
+%
+% \paragraph{補助マクロ}
+% \mbox{}
+%
 % \begin{macro}{\DeclareJaTextFontCommand}
 % 和文書体のための、「余計なこと」をしない |\DeclareTextFontCommand|。
 %    \begin{macrocode}
@@ -9441,7 +9609,7 @@
 % 欧文総称フォント命令で和文フォントが連動するように修正する。
 % その他の和文フォント関係の定義を行う。
 %
-% \Note 2020-02-02のNFSSの改修に対する |jsclasses| の対策を
+% \Note 2020/02/02のNFSSの改修に対する |jsclasses| の対策を
 % 取り入れた。
 %    \begin{macrocode}
 \@ifl@t@r\fmtversion{2020/10/01}
@@ -9652,7 +9820,7 @@
 %
 % \begin{macro}{\bxjs@do@simplejasetup}
 % |simplejasetup| オプションの実際の処理内容。
-% \TODO バージョン要件を見直して暫定措置を解除する。
+% \TODO[3.0] バージョン要件を見直して暫定措置を解除する。
 %    \begin{macrocode}
 \@onlypreamble\bxjs@do@simplejasetup
 \def\bxjs@do@simplejasetup{%
@@ -9894,15 +10062,16 @@
 % \item |\autoxspacing|/|\noautoxspacing|
 % \end{itemize}
 %
-% \paragraph{和文フォント指定の扱い}
-%
 %^^A----------------
 % \subsection{準備}
 %
-% まず minimal ドライバを読み込む。
 %    \begin{macrocode}
 %<*standard>
 %% このファイルは日本語文字を含みます
+%    \end{macrocode}
+%
+% まずminimalドライバを読み込む。
+%    \begin{macrocode}
 \input{bxjsja-minimal.def}
 %    \end{macrocode}
 %
@@ -9911,6 +10080,39 @@
 \bxjs@simplejasetupfalse
 %    \end{macrocode}
 %
+% \paragraph{環境検査}
+% \mbox{}
+% \TODO[3.0] 以下で3.0版でのバージョン要件の予定について述べておく。
+%
+% standard和文ドライバの処理系バージョン要件
+% （minimalからの差分）
+% は以下の通りである。
+% \begin{itemize}
+% \item \upTeX\Means  0.29版[2010/01]以上
+% \item \LuaTeX\Means 0.85版[2015/11]以上
+% \item \XeTeX\Means  0.9999版[2013/03]以上
+% \end{itemize}
+% 加えて、以下の要件を定める。
+% \begin{itemize}
+% \item {\pTeX}系以外のエンジンでは{\eTeX}拡張を必須とする。
+%   \Note |bxcjkjatype| パッケージが{\eTeX}拡張を要求するため。
+% \item {\LuaTeX}のDVIモードはサポートしない。
+%   \Note {\LuaTeX-ja}パッケージがサポートしていないため。
+% \end{itemize}
+%
+% \paragraph{パッケージ読込}
+%
+% 利用可能な場合は |etoolbox| パッケージを読み込む。
+% \Note 1.3版は「etoolboxパッケージ」としての最古の版であるらしい。
+% |\AtEndPreamble| はこの版で既に利用可能である。
+%    \begin{macrocode}
+\ifjsWitheTeX
+  \IfFileExists{etoolbox.sty}{%
+    \RequirePackage{etoolbox}[2007/10/08]% v1.3
+  }{}
+\fi
+%    \end{macrocode}
+%
 %^^A----------------
 % \subsection{和文ドライバパラメタ}
 %
@@ -9956,9 +10158,10 @@
 % \end{macro}
 %
 % |font| オプションの処理。
+% \Note 2.9版より、複数回指定した場合には累積させる。
 %    \begin{macrocode}
 \define@key{bxjsStd}{font}{%
-  \edef\bxjs@jp@font{#1}}
+  \edef\bxjs@jp@font{\bxjs@catopt\bxjs@jp@font{#1}}}
 %    \end{macrocode}
 %
 % \begin{macro}{\ifbxjs@jp@strong@cmd}
@@ -10695,7 +10898,7 @@
 % |\bxjs@plautopatch@new| は「|pxjahyper| の自動読込に対応した
 % 版の |plautopatch| が読み込まれているか」のフラグ。
 %    \begin{macrocode}
-  \@ifpackagelater{plautopatch}{2020/05/25}{% v0.9g
+  \bxjs@if@package@at@least{plautopatch}{2020/05/25}{% v0.9g
     \let\bxjs@plautopatch@new=t}{}
 %    \end{macrocode}
 % 「|unicode| を有効にできるか」を判定する。
@@ -10732,14 +10935,14 @@
 % 「{\pLaTeX}上の |unicode| 対応をもつほど新しい版（1.3版以降）」
 % であるかを判定する方法はない。
 % しかし、新しい{\LaTeX}システムで |unicode| を無効にするのは
-% 避けたいので、{\LaTeX}カーネルが2023-06-01以降である場合に
+% 避けたいので、{\LaTeX}カーネルが2023/06/01版以降である場合に
 % |pxjahyper| も十分に新しいと推定することにする。
 % すなわち「|pxjahyper| が読み込まれるはず」かつ
 % 「{\LaTeX}がカーネルが新しい」かを判定する。
 %    \begin{macrocode}
       \let\bxjs@avail@hy@unicode=f
       \ifx t\bxjs@plautopatch@new
-        \@ifl@t@r\fmtversion{2023/06/01}{\let\bxjs@avail@hy@unicode=t}{}
+        \bxjs@if@format@at@least{2023/06/01}{\let\bxjs@avail@hy@unicode=t}{}
       \fi
     \fi
   \fi
@@ -10995,7 +11198,7 @@
 % （整数部が多桁になっても大丈夫。）
 % しかし実は、|\strcmp| プリミティブが追加されたのは
 % 0.9994版（2009年6月）かららしい。
-% \TODO バージョン要件を見直して暫定措置を解除する。
+% \TODO[3.0] バージョン要件を見直して暫定措置を解除する。
 %    \begin{macrocode}
 \ifx\strcmp\@undefined\else %未定義なら条件を満たさない
 \ifnum\strcmp{\the\XeTeXversion\XeTeXrevision}{0.99992}>\m@ne
@@ -11019,7 +11222,7 @@
 % 強制改行直後のグルー禁止処理、のような怪しげな何か。
 %
 %    \begin{macrocode}
-\AtEndOfPackage{%
+\AtEndOfClass{%
 \def\@gnewline #1{%
   \ifvmode \@nolnerr
   \else
@@ -11472,9 +11675,14 @@
 %^^A----------------
 % \subsection{準備}
 %
-% |space| してはいけない。
 %    \begin{macrocode}
 %<*pandoc>
+%    \end{macrocode}
+%
+% |xeCJK| で |space| が有効になるのを阻止する。
+% \Note |bxjsja-standard.def| の中で |xeCJK| が読み込まれるため
+% この位置に置いている。
+%    \begin{macrocode}
 \if x\jsEngine
   \PassOptionsToPackage{nospace}{xeCJK}
 \fi
@@ -11485,13 +11693,26 @@
 \input{bxjsja-standard.def}
 %    \end{macrocode}
 %
+% \paragraph{環境検査}
+% \mbox{}
+% \TODO[3.0] 以下で3.0版でのバージョン要件の予定について述べておく。
+%
+% pandoc和文ドライバの処理系バージョン要件はstandardと同じとする。
+% 加えて、以下の要件を定める。
+% \begin{itemize}
+% \item {\pTeX}系も含めて全てのエンジン種別で{\eTeX}拡張を要求する。
+% \item 特に |etoolbox| の2.0版以上を要求する。
+%   \Note もちろん他にも追加の依存パッケージがある。
+% \end{itemize}
+%
+% \paragraph{パッケージ読込}
+%
 % |bxjspandoc| パッケージを読み込む。
 %    \begin{macrocode}
 \RequirePackage{bxjspandoc}
 %    \end{macrocode}
 %
 % {\eTeX}ではない場合に警告を出す。
-% \Note 近い将来に{\eTeX}拡張を必須にする予定。
 %    \begin{macrocode}
 \ifjsWitheTeX\else
   \ClassWarningNoLine\bxjs@clsname
@@ -11519,22 +11740,11 @@
 %    \end{macrocode}
 % \end{macro}
 %
-% \begin{macro}{\bxjs@endpreamble@hook}
-% |etoolbox| の |\AtEndPreamble| で実行されるBXJSクラス用のフック。
-% \Note {\eTeX}以外では無効になる。
-% （将来pandocの外に出す可能性あり。）
-%    \begin{macrocode}
-\@onlypreamble\bxjs@endpreamble@hook
-\let\bxjs@endpreamble@hook\@empty
-%    \end{macrocode}
-% \end{macro}
-%
-% パッケージ読込。
+% その他の依存パッケージを読み込む。
 %    \begin{macrocode}
 \RequirePackage{iftex}[2013/04/04]% v0.2
 \ifjsWitheTeX
   \RequirePackage{etoolbox}[2010/08/21]% v2.0
-  \AtEndPreamble{\bxjs@endpreamble@hook}
   \RequirePackage{filehook}[2011/10/12]% v0.5d
 \fi
 %    \end{macrocode}
@@ -11642,6 +11852,9 @@
 %^^A----------------
 % \subsection{duploadシステム}
 %
+% \TODO 新しいカーネルで利用可能な機構での代替を検討する。
+% カーネルへのパッチは排除したいので。
+%
 % パッケージが重複して読み込まれたときに“option clash”の
 % 検査をスキップする。
 % この時に何らかのコードを実行させることができる。
@@ -12098,8 +12311,8 @@
 % \subsection{hyperref対策}
 %
 % |hyperref| の |unicode| オプションの固定を行う。
-% \TODO |hyperref| の開発状況を鑑みる限り、|unicode| オプションの固定処理
-% は“危険”だと思われるので、可能ならば廃止したい。
+% \TODO |unicode| オプションの固定処理は可能なら廃止したい。
+% |hyperref| の開発状況を鑑みる限り、固定処理は危険なので。
 %    \begin{macrocode}
 \if j\jsEngine
   \bxjs@fix@hyperref@unicode{false}
@@ -12297,6 +12510,10 @@
 %
 % 古いやつをどうにかするためのムニャムニャ。
 %
+% \Note すなわちBXJSクラスにおいては
+% 「新しいシステムにおいてはbxjscompatがなくても正常に動作する」
+% 状態を保つべき。
+%
 %^^A----------------
 % \subsection{準備}
 %
@@ -13108,7 +13325,7 @@ FE70,FFF0,%
 %    \begin{macrocode}
 %<*ancpandoc>
 %% このファイルは日本語文字を含みます.
-\def\bxjsp@pkgname{bxjscjkcat}
+\def\bxjsp@pkgname{bxjspandoc}
 %    \end{macrocode}
 %
 % \begin{macro}{\bxjsp@engine}
-- 
cgit v1.2.3

