From 9eb6f85105699320d8cbdbb33bcdc88c41ea709a Mon Sep 17 00:00:00 2001
From: Norbert Preining <norbert@preining.info>
Date: Thu, 15 Jun 2023 03:03:06 +0000
Subject: CTAN sync 202306150303

---
 language/japanese/BX/bxjscls/bxjscls.dtx | 364 +++++++++++++++++++++----------
 1 file changed, 253 insertions(+), 111 deletions(-)

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

diff --git a/language/japanese/BX/bxjscls/bxjscls.dtx b/language/japanese/BX/bxjscls/bxjscls.dtx
index 443d869a59..ab230dfedb 100644
--- a/language/japanese/BX/bxjscls/bxjscls.dtx
+++ b/language/japanese/BX/bxjscls/bxjscls.dtx
@@ -25,15 +25,15 @@
 %
 %---------------------------------------
 %
-%  Copyright 1993-2020
+%  Copyright 1993-2022
 %  The LaTeX3 Project and any individual authors listed elsewhere
 %  in this file.
 %
 %  Copyright 1995-1999 ASCII Corporation.
 %  Copyright 1999-2016 Haruhiko Okumura
-%  Copyright 2016-2020 Japanese TeX Development Community
+%  Copyright 2016-2023 Japanese TeX Development Community
 %
-%  Copyright 2013-2022 Takayuki YATO (aka. "ZR")
+%  Copyright 2013-2023 Takayuki YATO (aka. "ZR")
 %
 % \fi
 % \CheckSum{0}
@@ -56,7 +56,9 @@
 %<*driver>
 \ProvidesFile{bxjscls.dtx}
 %</driver>
-  [2022/04/10 v2.7a BXJS document classes]
+  [2023/06/14 v2.8  BXJS document classes]
+% based on jsclasses [2023/02/23]
+% [2022/04/10 v2.7a BXJS document classes]
 % [2022/03/30 v2.7  BXJS document classes]
 % [2022/03/20 v2.6  BXJS document classes]
 % [2021/05/18 v2.5a BXJS document classes]
@@ -320,8 +322,12 @@
 % をあてる場合があります。この処理に使用するフラグを定義します。
 %
 %    \begin{macrocode}
+%</class>
+%<*class|minijs>
 \newif\ifjsc@needsp@tch
 \jsc@needsp@tchfalse
+%</class|minijs>
+%<*class>
 %    \end{macrocode}
 % \end{macro}
 %
@@ -339,7 +345,7 @@
 %    \end{macrocode}
 % クラスの本体ではこの他に以下のパッケージが読み込まれる。
 % \begin{quote}
-%   |geometry|、|ifpdf|
+%   |geometry|、|iftex|
 % \end{quote}
 % また状況によっては以下のパッケージが読み込まれる可能性がある。
 % \begin{quote}
@@ -481,23 +487,6 @@
 %    \end{macrocode}
 % \end{macro}
 %
-% \begin{macro}{\ifjsInPdfMode}
-% 〔スイッチ〕
-% {\pdfTeX}／{\LuaTeX}がPDFモードで動作しているか。
-% \Note {\LuaTeX} 0.8x版でのプリミティブ名変更に対応。
-% \TODO |iftex| パッケージ（＋自前実装）に置き換える。
-%    \begin{macrocode}
-\newif\ifjsInPdfMode
-\@nameuse{ImposeOldLuaTeXBehavior}
-\let\bxjs@tmpa\PackageWarningNoLine
-\let\PackageWarningNoLine\PackageInfo % suppress warning
-\RequirePackage{ifpdf}
-\let\PackageWarningNoLine\bxjs@tmpa
-\@nameuse{RevokeOldLuaTeXBehavior}
-\let\ifjsInPdfMode\ifpdf
-%    \end{macrocode}
-% \end{macro}
-%
 % \begin{macro}{\ifbxjs@explIII}
 % 〔スイッチ〕
 % expl3がカーネルに組み込まれているか。
@@ -578,6 +567,20 @@
 %    \end{macrocode}
 % \end{macro}
 %
+% \begin{macro}{\ifjsInPdfMode}
+% 〔スイッチ〕
+% {\pdfTeX}／{\LuaTeX}がPDFモードで動作しているか。
+%    \begin{macrocode}
+\RequirePackage{iftex}
+\newif\ifjsInPdfMode
+\@nameuse{jsInPdfMode\ifnum0%
+  \ifx\pdfoutput\@undefined\else\the\pdfoutput\fi
+  \ifx\outputmode\@undefined\else\the\outputmode\fi
+  >0 true\else false\fi}
+\ifx\pdffalse\@undefined\else \bxjs@csletcs{ifjsInPdfMode}{ifpdf}\fi
+%    \end{macrocode}
+% \end{macro}
+%
 % \begin{macro}{\bxjs@catopt}
 % |\bxjs@catopt{|\Meta{文字列1}|}{|\Meta{文字列2}|}|\Means
 % 2つの文字列を |,| で繋いだ文字列。
@@ -1170,10 +1173,14 @@
 %    ようですので，少し小さくします。
 %    また，中央の要素も |\displaystyle| にします。
 %
+% [2022-09-13] \LaTeXe~2021-11-15 (ltmath.dtx 2021/10/14 v1.2j)で
+% |\@currentcounter|が追加されましたので，追随します。
+%
 %    \begin{macrocode}
 \def\eqnarray{%
    \stepcounter{equation}%
    \def\@currentlabel{\p@equation\theequation}%
+   \def\@currentcounter{equation}%
    \global\@eqnswtrue
    \m@th
    \global\@eqcnt\z@
@@ -1193,6 +1200,9 @@
 % \texttt{fleqn} で数式が本文左端から一定距離のところに出力されます。
 % 森本さんにしたがって訂正しました。
 %
+% [2022-09-13] \LaTeXe~2021-11-15 (ltmath.dtx 2021/10/14 v1.2j)で
+% |\@currentcounter|が追加されましたので，追随します。
+%
 %    \begin{macrocode}
 \DeclareOption{leqno}{\input{leqno.clo}}
 \DeclareOption{fleqn}{\input{fleqn.clo}%
@@ -1200,6 +1210,7 @@
   \def\eqnarray{%
     \stepcounter{equation}%
     \def\@currentlabel{\p@equation\theequation}%
+    \def\@currentcounter{equation}%
     \global\@eqnswtrue\m@th
     \global\@eqcnt\z@
     \tabskip\mathindent
@@ -2122,6 +2133,7 @@
 % 〔スイッチ〕 |plautopatch| の指定値。
 %    \begin{macrocode}
 \bxjs@declare@bool@option{plautopatch}{plautopatch}{false}
+\g@addto@macro\bxjs@plautopatchtrue{\let\bxjs@plautopatch@given\@undefined}
 \g@addto@macro\bxjs@plautopatchfalse{\def\bxjs@plautopatch@given{false}}
 %    \end{macrocode}
 % \end{macro}
@@ -2214,21 +2226,18 @@
 %
 % \paragraph{使用エンジンの検査・自動判定}
 %
-% ユーザが |uplatex| オプションの有無により指定したエンジンが，実際に
-% 使われているものと一致しているかを検査し，一致しない場合はエラー
-% メッセージを表示します。
+% デフォルトで現在使われているエンジンが p\LaTeX か up\LaTeX かを判定します。
+% ユーザによって |platex| オプションまたは |uplatex| オプションが明示的に
+% 指定されている場合は、実際に使われているエンジンと一致しているかを検査し，一致
+% しない場合はエラーメッセージを表示します。
 %
 % [2016-11-09] p\LaTeX / up\LaTeX を自動判別するオプション |autodetect-engine| を新設しました。
 % up\LaTeX の場合は，グローバルオプションに |uplatex| を追加することで，
 % 自動判定に応じて |otf| パッケージにも |uplatex| オプションが渡るようにします。
 %
-% \begin{ZRnote}
-% ここのコードを削除。
-% \end{ZRnote}
-%
-% [2016-11-11] p\LaTeX の場合は，オプション |uplatex| が指定されていれば必ずエラーを出します。
-% |autodetect-engine| が有効になっていてもエラーを出しますが，これは |otf| パッケージに
-% |uplatex| オプションが渡ってしまうのを防ぐためです。
+% [2023-02-12] |autodetect-engine| 指定時の挙動を規定化しました。
+% また |platex| を新設しました。オプション |autodetect-engine|, |platex|, |uplatex| の
+% うち最後に指定されたものが有効になります。
 %
 % \begin{ZRnote}
 %
@@ -2381,6 +2390,14 @@
 %
 % \paragraph{その他のBXJS特有の後処理 \ZRX}
 %
+% |\documentclass| より前に |plautopatch| パッケージが読み込まれて
+% いる場合は |bxjs@plautopatch| を真にする。
+%    \begin{macrocode}
+\@ifpackageloaded{plautopatch}{%
+  \bxjs@plautopatchtrue
+}{}
+%    \end{macrocode}
+%
 % 標準の和文ドライバの名前の定数。
 %    \begin{macrocode}
 \def\bxjs@@minimal{minimal}
@@ -2412,7 +2429,7 @@
 %
 % |plautopatch| が真の場合はここで |plautopatch| を読み込む。
 % \Note この時点で既に読み込まれているパッケージは、
-% |calc|、|keyval|、|ifpdf|。
+% |calc|、|keyval|、|iftex|。
 % \Note Pandocモードでは |plautopatch| の既定値を真とする。
 %    \begin{macrocode}
 \ifx\bxjs@jadriver\bxjs@@pandoc \ifx\bxjs@plautopatch@given\@undefined
@@ -2566,13 +2583,19 @@
 % 発行する |\special| の中身を展開しておくようにしました。
 % こうしないと，用紙サイズ設定を間違ってしまいます(Issue \#72)。
 %
+% [2022-09-12] 次期\LaTeXe カーネルに|\stockwidth|，|\stockheight|が
+% 追加されるようですので，
+% クラスファイル側では未定義のときのみこれらの長さ変数を定義します。
+% h20y6mさん，ありがとうございます。
+%
 % \begin{ZRnote}
 % BXJSでは出力用紙サイズ記録は |geometry| パッケージが行う。
 %
 % また、JSクラスと異なり、|\stockwidth|、|\stockheight| は常に定義される。
 % \end{ZRnote}
 %    \begin{macrocode}
-\newdimen\stockwidth \newdimen\stockheight
+\ifx\stockwidth\@undefined\newdimen\stockwidth\fi
+\ifx\stockheight\@undefined\newdimen\stockheight\fi
 \begingroup\expandafter\expandafter\expandafter\endgroup
 \expandafter\ifx\csname iftombow\expandafter\endcsname\csname iftrue\endcsname
 % \newdimen\stockwidth \newdimen\stockheight
@@ -4751,6 +4774,7 @@
 % |\subtitle| の定義を |\title| の実行まで遅延させることにする。
 % もしどうしても主題より前に副題を設定したい場合は、
 % |\jsSubtitle| 命令を直接用いればよい。
+% \TODO |\subtitle| の遅延処理はPandocモードに移す。
 % 
 % 本体を |\jsSubtitle| として定義する。
 %    \begin{macrocode}
@@ -7678,6 +7702,13 @@
 %
 % [2018-03-11] |\next|などいくつかの内部命令を |\jsc@...| 付きの
 % ユニークな名前にしました。
+%
+% [2022-09-13] \LaTeXe~2021-11-15 (ltfloat.dtx 2021/10/14 v1.2g)で
+% |\@currentcounter|が追加されましたので，追随します。
+% なお，\LaTeXe~2021-06-01 (ltfloat.dtx 2021/02/10 v1.2e)で
+% parhook対応として |\par| が追加されていますが，
+% 実は同時に |\color@endgroup| も |\endgraf| するように変更
+% されていますので，不要だと思います。というわけで追加しません。
 %    \begin{macrocode}
 \long\def\@footnotetext{%
   \insert\footins\bgroup
@@ -7686,6 +7717,7 @@
     \splittopskip\footnotesep
     \splitmaxdepth \dp\strutbox \floatingpenalty \@MM
     \hsize\columnwidth \@parboxrestore
+    \def\@currentcounter{footnote}%
     \protected@edef\@currentlabel{%
        \csname p@footnote\endcsname\@thefnmark
     }%
@@ -8184,9 +8216,11 @@
 % \end{macro}
 %
 % \begin{macro}{\jayear}
-% 和暦における年の表記（元号+年数）。
+% 和暦における年の表記の「年」以前の部分（元号+年数）。
+% \Note |\heisei| の代替となる機能（だから常に和暦を扱う）。
 % \begin{macro}{\heisei}
 % 年数を表す整数レジスタで、元号が「平成」である場合にのみ定義される。
+% \Note JSクラスと互換の機能。
 %    \begin{macrocode}
 \ifbxjs@bxwareki@avail
   \let\jayear\warekiyear
@@ -8194,7 +8228,7 @@
     \newcount\heisei \heisei=\value{warekiyear}
   \fi
 %    \end{macrocode}
-% |bxwareki| が使えない場合は西暦表示にする。
+% ただし |bxwareki| が使えない場合は西暦表示にフォールバックする。
 %    \begin{macrocode}
 \else
   \edef\jayear{\the\year \bxjs@iai}
@@ -9726,6 +9760,8 @@
 % \begin{macro}{\jsCheckHyperrefUnicode}
 % 「|hyperref| の |unicode| オプションの値を検証する」ための
 % 本体開始時のフック。
+% \Note |pxjahyper-uni.def| はこのフックを |\relax| に上書きする
+% ことで検証を無効化している。
 %    \begin{macrocode}
 \@onlypreamble\jsCheckHyperrefUnicode
 \let\jsCheckHyperrefUnicode\@empty
@@ -9937,19 +9973,85 @@
 %    \end{macrocode}
 %
 % \paragraph{hyperref対策}
+% |hyperref| の |unicode| オプションに対する調整を行う。
+% \Note |pxjahyper| パッケージの「|unicode| 対応」サポートの履歴：
+% \begin{itemize}
+% \item 0.7版[2021-02-13]：{\upLaTeX}上に限り|unicode|対応。
+% \item 0.9c版[2021-06-06]：|pxjahyper-uni.def| ファイルを追加。
+% \item 1.0版[2022-04-01]：{\pLaTeX}上の|unicode|対応を試験的サポート。
+% \item 1.3版[2023-03-01]：{\pLaTeX}上の|unicode|対応を正式サポート。
+% \end{itemize}
 %
-% |unicode| にしてはいけない。
 %    \begin{macrocode}
 \ifbxjs@hyperref@enc
+%    \end{macrocode}
+% |unicode| オプションが偽であることを検証する。
+% ただし、|pxjahyper| パッケージまたは |pxjahyper-uni.def| が読み込まれて
+% （前提条件を満たしていて）「|unicode| 対応」が行われた場合は
+% 検証は無効化される。
+%    \begin{macrocode}
   \bxjs@check@hyperref@unicode{false}
 %    \end{macrocode}
-% 暫定的なナニカ。
+% |\bxjs@plautopatch@new| は「|pxjahyper| の自動読込に対応した
+% 版の |plautopatch| が読み込まれているか」のフラグ。
+%    \begin{macrocode}
+  \@ifpackagelater{plautopatch}{2020/05/25}{% v0.9g
+    \let\bxjs@plautopatch@new=t}{}
+%    \end{macrocode}
+% 「|unicode| を有効にできるか」を判定する。
+% まず必要条件として
+% 「|pxjahyper-uni.def| が存在すること」
+% 「|\bxjs@plautopatch@new| が真、または、ファイルフックが利用可能
+% であること」
+% を検査する。
+% \Note |pxjahyper-uni.def| をもつ |pxjahyper| の版であれば、
+% {\upLaTeX}上の |unicode| には対応していることに注意。
+%    \begin{macrocode}
+  \let\bxjs@avail@hy@unicode=f
+  \if \ifx t\bxjs@plautopatch@new T%
+      \else\ifbxjs@old@hook@system F\else T\fi\fi T%
+    \IfFileExists{pxjahyper-uni.def}{\let\bxjs@avail@hy@unicode=t}{}
+  \fi
+  \if t\bxjs@avail@hy@unicode
+    \ifjsWithupTeX
+%    \end{macrocode}
+% 必要条件が満たされていて、かつ{\upLaTeX}である場合の処理。
+% もしファイルフックが利用可能ならば、|hyperref| が読み込まれた場合に
+% その直後に |pxjahyper-uni.def| が読まれるようにする。
+% \Note そうでないなら、前提条件より |pxjahyper| が読み込まれるはず
+% なので何もしなくてよい。
+%    \begin{macrocode}
+      \ifbxjs@old@hook@system\else
+        \AddToHook{\bxjs@CGHN{package/hyperref/after}}{%
+          \input{pxjahyper-uni.def}}
+      \fi
+    \else
+%    \end{macrocode}
+% 必要条件が満たされていて、かつ{\pLaTeX}である場合の処理。
+% |pxjahyper| が
+% 「{\pLaTeX}上の |unicode| 対応をもつほど新しい版（1.3版以降）」
+% であるかを判定する方法はない。
+% しかし、新しい{\LaTeX}システムで |unicode| を無効にするのは
+% 避けたいので、{\LaTeX}カーネルが2023-06-01以降である場合に
+% |pxjahyper| も十分に新しいと推定することにする。
+% すなわち「|pxjahyper| が読み込まれるはず」かつ
+% 「{\LaTeX}がカーネルが新しい」かを判定する。
+%    \begin{macrocode}
+      \let\bxjs@avail@hy@unicode=f
+      \ifx t\bxjs@plautopatch@new
+        \@ifl@t@r\fmtversion{2023/06/01}{\let\bxjs@avail@hy@unicode=t}{}
+      \fi
+    \fi
+  \fi
+%    \end{macrocode}
+% この時点で「|unicode| を有効にできるか」の判定結果が
+% フラグ |\bxjs@avail@hy@unicode| に入っている。
+% |unicode| を有効にできない場合は |unicode| の既定値を
+% 偽に設定する。
 %    \begin{macrocode}
-  \ifjsWithupTeX\ifbxjs@old@hook@system\else
-    \IfFileExists{pxjahyper-uni.def}{%
-      \AddToHook{\bxjs@CGHN{package/hyperref/after}}{\input{pxjahyper-uni.def}}
-    }{}
-  \fi\fi
+  \if f\bxjs@avail@hy@unicode
+    \PassOptionsToPackage{unicode=false}{hyperref}
+  \fi
 \fi
 %    \end{macrocode}
 %
@@ -10817,7 +10919,7 @@
 \let\bxjs@kv@orblockheading@true\bxjs@jp@or@block@headingtrue
 \let\bxjs@kv@orblockheading@false\bxjs@jp@or@block@headingfalse
 \define@key{bxjsPan}{or-block-heading}[true]{%
-  \bxjs@set@keyval{blockheading}{#1}{}}
+  \bxjs@set@keyval{orblockheading}{#1}{}}
 %    \end{macrocode}
 %
 % 実際の |japaram| の値を適用する。
@@ -10886,12 +10988,27 @@
 %^^A----------------
 % \subsection{lang変数}
 % |lang=ja| という言語指定が行われると、
-% Pandocはこれに対応していないため
-% 不完全なBabelやPolyglossiaの設定を出力してしまう。
-% これを防ぐための対策を行う。
-% \Note Pandoc 2.12版で |lang=ja| 指定に対応し、
-% 正しく{\LaTeX}側の言語名 |japanese| に変換されるようになった。
-% しかし、日本語指定の場合は相変わらず調整処理が必要である。
+% 2.12版より前のPandocはこれに対応していなかったため
+% 不完全なBabelやPolyglossiaの設定を出力してしまっていた。
+% 現在では |lang=ja| 指定について
+% 正しく{\LaTeX}側の言語名 |japanese| に変換されるようになっているが、
+% それでも日本語指定の場合は相変わらず調整処理が必要である。
+% \Note そもそもBXJSクラスは日本語用の文書クラスであるため、
+% もし言語設定が行われているのであれば
+% 「メイン言語は日本語である」であるはずなので、
+% 「サブ言語が日本語である」ことは考慮しない。
+%
+% \paragraph{Polyglossiaについて}
+% 現在CTANに登録されている日本語用のglossファイルは超絶アレでかつ
+% 有害な設定を行うため、これの読込を避ける必要がある。
+% そのため、メイン言語が |japanese| である場合
+% （古いPandocではこの場合に引数が空の |\setmainlanguage{}| が
+% 実行されるがこのパターンも同様に扱う）
+% には、Polyglossiaの処理を無効化してしまうことにする。
+% つまり、Polyglossiaが提供する命令について、何もしないダミーの
+% 定義を与える。
+% \Note Polyglossiaは古いPandocのテンプレートにおいて、
+% エンジンが{\XeTeX}か{\LuaTeX}の場合に利用されていた。
 %
 % \begin{macro}{\bxjs@polyglossia@options}
 % Polyglossiaのオプション列のテキスト。
@@ -10901,16 +11018,7 @@
 %    \end{macrocode}
 % \end{macro}
 %
-% \begin{macro}{\bxjs@babel@options}
-% Babelのオプション列のテキスト。
-% “実際には読み込まれていない”場合は |\relax| になる。
-%    \begin{macrocode}
-\let\bxjs@babel@options\relax
-%    \end{macrocode}
-% \end{macro}
-%
-% \paragraph{Polyglossiaについて}
-% つまり{\XeTeX}および{\LuaTeX}（古いPandocで）の場合。
+% エンジンが{\XeTeX}か{\LuaTeX}の場合が対象になる。
 % \Note この場合 |etoolbox| が使用可能になっている。
 %    \begin{macrocode}
 \ifnum0\if x\jsEngine1\fi\if l\jsEngine1\fi>0
@@ -10930,13 +11038,12 @@
 % |polyglossia| の読込が指示された場合、
 % 直後に |\setmainlanguage| が実行されることを想定して、
 % フック用の |\setmainlanguage| を定義する。
-% \Note 先に |\setmainlanguage| 以外が実行された場合はエラーになる。
+% \Note 最初に |\setmainlanguage| 以外が実行された場合はエラーになる。
 %    \begin{macrocode}
   \newcommand*\setmainlanguage[2][]{%
 %    \end{macrocode}
-% もし、言語名が空の |\setmainlanguage{}| が実行された場合は、
-% |lang=ja| が指定されたと見なす。
-% 言語名が |japanese| だった場合も同様。
+% もし、|\setmainlanguage| の引数が空または |japanese| だった
+% 場合はメインが日本語である（|lang=ja| 指定）と見なす。
 %    \begin{macrocode}
     \ifboolexpr{test{\ifblank{##2}}or test{\ifstrequal{##2}{japanese}}}{%
       \ClassWarning\bxjs@clsname
@@ -10961,7 +11068,7 @@
 %
 % プレアンブルで |polyglossia| の読込が指示されなかった場合、
 % Polyglossiaと連携するパッケージの誤動作を防ぐため、
-% 読込済マークを外す。
+% （|\AtEndPreamble| において）読込済マークを外す。
 %    \begin{macrocode}
 \g@addto@macro\bxjs@endpreamble@hook{%
   \ifx\bxjs@polyglossia@options\relax
@@ -10972,10 +11079,10 @@
 % \begin{macro}{\bxjs@pandoc@polyglossia@ja}
 % Pandoc側で |lang=ja| が指定されていた場合の処理。
 % この場合はPolyglossiaの処理を無効化するためにダミーの定義を行う。
-% その時点でダミーの |\setotherlanguage(s)| を定義する。
-% \Note 現在ではPolyglossiaの日本語用の定義ファイル
-% （|gloss-japanese.ldf|）が存在するので、本来なら普通に処理できる
-% はずであるが、現状の定義ファイルはアレなので回避したい。
+% すなわち、サブ言語 |xxx| の各々について、|xxx| 環境と |\textxxx|
+% 命令を（特に何も加工しないものとして）定義する。
+% この目的のため、|\setotherlanguage(s)| をダミーを定義する
+% 命令として定義する。
 %    \begin{macrocode}
 \@onlypreamble\bxjs@pandoc@polyglossia@ja
 \def\bxjs@pandoc@polyglossia@ja{%
@@ -10999,10 +11106,18 @@
 %    \end{macrocode}
 %
 % \paragraph{Babelについて}
-% {\XeTeX}以外の場合。
-% \Note Pandoc 2.15版から、テンプレートで用いられる多言語パッケージが
-% Babelに統一された。
-% （{\LuaTeX}は2.6版でPolyglossiaからBabelに変更されている。）
+% 現在のPandocでは、テンプレートで用いられる多言語パッケージとして
+% エンジンの種別によらずにBabelが使われる。
+% \Note {\XeTeX}では2.15版で、{\LuaTeX}は2.6版で
+% PolyglossiaからBabelに変更されている。
+%
+% \begin{macro}{\bxjs@babel@options}
+% Babelのオプション列のテキスト。
+% “実際には読み込まれていない”場合は |\relax| になる。
+%    \begin{macrocode}
+\let\bxjs@babel@options\relax
+%    \end{macrocode}
+% \end{macro}
 %
 % パッケージの読込を検知するため読込済のマークを付けて
 % duploadの処理を仕込む。
@@ -11013,34 +11128,19 @@
   \ClassWarning\bxjs@clsname
    {Package babel is requested}%
 %    \end{macrocode}
-% パッケージオプションに言語名が空の |main=| があるかを調べる。
-% ある場合は |lang=ja| 対策を実行する。
-% \Note |\bxjs@babel@options| には |main=| を除いたオプション列を
-% 格納する。
+% パッケージオプションに言語名が空の |main=| がある場合は、
+% |main=japanese| に置き換える。
 %    \begin{macrocode}
   \@tempswafalse \let\bxjs@babel@options\@empty
   \def\bxjs@tmpb{main=}%
-  \def\bxjs@next{main=japanese}%
   \@for\bxjs@tmpa:=#1\do{%
-    \ifx\bxjs@tmpa\bxjs@tmpb \@tempswatrue
-    \else\ifx\bxjs@tmpa\bxjs@next \@tempswatrue
-    \else \edef\bxjs@babel@options{\bxjs@babel@options,\bxjs@tmpa}%
-    \fi\fi}%
-  \if@tempswa
-    \ClassWarning\bxjs@clsname
-     {Main language is 'japanese', thus fallback\MessageBreak
-      definitions will be employed}%
-    \bxjs@pandoc@babel@ja
-%    \end{macrocode}
-% ない場合は、本来の |babel| の処理を実行する。
-%    \begin{macrocode}
-  \else
-    \ClassWarning\bxjs@clsname
-     {Main language is not 'japanese',\MessageBreak
-      thus babel will be loaded}%
-    \bxjs@cslet{ver@babel.sty}\@undefined
-    \RequirePackage[#1]{babel}[]%
-  \fi}
+    \ifx\bxjs@tmpa\bxjs@tmpb \def\bxjs@tmpa{main=japanese}\fi
+    \edef\bxjs@babel@options{\bxjs@babel@options,\bxjs@tmpa}}%
+  \bxjs@cslet{ver@babel.sty}\@undefined
+  \edef\bxjs@next{%
+    \noexpand\RequirePackage[\bxjs@babel@options]{babel}\relax
+  }\bxjs@next
+  \RequirePackage{bxorigcapt}\relax}
 %    \end{macrocode}
 %
 % プレアンブルで |babel| の読込が指示されなかった場合、
@@ -11051,23 +11151,63 @@
     \bxjs@cslet{ver@babel.sty}\@undefined
   \fi}
 %    \end{macrocode}
-% 
-% \begin{macro}{\bxjs@pandoc@babel@ja}
-% Pandoc側で |lang=ja| が指定されていた場合の処理。
+%
+% 3.0版より前の |japanese.ldf| はサポート対象エンジンが限られていた。
+% ここでは、エンジンの種類を問わず、「|japanese.ldf| が古い場合は
+% 読込を回避してダミー定義で代替する」という対策を入れる。
+% 実は |japanese.ldf| で行う定義は |bxorigcapt| の機能等により
+% 実質的に全て無効化されている。
+% 最新の環境においては
+% 「|japanese| 指定のBabel＋|bxorigrcapt| パッケージ」
+% の状態にしておきたい。
+%
 %    \begin{macrocode}
-\@onlypreamble\bxjs@pandoc@babel@ja
-\def\bxjs@pandoc@babel@ja{%
-  \bxjs@cslet{ver@babel.sty}\@undefined
-  \edef\bxjs@next{%
-    \noexpand\RequirePackage[\bxjs@babel@options,english]{babel}[]%
-  }\bxjs@next
-  \if j\jsEngine
-    \RequirePackage[main=japanese]{pxbabel}[]%
-  \else
-    \RequirePackage{bxorigcapt}[]%
+\ifjsWitheTeX
+%    \end{macrocode}
+% |filehook| の機能を用いて |japanese.ldf| の読込にフックを仕込む。
+%    \begin{macrocode}
+\AtBeginOfFile{japanese.ldf}{\bxjs@begin@japanese@ldf@hook}
+\def\bxjs@begin@japanese@ldf@hook{%
+  \let\bxjs@begin@japanese@ldf@hook\relax
+  \let\bxjs@save@ProvidesLanguage\ProvidesLanguage
+  \let\bxjs@save@LdfInit\LdfInit
+  \def\ProvidesLanguage##1[##2]{\bxjs@do@japanese@ldf{##2}}%
+  \def\LdfInit##1##2{\bxjs@do@japanese@ldf{0000/00/00}}}
+%    \end{macrocode}
+% バージョンを判定する部分。
+% \Note |\LdfInit| にも細工を入れている理由は、初期の |japanese.ldf|
+% には |\ProvidesLanguage| が記述されていないため。
+%    \begin{macrocode}
+\def\bxjs@do@japanese@ldf#1{\bxjs@do@japanese@ldf@a#1\@nil}
+\def\bxjs@do@japanese@ldf@a#1/#2/#3#4#5\@nil{%
+  \let\LdfInit\bxjs@save@LdfInit
+  \ClassInfo\bxjs@clsname
+   {Release date of japanese.ldf is:\MessageBreak
+    \@spaces #1/#2/#3#4\@gobble}%
+  \ifnum#1#2#3#4<20201206 % v3.0
+    \let\bxjs@japanese@ldf@skipped=t\csuse{endinput}%
+  \fi}
+\AtEndOfFile{japanese.ldf}{\bxjs@end@japanese@ldf@hook}
+\def\bxjs@end@japanese@ldf@hook{%
+  \let\bxjs@end@japanese@ldf@hook\relax
+  \let\ProvidesLanguage\bxjs@save@ProvidesLanguage
+  \let\LdfInit\bxjs@save@LdfInit
+  \ifx t\bxjs@japanese@ldf@skipped
+    \ClassWarningNoLine\bxjs@clsname
+     {Loading japanese.ldf is skipped}%
+%    \end{macrocode}
+% ダミーの言語定義。
+%    \begin{macrocode}
+    \ifundef\l@japanese{\chardef\l@japanese\z@}{}%
+    \let\datejapanese\@empty\let\captionsjapanese\@empty
+    \let\extrasjapanese\@empty\let\noextrasjapanese\@empty
+    \main@language{japanese}%
   \fi}
+\g@addto@macro\bxjs@begin@document@hook{%
+  \let\bxjs@begin@japanese@ldf@hook\relax
+  \let\bxjs@end@japanese@ldf@hook\relax}
+\fi
 %    \end{macrocode}
-% \end{macro}
 %
 % lang対策はこれで終わり。
 %
@@ -11247,6 +11387,8 @@
 % \subsection{hyperref対策}
 %
 % |hyperref| の |unicode| オプションの固定を行う。
+% \TODO |hyperref| の開発状況を鑑みる限り、|unicode| オプションの固定処理
+% は“危険”だと思われるので、可能ならば廃止したい。
 %    \begin{macrocode}
 \if j\jsEngine
   \bxjs@fix@hyperref@unicode{false}
-- 
cgit v1.2.3

