texlive[67657] Master/texmf-dist: bxjscls (17jul23)

commits+karl at tug.org commits+karl at tug.org
Mon Jul 17 22:39:57 CEST 2023


Revision: 67657
          http://tug.org/svn/texlive?view=revision&revision=67657
Author:   karl
Date:     2023-07-17 22:39:57 +0200 (Mon, 17 Jul 2023)
Log Message:
-----------
bxjscls (17jul23)

Modified Paths:
--------------
    trunk/Master/texmf-dist/doc/latex/bxjscls/README-ja.md
    trunk/Master/texmf-dist/doc/latex/bxjscls/README.md
    trunk/Master/texmf-dist/doc/latex/bxjscls/bxjscls-manual.pdf
    trunk/Master/texmf-dist/doc/latex/bxjscls/bxjscls-manual.tex
    trunk/Master/texmf-dist/doc/latex/bxjscls/bxjscls.pdf
    trunk/Master/texmf-dist/source/latex/bxjscls/bxjscls.dtx
    trunk/Master/texmf-dist/tex/latex/bxjscls/bxjsarticle.cls
    trunk/Master/texmf-dist/tex/latex/bxjscls/bxjsbook.cls
    trunk/Master/texmf-dist/tex/latex/bxjscls/bxjscjkcat.sty
    trunk/Master/texmf-dist/tex/latex/bxjscls/bxjscompat.sty
    trunk/Master/texmf-dist/tex/latex/bxjscls/bxjsja-minimal.def
    trunk/Master/texmf-dist/tex/latex/bxjscls/bxjsja-modern.def
    trunk/Master/texmf-dist/tex/latex/bxjscls/bxjsja-pandoc.def
    trunk/Master/texmf-dist/tex/latex/bxjscls/bxjsja-standard.def
    trunk/Master/texmf-dist/tex/latex/bxjscls/bxjspandoc.sty
    trunk/Master/texmf-dist/tex/latex/bxjscls/bxjsreport.cls
    trunk/Master/texmf-dist/tex/latex/bxjscls/bxjsslide.cls

Modified: trunk/Master/texmf-dist/doc/latex/bxjscls/README-ja.md
===================================================================
--- trunk/Master/texmf-dist/doc/latex/bxjscls/README-ja.md	2023-07-17 15:15:21 UTC (rev 67656)
+++ trunk/Master/texmf-dist/doc/latex/bxjscls/README-ja.md	2023-07-17 20:39:57 UTC (rev 67657)
@@ -13,8 +13,9 @@
 
 ### 前提環境
 
-  * TeX エンジン: pdfTeX / XeTeX / LuaTeX / pTeX / upTeX / pTeX-ng
+  * TeX エンジン: TeX/pdfTeX/XeTeX/LuaTeX/pTeX/upTeX/pTeX-ng
       - e-TeX 拡張は必須でない
+          + 標準モード使用時は (u)pTeX 以外は e-TeX 拡張が必要
       - XeTeX は 0.997 版以降が必要
   * フォーマット: LaTeX
   * DVI ウェア: 不問
@@ -21,7 +22,6 @@
   * 必須パッケージ:
       - calc
       - geometry v5.0以降
-      - iftex
       - keyval
   * 場合により必須となるパッケージ:
       - bxwareki: 日付の和暦表示機能を使う場合
@@ -28,7 +28,7 @@
       - jslogo: `jslogo` 指定時
       - plautopatch v0.3以降: (u)pLaTeX かつ `plautopatch` 指定時
       - type1cm: `magstyle=nomag*` 指定時
-      - standard 和文ドライバ使用時:
+      - 標準モード(standard 和文ドライバ)使用時:
           + bxcalc v1.0以降: 和文パラメタ `units` 指定時
           + bxcjkjatype v0.2c以降: (pdf)LaTeX 使用時
           + CJK: (pdf)LaTeX 使用時
@@ -43,6 +43,7 @@
           + bxorigcapt: Babel 使用時
           + etoolbox v2.0以降: e-TeX なら
           + filehook v0.5d以降: e-TeX なら
+          + iftex v0.2以降
           + pdftexcmds v0.5以降
           + pxbabel: (u)pLaTeX かつ Babel 使用時
   * エンジンが (u)pTeX 以外で、かつ和文ドライバが standard 以外の場合、
@@ -110,6 +111,10 @@
 更新履歴
 --------
 
+  * Version 2.9  〈2023/07/17〉
+      - LaTeX の未使用グローバルオプション検査を稼働するようにした。
+      - 和文パラメタ指定の代替表記(`ja:`)をサポートした。
+      - バグ修正。
   * Version 2.8b 〈2023/07/01〉
       - バグや細かい不具合を修正。
   * Version 2.8a 〈2023/06/20〉

Modified: trunk/Master/texmf-dist/doc/latex/bxjscls/README.md
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/bxjscls/bxjscls-manual.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/bxjscls/bxjscls-manual.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/bxjscls/bxjscls-manual.tex	2023-07-17 15:15:21 UTC (rev 67656)
+++ trunk/Master/texmf-dist/doc/latex/bxjscls/bxjscls-manual.tex	2023-07-17 20:39:57 UTC (rev 67657)
@@ -12,8 +12,8 @@
 \bxtexlogoimport{*}
 \usepackage{shortvrb}
 \MakeShortVerb{\|}
-\newcommand{\PkgVersion}{2.8b}
-\newcommand{\PkgDate}{2023/07/01}
+\newcommand{\PkgVersion}{2.9}
+\newcommand{\PkgDate}{2023/07/17}
 \newcommand{\Pkg}[1]{\textsf{#1}}
 \newcommand{\Meta}[1]{$\langle$\mbox{}\nobr#1\nobr\mbox{}$\rangle$}
 \newcommand{\Note}{\par\noindent ※}
@@ -24,7 +24,7 @@
 \newcommand{\xast}{\mbox{}\mbox{$^*$}}
 \newcommand{\JSl}{\mbox{}/\mbox{}}
 \newcommand{\JSS}{\raisebox{-0.12\zw}{\makebox[1\zw]{%
-  \rule{0.4pt}{0.12\zw}\rule{0.9\zw}{0.4pt}\rule{0.4pt}{0.12\zw}}}}
+  \rule{0.4pt}{0.25\zw}\rule{0.9\zw}{0.4pt}\rule{0.4pt}{0.25\zw}}}}
 %-----------------------------------------------------------
 \begin{document}
 \title{\Pkg{BXjscls} パッケージ\\
@@ -578,7 +578,7 @@
 
 \begin{itemize}
 \item エンジンオプション\Means
-  実際に使用するエンジン({\LaTeX}コマンド名)を指定する。
+  実際に使用する{\LaTeX}エンジン(実行コマンド名)を指定する。
   有効な値は |latex|、|platex|、|uplatex|、|pdflatex|、|xelatex|、
   |lualatex|、|platex-ng| である。
   エンジンオプション(と次項の |autodetect-engine| の何れか)
@@ -617,8 +617,10 @@
 \item |nodvidriver|\Means
   特殊なドライバオプションの一種で、BXJSクラスが持つ
   ドライバ依存の機能を全て抑止することを指定する。
-  \footnote{従って、ドライバ依存のパッケージを使用しなければ、
-    出力されるDVIファイルは特定のDVIウェアに依存しないものになる。}
+  \footnote{従って、別にドライバ依存の機能を使用しなければ、
+    出力されるDVIファイルは特定のDVIウェアに依存しないものになる。
+    ただし最近の{\LaTeX}カーネルはそれ自身がドライバ依存をもつ
+    ことに注意。}
 \item |dvi=|\Meta{ドライバ名}\Means
   エンジンがDVI出力の場合に限り、指定のドライバオプションを
   有効にする。
@@ -631,8 +633,8 @@
   「Pandocモード」(\ref{sec:Pandoc-mode}節参照)を指定する。
   以下の設定が行われる:
   \begin{itemize}
-  \item エンジンオプションが |autodetect-engine| に固定される。
-  \item 和文ドライバが |pandoc| に固定される。
+  \item エンジンオプションが |autodetect-engine| に\jemph{固定}される。
+  \item 和文ドライバが |pandoc| に\jemph{固定}される。
   \item ドライバオプションについて |dvi=dvipdfmx| が既定になる
     (明示指定で上書可能)。
   \end{itemize}
@@ -652,7 +654,8 @@
   エンジンが |platex| か |uplatex| の時は |ja| の
   既定値は |standard| である。
   それ以外の場合は、一応 |minimal| となるが、
-  2.0版以降ではこの場合の |ja| の省略は\jemph{非推奨}である。
+  2.0版以降ではこの場合の |ja| の省略は\jemph{非推奨}であり、
+  3.0版で\jemph{禁止}される予定である。
 \item |jafont=|\Meta{名前}\Means
   「和文フォントプリセット指定」の名前を設定する。
   既定値は空。
@@ -670,8 +673,15 @@
   「和文ドライバパラメタ」の値を設定する。
   既定値は空。
   \Note 詳細は\ref{sec:Ja-Driver-Param}節を参照。
+  \Note |japaram| を複数回指定した場合は各々の指定内容
+  (キーと値の組の列)が累積する。
   \Note |jafont| と |japaram| の値がどのように解釈されるかは
   和文ドライバの仕様次第である。
+\item |ja:|\Meta{キー}|=|\Meta{値}\Means
+  和文ドライバパラメタ設定の代替書式で、
+  |japaram={|\Meta{キー}|=|\Meta{値}|}|
+  と書いたのと同値である。
+  \Note Pandocで波括弧の扱いが面倒になる場合があることへの対策。
 \item |base=|\Meta{長さ\xast}\Means
   基底フォントサイズ(|\normalsize| のサイズ)を指定する。
   JSクラスの |10pt|、|11pt| 等と同じ役割で、任意の長さ値を指定できる。
@@ -719,7 +729,7 @@
       |screen|
     \end{quote}
     \Note |bNpaper| は\Pkg{geometry}ではISO~B判を意味するが、
-    JSクラスとの互換のため、BXJSでの意味は |iso-bsize| の有無に従う
+    BXJSでの意味は |iso-bsize| の有無に従う
     (つまり既定ではJIS~B判)。
     |bNj| は\Pkg{geometry}と同じく常にJIS~B判である。
   \item 末尾が |~paper| でない名前のオプションについて、
@@ -1554,6 +1564,9 @@
     つまり |chapterabstract| 環境と等価。
   \end{itemize}
 
+\item |\Seireki|/|\Wareki|\Means
+  |\西暦|/|\和暦| と等価な英字名の命令。
+
 \item |\jayear|\Means
   和暦表示(|\和暦|)が有効な時の |\today| のテキスト中の年号
   (「年」より前の部分、例えば「平成28」)
@@ -1615,7 +1628,7 @@
 \begin{itemize}
 \item |\jsZw|\Means
   和文の全角幅を表す長さ命令。
-  例えば |2\jsZw| が pLaTeX の |2zw| に相当する。
+  例えば |2\jsZw| が{\pLaTeX}の |2zw| に相当する。
 \item |\zw|\Means
   |\jsZw| の別名。
   \footnote{\Pkg{\LuaTeX-ja}では「実際の全角幅」を表す

Modified: trunk/Master/texmf-dist/doc/latex/bxjscls/bxjscls.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/source/latex/bxjscls/bxjscls.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/bxjscls/bxjscls.dtx	2023-07-17 15:15:21 UTC (rev 67656)
+++ trunk/Master/texmf-dist/source/latex/bxjscls/bxjscls.dtx	2023-07-17 20:39:57 UTC (rev 67657)
@@ -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 at test@engine\kanjiskip{\let\jsEngine=j}
@@ -408,29 +422,14 @@
 %    \end{macrocode}
 % \end{macro}
 %
-% 非サポートのエンジンの場合は強制終了させる。
-% \Note NTT j{\TeX}とOmega系。
-%    \begin{macrocode}
-\let\bxjs at tmpa\relax
-\ifx J\jsEngine \def\bxjs at tmpa{NTT-jTeX}\fi
-\ifx O\jsEngine \def\bxjs at tmpa{Omega}\fi
-\ifx\bxjs at tmpa\relax \expandafter\@gobble
-\else
-  \ClassError\bxjs at clsname
-   {The engine in use (\bxjs at 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 at if@format at at@least}
+% |\bxjs at if@format at at@least{|\Meta{日付}|}{|\Meta
+% {真}|}{|\Meta{偽}|}|\Means
+% {\LaTeX}カーネルの版が指定の日付以降であるか。
+%    \begin{macrocode}
+\def\bxjs at if@format at at@least{\@ifl at t@r\fmtversion}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\bxjs at if@package at at@least}
+% |\bxjs at if@package at at@least{|\Meta{名前}|}{|\Meta{日付}|}{|\Meta
+% {真}|}{|\Meta{偽}|}|\Means
+% ぞの名前のパッケージの指定の日付以降の版が読み込まれているか。
+% そもそも読み込まれていない場合は偽になる。
+% \Note 2017/04/15版より前のカーネルの |\@ifpackagelater| は
+% 非読込の場合に実行するとエラーになることに注意。
+%    \begin{macrocode}
+\bxjs at if@format at at@least{2017/04/15}{%
+  \let\bxjs at if@package at at@least\@ifpackagelater
+}{%else
+  \def\bxjs at if@package at 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 at 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 at explIII}
 % 〔スイッチ〕
 % expl3がカーネルに組み込まれているか。
+% \Note 2020/02/02版以降のカーネルには組み込まれている。
 %    \begin{macrocode}
 \newif\ifbxjs at explIII
-\@ifl at t@r\fmtversion{2020/02/02}{\bxjs at explIIItrue}{}
+\bxjs at if@format at at@least{2020/02/02}{\bxjs at explIIItrue}{}
 %    \end{macrocode}
 % \end{macro}
 %
+% \begin{macro}{\ifbxjs at brace@safe}
+% 〔スイッチ〕
+% オプション中の波括弧の使用にカーネルが対応しているか。
+% \Note 正確に言うと、2021/06/01版以降のカーネルでは
+% 「未使用オプション判定」
+% の処理で |=| 以降のトークン列
+% (key-valueのvalueの部分)
+% を無視するので、この部分には波括弧を含めることができる。
+% \Note |\@removeelement| と |\in@| の実装は変更されておらず、
+% これらのマクロの第1引数には波括弧を含むトークン列を指定できない。
+%    \begin{macrocode}
+\newif\ifbxjs at brace@safe
+\bxjs at if@format at at@least{2021/06/01}{\bxjs at brace@safetrue}{}
+%    \end{macrocode}
+% \end{macro}
+%
 % \begin{macro}{\ifbxjs at 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 at old@hook at system}
 % 〔スイッチ〕
-% {\LaTeX}の新しいフック管理システムが未導入であるか。
+% {\LaTeX}の新しいフック管理システムが\Strong{未導入}であるか。
 % \Note カーネルの2020/10/01版で導入された。
 %    \begin{macrocode}
 \newif\ifbxjs at old@hook at system
-\@ifl at t@r\fmtversion{2020/10/01}{}{\bxjs at old@hook at systemtrue}
+\bxjs at if@format at at@least{2020/10/01}{}{\bxjs at old@hook at systemtrue}
 %    \end{macrocode}
 % \end{macro}
 %
@@ -644,7 +698,7 @@
 % 例えば、|\bxjs at CGHN{package/PKG/after}| は旧仕様の{\LaTeX}では
 % “|package/after/PKG|”に展開される。
 %    \begin{macrocode}
-\@ifl at t@r\fmtversion{2021/11/15}{%
+\bxjs at if@format at at@least{2021/11/15}{%
   \def\bxjs at CGHN#1{#1}%
 }{%else
   \def\bxjs at CGHN#1{\bxjs at CGHN@a#1//}%
@@ -664,6 +718,8 @@
 %    \end{macrocode}
 % \end{macro}
 %
+% \TODO[2.9] |\bxjs at expanded| を定義する。
+%
 % \begin{macro}{\bxjs at cslet}
 % |\bxjs at cslet{|\Meta{名前1}|}\制御綴|\Means
 %    \begin{macrocode}
@@ -683,7 +739,7 @@
 % \begin{macro}{\bxjs at catopt}
 % |\bxjs at catopt{|\Meta{文字列1}|}{|\Meta{文字列2}|}|\Means
 % 2つの文字列を |,| で繋いだ文字列。
-% ただし片方が空の場合は |,| を入れない。
+% ただし少なくとも一方が空の場合は |,| を入れない。
 % 完全展開可能。
 %    \begin{macrocode}
 \def\bxjs at catopt#1#2{%
@@ -830,6 +886,19 @@
 %    \end{macrocode}
 % \end{macro}
 %
+% \begin{macro}{\bxjs at endpreamble@hook}
+% BXJSクラス用の |\AtEndPreamble| フック。
+% \Note |\AtEndPreamble| が利用できない場合は無効になる。
+%    \begin{macrocode}
+\@onlypreamble\bxjs at endpreamble@hook
+\let\bxjs at endpreamble@hook\@empty
+\AtEndOfClass{%
+  \ifx\AtEndPreamble\@undefined\else
+    \AtEndPreamble{\bxjs at endpreamble@hook}%
+  \fi}
+%    \end{macrocode}
+% \end{macro}
+%
 % 一時的な手続き用の制御綴。
 %    \begin{macrocode}
 \@onlypreamble\bxjs at tmpdo
@@ -1456,7 +1525,7 @@
 %
 % \paragraph{複合設定オプション \ZRX}
 % \mbox{}
-% \TODO |\bxjs at invscale| を書く場所を決める。
+% \TODO[3.x] |\bxjs at invscale| を書く場所を決める。
 % (JSクラスと同じにはできなそう。)
 % \begin{macro}{\bxjs at invscale}
 % |\bxjs at invscale| は{\TeX}における「長さのスケール」の逆関数を求めるもの。
@@ -1655,7 +1724,7 @@
 %
 % \paragraph{その他のBXJS独自オプション \ZRX}
 %
-% \TODO 互換用オプションを分離する(2.0版で?)。
+% \TODO[3.x] 互換用オプションを分離する。
 %
 % \begin{macro}{\bxjs at depre@opt}
 % \begin{macro}{\bxjs at depre@opt at do}
@@ -1716,32 +1785,92 @@
   \bxjs at oldfontcommandstrue}
 %    \end{macrocode}
 %
-% \paragraph{JSクラスのオプションで無効なもの \ZRX}
-% |ltjsclasses| に倣って警告を出す。
+% \paragraph{無効および廃止されたオプション \ZRX}
 %
+% \begin{macro}{\bxjs at register@badopt}
+% badoptマクロを登録する。
+% 文書本体開始時に、当該オプションが「未使用のグローバルオプション」に
+% なっている場合にbadoptマクロが実行される。
 %    \begin{macrocode}
-\DeclareOption{winjis}{%
-  \ClassWarningNoLine\bxjs at clsname
-   {This class does not support `winjis' option}%
-}
-\DeclareOption{mingoth}{%
-  \ClassWarningNoLine\bxjs at clsname
-   {This class does not support `mingoth' option}%
-}
-\DeclareOption{jis}{%
-  \ClassWarningNoLine\bxjs at clsname
-   {This class does not support `jis' option}%
-}
+\ifbxjs at brace@safe
+  \@onlypreamble\bxjs at register@badopt
+  \def\bxjs at register@badopt#1{%
+    \expandafter\@onlypreamble\csname bxjs at badopt/#1\endcsname
+    \@namedef{bxjs at badopt/#1}}
+  \g at addto@macro\bxjs at begin@document at hook{%
+    \@for\bxjs at tmpa:=\@unusedoptionlist\do{%
+      \@nameuse{bxjs at badopt/\bxjs at tmpa}}}
+\fi
 %    \end{macrocode}
+% \end{macro}
 %
+% \begin{macro}{\bxjs at invalid@opt}
+% 無効オプションを宣言する。
+% そのオプションが指定された場合、それがグローバルオプションとして
+% 他のパッケージによって使用されていなければ、
+% 文書本体開始時にエラーを出す。
+% \Note 古いカーネルでは未使用検査ができないため、その場で警告を出す。
+%    \begin{macrocode}
+\@onlypreamble\bxjs at invalid@opt
+\ifbxjs at brace@safe
+  \def\bxjs at invalid@opt#1#2{%
+    \bxjs at register@badopt{#1}{\ClassError\bxjs at clsname{#2}\@ehc}}
+\else
+  \def\bxjs at invalid@opt#1#2{%
+    \DeclareOption{#1}{\ClassWarningNoLine\bxjs at clsname{#2}}}
+\fi
+%    \end{macrocode}
+% \end{macro}
+%
+% JSクラスにはあるがBXJSクラスにはないオプションを
+% 「無効オプション」として宣言する。
+% \Note |ltjsclasses| クラスでも警告を出している。
+%    \begin{macrocode}
+\bxjs at invalid@opt{winjis}{%
+  This class does not support 'winjis' option}
+\bxjs at invalid@opt{mingoth}{%
+  This class does not support 'mingoth' option}
+\bxjs at invalid@opt{jis}{%
+  This class does not support 'jis' option}
+\if j\jsEngine\else
+\bxjs at invalid@opt{tombo}{%
+  Option 'tombo' can be used only on (u)pLaTeX}
+\bxjs at invalid@opt{tombow}{%
+  Option 'tombow' can be used only on (u)pLaTeX}
+\bxjs at invalid@opt{mentuke}{%
+  Option 'mentuke' can be used only on (u)pLaTeX}
+\fi
+%    \end{macrocode}
+%
 % \paragraph{keyval型のオプション \ZRX}
 %
 % その他のオプションは |keyval| の機構を用いて処理する。
 %    \begin{macrocode}
 \DeclareOption*{%
-  \def\bxjs at next{\bxjs at safe@setkeys{bxjs}}%
-  \expandafter\bxjs at next\expandafter{\CurrentOption}}
+  \bxjs at check@ja at prefix \ifx\bxjs at next\relax
+  \def\bxjs at next{\bxjs at cls@setkeys{bxjs}}%
+  \expandafter\bxjs at next\expandafter{\CurrentOption}%
+  \else
 %    \end{macrocode}
+% オプションが |ja:XXX| という形式である場合は |japaram={XXX}| に
+% 振り替える。
+%    \begin{macrocode}
+    \edef\bxjs at next{%
+      \noexpand\setkeys{bxjs}{japaram={\bxjs at next}}%
+    }\bxjs at next
+  \fi}
+%    \end{macrocode}
+% \begin{macro}{\bxjs at check@ja at prefix}
+% オプション文字列が |ja:| で始まるかを検査し、そうである場合は
+% 後続の文字列を |\bxjs at next| に代入する。
+%    \begin{macrocode}
+\def\bxjs at check@ja at prefix{%
+  \let\bxjs at next\relax
+  \expandafter\bxjs at check@ja at prefix@a\CurrentOption\@nil ja:\@nil\@nnil}
+\def\bxjs at check@ja at prefix@a#1ja:#2\@nil#3\@nnil{%
+  \ifx\@nil#1\@nil \def\bxjs at next{#2}\fi}
+%    \end{macrocode}
+% \end{macro}
 %
 % \begin{macro}{\bxjs at safe@setkeys}
 % 未知のキーに対してエラー無しで無視する |\setkeys|。
@@ -1754,6 +1883,21 @@
 %    \end{macrocode}
 % \end{macro}
 %
+% \begin{macro}{\bxjs at cls@setkeys}
+% 未知のキーに対して(エラー無しで)|\OptionNotUsed| を行う |\setkeys|。
+% |\DeclareOption*| 中で用いる。
+%    \begin{macrocode}
+\def\bxjs at cls@setkeys#1#2{%
+  \let\bxjs at save@KV at errx\KV at errx
+  \def\KV at errx##1{\OptionNotUsed}%
+  \setkeys{#1}{#2}%
+  \let\KV at errx\bxjs at save@KV at errx}
+\ifbxjs at brace@safe\else
+  \let\bxjs at cls@setkeys\bxjs at safe@setkeys
+\fi
+%    \end{macrocode}
+% \end{macro}
+%
 % \begin{macro}{\bxjs at declare@enum at option}
 % |\bxjs at declare@enum at 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 at depre@opt at 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 at key{bxjs}{jadriver}{%
@@ -2153,7 +2297,7 @@
 %
 % \begin{macro}{\ifbxjs at usezw}
 % 〔スイッチ〕 |use-zw| の指定値。
-% \TODO |zw|/|nozw| は3.0版で廃止の予定。
+% \TODO[3.0] |zw|/|nozw| は廃止の予定。
 %    \begin{macrocode}
 \bxjs at declare@bool at option{use-zw}{usezw}{true}
 \DeclareOption{nozw}{\bxjs at depre@opt at do{nozw}{use-zw=false}}
@@ -2163,7 +2307,7 @@
 %
 % \begin{macro}{\ifbxjs at disguise@js}
 % 〔スイッチ〕 |disguise-js| の指定値。
-% \TODO |js|/|nojs| は3.0版で廃止の予定。
+% \TODO[3.0] |js|/|nojs| は廃止の予定。
 %    \begin{macrocode}
 \bxjs at declare@bool at option{disguise-js}{disguise at js}{true}
 \DeclareOption{nojs}{\bxjs at depre@opt at do{nojs}{disguise-js=false}}
@@ -2201,13 +2345,17 @@
 % \paragraph{オプションの実行}
 % \mbox{}
 % \begin{ZRnote}
-% {\LaTeX}の実装では、クラスやパッケージのオプションのトークン列の
-% 中に |{ }| が含まれると正常に処理ができない。
-% これに対処する為 |\@removeelement| の実装に少し手を加える
-% (仕様は変わらない)。
-% \Note クラスに |\DeclareOption*| がある場合は |\@unusedoptions|
+% {\LaTeX}カーネルの2021/06/01より前の版では、
+% クラスやパッケージのオプションのトークン列の中に波括弧が含まれると
+% 正常に処理ができない。
+% これに対処する為 |\@removeelement| の実装に少し手を加えて
+% 「第2引数が空の場合の処理をショートカットする」
+% ことにより、この場合に波括弧を含む第1引数が通るようにする。
+% \Note クラスに |\DeclareOption*| があり |\OptionNotUsed| を使って
+% いない場合は |\@unusedoptions|
 % は常に空のままであることを利用している。
 %    \begin{macrocode}
+\ifbxjs at brace@safe\else
 \let\bxjs at org@removeelement\@removeelement
 \def\@removeelement#1#2#3{%
   \def\reserved at a{#2}%
@@ -2214,6 +2362,7 @@
   \ifx\reserved at a\@empty \let#3\@empty
   \else \bxjs at 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 at tmpdo{%
   \def\bxjs at tmpa{\@gobble}%
@@ -2271,6 +2422,7 @@
 %
 % |papersize|、|10pt|、|noscale| の各オプションは他のパッケージと衝突を
 % 起こす可能性があるため、グローバルオプションから外す。
+% \TODO[3.0] |noscale| オプションは廃止予定。
 %
 %    \begin{macrocode}
 \@expandtwoargs\@removeelement
@@ -2722,13 +2874,7 @@
 % 以降のレイアウト指定ではこちらを使います。
 %
 % \begin{ZRnote}
-% |\mag| する場合(現状はこれが既定)にコードの変更を低減するために、
-% 以下では必要に応じて、|\jsc at mpt| を |\p@?| と書く。
-% その上で、|\mag| する場合は |?| を無視して |\p@| と解釈させ、
-% |\mag| しない場合は |?| を英字扱いにして |\p@?| という制御綴を
-% |\jsc at mpt| と同値にする。
-% \Note (多分2.0版あたりで)JSクラスに合わせるため |\p@?| 表記を
-% 止める予定。
+% \Note 2.9版において |\p@?| 表記を廃止。
 %    \begin{macrocode}
 \newdimen\jsc at mpt
 \newdimen\jsc at mmm
@@ -2735,14 +2881,10 @@
 \ifjsc at mag
   \jsc at mpt=1\p@
   \jsc at mmm=1mm
-  \catcode`\?=9 % \p@? read as \p@
 \else
   \jsc at mpt=\jsc at magscale\p@
   \jsc at mmm=\jsc at magscale mm
-  \catcode`\?=11 \let\p@?\jsc at mpt
 \fi
-\chardef\bxjs at qmcc=\catcode`\?\relax
-\g at addto@macro\bxjs at pre@jadriver at hook{\catcode`\?=12\relax}
 %    \end{macrocode}
 %
 % ここで{p\TeX}のzwに相当する単位として用いる長さ変数 |\jsZw| を作成する。
@@ -3505,7 +3647,7 @@
 % クラス読込中に複数回実行する。
 % 前回の実行直後から |\set at fontsize| が更新されている場合にのみ
 % 実際にパッチを当てる。
-% \TODO 新しい{\LaTeX}カーネルでは |selectfont| フックを利用したい。
+% \TODO[3.0] 新しい{\LaTeX}カーネルで |selectfont| フックを利用する。
 %    \begin{macrocode}
 %\let\bxjs at prev@set at fontsize\@undefined
 \@onlypreamble\bxjs at patch@set at fontsize
@@ -3526,7 +3668,7 @@
 % この場とパッケージ末尾で作動させる。
 %    \begin{macrocode}
 \bxjs at patch@set at fontsize
-\AtEndOfPackage{\bxjs at patch@set at fontsize}
+\AtEndOfClass{\bxjs at patch@set at 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 at mpt \@plus3\jsc at mpt \@minus4\jsc at mpt
+  \abovedisplayshortskip \z@ \@plus3\jsc at mpt
+  \belowdisplayskip 9\jsc at mpt \@plus3\jsc at mpt \@minus4\jsc at mpt
   \belowdisplayshortskip \belowdisplayskip
 %    \end{macrocode}
 %
@@ -3780,8 +3922,8 @@
 %<!kiyou>    \jsc at setfontsize\small\@ixpt{13}%
 %<kiyou>    \jsc at setfontsize\small{8.8888}{13.2418}%
   }%
-  \abovedisplayskip 9\p@? \@plus3\p@? \@minus4\p@?
-  \abovedisplayshortskip  \z@ \@plus3\p@?
+  \abovedisplayskip 9\jsc at mpt \@plus3\jsc at mpt \@minus4\jsc at mpt
+  \abovedisplayshortskip  \z@ \@plus3\jsc at mpt
   \belowdisplayskip \abovedisplayskip
   \belowdisplayshortskip \belowdisplayskip
   \def\@listi{\leftmargin\leftmargini
@@ -3806,8 +3948,8 @@
 %<!kiyou>    \jsc at setfontsize\footnotesize\@viiipt{11}%
 %<kiyou>    \jsc at setfontsize\footnotesize{8.8888}{13.2418}%
   }%
-  \abovedisplayskip 6\p@? \@plus2\p@? \@minus3\p@?
-  \abovedisplayshortskip  \z@ \@plus2\p@?
+  \abovedisplayskip 6\jsc at mpt \@plus2\jsc at mpt \@minus3\jsc at mpt
+  \abovedisplayshortskip  \z@ \@plus2\jsc at mpt
   \belowdisplayskip \abovedisplayskip
   \belowdisplayshortskip \belowdisplayskip
   \def\@listi{\leftmargin\leftmargini
@@ -4029,7 +4171,7 @@
 \ifjsc at mag
 \mag=\bxjs at param@mag
 \fi
-\setlength{\topskip}{10\p@?}
+\setlength{\topskip}{10\jsc at mpt}
 %    \end{macrocode}
 %
 % |\jsSetQHLength| のための和文単位の定義。
@@ -4833,7 +4975,7 @@
 % なので、実際の設定値を直接使うことにする。
 % \end{ZRnote}
 %    \begin{macrocode}
-\footnotesep=11\p@? \footnotesep=0.7\footnotesep
+\footnotesep=11\jsc at 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 at mpt \@plus 5\jsc at mpt \@minus 2\jsc at 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 at mpt \@plus 2\jsc at mpt \@minus 2\jsc at mpt}
+\setlength\textfloatsep{20\jsc at mpt \@plus 2\jsc at mpt \@minus 4\jsc at mpt}
+\setlength\intextsep   {12\jsc at mpt \@plus 2\jsc at mpt \@minus 2\jsc at 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 at mpt \@plus 2\jsc at mpt \@minus 2\jsc at mpt}
+\setlength\dbltextfloatsep{20\jsc at mpt \@plus 2\jsc at mpt \@minus 4\jsc at 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 at mpt \@plus 1fil}
+\setlength\@fpsep{8\jsc at mpt \@plus 2fil}
+\setlength\@fpbot{0\jsc at 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 at mpt \@plus 1fil}
+\setlength\@dblfpsep{8\jsc at mpt \@plus 2fil}
+\setlength\@dblfpbot{0\jsc at 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 at mpt depth2\jsc at mpt\relax}\par
           \jsc at smallskip
           \@title
           \ifx\bxjs at subtitle\@undefined\else
@@ -5481,16 +5623,16 @@
             {\small \bxjs at subtitle\par}
           \fi
           \jsc at smallskip
-          {\maybeblue\hrule height0\p@? depth2\p@?\relax}\par
+          {\maybeblue\hrule height0\jsc at mpt depth2\jsc at mpt\relax}\par
           \vfill
           {\small \@author}%
         \end{center}
       \else
-      \vskip 60\p@?
+      \vskip 60\jsc at mpt
       \begin{center}%
         {\LARGE \@title \par}%
         \ifx\bxjs at subtitle\@undefined\else
-          \vskip5\p@?
+          \vskip5\jsc at mpt
           {\normalsize \bxjs at subtitle\par}
         \fi
         \vskip 3em%
@@ -5569,7 +5711,7 @@
       \let\footnote\thanks
       {\LARGE \@title \par}%
       \ifx\bxjs at subtitle\@undefined\else
-        \vskip3\p@?
+        \vskip3\jsc at mpt
         {\normalsize \bxjs at subtitle\par}
       \fi
       \vskip 1.5em
@@ -6190,7 +6332,7 @@
     \normalfont
     \ifnum \c at secnumdepth >-2\relax
       \huge\headfont \prepartname\thepart\postpartname
-      \par\vskip20\p@?
+      \par\vskip20\jsc at mpt
     \fi
     \Huge \headfont #2\par}%
   \@endpart}
@@ -7081,7 +7223,7 @@
 % |array| 環境の列間には |\arraycolsep| の2倍の幅の空きが入ります。
 %
 %    \begin{macrocode}
-\setlength\arraycolsep{5\p@?}
+\setlength\arraycolsep{5\jsc at mpt}
 %    \end{macrocode}
 % \end{macro}
 %
@@ -7090,7 +7232,7 @@
 % |tabular| 環境の列間には |\tabcolsep| の2倍の幅の空きが入ります。
 %
 %    \begin{macrocode}
-\setlength\tabcolsep{6\p@?}
+\setlength\tabcolsep{6\jsc at mpt}
 %    \end{macrocode}
 % \end{macro}
 %
@@ -7147,7 +7289,7 @@
 % |\fbox|,|\framebox| の罫線の幅です。
 %
 %    \begin{macrocode}
-\setlength\fboxsep{3\p@?}
+\setlength\fboxsep{3\jsc at 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 at mpt} % 元: 10\p@
+\setlength\belowcaptionskip{5\jsc at mpt} % 元: 0\p@
 %    \end{macrocode}
 % \end{macro}
 % \end{macro}
@@ -7711,7 +7853,7 @@
   \ifnum \c at tocdepth >-2\relax
 %<!book&!report>    \addpenalty\@secpenalty
 %<book|report>    \addpenalty{-\@highpenalty}%
-    \addvspace{2.25em \@plus\p@?}%
+    \addvspace{2.25em \@plus\jsc at mpt}%
     \begingroup
       \parindent \z@
 %     \@pnumwidth should be \@tocrmarg
@@ -7742,7 +7884,7 @@
 \newcommand*{\l at chapter}[2]{%
   \ifnum \c at tocdepth >\m at ne
     \addpenalty{-\@highpenalty}%
-    \addvspace{1.0em \@plus\p@?}
+    \addvspace{1.0em \@plus\jsc at mpt}
 %   \vskip 1.0em \@plus\p@   % book.clsでは↑がこうなっている
     \begingroup
       \parindent\z@
@@ -7770,7 +7912,7 @@
 \newcommand*{\l at section}[2]{%
   \ifnum \c at tocdepth >\z@
     \addpenalty{\@secpenalty}%
-    \addvspace{1.0em \@plus\p@?}%
+    \addvspace{1.0em \@plus\jsc at mpt}%
     \begingroup
       \parindent\z@
 %     \rightskip\@pnumwidth
@@ -7897,7 +8039,7 @@
 \def\jsTocLine{\leaders\hbox{%
   $\m at th \mkern \@dotsep mu\hbox{.}\mkern \@dotsep mu$}\hfill}
 \def\@dottedtocline#1#2#3#4#5{\ifnum #1>\c at tocdepth \else
-  \vskip \z@ \@plus.2\p@?
+  \vskip \z@ \@plus.2\jsc at 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 at 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 at mpt \@plus5\jsc at mpt \@minus3\jsc at 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 at mpt \kern-.4\p@
   \hrule width .4\columnwidth
-  \kern 2.6\p@?}
+  \kern 2.6\jsc at mpt}
 %    \end{macrocode}
 % \end{macro}
 %
@@ -8608,7 +8750,7 @@
 % \end{ZRnote}
 %    \begin{macrocode}
 \ifnum\bxjs at everyparhook=\bxjs at everyparhook@@none\else
-\AtEndOfPackage{%
+\AtEndOfClass{%
 \def\@gnewline #1{%
   \ifvmode
     \@nolnerr
@@ -9134,11 +9276,14 @@
 % 選択の余地がないため、このドライバにおいて、
 % 「JSクラスと同等の指定」を完成させるためのコードを記述する。
 %
-% \TODO 本来は「minimalにすら依存しない」はずのものがminimalの
-% コード中に書かれているような気がする……。
+% \TODO minimalのコード中に何を置くべきかについて検討する。
+% 現状では、本来は「minimalにすら依存しない」
+% はずのものがminimal中に置かれている。
+% \TODO[3.0] とりあえず、新しい補助ファイルを導入する。
+% 文書クラスや和文ドライバの種別に関わらず必ず読み込まれるもの。
 %
 %^^A----------------
-% \subsection{補助マクロ}
+% \subsection{準備}
 %
 %    \begin{macrocode}
 %<*minimal>
@@ -9145,6 +9290,29 @@
 %% このファイルは日本語文字を含みます
 %    \end{macrocode}
 %
+% \paragraph{環境検査}
+%
+% minimal和文ドライバの処理系バージョン要件はクラス本体と同じとする。
+% 
+% ただし「公式にはサポート外」のエンジンが使われている場合は
+% 強制終了させる。
+% \Note NTT {\JTeX}とOmega系。
+%    \begin{macrocode}
+\let\bxjs at tmpa\relax
+\ifx J\jsEngine \def\bxjs at tmpa{NTT-jTeX}\fi
+\ifx O\jsEngine \def\bxjs at tmpa{Omega}\fi
+\ifx\bxjs at tmpa\relax \expandafter\@gobble
+\else
+  \ClassError\bxjs at clsname
+   {The engine in use (\bxjs at 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 at t@r\fmtversion{2020/10/01}
@@ -9652,7 +9820,7 @@
 %
 % \begin{macro}{\bxjs at do@simplejasetup}
 % |simplejasetup| オプションの実際の処理内容。
-% \TODO バージョン要件を見直して暫定措置を解除する。
+% \TODO[3.0] バージョン要件を見直して暫定措置を解除する。
 %    \begin{macrocode}
 \@onlypreamble\bxjs at do@simplejasetup
 \def\bxjs at 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 at 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 at key{bxjsStd}{font}{%
-  \edef\bxjs at jp@font{#1}}
+  \edef\bxjs at jp@font{\bxjs at catopt\bxjs at jp@font{#1}}}
 %    \end{macrocode}
 %
 % \begin{macro}{\ifbxjs at jp@strong at cmd}
@@ -10695,7 +10898,7 @@
 % |\bxjs at plautopatch@new| は「|pxjahyper| の自動読込に対応した
 % 版の |plautopatch| が読み込まれているか」のフラグ。
 %    \begin{macrocode}
-  \@ifpackagelater{plautopatch}{2020/05/25}{% v0.9g
+  \bxjs at if@package at at@least{plautopatch}{2020/05/25}{% v0.9g
     \let\bxjs at plautopatch@new=t}{}
 %    \end{macrocode}
 % 「|unicode| を有効にできるか」を判定する。
@@ -10732,7 +10935,7 @@
 % 「{\pLaTeX}上の |unicode| 対応をもつほど新しい版(1.3版以降)」
 % であるかを判定する方法はない。
 % しかし、新しい{\LaTeX}システムで |unicode| を無効にするのは
-% 避けたいので、{\LaTeX}カーネルが2023-06-01以降である場合に
+% 避けたいので、{\LaTeX}カーネルが2023/06/01版以降である場合に
 % |pxjahyper| も十分に新しいと推定することにする。
 % すなわち「|pxjahyper| が読み込まれるはず」かつ
 % 「{\LaTeX}がカーネルが新しい」かを判定する。
@@ -10739,7 +10942,7 @@
 %    \begin{macrocode}
       \let\bxjs at avail@hy at unicode=f
       \ifx t\bxjs at plautopatch@new
-        \@ifl at t@r\fmtversion{2023/06/01}{\let\bxjs at avail@hy at unicode=t}{}
+        \bxjs at if@format at at@least{2023/06/01}{\let\bxjs at avail@hy at 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 at 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,6 +11693,20 @@
 \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}
@@ -11491,7 +11713,6 @@
 %    \end{macrocode}
 %
 % {\eTeX}ではない場合に警告を出す。
-% \Note 近い将来に{\eTeX}拡張を必須にする予定。
 %    \begin{macrocode}
 \ifjsWitheTeX\else
   \ClassWarningNoLine\bxjs at clsname
@@ -11519,22 +11740,11 @@
 %    \end{macrocode}
 % \end{macro}
 %
-% \begin{macro}{\bxjs at endpreamble@hook}
-% |etoolbox| の |\AtEndPreamble| で実行されるBXJSクラス用のフック。
-% \Note {\eTeX}以外では無効になる。
-% (将来pandocの外に出す可能性あり。)
+% その他の依存パッケージを読み込む。
 %    \begin{macrocode}
-\@onlypreamble\bxjs at endpreamble@hook
-\let\bxjs at 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 at 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 at fix@hyperref at unicode{false}
@@ -12297,6 +12510,10 @@
 %
 % 古いやつをどうにかするためのムニャムニャ。
 %
+% \Note すなわちBXJSクラスにおいては
+% 「新しいシステムにおいてはbxjscompatがなくても正常に動作する」
+% 状態を保つべき。
+%
 %^^A----------------
 % \subsection{準備}
 %
@@ -13108,7 +13325,7 @@
 %    \begin{macrocode}
 %<*ancpandoc>
 %% このファイルは日本語文字を含みます.
-\def\bxjsp at pkgname{bxjscjkcat}
+\def\bxjsp at pkgname{bxjspandoc}
 %    \end{macrocode}
 %
 % \begin{macro}{\bxjsp at engine}

Modified: trunk/Master/texmf-dist/tex/latex/bxjscls/bxjsarticle.cls
===================================================================
--- trunk/Master/texmf-dist/tex/latex/bxjscls/bxjsarticle.cls	2023-07-17 15:15:21 UTC (rev 67656)
+++ trunk/Master/texmf-dist/tex/latex/bxjscls/bxjsarticle.cls	2023-07-17 20:39:57 UTC (rev 67657)
@@ -22,7 +22,7 @@
 %% in the same archive or directory.)
 \NeedsTeXFormat{LaTeX2e}
 \ProvidesClass{bxjsarticle}
-  [2023/07/01 v2.8b BXJS document classes]
+  [2023/07/17 v2.9  BXJS document classes]
 %% このファイルは日本語文字を含みます.
 \def\bxjs at clsname{bxjsarticle}
 \newif\ifjsc at needsp@tch
@@ -43,16 +43,6 @@
 \bxjs at test@engine\XeTeXversion{\let\jsEngine=x}
 \bxjs at test@engine\pdftexversion{\let\jsEngine=p}
 \bxjs at test@engine\luatexversion{\let\jsEngine=l}
-\let\bxjs at tmpa\relax
-\ifx J\jsEngine \def\bxjs at tmpa{NTT-jTeX}\fi
-\ifx O\jsEngine \def\bxjs at tmpa{Omega}\fi
-\ifx\bxjs at tmpa\relax \expandafter\@gobble
-\else
-  \ClassError\bxjs at clsname
-   {The engine in use (\bxjs at tmpa) is not supported}
-   {It's a fatal error. I'll quit right now.}
-  \expandafter\@firstofone
-\fi{\endinput\@@end}
 \@tempswatrue
 \if x\jsEngine
   \ifdim\the\XeTeXversion\XeTeXrevision\p@<0.997\p@
@@ -75,6 +65,12 @@
   \expandafter\@firstofone
 \else \expandafter\@gobble
 \fi{\typeout{Farewell!}\endinput\@@end}
+\def\bxjs at if@format at at@least{\@ifl at t@r\fmtversion}
+\bxjs at if@format at at@least{2017/04/15}{%
+  \let\bxjs at if@package at at@least\@ifpackagelater
+}{%else
+  \def\bxjs at if@package at at@least#1#2{%
+    \@ifpackageloaded{#1}{\@ifpackagelater{#1}{#2}}{\@secondoftwo}}}
 \newif\ifjsWithupTeX
 \ifx\ucs\@undefined\else \ifnum\ucs"3000="3000
   \jsWithupTeXtrue
@@ -90,7 +86,9 @@
   \ifx\outputmode\@undefined\else\the\outputmode\fi
   >0 true\else false\fi}
 \newif\ifbxjs at explIII
-\@ifl at t@r\fmtversion{2020/02/02}{\bxjs at explIIItrue}{}
+\bxjs at if@format at at@least{2020/02/02}{\bxjs at explIIItrue}{}
+\newif\ifbxjs at brace@safe
+\bxjs at if@format at at@least{2021/06/01}{\bxjs at brace@safetrue}{}
 \newif\ifbxjs at TUenc
 \def\bxjs at tmpa{TU}\edef\bxjs at tmpb{\f at encoding}
 \ifx\bxjs at tmpa\bxjs at tmpb
@@ -97,7 +95,7 @@
   \bxjs at TUenctrue
 \fi
 \newif\ifbxjs at old@hook at system
-\@ifl at t@r\fmtversion{2020/10/01}{}{\bxjs at old@hook at systemtrue}
+\bxjs at if@format at at@least{2020/10/01}{}{\bxjs at old@hook at systemtrue}
 \RequirePackage{calc}
 \RequirePackage{keyval}
 \IfFileExists{iftex.sty}{%
@@ -124,7 +122,7 @@
 \else
   \def\bxjs at robust@def{\DeclareRobustCommand*}
 \fi
-\@ifl at t@r\fmtversion{2021/11/15}{%
+\bxjs at if@format at at@least{2021/11/15}{%
   \def\bxjs at CGHN#1{#1}%
 }{%else
   \def\bxjs at CGHN#1{\bxjs at CGHN@a#1//}%
@@ -201,6 +199,12 @@
 \let\bxjs at post@option at hook\@empty
 \@onlypreamble\bxjs at pre@jadriver at hook
 \let\bxjs at pre@jadriver at hook\@empty
+\@onlypreamble\bxjs at endpreamble@hook
+\let\bxjs at endpreamble@hook\@empty
+\AtEndOfClass{%
+  \ifx\AtEndPreamble\@undefined\else
+    \AtEndPreamble{\bxjs at endpreamble@hook}%
+  \fi}
 \@onlypreamble\bxjs at tmpdo
 \@onlypreamble\bxjs at tmpdo@a
 \@onlypreamble\bxjs at tmpdo@b
@@ -505,25 +509,63 @@
   \bxjs at oldfontcommandsfalse}
 \DeclareOption{oldfontcommands}{%
   \bxjs at oldfontcommandstrue}
-\DeclareOption{winjis}{%
-  \ClassWarningNoLine\bxjs at clsname
-   {This class does not support `winjis' option}%
-}
-\DeclareOption{mingoth}{%
-  \ClassWarningNoLine\bxjs at clsname
-   {This class does not support `mingoth' option}%
-}
-\DeclareOption{jis}{%
-  \ClassWarningNoLine\bxjs at clsname
-   {This class does not support `jis' option}%
-}
+\ifbxjs at brace@safe
+  \@onlypreamble\bxjs at register@badopt
+  \def\bxjs at register@badopt#1{%
+    \expandafter\@onlypreamble\csname bxjs at badopt/#1\endcsname
+    \@namedef{bxjs at badopt/#1}}
+  \g at addto@macro\bxjs at begin@document at hook{%
+    \@for\bxjs at tmpa:=\@unusedoptionlist\do{%
+      \@nameuse{bxjs at badopt/\bxjs at tmpa}}}
+\fi
+\@onlypreamble\bxjs at invalid@opt
+\ifbxjs at brace@safe
+  \def\bxjs at invalid@opt#1#2{%
+    \bxjs at register@badopt{#1}{\ClassError\bxjs at clsname{#2}\@ehc}}
+\else
+  \def\bxjs at invalid@opt#1#2{%
+    \DeclareOption{#1}{\ClassWarningNoLine\bxjs at clsname{#2}}}
+\fi
+\bxjs at invalid@opt{winjis}{%
+  This class does not support 'winjis' option}
+\bxjs at invalid@opt{mingoth}{%
+  This class does not support 'mingoth' option}
+\bxjs at invalid@opt{jis}{%
+  This class does not support 'jis' option}
+\if j\jsEngine\else
+\bxjs at invalid@opt{tombo}{%
+  Option 'tombo' can be used only on (u)pLaTeX}
+\bxjs at invalid@opt{tombow}{%
+  Option 'tombow' can be used only on (u)pLaTeX}
+\bxjs at invalid@opt{mentuke}{%
+  Option 'mentuke' can be used only on (u)pLaTeX}
+\fi
 \DeclareOption*{%
-  \def\bxjs at next{\bxjs at safe@setkeys{bxjs}}%
-  \expandafter\bxjs at next\expandafter{\CurrentOption}}
+  \bxjs at check@ja at prefix \ifx\bxjs at next\relax
+  \def\bxjs at next{\bxjs at cls@setkeys{bxjs}}%
+  \expandafter\bxjs at next\expandafter{\CurrentOption}%
+  \else
+    \edef\bxjs at next{%
+      \noexpand\setkeys{bxjs}{japaram={\bxjs at next}}%
+    }\bxjs at next
+  \fi}
+\def\bxjs at check@ja at prefix{%
+  \let\bxjs at next\relax
+  \expandafter\bxjs at check@ja at prefix@a\CurrentOption\@nil ja:\@nil\@nnil}
+\def\bxjs at check@ja at prefix@a#1ja:#2\@nil#3\@nnil{%
+  \ifx\@nil#1\@nil \def\bxjs at next{#2}\fi}
 \def\bxjs at safe@setkeys#1#2{%
   \let\bxjs at save@KV at errx\KV at errx \let\KV at errx\@gobble
   \setkeys{#1}{#2}%
   \let\KV at errx\bxjs at save@KV at errx}
+\def\bxjs at cls@setkeys#1#2{%
+  \let\bxjs at save@KV at errx\KV at errx
+  \def\KV at errx##1{\OptionNotUsed}%
+  \setkeys{#1}{#2}%
+  \let\KV at errx\bxjs at save@KV at errx}
+\ifbxjs at brace@safe\else
+  \let\bxjs at cls@setkeys\bxjs at safe@setkeys
+\fi
 \@onlypreamble\bxjs at declare@enum at option
 \def\bxjs at declare@enum at option#1#2#3{%
   \bxjs at csletcs{bxjs@#2}{bxjs@#2@@#3}%
@@ -667,6 +709,7 @@
 \bxjs at declare@bool at option{plautopatch}{plautopatch}{false}
 \g at addto@macro\bxjs at plautopatchtrue{\let\bxjs at plautopatch@given\@undefined}
 \g at addto@macro\bxjs at plautopatchfalse{\def\bxjs at plautopatch@given{false}}
+\ifbxjs at brace@safe\else
 \let\bxjs at org@removeelement\@removeelement
 \def\@removeelement#1#2#3{%
   \def\reserved at a{#2}%
@@ -673,6 +716,7 @@
   \ifx\reserved at a\@empty \let#3\@empty
   \else \bxjs at org@removeelement{#1}{#2}{#3}%
   \fi}
+\fi
 \ExecuteOptions{a4paper,oneside,onecolumn,notitlepage,final}
 \ProcessOptions\relax
 \bxjs at post@option at hook
@@ -899,14 +943,10 @@
 \ifjsc at mag
   \jsc at mpt=1\p@
   \jsc at mmm=1mm
-  \catcode`\?=9 % \p@? read as \p@
 \else
   \jsc at mpt=\jsc at magscale\p@
   \jsc at mmm=\jsc at magscale mm
-  \catcode`\?=11 \let\p@?\jsc at mpt
 \fi
-\chardef\bxjs at qmcc=\catcode`\?\relax
-\g at addto@macro\bxjs at pre@jadriver at hook{\catcode`\?=12\relax}
 \newdimen\jsZw
 \jsZw=10\jsc at mpt \jsZw=\jsScale\jsZw
 \ifbxjs at usezw
@@ -984,7 +1024,7 @@
     \let\bxjs at prev@set at fontsize\set at fontsize
   \fi}
 \bxjs at patch@set at fontsize
-\AtEndOfPackage{\bxjs at patch@set at fontsize}
+\AtEndOfClass{\bxjs at patch@set at fontsize}
 \newcommand*\jsFontSizeChanged{%
   \jsZw=\f at size\p@
   \jsZw=\jsScale \jsZw
@@ -1039,9 +1079,9 @@
   }{%else
     \jsc at setfontsize\normalsize\@xpt{\n at baseline}%
   }%
-  \abovedisplayskip 11\p@? \@plus3\p@? \@minus4\p@?
-  \abovedisplayshortskip \z@ \@plus3\p@?
-  \belowdisplayskip 9\p@? \@plus3\p@? \@minus4\p@?
+  \abovedisplayskip 11\jsc at mpt \@plus3\jsc at mpt \@minus4\jsc at mpt
+  \abovedisplayshortskip \z@ \@plus3\jsc at mpt
+  \belowdisplayskip 9\jsc at mpt \@plus3\jsc at mpt \@minus4\jsc at mpt
   \belowdisplayshortskip \belowdisplayskip
   \let\@listi\@listI}
 %% initialize
@@ -1062,8 +1102,8 @@
   }{%else
     \jsc at setfontsize\small\@ixpt{13}%
   }%
-  \abovedisplayskip 9\p@? \@plus3\p@? \@minus4\p@?
-  \abovedisplayshortskip  \z@ \@plus3\p@?
+  \abovedisplayskip 9\jsc at mpt \@plus3\jsc at mpt \@minus4\jsc at mpt
+  \abovedisplayshortskip  \z@ \@plus3\jsc at mpt
   \belowdisplayskip \abovedisplayskip
   \belowdisplayshortskip \belowdisplayskip
   \def\@listi{\leftmargin\leftmargini
@@ -1076,8 +1116,8 @@
   }{%else
     \jsc at setfontsize\footnotesize\@viiipt{11}%
   }%
-  \abovedisplayskip 6\p@? \@plus2\p@? \@minus3\p@?
-  \abovedisplayshortskip  \z@ \@plus2\p@?
+  \abovedisplayskip 6\jsc at mpt \@plus2\jsc at mpt \@minus3\jsc at mpt
+  \abovedisplayshortskip  \z@ \@plus2\jsc at mpt
   \belowdisplayskip \abovedisplayskip
   \belowdisplayshortskip \belowdisplayskip
   \def\@listi{\leftmargin\leftmargini
@@ -1119,7 +1159,7 @@
 \ifjsc at mag
 \mag=\bxjs at param@mag
 \fi
-\setlength{\topskip}{10\p@?}
+\setlength{\topskip}{10\jsc at mpt}
 \def\bxjs at unit@trueQ{0.25truemm}\let\bxjs at unit@trueH\bxjs at unit@trueQ
 \def\bxjs at unit@zw{\jsZw}\let\bxjs at unit@zh\bxjs at unit@zw
 \@tempswafalse
@@ -1280,8 +1320,8 @@
    {Command '\string\setpagelayout' is not supported,\MessageBreak
     because 'geometry' value is not 'class'}\@eha}
 \fi\fi
-\footnotesep=11\p@? \footnotesep=0.7\footnotesep
-\setlength{\skip\footins}{16\p@? \@plus 5\p@? \@minus 2\p@?}
+\footnotesep=11\jsc at mpt \footnotesep=0.7\footnotesep
+\setlength{\skip\footins}{16\jsc at mpt \@plus 5\jsc at mpt \@minus 2\jsc at mpt}
 \setcounter{topnumber}{9}
 \renewcommand{\topfraction}{.85}
 \setcounter{bottomnumber}{9}
@@ -1292,17 +1332,17 @@
 \setcounter{dbltopnumber}{9}
 \renewcommand{\dbltopfraction}{.8}
 \renewcommand{\dblfloatpagefraction}{.8}
-\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\dblfloatsep    {12\p@? \@plus 2\p@? \@minus 2\p@?}
-\setlength\dbltextfloatsep{20\p@? \@plus 2\p@? \@minus 4\p@?}
-\setlength\@fptop{0\p@? \@plus 1fil}
-\setlength\@fpsep{8\p@? \@plus 2fil}
-\setlength\@fpbot{0\p@? \@plus 1fil}
-\setlength\@dblfptop{0\p@? \@plus 1fil}
-\setlength\@dblfpsep{8\p@? \@plus 2fil}
-\setlength\@dblfpbot{0\p@? \@plus 1fil}
+\setlength\floatsep    {12\jsc at mpt \@plus 2\jsc at mpt \@minus 2\jsc at mpt}
+\setlength\textfloatsep{20\jsc at mpt \@plus 2\jsc at mpt \@minus 4\jsc at mpt}
+\setlength\intextsep   {12\jsc at mpt \@plus 2\jsc at mpt \@minus 2\jsc at mpt}
+\setlength\dblfloatsep    {12\jsc at mpt \@plus 2\jsc at mpt \@minus 2\jsc at mpt}
+\setlength\dbltextfloatsep{20\jsc at mpt \@plus 2\jsc at mpt \@minus 4\jsc at mpt}
+\setlength\@fptop{0\jsc at mpt \@plus 1fil}
+\setlength\@fpsep{8\jsc at mpt \@plus 2fil}
+\setlength\@fpbot{0\jsc at mpt \@plus 1fil}
+\setlength\@dblfptop{0\jsc at mpt \@plus 1fil}
+\setlength\@dblfpsep{8\jsc at mpt \@plus 2fil}
+\setlength\@dblfpbot{0\jsc at mpt \@plus 1fil}
 \def\pltx at cleartooddpage{\clearpage\if at twoside
   \ifodd\c at page\else
     \hbox{}\thispagestyle{empty}\newpage
@@ -1411,7 +1451,7 @@
         \begin{center}
           \mbox{} \\[1\jsZw]
           \large
-          {\maybeblue\hrule height0\p@? depth2\p@?\relax}\par
+          {\maybeblue\hrule height0\jsc at mpt depth2\jsc at mpt\relax}\par
           \jsc at smallskip
           \@title
           \ifx\bxjs at subtitle\@undefined\else
@@ -1419,16 +1459,16 @@
             {\small \bxjs at subtitle\par}
           \fi
           \jsc at smallskip
-          {\maybeblue\hrule height0\p@? depth2\p@?\relax}\par
+          {\maybeblue\hrule height0\jsc at mpt depth2\jsc at mpt\relax}\par
           \vfill
           {\small \@author}%
         \end{center}
       \else
-      \vskip 60\p@?
+      \vskip 60\jsc at mpt
       \begin{center}%
         {\LARGE \@title \par}%
         \ifx\bxjs at subtitle\@undefined\else
-          \vskip5\p@?
+          \vskip5\jsc at mpt
           {\normalsize \bxjs at subtitle\par}
         \fi
         \vskip 3em%
@@ -1499,7 +1539,7 @@
       \let\footnote\thanks
       {\LARGE \@title \par}%
       \ifx\bxjs at subtitle\@undefined\else
-        \vskip3\p@?
+        \vskip3\jsc at mpt
         {\normalsize \bxjs at subtitle\par}
       \fi
       \vskip 1.5em
@@ -1920,13 +1960,13 @@
   \gdef\@secpos{}%
   \gdef\thesection{\@Alph\c at section}%
   \fi}
-\setlength\arraycolsep{5\p@?}
-\setlength\tabcolsep{6\p@?}
+\setlength\arraycolsep{5\jsc at mpt}
+\setlength\tabcolsep{6\jsc at mpt}
 \setlength\arrayrulewidth{.4\p@}
 \setlength\doublerulesep{2\p@}
 \setlength\tabbingsep{\labelsep}
 \skip\@mpfootins = \skip\footins
-\setlength\fboxsep{3\p@?}
+\setlength\fboxsep{3\jsc at mpt}
 \setlength\fboxrule{.4\p@}
 \renewcommand \theequation {\@arabic\c at equation}
 \newcounter{figure}
@@ -1955,8 +1995,8 @@
                {\end at dblfloat}
 \newlength\abovecaptionskip
 \newlength\belowcaptionskip
-\setlength\abovecaptionskip{5\p@?} % 元: 10\p@
-\setlength\belowcaptionskip{5\p@?} % 元: 0\p@
+\setlength\abovecaptionskip{5\jsc at mpt} % 元: 10\p@
+\setlength\belowcaptionskip{5\jsc at mpt} % 元: 0\p@
 \long\def\@makecaption#1#2{{\small
   \advance\leftskip .0628\linewidth
   \advance\rightskip .0628\linewidth
@@ -2048,7 +2088,7 @@
 \newcommand*{\l at part}[2]{%
   \ifnum \c at tocdepth >-2\relax
     \addpenalty\@secpenalty
-    \addvspace{2.25em \@plus\p@?}%
+    \addvspace{2.25em \@plus\jsc at mpt}%
     \begingroup
       \parindent \z@
       \rightskip \@tocrmarg
@@ -2063,7 +2103,7 @@
 \newcommand*{\l at section}[2]{%
   \ifnum \c at tocdepth >\z@
     \addpenalty{\@secpenalty}%
-    \addvspace{1.0em \@plus\p@?}%
+    \addvspace{1.0em \@plus\jsc at mpt}%
     \begingroup
       \parindent\z@
       \rightskip\@tocrmarg
@@ -2091,7 +2131,7 @@
 \def\jsTocLine{\leaders\hbox{%
   $\m at th \mkern \@dotsep mu\hbox{.}\mkern \@dotsep mu$}\hfill}
 \def\@dottedtocline#1#2#3#4#5{\ifnum #1>\c at tocdepth \else
-  \vskip \z@ \@plus.2\p@?
+  \vskip \z@ \@plus.2\jsc at mpt
   {\leftskip #2\relax \rightskip \@tocrmarg \parfillskip -\rightskip
     \parindent #2\relax\@afterindenttrue
    \interlinepenalty\@M
@@ -2163,7 +2203,7 @@
     \@mkboth{\indexname}{\indexname}%
     \plainifnotempty % \thispagestyle{plain}
     \parindent\z@
-    \parskip\z@ \@plus .3\p@?\relax
+    \parskip\z@ \@plus .3\jsc at mpt\relax
     \let\item\@idxitem
     \raggedright
     \footnotesize\narrowbaselines
@@ -2178,7 +2218,7 @@
 \newcommand{\@idxitem}{\par\hangindent 4\jsZw} % 元 40pt
 \newcommand{\subitem}{\@idxitem \hspace*{2\jsZw}} % 元 20pt
 \newcommand{\subsubitem}{\@idxitem \hspace*{3\jsZw}} % 元 30pt
-\newcommand{\indexspace}{\par \vskip 10\p@? \@plus5\p@? \@minus3\p@?\relax}
+\newcommand{\indexspace}{\par \vskip 10\jsc at mpt \@plus5\jsc at mpt \@minus3\jsc at mpt\relax}
 \newcommand\seename{\if at english see\else →\fi}
 \newcommand\alsoname{\if at english see also\else →\fi}
 \ifx\pltx at foot@penalty\@undefined
@@ -2189,9 +2229,9 @@
 \fi
 \def\thefootnote{\ifnum\c at footnote>\z@\leavevmode\lower.5ex\hbox{*}\@arabic\c at footnote\fi}
 \renewcommand{\footnoterule}{%
-  \kern-2.6\p@? \kern-.4\p@
+  \kern-2.6\jsc at mpt \kern-.4\p@
   \hrule width .4\columnwidth
-  \kern 2.6\p@?}
+  \kern 2.6\jsc at mpt}
 \long\def\@footnotetext{%
   \insert\footins\bgroup
     \normalfont\footnotesize
@@ -2345,7 +2385,7 @@
     \fi\everyparhook}}
 \fi
 \ifnum\bxjs at everyparhook=\bxjs at everyparhook@@none\else
-\AtEndOfPackage{%
+\AtEndOfClass{%
 \def\@gnewline #1{%
   \ifvmode
     \@nolnerr

Modified: trunk/Master/texmf-dist/tex/latex/bxjscls/bxjsbook.cls
===================================================================
--- trunk/Master/texmf-dist/tex/latex/bxjscls/bxjsbook.cls	2023-07-17 15:15:21 UTC (rev 67656)
+++ trunk/Master/texmf-dist/tex/latex/bxjscls/bxjsbook.cls	2023-07-17 20:39:57 UTC (rev 67657)
@@ -22,7 +22,7 @@
 %% in the same archive or directory.)
 \NeedsTeXFormat{LaTeX2e}
 \ProvidesClass{bxjsbook}
-  [2023/07/01 v2.8b BXJS document classes]
+  [2023/07/17 v2.9  BXJS document classes]
 %% このファイルは日本語文字を含みます.
 \def\bxjs at clsname{bxjsbook}
 \newif\ifjsc at needsp@tch
@@ -43,16 +43,6 @@
 \bxjs at test@engine\XeTeXversion{\let\jsEngine=x}
 \bxjs at test@engine\pdftexversion{\let\jsEngine=p}
 \bxjs at test@engine\luatexversion{\let\jsEngine=l}
-\let\bxjs at tmpa\relax
-\ifx J\jsEngine \def\bxjs at tmpa{NTT-jTeX}\fi
-\ifx O\jsEngine \def\bxjs at tmpa{Omega}\fi
-\ifx\bxjs at tmpa\relax \expandafter\@gobble
-\else
-  \ClassError\bxjs at clsname
-   {The engine in use (\bxjs at tmpa) is not supported}
-   {It's a fatal error. I'll quit right now.}
-  \expandafter\@firstofone
-\fi{\endinput\@@end}
 \@tempswatrue
 \if x\jsEngine
   \ifdim\the\XeTeXversion\XeTeXrevision\p@<0.997\p@
@@ -75,6 +65,12 @@
   \expandafter\@firstofone
 \else \expandafter\@gobble
 \fi{\typeout{Farewell!}\endinput\@@end}
+\def\bxjs at if@format at at@least{\@ifl at t@r\fmtversion}
+\bxjs at if@format at at@least{2017/04/15}{%
+  \let\bxjs at if@package at at@least\@ifpackagelater
+}{%else
+  \def\bxjs at if@package at at@least#1#2{%
+    \@ifpackageloaded{#1}{\@ifpackagelater{#1}{#2}}{\@secondoftwo}}}
 \newif\ifjsWithupTeX
 \ifx\ucs\@undefined\else \ifnum\ucs"3000="3000
   \jsWithupTeXtrue
@@ -90,7 +86,9 @@
   \ifx\outputmode\@undefined\else\the\outputmode\fi
   >0 true\else false\fi}
 \newif\ifbxjs at explIII
-\@ifl at t@r\fmtversion{2020/02/02}{\bxjs at explIIItrue}{}
+\bxjs at if@format at at@least{2020/02/02}{\bxjs at explIIItrue}{}
+\newif\ifbxjs at brace@safe
+\bxjs at if@format at at@least{2021/06/01}{\bxjs at brace@safetrue}{}
 \newif\ifbxjs at TUenc
 \def\bxjs at tmpa{TU}\edef\bxjs at tmpb{\f at encoding}
 \ifx\bxjs at tmpa\bxjs at tmpb
@@ -97,7 +95,7 @@
   \bxjs at TUenctrue
 \fi
 \newif\ifbxjs at old@hook at system
-\@ifl at t@r\fmtversion{2020/10/01}{}{\bxjs at old@hook at systemtrue}
+\bxjs at if@format at at@least{2020/10/01}{}{\bxjs at old@hook at systemtrue}
 \RequirePackage{calc}
 \RequirePackage{keyval}
 \IfFileExists{iftex.sty}{%
@@ -124,7 +122,7 @@
 \else
   \def\bxjs at robust@def{\DeclareRobustCommand*}
 \fi
-\@ifl at t@r\fmtversion{2021/11/15}{%
+\bxjs at if@format at at@least{2021/11/15}{%
   \def\bxjs at CGHN#1{#1}%
 }{%else
   \def\bxjs at CGHN#1{\bxjs at CGHN@a#1//}%
@@ -201,6 +199,12 @@
 \let\bxjs at post@option at hook\@empty
 \@onlypreamble\bxjs at pre@jadriver at hook
 \let\bxjs at pre@jadriver at hook\@empty
+\@onlypreamble\bxjs at endpreamble@hook
+\let\bxjs at endpreamble@hook\@empty
+\AtEndOfClass{%
+  \ifx\AtEndPreamble\@undefined\else
+    \AtEndPreamble{\bxjs at endpreamble@hook}%
+  \fi}
 \@onlypreamble\bxjs at tmpdo
 \@onlypreamble\bxjs at tmpdo@a
 \@onlypreamble\bxjs at tmpdo@b
@@ -511,25 +515,63 @@
   \bxjs at oldfontcommandsfalse}
 \DeclareOption{oldfontcommands}{%
   \bxjs at oldfontcommandstrue}
-\DeclareOption{winjis}{%
-  \ClassWarningNoLine\bxjs at clsname
-   {This class does not support `winjis' option}%
-}
-\DeclareOption{mingoth}{%
-  \ClassWarningNoLine\bxjs at clsname
-   {This class does not support `mingoth' option}%
-}
-\DeclareOption{jis}{%
-  \ClassWarningNoLine\bxjs at clsname
-   {This class does not support `jis' option}%
-}
+\ifbxjs at brace@safe
+  \@onlypreamble\bxjs at register@badopt
+  \def\bxjs at register@badopt#1{%
+    \expandafter\@onlypreamble\csname bxjs at badopt/#1\endcsname
+    \@namedef{bxjs at badopt/#1}}
+  \g at addto@macro\bxjs at begin@document at hook{%
+    \@for\bxjs at tmpa:=\@unusedoptionlist\do{%
+      \@nameuse{bxjs at badopt/\bxjs at tmpa}}}
+\fi
+\@onlypreamble\bxjs at invalid@opt
+\ifbxjs at brace@safe
+  \def\bxjs at invalid@opt#1#2{%
+    \bxjs at register@badopt{#1}{\ClassError\bxjs at clsname{#2}\@ehc}}
+\else
+  \def\bxjs at invalid@opt#1#2{%
+    \DeclareOption{#1}{\ClassWarningNoLine\bxjs at clsname{#2}}}
+\fi
+\bxjs at invalid@opt{winjis}{%
+  This class does not support 'winjis' option}
+\bxjs at invalid@opt{mingoth}{%
+  This class does not support 'mingoth' option}
+\bxjs at invalid@opt{jis}{%
+  This class does not support 'jis' option}
+\if j\jsEngine\else
+\bxjs at invalid@opt{tombo}{%
+  Option 'tombo' can be used only on (u)pLaTeX}
+\bxjs at invalid@opt{tombow}{%
+  Option 'tombow' can be used only on (u)pLaTeX}
+\bxjs at invalid@opt{mentuke}{%
+  Option 'mentuke' can be used only on (u)pLaTeX}
+\fi
 \DeclareOption*{%
-  \def\bxjs at next{\bxjs at safe@setkeys{bxjs}}%
-  \expandafter\bxjs at next\expandafter{\CurrentOption}}
+  \bxjs at check@ja at prefix \ifx\bxjs at next\relax
+  \def\bxjs at next{\bxjs at cls@setkeys{bxjs}}%
+  \expandafter\bxjs at next\expandafter{\CurrentOption}%
+  \else
+    \edef\bxjs at next{%
+      \noexpand\setkeys{bxjs}{japaram={\bxjs at next}}%
+    }\bxjs at next
+  \fi}
+\def\bxjs at check@ja at prefix{%
+  \let\bxjs at next\relax
+  \expandafter\bxjs at check@ja at prefix@a\CurrentOption\@nil ja:\@nil\@nnil}
+\def\bxjs at check@ja at prefix@a#1ja:#2\@nil#3\@nnil{%
+  \ifx\@nil#1\@nil \def\bxjs at next{#2}\fi}
 \def\bxjs at safe@setkeys#1#2{%
   \let\bxjs at save@KV at errx\KV at errx \let\KV at errx\@gobble
   \setkeys{#1}{#2}%
   \let\KV at errx\bxjs at save@KV at errx}
+\def\bxjs at cls@setkeys#1#2{%
+  \let\bxjs at save@KV at errx\KV at errx
+  \def\KV at errx##1{\OptionNotUsed}%
+  \setkeys{#1}{#2}%
+  \let\KV at errx\bxjs at save@KV at errx}
+\ifbxjs at brace@safe\else
+  \let\bxjs at cls@setkeys\bxjs at safe@setkeys
+\fi
 \@onlypreamble\bxjs at declare@enum at option
 \def\bxjs at declare@enum at option#1#2#3{%
   \bxjs at csletcs{bxjs@#2}{bxjs@#2@@#3}%
@@ -676,6 +718,7 @@
 \bxjs at declare@bool at option{plautopatch}{plautopatch}{false}
 \g at addto@macro\bxjs at plautopatchtrue{\let\bxjs at plautopatch@given\@undefined}
 \g at addto@macro\bxjs at plautopatchfalse{\def\bxjs at plautopatch@given{false}}
+\ifbxjs at brace@safe\else
 \let\bxjs at org@removeelement\@removeelement
 \def\@removeelement#1#2#3{%
   \def\reserved at a{#2}%
@@ -682,6 +725,7 @@
   \ifx\reserved at a\@empty \let#3\@empty
   \else \bxjs at org@removeelement{#1}{#2}{#3}%
   \fi}
+\fi
 \ExecuteOptions{a4paper,twoside,onecolumn,titlepage,openright,final}
 \ProcessOptions\relax
 \bxjs at post@option at hook
@@ -908,14 +952,10 @@
 \ifjsc at mag
   \jsc at mpt=1\p@
   \jsc at mmm=1mm
-  \catcode`\?=9 % \p@? read as \p@
 \else
   \jsc at mpt=\jsc at magscale\p@
   \jsc at mmm=\jsc at magscale mm
-  \catcode`\?=11 \let\p@?\jsc at mpt
 \fi
-\chardef\bxjs at qmcc=\catcode`\?\relax
-\g at addto@macro\bxjs at pre@jadriver at hook{\catcode`\?=12\relax}
 \newdimen\jsZw
 \jsZw=10\jsc at mpt \jsZw=\jsScale\jsZw
 \ifbxjs at usezw
@@ -993,7 +1033,7 @@
     \let\bxjs at prev@set at fontsize\set at fontsize
   \fi}
 \bxjs at patch@set at fontsize
-\AtEndOfPackage{\bxjs at patch@set at fontsize}
+\AtEndOfClass{\bxjs at patch@set at fontsize}
 \newcommand*\jsFontSizeChanged{%
   \jsZw=\f at size\p@
   \jsZw=\jsScale \jsZw
@@ -1048,9 +1088,9 @@
   }{%else
     \jsc at setfontsize\normalsize\@xpt{\n at baseline}%
   }%
-  \abovedisplayskip 11\p@? \@plus3\p@? \@minus4\p@?
-  \abovedisplayshortskip \z@ \@plus3\p@?
-  \belowdisplayskip 9\p@? \@plus3\p@? \@minus4\p@?
+  \abovedisplayskip 11\jsc at mpt \@plus3\jsc at mpt \@minus4\jsc at mpt
+  \abovedisplayshortskip \z@ \@plus3\jsc at mpt
+  \belowdisplayskip 9\jsc at mpt \@plus3\jsc at mpt \@minus4\jsc at mpt
   \belowdisplayshortskip \belowdisplayskip
   \let\@listi\@listI}
 %% initialize
@@ -1071,8 +1111,8 @@
   }{%else
     \jsc at setfontsize\small\@ixpt{13}%
   }%
-  \abovedisplayskip 9\p@? \@plus3\p@? \@minus4\p@?
-  \abovedisplayshortskip  \z@ \@plus3\p@?
+  \abovedisplayskip 9\jsc at mpt \@plus3\jsc at mpt \@minus4\jsc at mpt
+  \abovedisplayshortskip  \z@ \@plus3\jsc at mpt
   \belowdisplayskip \abovedisplayskip
   \belowdisplayshortskip \belowdisplayskip
   \def\@listi{\leftmargin\leftmargini
@@ -1085,8 +1125,8 @@
   }{%else
     \jsc at setfontsize\footnotesize\@viiipt{11}%
   }%
-  \abovedisplayskip 6\p@? \@plus2\p@? \@minus3\p@?
-  \abovedisplayshortskip  \z@ \@plus2\p@?
+  \abovedisplayskip 6\jsc at mpt \@plus2\jsc at mpt \@minus3\jsc at mpt
+  \abovedisplayshortskip  \z@ \@plus2\jsc at mpt
   \belowdisplayskip \abovedisplayskip
   \belowdisplayshortskip \belowdisplayskip
   \def\@listi{\leftmargin\leftmargini
@@ -1128,7 +1168,7 @@
 \ifjsc at mag
 \mag=\bxjs at param@mag
 \fi
-\setlength{\topskip}{10\p@?}
+\setlength{\topskip}{10\jsc at mpt}
 \def\bxjs at unit@trueQ{0.25truemm}\let\bxjs at unit@trueH\bxjs at unit@trueQ
 \def\bxjs at unit@zw{\jsZw}\let\bxjs at unit@zh\bxjs at unit@zw
 \@tempswafalse
@@ -1314,8 +1354,8 @@
    {Command '\string\setpagelayout' is not supported,\MessageBreak
     because 'geometry' value is not 'class'}\@eha}
 \fi\fi
-\footnotesep=11\p@? \footnotesep=0.7\footnotesep
-\setlength{\skip\footins}{16\p@? \@plus 5\p@? \@minus 2\p@?}
+\footnotesep=11\jsc at mpt \footnotesep=0.7\footnotesep
+\setlength{\skip\footins}{16\jsc at mpt \@plus 5\jsc at mpt \@minus 2\jsc at mpt}
 \setcounter{topnumber}{9}
 \renewcommand{\topfraction}{.85}
 \setcounter{bottomnumber}{9}
@@ -1326,17 +1366,17 @@
 \setcounter{dbltopnumber}{9}
 \renewcommand{\dbltopfraction}{.8}
 \renewcommand{\dblfloatpagefraction}{.8}
-\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\dblfloatsep    {12\p@? \@plus 2\p@? \@minus 2\p@?}
-\setlength\dbltextfloatsep{20\p@? \@plus 2\p@? \@minus 4\p@?}
-\setlength\@fptop{0\p@? \@plus 1fil}
-\setlength\@fpsep{8\p@? \@plus 2fil}
-\setlength\@fpbot{0\p@? \@plus 1fil}
-\setlength\@dblfptop{0\p@? \@plus 1fil}
-\setlength\@dblfpsep{8\p@? \@plus 2fil}
-\setlength\@dblfpbot{0\p@? \@plus 1fil}
+\setlength\floatsep    {12\jsc at mpt \@plus 2\jsc at mpt \@minus 2\jsc at mpt}
+\setlength\textfloatsep{20\jsc at mpt \@plus 2\jsc at mpt \@minus 4\jsc at mpt}
+\setlength\intextsep   {12\jsc at mpt \@plus 2\jsc at mpt \@minus 2\jsc at mpt}
+\setlength\dblfloatsep    {12\jsc at mpt \@plus 2\jsc at mpt \@minus 2\jsc at mpt}
+\setlength\dbltextfloatsep{20\jsc at mpt \@plus 2\jsc at mpt \@minus 4\jsc at mpt}
+\setlength\@fptop{0\jsc at mpt \@plus 1fil}
+\setlength\@fpsep{8\jsc at mpt \@plus 2fil}
+\setlength\@fpbot{0\jsc at mpt \@plus 1fil}
+\setlength\@dblfptop{0\jsc at mpt \@plus 1fil}
+\setlength\@dblfpsep{8\jsc at mpt \@plus 2fil}
+\setlength\@dblfpbot{0\jsc at mpt \@plus 1fil}
 \def\pltx at cleartooddpage{\clearpage\if at twoside
   \ifodd\c at page\else
     \hbox{}\thispagestyle{empty}\newpage
@@ -1447,7 +1487,7 @@
         \begin{center}
           \mbox{} \\[1\jsZw]
           \large
-          {\maybeblue\hrule height0\p@? depth2\p@?\relax}\par
+          {\maybeblue\hrule height0\jsc at mpt depth2\jsc at mpt\relax}\par
           \jsc at smallskip
           \@title
           \ifx\bxjs at subtitle\@undefined\else
@@ -1455,16 +1495,16 @@
             {\small \bxjs at subtitle\par}
           \fi
           \jsc at smallskip
-          {\maybeblue\hrule height0\p@? depth2\p@?\relax}\par
+          {\maybeblue\hrule height0\jsc at mpt depth2\jsc at mpt\relax}\par
           \vfill
           {\small \@author}%
         \end{center}
       \else
-      \vskip 60\p@?
+      \vskip 60\jsc at mpt
       \begin{center}%
         {\LARGE \@title \par}%
         \ifx\bxjs at subtitle\@undefined\else
-          \vskip5\p@?
+          \vskip5\jsc at mpt
           {\normalsize \bxjs at subtitle\par}
         \fi
         \vskip 3em%
@@ -1535,7 +1575,7 @@
       \let\footnote\thanks
       {\LARGE \@title \par}%
       \ifx\bxjs at subtitle\@undefined\else
-        \vskip3\p@?
+        \vskip3\jsc at mpt
         {\normalsize \bxjs at subtitle\par}
       \fi
       \vskip 1.5em
@@ -1732,7 +1772,7 @@
     \normalfont
     \ifnum \c at secnumdepth >-2\relax
       \huge\headfont \prepartname\thepart\postpartname
-      \par\vskip20\p@?
+      \par\vskip20\jsc at mpt
     \fi
     \Huge \headfont #2\par}%
   \@endpart}
@@ -2000,13 +2040,13 @@
   \gdef\@chapapp{\appendixname}%
   \gdef\@chappos{}%
   \gdef\thechapter{\@Alph\c at chapter}}
-\setlength\arraycolsep{5\p@?}
-\setlength\tabcolsep{6\p@?}
+\setlength\arraycolsep{5\jsc at mpt}
+\setlength\tabcolsep{6\jsc at mpt}
 \setlength\arrayrulewidth{.4\p@}
 \setlength\doublerulesep{2\p@}
 \setlength\tabbingsep{\labelsep}
 \skip\@mpfootins = \skip\footins
-\setlength\fboxsep{3\p@?}
+\setlength\fboxsep{3\jsc at mpt}
 \setlength\fboxrule{.4\p@}
 \@addtoreset{equation}{chapter}
 \renewcommand\theequation
@@ -2039,8 +2079,8 @@
                {\end at dblfloat}
 \newlength\abovecaptionskip
 \newlength\belowcaptionskip
-\setlength\abovecaptionskip{5\p@?} % 元: 10\p@
-\setlength\belowcaptionskip{5\p@?} % 元: 0\p@
+\setlength\abovecaptionskip{5\jsc at mpt} % 元: 10\p@
+\setlength\belowcaptionskip{5\jsc at mpt} % 元: 0\p@
 \long\def\@makecaption#1#2{{\small
   \advance\leftskip .0628\linewidth
   \advance\rightskip .0628\linewidth
@@ -2138,7 +2178,7 @@
 \newcommand*{\l at part}[2]{%
   \ifnum \c at tocdepth >-2\relax
     \addpenalty{-\@highpenalty}%
-    \addvspace{2.25em \@plus\p@?}%
+    \addvspace{2.25em \@plus\jsc at mpt}%
     \begingroup
       \parindent \z@
       \rightskip \@tocrmarg
@@ -2155,7 +2195,7 @@
 \newcommand*{\l at chapter}[2]{%
   \ifnum \c at tocdepth >\m at ne
     \addpenalty{-\@highpenalty}%
-    \addvspace{1.0em \@plus\p@?}
+    \addvspace{1.0em \@plus\jsc at mpt}
     \begingroup
       \parindent\z@
       \rightskip\@tocrmarg
@@ -2188,7 +2228,7 @@
 \def\jsTocLine{\leaders\hbox{%
   $\m at th \mkern \@dotsep mu\hbox{.}\mkern \@dotsep mu$}\hfill}
 \def\@dottedtocline#1#2#3#4#5{\ifnum #1>\c at tocdepth \else
-  \vskip \z@ \@plus.2\p@?
+  \vskip \z@ \@plus.2\jsc at mpt
   {\leftskip #2\relax \rightskip \@tocrmarg \parfillskip -\rightskip
     \parindent #2\relax\@afterindenttrue
    \interlinepenalty\@M
@@ -2267,7 +2307,7 @@
     \@mkboth{\indexname}{}%
     \plainifnotempty % \thispagestyle{plain}
     \parindent\z@
-    \parskip\z@ \@plus .3\p@?\relax
+    \parskip\z@ \@plus .3\jsc at mpt\relax
     \let\item\@idxitem
     \raggedright
     \footnotesize\narrowbaselines
@@ -2282,7 +2322,7 @@
 \newcommand{\@idxitem}{\par\hangindent 4\jsZw} % 元 40pt
 \newcommand{\subitem}{\@idxitem \hspace*{2\jsZw}} % 元 20pt
 \newcommand{\subsubitem}{\@idxitem \hspace*{3\jsZw}} % 元 30pt
-\newcommand{\indexspace}{\par \vskip 10\p@? \@plus5\p@? \@minus3\p@?\relax}
+\newcommand{\indexspace}{\par \vskip 10\jsc at mpt \@plus5\jsc at mpt \@minus3\jsc at mpt\relax}
 \newcommand\seename{\if at english see\else →\fi}
 \newcommand\alsoname{\if at english see also\else →\fi}
 \ifx\pltx at foot@penalty\@undefined
@@ -2293,9 +2333,9 @@
 \fi
 \def\thefootnote{\ifnum\c at footnote>\z@\leavevmode\lower.5ex\hbox{*}\@arabic\c at footnote\fi}
 \renewcommand{\footnoterule}{%
-  \kern-2.6\p@? \kern-.4\p@
+  \kern-2.6\jsc at mpt \kern-.4\p@
   \hrule width .4\columnwidth
-  \kern 2.6\p@?}
+  \kern 2.6\jsc at mpt}
 \@addtoreset{footnote}{chapter}
 \long\def\@footnotetext{%
   \insert\footins\bgroup
@@ -2450,7 +2490,7 @@
     \fi\everyparhook}}
 \fi
 \ifnum\bxjs at everyparhook=\bxjs at everyparhook@@none\else
-\AtEndOfPackage{%
+\AtEndOfClass{%
 \def\@gnewline #1{%
   \ifvmode
     \@nolnerr

Modified: trunk/Master/texmf-dist/tex/latex/bxjscls/bxjscjkcat.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/bxjscls/bxjscjkcat.sty	2023-07-17 15:15:21 UTC (rev 67656)
+++ trunk/Master/texmf-dist/tex/latex/bxjscls/bxjscjkcat.sty	2023-07-17 20:39:57 UTC (rev 67657)
@@ -22,7 +22,7 @@
 %% in the same archive or directory.)
 \NeedsTeXFormat{LaTeX2e}
 \ProvidesPackage{bxjscjkcat}
-  [2023/07/01 v2.8b BXJS document classes]
+  [2023/07/17 v2.9  BXJS document classes]
 \def\bxjx at pkgname{bxjscjkcat}
 \newcount\bxjx at cnta
 \@onlypreamble\bxjx at tmpdo

Modified: trunk/Master/texmf-dist/tex/latex/bxjscls/bxjscompat.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/bxjscls/bxjscompat.sty	2023-07-17 15:15:21 UTC (rev 67656)
+++ trunk/Master/texmf-dist/tex/latex/bxjscls/bxjscompat.sty	2023-07-17 20:39:57 UTC (rev 67657)
@@ -22,7 +22,7 @@
 %% in the same archive or directory.)
 \NeedsTeXFormat{LaTeX2e}
 \ProvidesPackage{bxjscompat}
-  [2023/07/01 v2.8b BXJS document classes]
+  [2023/07/17 v2.9  BXJS document classes]
 \def\bxac at pkgname{bxjscompat}
 \let\bxac at engine=n
 \def\bxac at do#1#2{%

Modified: trunk/Master/texmf-dist/tex/latex/bxjscls/bxjsja-minimal.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/bxjscls/bxjsja-minimal.def	2023-07-17 15:15:21 UTC (rev 67656)
+++ trunk/Master/texmf-dist/tex/latex/bxjscls/bxjsja-minimal.def	2023-07-17 20:39:57 UTC (rev 67657)
@@ -21,8 +21,18 @@
 %% same distribution. (The sources need not necessarily be
 %% in the same archive or directory.)
 \ProvidesFile{bxjsja-minimal.def}
-  [2023/07/01 v2.8b BXJS document classes]
+  [2023/07/17 v2.9  BXJS document classes]
 %% このファイルは日本語文字を含みます
+\let\bxjs at tmpa\relax
+\ifx J\jsEngine \def\bxjs at tmpa{NTT-jTeX}\fi
+\ifx O\jsEngine \def\bxjs at tmpa{Omega}\fi
+\ifx\bxjs at tmpa\relax \expandafter\@gobble
+\else
+  \ClassError\bxjs at clsname
+   {The engine in use (\bxjs at tmpa) is not supported}
+   {It's a fatal error. I'll quit right now.}
+  \expandafter\@firstofone
+\fi{\endinput\@@end}
 \def\DeclareJaTextFontCommand#1#2{%
   \DeclareRobustCommand#1[1]{%
     \relax

Modified: trunk/Master/texmf-dist/tex/latex/bxjscls/bxjsja-modern.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/bxjscls/bxjsja-modern.def	2023-07-17 15:15:21 UTC (rev 67656)
+++ trunk/Master/texmf-dist/tex/latex/bxjscls/bxjsja-modern.def	2023-07-17 20:39:57 UTC (rev 67657)
@@ -21,7 +21,7 @@
 %% same distribution. (The sources need not necessarily be
 %% in the same archive or directory.)
 \ProvidesFile{bxjsja-modern.def}
-  [2023/07/01 v2.8b BXJS document classes]
+  [2023/07/17 v2.9  BXJS document classes]
 \input{bxjsja-standard.def}
 \ifnum0\if x\jsEngine1\fi\if l\jsEngine1\fi=\z@
 \def\encodingdefault{T1}%

Modified: trunk/Master/texmf-dist/tex/latex/bxjscls/bxjsja-pandoc.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/bxjscls/bxjsja-pandoc.def	2023-07-17 15:15:21 UTC (rev 67656)
+++ trunk/Master/texmf-dist/tex/latex/bxjscls/bxjsja-pandoc.def	2023-07-17 20:39:57 UTC (rev 67657)
@@ -21,7 +21,7 @@
 %% same distribution. (The sources need not necessarily be
 %% in the same archive or directory.)
 \ProvidesFile{bxjsja-pandoc.def}
-  [2023/07/01 v2.8b BXJS document classes]
+  [2023/07/17 v2.9  BXJS document classes]
 \if x\jsEngine
   \PassOptionsToPackage{nospace}{xeCJK}
 \fi
@@ -45,12 +45,9 @@
     \fi
   }{}
 \fi
-\@onlypreamble\bxjs at endpreamble@hook
-\let\bxjs at endpreamble@hook\@empty
 \RequirePackage{iftex}[2013/04/04]% v0.2
 \ifjsWitheTeX
   \RequirePackage{etoolbox}[2010/08/21]% v2.0
-  \AtEndPreamble{\bxjs at endpreamble@hook}
   \RequirePackage{filehook}[2011/10/12]% v0.5d
 \fi
 \newif\ifbxjs at jp@fix at strong \bxjs at jp@fix at strongtrue

Modified: trunk/Master/texmf-dist/tex/latex/bxjscls/bxjsja-standard.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/bxjscls/bxjsja-standard.def	2023-07-17 15:15:21 UTC (rev 67656)
+++ trunk/Master/texmf-dist/tex/latex/bxjscls/bxjsja-standard.def	2023-07-17 20:39:57 UTC (rev 67657)
@@ -21,10 +21,15 @@
 %% same distribution. (The sources need not necessarily be
 %% in the same archive or directory.)
 \ProvidesFile{bxjsja-standard.def}
-  [2023/07/01 v2.8b BXJS document classes]
+  [2023/07/17 v2.9  BXJS document classes]
 %% このファイルは日本語文字を含みます
 \input{bxjsja-minimal.def}
 \bxjs at simplejasetupfalse
+\ifjsWitheTeX
+  \IfFileExists{etoolbox.sty}{%
+    \RequirePackage{etoolbox}[2007/10/08]% v1.3
+  }{}
+\fi
 \newif\ifbxjs at jp@jismmiv
 \bxjs at cslet{bxjs at kv@jis2004 at true}\bxjs at jp@jismmivtrue
 \bxjs at cslet{bxjs at kv@jis2004 at false}\bxjs at jp@jismmivfalse
@@ -37,7 +42,7 @@
   \bxjs at set@keyval{units}{#1}{}}
 \let\bxjs at jp@font\@empty
 \define at key{bxjsStd}{font}{%
-  \edef\bxjs at jp@font{#1}}
+  \edef\bxjs at jp@font{\bxjs at catopt\bxjs at jp@font{#1}}}
 \newif\ifbxjs at jp@strong at cmd \bxjs at jp@strong at cmdtrue
 \let\bxjs at kv@strongcmd at true\bxjs at jp@strong at cmdtrue
 \let\bxjs at kv@strongcmd at false\bxjs at jp@strong at cmdfalse
@@ -405,7 +410,7 @@
 \bxjs at g@tmpa
 \ifbxjs at hyperref@enc
   \bxjs at check@hyperref at unicode{false}
-  \@ifpackagelater{plautopatch}{2020/05/25}{% v0.9g
+  \bxjs at if@package at at@least{plautopatch}{2020/05/25}{% v0.9g
     \let\bxjs at plautopatch@new=t}{}
   \let\bxjs at avail@hy at unicode=f
   \if \ifx t\bxjs at plautopatch@new T%
@@ -421,7 +426,7 @@
     \else
       \let\bxjs at avail@hy at unicode=f
       \ifx t\bxjs at plautopatch@new
-        \@ifl at t@r\fmtversion{2023/06/01}{\let\bxjs at avail@hy at unicode=t}{}
+        \bxjs at if@format at at@least{2023/06/01}{\let\bxjs at avail@hy at unicode=t}{}
       \fi
     \fi
   \fi
@@ -562,7 +567,7 @@
   \fi
 \fi
 \fi
-\AtEndOfPackage{%
+\AtEndOfClass{%
 \def\@gnewline #1{%
   \ifvmode \@nolnerr
   \else

Modified: trunk/Master/texmf-dist/tex/latex/bxjscls/bxjspandoc.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/bxjscls/bxjspandoc.sty	2023-07-17 15:15:21 UTC (rev 67656)
+++ trunk/Master/texmf-dist/tex/latex/bxjscls/bxjspandoc.sty	2023-07-17 20:39:57 UTC (rev 67657)
@@ -22,9 +22,9 @@
 %% in the same archive or directory.)
 \NeedsTeXFormat{LaTeX2e}
 \ProvidesPackage{bxjspandoc}
-  [2023/07/01 v2.8b BXJS document classes]
+  [2023/07/17 v2.9  BXJS document classes]
 %% このファイルは日本語文字を含みます.
-\def\bxjsp at pkgname{bxjscjkcat}
+\def\bxjsp at pkgname{bxjspandoc}
 \let\bxjsp at engine=n
 \@onlypreamble\bxjsp at do
 \def\bxjsp at do#1#2{%

Modified: trunk/Master/texmf-dist/tex/latex/bxjscls/bxjsreport.cls
===================================================================
--- trunk/Master/texmf-dist/tex/latex/bxjscls/bxjsreport.cls	2023-07-17 15:15:21 UTC (rev 67656)
+++ trunk/Master/texmf-dist/tex/latex/bxjscls/bxjsreport.cls	2023-07-17 20:39:57 UTC (rev 67657)
@@ -22,7 +22,7 @@
 %% in the same archive or directory.)
 \NeedsTeXFormat{LaTeX2e}
 \ProvidesClass{bxjsreport}
-  [2023/07/01 v2.8b BXJS document classes]
+  [2023/07/17 v2.9  BXJS document classes]
 %% このファイルは日本語文字を含みます.
 \def\bxjs at clsname{bxjsreport}
 \newif\ifjsc at needsp@tch
@@ -43,16 +43,6 @@
 \bxjs at test@engine\XeTeXversion{\let\jsEngine=x}
 \bxjs at test@engine\pdftexversion{\let\jsEngine=p}
 \bxjs at test@engine\luatexversion{\let\jsEngine=l}
-\let\bxjs at tmpa\relax
-\ifx J\jsEngine \def\bxjs at tmpa{NTT-jTeX}\fi
-\ifx O\jsEngine \def\bxjs at tmpa{Omega}\fi
-\ifx\bxjs at tmpa\relax \expandafter\@gobble
-\else
-  \ClassError\bxjs at clsname
-   {The engine in use (\bxjs at tmpa) is not supported}
-   {It's a fatal error. I'll quit right now.}
-  \expandafter\@firstofone
-\fi{\endinput\@@end}
 \@tempswatrue
 \if x\jsEngine
   \ifdim\the\XeTeXversion\XeTeXrevision\p@<0.997\p@
@@ -75,6 +65,12 @@
   \expandafter\@firstofone
 \else \expandafter\@gobble
 \fi{\typeout{Farewell!}\endinput\@@end}
+\def\bxjs at if@format at at@least{\@ifl at t@r\fmtversion}
+\bxjs at if@format at at@least{2017/04/15}{%
+  \let\bxjs at if@package at at@least\@ifpackagelater
+}{%else
+  \def\bxjs at if@package at at@least#1#2{%
+    \@ifpackageloaded{#1}{\@ifpackagelater{#1}{#2}}{\@secondoftwo}}}
 \newif\ifjsWithupTeX
 \ifx\ucs\@undefined\else \ifnum\ucs"3000="3000
   \jsWithupTeXtrue
@@ -90,7 +86,9 @@
   \ifx\outputmode\@undefined\else\the\outputmode\fi
   >0 true\else false\fi}
 \newif\ifbxjs at explIII
-\@ifl at t@r\fmtversion{2020/02/02}{\bxjs at explIIItrue}{}
+\bxjs at if@format at at@least{2020/02/02}{\bxjs at explIIItrue}{}
+\newif\ifbxjs at brace@safe
+\bxjs at if@format at at@least{2021/06/01}{\bxjs at brace@safetrue}{}
 \newif\ifbxjs at TUenc
 \def\bxjs at tmpa{TU}\edef\bxjs at tmpb{\f at encoding}
 \ifx\bxjs at tmpa\bxjs at tmpb
@@ -97,7 +95,7 @@
   \bxjs at TUenctrue
 \fi
 \newif\ifbxjs at old@hook at system
-\@ifl at t@r\fmtversion{2020/10/01}{}{\bxjs at old@hook at systemtrue}
+\bxjs at if@format at at@least{2020/10/01}{}{\bxjs at old@hook at systemtrue}
 \RequirePackage{calc}
 \RequirePackage{keyval}
 \IfFileExists{iftex.sty}{%
@@ -124,7 +122,7 @@
 \else
   \def\bxjs at robust@def{\DeclareRobustCommand*}
 \fi
-\@ifl at t@r\fmtversion{2021/11/15}{%
+\bxjs at if@format at at@least{2021/11/15}{%
   \def\bxjs at CGHN#1{#1}%
 }{%else
   \def\bxjs at CGHN#1{\bxjs at CGHN@a#1//}%
@@ -201,6 +199,12 @@
 \let\bxjs at post@option at hook\@empty
 \@onlypreamble\bxjs at pre@jadriver at hook
 \let\bxjs at pre@jadriver at hook\@empty
+\@onlypreamble\bxjs at endpreamble@hook
+\let\bxjs at endpreamble@hook\@empty
+\AtEndOfClass{%
+  \ifx\AtEndPreamble\@undefined\else
+    \AtEndPreamble{\bxjs at endpreamble@hook}%
+  \fi}
 \@onlypreamble\bxjs at tmpdo
 \@onlypreamble\bxjs at tmpdo@a
 \@onlypreamble\bxjs at tmpdo@b
@@ -511,25 +515,63 @@
   \bxjs at oldfontcommandsfalse}
 \DeclareOption{oldfontcommands}{%
   \bxjs at oldfontcommandstrue}
-\DeclareOption{winjis}{%
-  \ClassWarningNoLine\bxjs at clsname
-   {This class does not support `winjis' option}%
-}
-\DeclareOption{mingoth}{%
-  \ClassWarningNoLine\bxjs at clsname
-   {This class does not support `mingoth' option}%
-}
-\DeclareOption{jis}{%
-  \ClassWarningNoLine\bxjs at clsname
-   {This class does not support `jis' option}%
-}
+\ifbxjs at brace@safe
+  \@onlypreamble\bxjs at register@badopt
+  \def\bxjs at register@badopt#1{%
+    \expandafter\@onlypreamble\csname bxjs at badopt/#1\endcsname
+    \@namedef{bxjs at badopt/#1}}
+  \g at addto@macro\bxjs at begin@document at hook{%
+    \@for\bxjs at tmpa:=\@unusedoptionlist\do{%
+      \@nameuse{bxjs at badopt/\bxjs at tmpa}}}
+\fi
+\@onlypreamble\bxjs at invalid@opt
+\ifbxjs at brace@safe
+  \def\bxjs at invalid@opt#1#2{%
+    \bxjs at register@badopt{#1}{\ClassError\bxjs at clsname{#2}\@ehc}}
+\else
+  \def\bxjs at invalid@opt#1#2{%
+    \DeclareOption{#1}{\ClassWarningNoLine\bxjs at clsname{#2}}}
+\fi
+\bxjs at invalid@opt{winjis}{%
+  This class does not support 'winjis' option}
+\bxjs at invalid@opt{mingoth}{%
+  This class does not support 'mingoth' option}
+\bxjs at invalid@opt{jis}{%
+  This class does not support 'jis' option}
+\if j\jsEngine\else
+\bxjs at invalid@opt{tombo}{%
+  Option 'tombo' can be used only on (u)pLaTeX}
+\bxjs at invalid@opt{tombow}{%
+  Option 'tombow' can be used only on (u)pLaTeX}
+\bxjs at invalid@opt{mentuke}{%
+  Option 'mentuke' can be used only on (u)pLaTeX}
+\fi
 \DeclareOption*{%
-  \def\bxjs at next{\bxjs at safe@setkeys{bxjs}}%
-  \expandafter\bxjs at next\expandafter{\CurrentOption}}
+  \bxjs at check@ja at prefix \ifx\bxjs at next\relax
+  \def\bxjs at next{\bxjs at cls@setkeys{bxjs}}%
+  \expandafter\bxjs at next\expandafter{\CurrentOption}%
+  \else
+    \edef\bxjs at next{%
+      \noexpand\setkeys{bxjs}{japaram={\bxjs at next}}%
+    }\bxjs at next
+  \fi}
+\def\bxjs at check@ja at prefix{%
+  \let\bxjs at next\relax
+  \expandafter\bxjs at check@ja at prefix@a\CurrentOption\@nil ja:\@nil\@nnil}
+\def\bxjs at check@ja at prefix@a#1ja:#2\@nil#3\@nnil{%
+  \ifx\@nil#1\@nil \def\bxjs at next{#2}\fi}
 \def\bxjs at safe@setkeys#1#2{%
   \let\bxjs at save@KV at errx\KV at errx \let\KV at errx\@gobble
   \setkeys{#1}{#2}%
   \let\KV at errx\bxjs at save@KV at errx}
+\def\bxjs at cls@setkeys#1#2{%
+  \let\bxjs at save@KV at errx\KV at errx
+  \def\KV at errx##1{\OptionNotUsed}%
+  \setkeys{#1}{#2}%
+  \let\KV at errx\bxjs at save@KV at errx}
+\ifbxjs at brace@safe\else
+  \let\bxjs at cls@setkeys\bxjs at safe@setkeys
+\fi
 \@onlypreamble\bxjs at declare@enum at option
 \def\bxjs at declare@enum at option#1#2#3{%
   \bxjs at csletcs{bxjs@#2}{bxjs@#2@@#3}%
@@ -675,6 +717,7 @@
 \bxjs at declare@bool at option{plautopatch}{plautopatch}{false}
 \g at addto@macro\bxjs at plautopatchtrue{\let\bxjs at plautopatch@given\@undefined}
 \g at addto@macro\bxjs at plautopatchfalse{\def\bxjs at plautopatch@given{false}}
+\ifbxjs at brace@safe\else
 \let\bxjs at org@removeelement\@removeelement
 \def\@removeelement#1#2#3{%
   \def\reserved at a{#2}%
@@ -681,6 +724,7 @@
   \ifx\reserved at a\@empty \let#3\@empty
   \else \bxjs at org@removeelement{#1}{#2}{#3}%
   \fi}
+\fi
 \ExecuteOptions{a4paper,oneside,onecolumn,titlepage,openany,final}
 \ProcessOptions\relax
 \bxjs at post@option at hook
@@ -907,14 +951,10 @@
 \ifjsc at mag
   \jsc at mpt=1\p@
   \jsc at mmm=1mm
-  \catcode`\?=9 % \p@? read as \p@
 \else
   \jsc at mpt=\jsc at magscale\p@
   \jsc at mmm=\jsc at magscale mm
-  \catcode`\?=11 \let\p@?\jsc at mpt
 \fi
-\chardef\bxjs at qmcc=\catcode`\?\relax
-\g at addto@macro\bxjs at pre@jadriver at hook{\catcode`\?=12\relax}
 \newdimen\jsZw
 \jsZw=10\jsc at mpt \jsZw=\jsScale\jsZw
 \ifbxjs at usezw
@@ -992,7 +1032,7 @@
     \let\bxjs at prev@set at fontsize\set at fontsize
   \fi}
 \bxjs at patch@set at fontsize
-\AtEndOfPackage{\bxjs at patch@set at fontsize}
+\AtEndOfClass{\bxjs at patch@set at fontsize}
 \newcommand*\jsFontSizeChanged{%
   \jsZw=\f at size\p@
   \jsZw=\jsScale \jsZw
@@ -1047,9 +1087,9 @@
   }{%else
     \jsc at setfontsize\normalsize\@xpt{\n at baseline}%
   }%
-  \abovedisplayskip 11\p@? \@plus3\p@? \@minus4\p@?
-  \abovedisplayshortskip \z@ \@plus3\p@?
-  \belowdisplayskip 9\p@? \@plus3\p@? \@minus4\p@?
+  \abovedisplayskip 11\jsc at mpt \@plus3\jsc at mpt \@minus4\jsc at mpt
+  \abovedisplayshortskip \z@ \@plus3\jsc at mpt
+  \belowdisplayskip 9\jsc at mpt \@plus3\jsc at mpt \@minus4\jsc at mpt
   \belowdisplayshortskip \belowdisplayskip
   \let\@listi\@listI}
 %% initialize
@@ -1070,8 +1110,8 @@
   }{%else
     \jsc at setfontsize\small\@ixpt{13}%
   }%
-  \abovedisplayskip 9\p@? \@plus3\p@? \@minus4\p@?
-  \abovedisplayshortskip  \z@ \@plus3\p@?
+  \abovedisplayskip 9\jsc at mpt \@plus3\jsc at mpt \@minus4\jsc at mpt
+  \abovedisplayshortskip  \z@ \@plus3\jsc at mpt
   \belowdisplayskip \abovedisplayskip
   \belowdisplayshortskip \belowdisplayskip
   \def\@listi{\leftmargin\leftmargini
@@ -1084,8 +1124,8 @@
   }{%else
     \jsc at setfontsize\footnotesize\@viiipt{11}%
   }%
-  \abovedisplayskip 6\p@? \@plus2\p@? \@minus3\p@?
-  \abovedisplayshortskip  \z@ \@plus2\p@?
+  \abovedisplayskip 6\jsc at mpt \@plus2\jsc at mpt \@minus3\jsc at mpt
+  \abovedisplayshortskip  \z@ \@plus2\jsc at mpt
   \belowdisplayskip \abovedisplayskip
   \belowdisplayshortskip \belowdisplayskip
   \def\@listi{\leftmargin\leftmargini
@@ -1127,7 +1167,7 @@
 \ifjsc at mag
 \mag=\bxjs at param@mag
 \fi
-\setlength{\topskip}{10\p@?}
+\setlength{\topskip}{10\jsc at mpt}
 \def\bxjs at unit@trueQ{0.25truemm}\let\bxjs at unit@trueH\bxjs at unit@trueQ
 \def\bxjs at unit@zw{\jsZw}\let\bxjs at unit@zh\bxjs at unit@zw
 \@tempswafalse
@@ -1288,8 +1328,8 @@
    {Command '\string\setpagelayout' is not supported,\MessageBreak
     because 'geometry' value is not 'class'}\@eha}
 \fi\fi
-\footnotesep=11\p@? \footnotesep=0.7\footnotesep
-\setlength{\skip\footins}{16\p@? \@plus 5\p@? \@minus 2\p@?}
+\footnotesep=11\jsc at mpt \footnotesep=0.7\footnotesep
+\setlength{\skip\footins}{16\jsc at mpt \@plus 5\jsc at mpt \@minus 2\jsc at mpt}
 \setcounter{topnumber}{9}
 \renewcommand{\topfraction}{.85}
 \setcounter{bottomnumber}{9}
@@ -1300,17 +1340,17 @@
 \setcounter{dbltopnumber}{9}
 \renewcommand{\dbltopfraction}{.8}
 \renewcommand{\dblfloatpagefraction}{.8}
-\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\dblfloatsep    {12\p@? \@plus 2\p@? \@minus 2\p@?}
-\setlength\dbltextfloatsep{20\p@? \@plus 2\p@? \@minus 4\p@?}
-\setlength\@fptop{0\p@? \@plus 1fil}
-\setlength\@fpsep{8\p@? \@plus 2fil}
-\setlength\@fpbot{0\p@? \@plus 1fil}
-\setlength\@dblfptop{0\p@? \@plus 1fil}
-\setlength\@dblfpsep{8\p@? \@plus 2fil}
-\setlength\@dblfpbot{0\p@? \@plus 1fil}
+\setlength\floatsep    {12\jsc at mpt \@plus 2\jsc at mpt \@minus 2\jsc at mpt}
+\setlength\textfloatsep{20\jsc at mpt \@plus 2\jsc at mpt \@minus 4\jsc at mpt}
+\setlength\intextsep   {12\jsc at mpt \@plus 2\jsc at mpt \@minus 2\jsc at mpt}
+\setlength\dblfloatsep    {12\jsc at mpt \@plus 2\jsc at mpt \@minus 2\jsc at mpt}
+\setlength\dbltextfloatsep{20\jsc at mpt \@plus 2\jsc at mpt \@minus 4\jsc at mpt}
+\setlength\@fptop{0\jsc at mpt \@plus 1fil}
+\setlength\@fpsep{8\jsc at mpt \@plus 2fil}
+\setlength\@fpbot{0\jsc at mpt \@plus 1fil}
+\setlength\@dblfptop{0\jsc at mpt \@plus 1fil}
+\setlength\@dblfpsep{8\jsc at mpt \@plus 2fil}
+\setlength\@dblfpbot{0\jsc at mpt \@plus 1fil}
 \def\pltx at cleartooddpage{\clearpage\if at twoside
   \ifodd\c at page\else
     \hbox{}\thispagestyle{empty}\newpage
@@ -1421,7 +1461,7 @@
         \begin{center}
           \mbox{} \\[1\jsZw]
           \large
-          {\maybeblue\hrule height0\p@? depth2\p@?\relax}\par
+          {\maybeblue\hrule height0\jsc at mpt depth2\jsc at mpt\relax}\par
           \jsc at smallskip
           \@title
           \ifx\bxjs at subtitle\@undefined\else
@@ -1429,16 +1469,16 @@
             {\small \bxjs at subtitle\par}
           \fi
           \jsc at smallskip
-          {\maybeblue\hrule height0\p@? depth2\p@?\relax}\par
+          {\maybeblue\hrule height0\jsc at mpt depth2\jsc at mpt\relax}\par
           \vfill
           {\small \@author}%
         \end{center}
       \else
-      \vskip 60\p@?
+      \vskip 60\jsc at mpt
       \begin{center}%
         {\LARGE \@title \par}%
         \ifx\bxjs at subtitle\@undefined\else
-          \vskip5\p@?
+          \vskip5\jsc at mpt
           {\normalsize \bxjs at subtitle\par}
         \fi
         \vskip 3em%
@@ -1509,7 +1549,7 @@
       \let\footnote\thanks
       {\LARGE \@title \par}%
       \ifx\bxjs at subtitle\@undefined\else
-        \vskip3\p@?
+        \vskip3\jsc at mpt
         {\normalsize \bxjs at subtitle\par}
       \fi
       \vskip 1.5em
@@ -1706,7 +1746,7 @@
     \normalfont
     \ifnum \c at secnumdepth >-2\relax
       \huge\headfont \prepartname\thepart\postpartname
-      \par\vskip20\p@?
+      \par\vskip20\jsc at mpt
     \fi
     \Huge \headfont #2\par}%
   \@endpart}
@@ -2022,13 +2062,13 @@
   \gdef\@chapapp{\appendixname}%
   \gdef\@chappos{}%
   \gdef\thechapter{\@Alph\c at chapter}}
-\setlength\arraycolsep{5\p@?}
-\setlength\tabcolsep{6\p@?}
+\setlength\arraycolsep{5\jsc at mpt}
+\setlength\tabcolsep{6\jsc at mpt}
 \setlength\arrayrulewidth{.4\p@}
 \setlength\doublerulesep{2\p@}
 \setlength\tabbingsep{\labelsep}
 \skip\@mpfootins = \skip\footins
-\setlength\fboxsep{3\p@?}
+\setlength\fboxsep{3\jsc at mpt}
 \setlength\fboxrule{.4\p@}
 \@addtoreset{equation}{chapter}
 \renewcommand\theequation
@@ -2061,8 +2101,8 @@
                {\end at dblfloat}
 \newlength\abovecaptionskip
 \newlength\belowcaptionskip
-\setlength\abovecaptionskip{5\p@?} % 元: 10\p@
-\setlength\belowcaptionskip{5\p@?} % 元: 0\p@
+\setlength\abovecaptionskip{5\jsc at mpt} % 元: 10\p@
+\setlength\belowcaptionskip{5\jsc at mpt} % 元: 0\p@
 \long\def\@makecaption#1#2{{\small
   \advance\leftskip .0628\linewidth
   \advance\rightskip .0628\linewidth
@@ -2160,7 +2200,7 @@
 \newcommand*{\l at part}[2]{%
   \ifnum \c at tocdepth >-2\relax
     \addpenalty{-\@highpenalty}%
-    \addvspace{2.25em \@plus\p@?}%
+    \addvspace{2.25em \@plus\jsc at mpt}%
     \begingroup
       \parindent \z@
       \rightskip \@tocrmarg
@@ -2177,7 +2217,7 @@
 \newcommand*{\l at chapter}[2]{%
   \ifnum \c at tocdepth >\m at ne
     \addpenalty{-\@highpenalty}%
-    \addvspace{1.0em \@plus\p@?}
+    \addvspace{1.0em \@plus\jsc at mpt}
     \begingroup
       \parindent\z@
       \rightskip\@tocrmarg
@@ -2210,7 +2250,7 @@
 \def\jsTocLine{\leaders\hbox{%
   $\m at th \mkern \@dotsep mu\hbox{.}\mkern \@dotsep mu$}\hfill}
 \def\@dottedtocline#1#2#3#4#5{\ifnum #1>\c at tocdepth \else
-  \vskip \z@ \@plus.2\p@?
+  \vskip \z@ \@plus.2\jsc at mpt
   {\leftskip #2\relax \rightskip \@tocrmarg \parfillskip -\rightskip
     \parindent #2\relax\@afterindenttrue
    \interlinepenalty\@M
@@ -2289,7 +2329,7 @@
     \@mkboth{\indexname}{}%
     \plainifnotempty % \thispagestyle{plain}
     \parindent\z@
-    \parskip\z@ \@plus .3\p@?\relax
+    \parskip\z@ \@plus .3\jsc at mpt\relax
     \let\item\@idxitem
     \raggedright
     \footnotesize\narrowbaselines
@@ -2304,7 +2344,7 @@
 \newcommand{\@idxitem}{\par\hangindent 4\jsZw} % 元 40pt
 \newcommand{\subitem}{\@idxitem \hspace*{2\jsZw}} % 元 20pt
 \newcommand{\subsubitem}{\@idxitem \hspace*{3\jsZw}} % 元 30pt
-\newcommand{\indexspace}{\par \vskip 10\p@? \@plus5\p@? \@minus3\p@?\relax}
+\newcommand{\indexspace}{\par \vskip 10\jsc at mpt \@plus5\jsc at mpt \@minus3\jsc at mpt\relax}
 \newcommand\seename{\if at english see\else →\fi}
 \newcommand\alsoname{\if at english see also\else →\fi}
 \ifx\pltx at foot@penalty\@undefined
@@ -2315,9 +2355,9 @@
 \fi
 \def\thefootnote{\ifnum\c at footnote>\z@\leavevmode\lower.5ex\hbox{*}\@arabic\c at footnote\fi}
 \renewcommand{\footnoterule}{%
-  \kern-2.6\p@? \kern-.4\p@
+  \kern-2.6\jsc at mpt \kern-.4\p@
   \hrule width .4\columnwidth
-  \kern 2.6\p@?}
+  \kern 2.6\jsc at mpt}
 \@addtoreset{footnote}{chapter}
 \long\def\@footnotetext{%
   \insert\footins\bgroup
@@ -2472,7 +2512,7 @@
     \fi\everyparhook}}
 \fi
 \ifnum\bxjs at everyparhook=\bxjs at everyparhook@@none\else
-\AtEndOfPackage{%
+\AtEndOfClass{%
 \def\@gnewline #1{%
   \ifvmode
     \@nolnerr

Modified: trunk/Master/texmf-dist/tex/latex/bxjscls/bxjsslide.cls
===================================================================
--- trunk/Master/texmf-dist/tex/latex/bxjscls/bxjsslide.cls	2023-07-17 15:15:21 UTC (rev 67656)
+++ trunk/Master/texmf-dist/tex/latex/bxjscls/bxjsslide.cls	2023-07-17 20:39:57 UTC (rev 67657)
@@ -22,7 +22,7 @@
 %% in the same archive or directory.)
 \NeedsTeXFormat{LaTeX2e}
 \ProvidesClass{bxjsslide}
-  [2023/07/01 v2.8b BXJS document classes]
+  [2023/07/17 v2.9  BXJS document classes]
 %% このファイルは日本語文字を含みます.
 \def\bxjs at clsname{bxjsslide}
 \newif\ifjsc at needsp@tch
@@ -43,16 +43,6 @@
 \bxjs at test@engine\XeTeXversion{\let\jsEngine=x}
 \bxjs at test@engine\pdftexversion{\let\jsEngine=p}
 \bxjs at test@engine\luatexversion{\let\jsEngine=l}
-\let\bxjs at tmpa\relax
-\ifx J\jsEngine \def\bxjs at tmpa{NTT-jTeX}\fi
-\ifx O\jsEngine \def\bxjs at tmpa{Omega}\fi
-\ifx\bxjs at tmpa\relax \expandafter\@gobble
-\else
-  \ClassError\bxjs at clsname
-   {The engine in use (\bxjs at tmpa) is not supported}
-   {It's a fatal error. I'll quit right now.}
-  \expandafter\@firstofone
-\fi{\endinput\@@end}
 \@tempswatrue
 \if x\jsEngine
   \ifdim\the\XeTeXversion\XeTeXrevision\p@<0.997\p@
@@ -75,6 +65,12 @@
   \expandafter\@firstofone
 \else \expandafter\@gobble
 \fi{\typeout{Farewell!}\endinput\@@end}
+\def\bxjs at if@format at at@least{\@ifl at t@r\fmtversion}
+\bxjs at if@format at at@least{2017/04/15}{%
+  \let\bxjs at if@package at at@least\@ifpackagelater
+}{%else
+  \def\bxjs at if@package at at@least#1#2{%
+    \@ifpackageloaded{#1}{\@ifpackagelater{#1}{#2}}{\@secondoftwo}}}
 \newif\ifjsWithupTeX
 \ifx\ucs\@undefined\else \ifnum\ucs"3000="3000
   \jsWithupTeXtrue
@@ -90,7 +86,9 @@
   \ifx\outputmode\@undefined\else\the\outputmode\fi
   >0 true\else false\fi}
 \newif\ifbxjs at explIII
-\@ifl at t@r\fmtversion{2020/02/02}{\bxjs at explIIItrue}{}
+\bxjs at if@format at at@least{2020/02/02}{\bxjs at explIIItrue}{}
+\newif\ifbxjs at brace@safe
+\bxjs at if@format at at@least{2021/06/01}{\bxjs at brace@safetrue}{}
 \newif\ifbxjs at TUenc
 \def\bxjs at tmpa{TU}\edef\bxjs at tmpb{\f at encoding}
 \ifx\bxjs at tmpa\bxjs at tmpb
@@ -97,7 +95,7 @@
   \bxjs at TUenctrue
 \fi
 \newif\ifbxjs at old@hook at system
-\@ifl at t@r\fmtversion{2020/10/01}{}{\bxjs at old@hook at systemtrue}
+\bxjs at if@format at at@least{2020/10/01}{}{\bxjs at old@hook at systemtrue}
 \RequirePackage{calc}
 \RequirePackage{keyval}
 \IfFileExists{iftex.sty}{%
@@ -124,7 +122,7 @@
 \else
   \def\bxjs at robust@def{\DeclareRobustCommand*}
 \fi
-\@ifl at t@r\fmtversion{2021/11/15}{%
+\bxjs at if@format at at@least{2021/11/15}{%
   \def\bxjs at CGHN#1{#1}%
 }{%else
   \def\bxjs at CGHN#1{\bxjs at CGHN@a#1//}%
@@ -201,6 +199,12 @@
 \let\bxjs at post@option at hook\@empty
 \@onlypreamble\bxjs at pre@jadriver at hook
 \let\bxjs at pre@jadriver at hook\@empty
+\@onlypreamble\bxjs at endpreamble@hook
+\let\bxjs at endpreamble@hook\@empty
+\AtEndOfClass{%
+  \ifx\AtEndPreamble\@undefined\else
+    \AtEndPreamble{\bxjs at endpreamble@hook}%
+  \fi}
 \@onlypreamble\bxjs at tmpdo
 \@onlypreamble\bxjs at tmpdo@a
 \@onlypreamble\bxjs at tmpdo@b
@@ -505,25 +509,63 @@
   \bxjs at oldfontcommandsfalse}
 \DeclareOption{oldfontcommands}{%
   \bxjs at oldfontcommandstrue}
-\DeclareOption{winjis}{%
-  \ClassWarningNoLine\bxjs at clsname
-   {This class does not support `winjis' option}%
-}
-\DeclareOption{mingoth}{%
-  \ClassWarningNoLine\bxjs at clsname
-   {This class does not support `mingoth' option}%
-}
-\DeclareOption{jis}{%
-  \ClassWarningNoLine\bxjs at clsname
-   {This class does not support `jis' option}%
-}
+\ifbxjs at brace@safe
+  \@onlypreamble\bxjs at register@badopt
+  \def\bxjs at register@badopt#1{%
+    \expandafter\@onlypreamble\csname bxjs at badopt/#1\endcsname
+    \@namedef{bxjs at badopt/#1}}
+  \g at addto@macro\bxjs at begin@document at hook{%
+    \@for\bxjs at tmpa:=\@unusedoptionlist\do{%
+      \@nameuse{bxjs at badopt/\bxjs at tmpa}}}
+\fi
+\@onlypreamble\bxjs at invalid@opt
+\ifbxjs at brace@safe
+  \def\bxjs at invalid@opt#1#2{%
+    \bxjs at register@badopt{#1}{\ClassError\bxjs at clsname{#2}\@ehc}}
+\else
+  \def\bxjs at invalid@opt#1#2{%
+    \DeclareOption{#1}{\ClassWarningNoLine\bxjs at clsname{#2}}}
+\fi
+\bxjs at invalid@opt{winjis}{%
+  This class does not support 'winjis' option}
+\bxjs at invalid@opt{mingoth}{%
+  This class does not support 'mingoth' option}
+\bxjs at invalid@opt{jis}{%
+  This class does not support 'jis' option}
+\if j\jsEngine\else
+\bxjs at invalid@opt{tombo}{%
+  Option 'tombo' can be used only on (u)pLaTeX}
+\bxjs at invalid@opt{tombow}{%
+  Option 'tombow' can be used only on (u)pLaTeX}
+\bxjs at invalid@opt{mentuke}{%
+  Option 'mentuke' can be used only on (u)pLaTeX}
+\fi
 \DeclareOption*{%
-  \def\bxjs at next{\bxjs at safe@setkeys{bxjs}}%
-  \expandafter\bxjs at next\expandafter{\CurrentOption}}
+  \bxjs at check@ja at prefix \ifx\bxjs at next\relax
+  \def\bxjs at next{\bxjs at cls@setkeys{bxjs}}%
+  \expandafter\bxjs at next\expandafter{\CurrentOption}%
+  \else
+    \edef\bxjs at next{%
+      \noexpand\setkeys{bxjs}{japaram={\bxjs at next}}%
+    }\bxjs at next
+  \fi}
+\def\bxjs at check@ja at prefix{%
+  \let\bxjs at next\relax
+  \expandafter\bxjs at check@ja at prefix@a\CurrentOption\@nil ja:\@nil\@nnil}
+\def\bxjs at check@ja at prefix@a#1ja:#2\@nil#3\@nnil{%
+  \ifx\@nil#1\@nil \def\bxjs at next{#2}\fi}
 \def\bxjs at safe@setkeys#1#2{%
   \let\bxjs at save@KV at errx\KV at errx \let\KV at errx\@gobble
   \setkeys{#1}{#2}%
   \let\KV at errx\bxjs at save@KV at errx}
+\def\bxjs at cls@setkeys#1#2{%
+  \let\bxjs at save@KV at errx\KV at errx
+  \def\KV at errx##1{\OptionNotUsed}%
+  \setkeys{#1}{#2}%
+  \let\KV at errx\bxjs at save@KV at errx}
+\ifbxjs at brace@safe\else
+  \let\bxjs at cls@setkeys\bxjs at safe@setkeys
+\fi
 \@onlypreamble\bxjs at declare@enum at option
 \def\bxjs at declare@enum at option#1#2#3{%
   \bxjs at csletcs{bxjs@#2}{bxjs@#2@@#3}%
@@ -667,6 +709,7 @@
 \bxjs at declare@bool at option{plautopatch}{plautopatch}{false}
 \g at addto@macro\bxjs at plautopatchtrue{\let\bxjs at plautopatch@given\@undefined}
 \g at addto@macro\bxjs at plautopatchfalse{\def\bxjs at plautopatch@given{false}}
+\ifbxjs at brace@safe\else
 \let\bxjs at org@removeelement\@removeelement
 \def\@removeelement#1#2#3{%
   \def\reserved at a{#2}%
@@ -673,6 +716,7 @@
   \ifx\reserved at a\@empty \let#3\@empty
   \else \bxjs at org@removeelement{#1}{#2}{#3}%
   \fi}
+\fi
 \ExecuteOptions{36pt,a4paper,landscape,oneside,onecolumn,titlepage,final}
 \ProcessOptions\relax
 \bxjs at post@option at hook
@@ -898,14 +942,10 @@
 \ifjsc at mag
   \jsc at mpt=1\p@
   \jsc at mmm=1mm
-  \catcode`\?=9 % \p@? read as \p@
 \else
   \jsc at mpt=\jsc at magscale\p@
   \jsc at mmm=\jsc at magscale mm
-  \catcode`\?=11 \let\p@?\jsc at mpt
 \fi
-\chardef\bxjs at qmcc=\catcode`\?\relax
-\g at addto@macro\bxjs at pre@jadriver at hook{\catcode`\?=12\relax}
 \newdimen\jsZw
 \jsZw=10\jsc at mpt \jsZw=\jsScale\jsZw
 \ifbxjs at usezw
@@ -983,7 +1023,7 @@
     \let\bxjs at prev@set at fontsize\set at fontsize
   \fi}
 \bxjs at patch@set at fontsize
-\AtEndOfPackage{\bxjs at patch@set at fontsize}
+\AtEndOfClass{\bxjs at patch@set at fontsize}
 \newcommand*\jsFontSizeChanged{%
   \jsZw=\f at size\p@
   \jsZw=\jsScale \jsZw
@@ -1038,9 +1078,9 @@
   }{%else
     \jsc at setfontsize\normalsize\@xpt{\n at baseline}%
   }%
-  \abovedisplayskip 11\p@? \@plus3\p@? \@minus4\p@?
-  \abovedisplayshortskip \z@ \@plus3\p@?
-  \belowdisplayskip 9\p@? \@plus3\p@? \@minus4\p@?
+  \abovedisplayskip 11\jsc at mpt \@plus3\jsc at mpt \@minus4\jsc at mpt
+  \abovedisplayshortskip \z@ \@plus3\jsc at mpt
+  \belowdisplayskip 9\jsc at mpt \@plus3\jsc at mpt \@minus4\jsc at mpt
   \belowdisplayshortskip \belowdisplayskip
   \let\@listi\@listI}
 %% initialize
@@ -1061,8 +1101,8 @@
   }{%else
     \jsc at setfontsize\small\@ixpt{13}%
   }%
-  \abovedisplayskip 9\p@? \@plus3\p@? \@minus4\p@?
-  \abovedisplayshortskip  \z@ \@plus3\p@?
+  \abovedisplayskip 9\jsc at mpt \@plus3\jsc at mpt \@minus4\jsc at mpt
+  \abovedisplayshortskip  \z@ \@plus3\jsc at mpt
   \belowdisplayskip \abovedisplayskip
   \belowdisplayshortskip \belowdisplayskip
   \def\@listi{\leftmargin\leftmargini
@@ -1075,8 +1115,8 @@
   }{%else
     \jsc at setfontsize\footnotesize\@viiipt{11}%
   }%
-  \abovedisplayskip 6\p@? \@plus2\p@? \@minus3\p@?
-  \abovedisplayshortskip  \z@ \@plus2\p@?
+  \abovedisplayskip 6\jsc at mpt \@plus2\jsc at mpt \@minus3\jsc at mpt
+  \abovedisplayshortskip  \z@ \@plus2\jsc at mpt
   \belowdisplayskip \abovedisplayskip
   \belowdisplayshortskip \belowdisplayskip
   \def\@listi{\leftmargin\leftmargini
@@ -1118,7 +1158,7 @@
 \ifjsc at mag
 \mag=\bxjs at param@mag
 \fi
-\setlength{\topskip}{10\p@?}
+\setlength{\topskip}{10\jsc at mpt}
 \def\bxjs at unit@trueQ{0.25truemm}\let\bxjs at unit@trueH\bxjs at unit@trueQ
 \def\bxjs at unit@zw{\jsZw}\let\bxjs at unit@zh\bxjs at unit@zw
 \@tempswafalse
@@ -1278,8 +1318,8 @@
    {Command '\string\setpagelayout' is not supported,\MessageBreak
     because 'geometry' value is not 'class'}\@eha}
 \fi\fi
-\footnotesep=11\p@? \footnotesep=0.7\footnotesep
-\setlength{\skip\footins}{16\p@? \@plus 5\p@? \@minus 2\p@?}
+\footnotesep=11\jsc at mpt \footnotesep=0.7\footnotesep
+\setlength{\skip\footins}{16\jsc at mpt \@plus 5\jsc at mpt \@minus 2\jsc at mpt}
 \setcounter{topnumber}{9}
 \renewcommand{\topfraction}{.85}
 \setcounter{bottomnumber}{9}
@@ -1290,17 +1330,17 @@
 \setcounter{dbltopnumber}{9}
 \renewcommand{\dbltopfraction}{.8}
 \renewcommand{\dblfloatpagefraction}{.8}
-\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\dblfloatsep    {12\p@? \@plus 2\p@? \@minus 2\p@?}
-\setlength\dbltextfloatsep{20\p@? \@plus 2\p@? \@minus 4\p@?}
-\setlength\@fptop{0\p@? \@plus 1fil}
-\setlength\@fpsep{8\p@? \@plus 2fil}
-\setlength\@fpbot{0\p@? \@plus 1fil}
-\setlength\@dblfptop{0\p@? \@plus 1fil}
-\setlength\@dblfpsep{8\p@? \@plus 2fil}
-\setlength\@dblfpbot{0\p@? \@plus 1fil}
+\setlength\floatsep    {12\jsc at mpt \@plus 2\jsc at mpt \@minus 2\jsc at mpt}
+\setlength\textfloatsep{20\jsc at mpt \@plus 2\jsc at mpt \@minus 4\jsc at mpt}
+\setlength\intextsep   {12\jsc at mpt \@plus 2\jsc at mpt \@minus 2\jsc at mpt}
+\setlength\dblfloatsep    {12\jsc at mpt \@plus 2\jsc at mpt \@minus 2\jsc at mpt}
+\setlength\dbltextfloatsep{20\jsc at mpt \@plus 2\jsc at mpt \@minus 4\jsc at mpt}
+\setlength\@fptop{0\jsc at mpt \@plus 1fil}
+\setlength\@fpsep{8\jsc at mpt \@plus 2fil}
+\setlength\@fpbot{0\jsc at mpt \@plus 1fil}
+\setlength\@dblfptop{0\jsc at mpt \@plus 1fil}
+\setlength\@dblfpsep{8\jsc at mpt \@plus 2fil}
+\setlength\@dblfpbot{0\jsc at mpt \@plus 1fil}
 \def\pltx at cleartooddpage{\clearpage\if at twoside
   \ifodd\c at page\else
     \hbox{}\thispagestyle{empty}\newpage
@@ -1409,7 +1449,7 @@
         \begin{center}
           \mbox{} \\[1\jsZw]
           \large
-          {\maybeblue\hrule height0\p@? depth2\p@?\relax}\par
+          {\maybeblue\hrule height0\jsc at mpt depth2\jsc at mpt\relax}\par
           \jsc at smallskip
           \@title
           \ifx\bxjs at subtitle\@undefined\else
@@ -1417,16 +1457,16 @@
             {\small \bxjs at subtitle\par}
           \fi
           \jsc at smallskip
-          {\maybeblue\hrule height0\p@? depth2\p@?\relax}\par
+          {\maybeblue\hrule height0\jsc at mpt depth2\jsc at mpt\relax}\par
           \vfill
           {\small \@author}%
         \end{center}
       \else
-      \vskip 60\p@?
+      \vskip 60\jsc at mpt
       \begin{center}%
         {\LARGE \@title \par}%
         \ifx\bxjs at subtitle\@undefined\else
-          \vskip5\p@?
+          \vskip5\jsc at mpt
           {\normalsize \bxjs at subtitle\par}
         \fi
         \vskip 3em%
@@ -1497,7 +1537,7 @@
       \let\footnote\thanks
       {\LARGE \@title \par}%
       \ifx\bxjs at subtitle\@undefined\else
-        \vskip3\p@?
+        \vskip3\jsc at mpt
         {\normalsize \bxjs at subtitle\par}
       \fi
       \vskip 1.5em
@@ -1918,13 +1958,13 @@
   \gdef\@secpos{}%
   \gdef\thesection{\@Alph\c at section}%
   \fi}
-\setlength\arraycolsep{5\p@?}
-\setlength\tabcolsep{6\p@?}
+\setlength\arraycolsep{5\jsc at mpt}
+\setlength\tabcolsep{6\jsc at mpt}
 \setlength\arrayrulewidth{.4\p@}
 \setlength\doublerulesep{2\p@}
 \setlength\tabbingsep{\labelsep}
 \skip\@mpfootins = \skip\footins
-\setlength\fboxsep{3\p@?}
+\setlength\fboxsep{3\jsc at mpt}
 \setlength\fboxrule{.4\p@}
 \renewcommand \theequation {\@arabic\c at equation}
 \newcounter{figure}
@@ -1953,8 +1993,8 @@
                {\end at dblfloat}
 \newlength\abovecaptionskip
 \newlength\belowcaptionskip
-\setlength\abovecaptionskip{5\p@?} % 元: 10\p@
-\setlength\belowcaptionskip{5\p@?} % 元: 0\p@
+\setlength\abovecaptionskip{5\jsc at mpt} % 元: 10\p@
+\setlength\belowcaptionskip{5\jsc at mpt} % 元: 0\p@
 \long\def\@makecaption#1#2{{\small
   \advance\leftskip .0628\linewidth
   \advance\rightskip .0628\linewidth
@@ -2046,7 +2086,7 @@
 \newcommand*{\l at part}[2]{%
   \ifnum \c at tocdepth >-2\relax
     \addpenalty\@secpenalty
-    \addvspace{2.25em \@plus\p@?}%
+    \addvspace{2.25em \@plus\jsc at mpt}%
     \begingroup
       \parindent \z@
       \rightskip \@tocrmarg
@@ -2061,7 +2101,7 @@
 \newcommand*{\l at section}[2]{%
   \ifnum \c at tocdepth >\z@
     \addpenalty{\@secpenalty}%
-    \addvspace{1.0em \@plus\p@?}%
+    \addvspace{1.0em \@plus\jsc at mpt}%
     \begingroup
       \parindent\z@
       \rightskip\@tocrmarg
@@ -2089,7 +2129,7 @@
 \def\jsTocLine{\leaders\hbox{%
   $\m at th \mkern \@dotsep mu\hbox{.}\mkern \@dotsep mu$}\hfill}
 \def\@dottedtocline#1#2#3#4#5{\ifnum #1>\c at tocdepth \else
-  \vskip \z@ \@plus.2\p@?
+  \vskip \z@ \@plus.2\jsc at mpt
   {\leftskip #2\relax \rightskip \@tocrmarg \parfillskip -\rightskip
     \parindent #2\relax\@afterindenttrue
    \interlinepenalty\@M
@@ -2161,7 +2201,7 @@
     \@mkboth{\indexname}{\indexname}%
     \plainifnotempty % \thispagestyle{plain}
     \parindent\z@
-    \parskip\z@ \@plus .3\p@?\relax
+    \parskip\z@ \@plus .3\jsc at mpt\relax
     \let\item\@idxitem
     \raggedright
     \footnotesize\narrowbaselines
@@ -2176,7 +2216,7 @@
 \newcommand{\@idxitem}{\par\hangindent 4\jsZw} % 元 40pt
 \newcommand{\subitem}{\@idxitem \hspace*{2\jsZw}} % 元 20pt
 \newcommand{\subsubitem}{\@idxitem \hspace*{3\jsZw}} % 元 30pt
-\newcommand{\indexspace}{\par \vskip 10\p@? \@plus5\p@? \@minus3\p@?\relax}
+\newcommand{\indexspace}{\par \vskip 10\jsc at mpt \@plus5\jsc at mpt \@minus3\jsc at mpt\relax}
 \newcommand\seename{\if at english see\else →\fi}
 \newcommand\alsoname{\if at english see also\else →\fi}
 \ifx\pltx at foot@penalty\@undefined
@@ -2187,9 +2227,9 @@
 \fi
 \def\thefootnote{\ifnum\c at footnote>\z@\leavevmode\lower.5ex\hbox{*}\@arabic\c at footnote\fi}
 \renewcommand{\footnoterule}{%
-  \kern-2.6\p@? \kern-.4\p@
+  \kern-2.6\jsc at mpt \kern-.4\p@
   \hrule width .4\columnwidth
-  \kern 2.6\p@?}
+  \kern 2.6\jsc at mpt}
 \long\def\@footnotetext{%
   \insert\footins\bgroup
     \normalfont\footnotesize
@@ -2343,7 +2383,7 @@
     \fi\everyparhook}}
 \fi
 \ifnum\bxjs at everyparhook=\bxjs at everyparhook@@none\else
-\AtEndOfPackage{%
+\AtEndOfClass{%
 \def\@gnewline #1{%
   \ifvmode
     \@nolnerr



More information about the tex-live-commits mailing list.