summaryrefslogtreecommitdiff
path: root/language/japanese/BX
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /language/japanese/BX
Initial commit
Diffstat (limited to 'language/japanese/BX')
-rw-r--r--language/japanese/BX/bxbase/LICENSE21
-rw-r--r--language/japanese/BX/bxbase/README-ja.md535
-rw-r--r--language/japanese/BX/bxbase/README.md133
-rw-r--r--language/japanese/BX/bxbase/bxbase-ja.pdfbin0 -> 76496 bytes
-rw-r--r--language/japanese/BX/bxbase/bxbase-ja.tex108
-rw-r--r--language/japanese/BX/bxbase/bxbase.def673
-rw-r--r--language/japanese/BX/bxbase/bxbase.sty73
-rw-r--r--language/japanese/BX/bxbase/bxtoolbox-ext.def563
-rw-r--r--language/japanese/BX/bxbase/bxtoolbox-ja.def186
-rw-r--r--language/japanese/BX/bxbase/bxtoolbox.def1078
-rw-r--r--language/japanese/BX/bxbase/bxtoolbox.sty27
-rw-r--r--language/japanese/BX/bxbase/bxutf8.def182
-rw-r--r--language/japanese/BX/bxbase/bxutf8x.def96
-rw-r--r--language/japanese/BX/bxbase/zxbase.sty149
-rw-r--r--language/japanese/BX/bxjaholiday/LICENSE21
-rw-r--r--language/japanese/BX/bxjaholiday/README.md62
-rw-r--r--language/japanese/BX/bxjaholiday/bxjaholiday.pdfbin0 -> 87495 bytes
-rw-r--r--language/japanese/BX/bxjaholiday/bxjaholiday.sty926
-rw-r--r--language/japanese/BX/bxjaholiday/bxjaholiday.tex279
-rw-r--r--language/japanese/BX/bxjalipsum/LICENSE21
-rw-r--r--language/japanese/BX/bxjalipsum/README.md91
-rw-r--r--language/japanese/BX/bxjalipsum/bxjalipsum.sty1785
-rw-r--r--language/japanese/BX/bxjalipsum/sample-bxjalipsum-1.tex45
-rw-r--r--language/japanese/BX/bxjalipsum/sample-bxjalipsum-2.tex25
-rw-r--r--language/japanese/BX/bxjaprnind/LICENSE21
-rw-r--r--language/japanese/BX/bxjaprnind/README-ja.md47
-rw-r--r--language/japanese/BX/bxjaprnind/README.md62
-rw-r--r--language/japanese/BX/bxjaprnind/bxjaprnind.pdfbin0 -> 321328 bytes
-rw-r--r--language/japanese/BX/bxjaprnind/bxjaprnind.sty388
-rw-r--r--language/japanese/BX/bxjaprnind/bxjaprnind.tex119
-rw-r--r--language/japanese/BX/bxjaprnind/sample-bxjaprnind.pdfbin0 -> 67452 bytes
-rw-r--r--language/japanese/BX/bxjaprnind/sample-bxjaprnind.tex131
-rw-r--r--language/japanese/BX/bxjscls/LICENSE28
-rw-r--r--language/japanese/BX/bxjscls/README-ja.md279
-rw-r--r--language/japanese/BX/bxjscls/README.md146
-rw-r--r--language/japanese/BX/bxjscls/bxjscls-manual.pdfbin0 -> 635563 bytes
-rw-r--r--language/japanese/BX/bxjscls/bxjscls-manual.tex1664
-rw-r--r--language/japanese/BX/bxjscls/bxjscls.dtx11608
-rw-r--r--language/japanese/BX/bxjscls/bxjscls.ins16
-rw-r--r--language/japanese/BX/bxjscls/bxjscls.pdfbin0 -> 1051568 bytes
-rw-r--r--language/japanese/BX/bxwareki/LICENSE21
-rw-r--r--language/japanese/BX/bxwareki/README.md53
-rw-r--r--language/japanese/BX/bxwareki/bxwareki-cd.def126
-rw-r--r--language/japanese/BX/bxwareki/bxwareki.pdfbin0 -> 182364 bytes
-rw-r--r--language/japanese/BX/bxwareki/bxwareki.sty513
-rw-r--r--language/japanese/BX/bxwareki/bxwareki.tex240
-rw-r--r--language/japanese/BX/bxwareki/bxwareki2019.def3
47 files changed, 22544 insertions, 0 deletions
diff --git a/language/japanese/BX/bxbase/LICENSE b/language/japanese/BX/bxbase/LICENSE
new file mode 100644
index 0000000000..8ada757fbc
--- /dev/null
+++ b/language/japanese/BX/bxbase/LICENSE
@@ -0,0 +1,21 @@
+The MIT License
+
+Copyright (c) 2017 Takayuki YATO (aka. "ZR")
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/language/japanese/BX/bxbase/README-ja.md b/language/japanese/BX/bxbase/README-ja.md
new file mode 100644
index 0000000000..c4489be1f7
--- /dev/null
+++ b/language/japanese/BX/bxbase/README-ja.md
@@ -0,0 +1,535 @@
+BXbase パッケージバンドル
+=========================
+
+LaTeX: 他の BX パッケージのためのサポートライブラリ
+
+本バンドルの主な目的は、作者(ZR)の制作する他のパッケージ(名前が
+“BX”や“PX”で始まる)が依拠するライブラリ機能の提供である。
+
+ただし bxbase パッケージは少数のユーザレベルのコマンドも含むので
+単体でも有用である。
+
+### 前提環境
+
+ * TeX フォーマット: LaTeX
+ * TeX エンジン: 不問
+ * DVI ウェア(DVI 出力時): 不問
+
+### 構成物
+
+ * `bxbase.sty`: ‘bxbase’パッケージ
+ * `bxbase.def`: ‘bxbase’のサブモジュール
+ * `bxtoolbox.sty`: ‘bxtoolbox’パッケージ
+ * `bxtoolbox.def`: ‘bxtoolbox’のサブモジュール
+ * `bxtoolbox-ext.def`: ‘bxtoolbox’のサブモジュール
+ * `bxtoolbox-ja.def`: ‘bxtoolbox’のサブモジュール
+ * `bxutf8.def`: ‘bxutf8’入力エンコーディング定義
+ * `bxutf8x.def`:‘bxutf8x’入力エンコーディング定義
+ * `zxbase.sty`: ‘zxbase’パッケージ
+ * `bxbase-ja.pdf`: ‘bxbase’のユーザ向け説明書(日本語)
+ * `bxbase-ja.tex`: `bxbase-ja.pdf` のソースファイル
+
+### インストール
+
+TDS 1.1 に準拠するシステムの場合、以下のようにファイルを移動する:
+
+ - `*.sty`, `*.def` → $TEXMF/tex/latex/BXbase
+
+この後必要に応じて mktexlsr を実行する。
+
+### ライセンス
+
+本パッケージは MIT ライセンスの下で配布される。
+
+bxbase パッケージ ― 基礎ライブラリ
+----------------------------------
+
+基本的に、他のパッケージの内部で読み込まれるものであり、作者(ZR)の制作
+する他のパッケージで必要な機能を提供する。
+
+本パッケージは幾つかのユーザ命令も提供していたが、その大部分が 1.1 版に
+おいて非推奨となった。日本語入力に関する少数の機能が残されている。
+
+### ユーザ向け機能
+
+ユーザ向け機能についてはマニュアル `bxbase-ja.pdf` を参照されたい。
+
+### 開発者向け機能
+
+ここでは bxbase パッケージが提供する開発者向け機能について簡単に解説する。
+
+※ bxbase パッケージは内部で bxtoolbox パッケージを読み込むため、bxtoolbox
+の機能も利用できる。
+
+#### 書式記述に関する注意
+
+`<LaTeXマクロ定義記述>` は `\newcommand` 等の LaTeX マクロ定義命令に
+後続する要素列で、以下のものに等しい。
+
+ {<命令>}[<引数個数>][<引数既定値>]{<置換テキスト>}
+
+`<TeXマクロ定義記述>` は `\def` 等の TeX マクロ定義プリミティブに
+後続する要素列で、以下のものに等しい。
+
+ <命令><引数宣言部>{<置換テキスト>}
+
+`<TeXマクロ定義記述*>` は `<TeXマクロ定義記述>` の先頭の `<命令>`
+を除去したもの。
+
+#### プログラミング補助
+
+ * `\bxDebug{<テキスト>}`
+ デバック出力用命令。このパッケージでの定義では何もしない。
+ * `\bxRequireDefinition{<ファイルベース名>}`
+ 拡張子 .def のファイルを `\usepackage` と同じ方式で読み込む。
+ * `\bxNullify\制御綴`
+ `\制御綴` を「何もしない命令」で `\providecommand` により
+ 上書きされないものに再定義する。
+ * `\bxForEachIn<引数1>,<引数2>,...\do{<置換テキスト>}`
+ 各々の引数について、`<置換テキスト>` の `#1` をそれで置き換えた
+ ものを実行する。LaTeX の `\@for` のラッパーで、`\@for` と同じく、
+ `\bxForEachIn` の直後のトークンは予め一度展開される。
+ * `\bxForEachTokenIn<トークン1><トークン2>...\do{<置換テキスト>}`
+ 各々の引数について `<置換テキスト>` の `#1` を置き換えたものを
+ 実行する。LaTeX の `\@tfor` のラッパー。
+ * `\bxWithArgExpd{<引数1>}\do{<置換テキスト>}`
+ * `\bxWithArgsExpd{<引数1>}{<引数2>}...\do{<置換テキスト>}`
+ `<置換テキスト>` 中の `#1`、`#2`… を各々の引数を一回展開した
+ ものに置き換えたものを実行する。`\bxWithArgExpd` は 1 引数用に
+ 最適化したもの。
+ * `\bxWithArgFullExpd{<引数1>}\do{<置換テキスト>}`
+ * `\bxWithArgsFullExpd{<引数1>}{<引数2>}...\do{<置換テキスト>}`
+ `\bxWithArgsExpd` と同様だが、一回展開でなく完全展開する点が
+ 異なる。
+ * `\bxChompComma<命令>`
+ `<命令>` の 置換テキストの先頭が `,` の場合、それを削除したもので
+ 再定義する。
+ * `\bxAssign<代入文>\relax`
+ 代入を行った後、代入文の後ろにゴミがないかを判定しその結果を
+ スイッチ `\ifbxOk` に返す。
+ * `\bxCheckMA<テキスト>\bxEndCheckMA`
+ `\edef` 中ではこの部分がエラーを出す命令に展開される。
+
+#### TeX エンジン判別
+
+ * `\bxEngineTypeX` [整数定数]
+ 1=pTeX拡張; 2=XeTeX拡張; 3=Omega拡張; 0=以上に該当せず
+ * `\bxEngineTypeY` [整数定数]
+ 1=eTeX拡張; 3=pdfTeX拡張; 5=LuaTeX拡張; 0=以上に該当せず
+ ※現在の LuaTeX は X/Y=0/5 となる。
+ ※upTeX か否かの判定は ifptex パッケージを用いる。
+
+#### Babel 関係
+
+ * `\bxAtBeginDocumentBabel{<テキスト>}`
+ Babel 読込時にのみ実行される begin-document 時のフック。
+ * `\bxTrivLangDef{<言語名>}`
+ 中身(キャプション定義等)が空の Babel 言語オプションを生成する。
+
+#### 数値の書式化出力
+
+ * `\bxToHexTwo{<整数>}` [%02X 形式; 0x00~FF]
+ * `\bxToHexThree{<整数>}` [%03X 形式; 0x000~FFF]
+ * `\bxToHexFour{<整数>}` [%04X 形式; 0x0000~FFFF]
+ * `\bxToHexFive{<整数>}` [%05X 形式; 0x00000~FFFFF]
+ * `\bxToHexFiveX{<整数>}` [%05X 形式; 0x00000~FFFFF ※1]
+ * `\bxToHexEight{<整数>}` [%08X 形式; 0x00000000~7FFFFFFF]
+ * `\bxToHexTiny{<整数>}` [%X 形式; 0x0~FF]
+ * `\bxToHexSmall{<整数>}` [%X 形式; 0x0~7FFF]
+ * `\bxToHexUC{<整数>}` [%04X 形式; 0x0000~10FFFF ※2]
+ 16 進表記を `\bxHex` に返す。UC は 4~6 桁での表記。
+ ※1 0xFFFFF を超える場合は `FFFFF` になる
+ ※2 XeTeX/LuaTeX/upTeX の場合、`\char` が可能な範囲。
+ * `\bxToDecFour{<整数>}` [%04d 形式; 0000~9999]
+ * `\bxToDecFive{<整数>}` [%05d 形式; 00000~99999]
+ ゼロ付の 10 進表記を `\bxHex` に返す。
+
+#### 符号値による入力
+
+ * `\bxCodeValueSeq\制御綴{<符号値>,...} [16進]`
+ * `\bxCodeValueSeqD\制御綴{<符号値>,...} [10進]`
+ 各々の `<符号値>` を解釈した結果を `\bxUcv` に代入してマクロ
+ `\制御綴` を呼び出す。解釈方法はそれぞれ `\Ux` と `\AJ` 命令の
+ 解説にある通り。
+ * `\bxUHex{<コード値16進表記>}`
+ bxutf8 が構成する内部表現。用いる機能は `\Ux` と同じ。
+ * `\bxUInt{<整数>}`
+ bxutf8x が構成する内部表現。用いる機能は `\Ux` と同じ。
+
+#### 文字列操作
+
+ * `\bxToLower{<文字列>} [小文字]`
+ * `\bxToUpper{<文字列>} [大文字]`
+ `<文字列>` を小文字/大文字に変換したものを `\bxRes` に返す。
+
+#### Special 出力
+
+ * `\bxDocumentSpecial{<テキスト>}`
+ `\AtBeginDvi` を普通に用いて DVI の先頭部に special を出力する。
+ * `\bxDocumentSpecialUrgent{<テキスト>}`
+ DVI のなるべく先頭(他の special より前)の位置に special を出力。
+
+#### Safe caret 機能
+
+ * `\bxBDHookSafeCaret`
+ safe caret 機能に関する begin-document フック。
+ * `\bxEnableSafeCaret`
+ safe caret 機能を使用可能にしておく。すなわち、プレアンブルでこの
+ 命令が呼ばれなかった場合、safe caret は使用不可になる。実際にある
+ 状況で safe caret を有効にするには、`\bx@acr@normcaret` を「その
+ 状況での本来の `^` の動作」に定義した上で `^` をアクティブにする
+ 必要がある。
+ ※ ユーザ命令の `\safecaret` はこの命令を実行した上で、verbatim
+ と babel での適切な safe caret 処理を有効化している。
+
+#### Shadow map 機能
+
+Shadow map とは「16 ビット整数 → 整数」の写像を TFM として表現
+したもの。
+
+ * `\bxUseShadowMap\制御綴{<TFM名>}`
+ `\制御綴` を指定の TFM から生成される shadow map として定義。
+ * `\bxMap\制御綴`
+ 整数レジスタ `\bxUcv` の現在の値に shadow map を適用し、その結果を
+ `\bxUcv` に代入する。
+
+#### モジュール名
+
+ここでいう「モジュール」とは文書クラス(.cls)・パッケージ(.sty)・
+定義ファイル(.def)の総称。「モジュール読込中に発生するエラーを出力
+するためのマクロ」を別のモジュール内で定義する際に、呼び出した側の
+モジュール名をメッセージ中に出力させるための仕組み。
+
+ * `\bxSetModuleName{<文字列>}`
+ 現在のモジュールに対するモジュール名を設定する。
+ * `\bxModuleName`
+ 現在のモジュールに対するモジュール名に展開される。モジュール名が
+ 設定されていない場合はファイルのベース名を代わりに使う。
+ * `\bxError` [`\PackageError` に対応]
+ * `\bxWarning` [`\PackageWarning` に対応]
+ * `\bxWarningNoLine` [`\PackageWarningNoLine` に対応]
+ * `\bxInfo` [`\PackageInfo` に対応]
+ 現在のモジュール名をパッケージ名として `\PackageError` 等を呼ぶ。
+
+#### keyval の拡張
+
+(xkeyval が普及した今では非推奨かも…)
+
+keyval の `\setkeys` について、「未定義のキーをエラーにせず、代わりに
+未定義のキーのリストを作成する」という変種を提供する。この機能は
+xkeyval で `\setkeys*` として提供されている。しかし xkeyval が利用
+できない環境に対応するために keyval へのパッチとして実現すること
+にする。しかし、xkeyval はこのパッチを無効化してしまう。従って
+xkeyval.sty が存在するかに応じて処理を分けることにした。
+
+ * `\bxPrepareSetKeysSafe`
+ `\bxSetKeysSafe` を使用可能にする。
+ ※ xkeyval.sty が存在するかを判定し、存在すれば読み込む。
+ そして `\bxSetKeysSafe` の実現方法をこの段階で確定させる。
+ * `\bxSetKeysSafe{<ファミリ>}{<テキスト>}`
+ `\setkeys` と同様だが、未定義のキーをエラーとせず、代わりに
+ 未定義のキーからなるコンマ区切りのリストを `\bxRestKeys` に
+ 代入する。
+
+#### ドライバ判別
+
+以下の説明で「先天的な」ドライバとは、TeX 実行時に使用が判定できる
+もの(事実上「TeX エンジンがドライバを兼ねるもの」に等しい)を指し、
+例えば pdfTeX、XeTeX、LuaTeX が該当する。
+
+ * `\bxDriverList`
+ (後天的な)ドライバ名のリスト。
+ ※ 現状では「`dvips,dvipdfmx,dviout`」。
+ * `\bxDriverInherent`
+ 先天的なドライバ名(未定義なら空)に展開される。
+ * `\bxSetDriver[<ファイル名>]{<ドライバ名>}`
+ 指定のファイル名をもつモジュールに対するドライバ名を指定する。
+ `<ファイル名>` がない場合は現在のモジュールに対する設定。
+ * `\bxDriver`
+ 現在のモジュールに対するドライバ名に展開される。未定義ならば
+ `default` を返す。
+ * `\bxDriverSpecifiedFor{<ファイル名>}`
+ `\bxDriver` と同様だが、指定のファイル名をもつモジュールに
+ 対する設定を返す。
+ * `\bxDefineDDProcess{<名前>}{<ドライバ名>}<TeXマクロ定義記述*>`
+ ドライバ依存マクロを定義する。
+ * `\bxDefineDDProcessDefault{<名前>}`
+ `<ドライバ名>` が `default` の `\bxDefineDDProcess`。
+ * `\bxDoDDProcess{<名前>}`
+ ドライバ依存マクロを実行する。
+ * `\bxDeclareDriverOptions`
+ 後天的なドライバ名の各々について、「`\bxSetDriver{ドライバ名}`
+ を呼ぶ」という動作のパッケージ(クラス)オプションを定義する。
+
+bxtoolbox パッケージ ― 非 e-TeX エンジンでの etoolbox の模倣
+-------------------------------------------------------------
+
+本パッケージの主な目的は、etoolbox パッケージの一部の機能を e-TeX 拡張を
+持たないエンジンで利用可能にすることである。(pTeX エンジンの e-TeX 拡張
+が普及し出したのは 2010 年頃である。)
+
+なお、本パッケージを e-TeX 拡張をもつエンジンで読み込んだ場合は、本物の
+etoolbox が読み込まれてその機能が使われる。
+
+### etoolbox 互換命令
+
+ここに挙げる命令は、etoolbox の命令の複製であり、それぞれ、命令名の頭の
+`bx` を取って先頭を小文字に変えた名前(`\bxCsdef`→`\csdef`)の etoolbox
+の命令に対応する。e-TeX 拡張のエンジンで動作する場合は実際に etoolbox を
+読み込んでそれの命令のエイリアスとするが、そうでない場合は自前の実装を
+用いる。
+
+各命令の詳細については etoolbox のマニュアルを参照されたい。etoolbox の
+元の命令と仕様が異なる部分にのみ説明を付している(この説明は e-TeX 非拡張
+のエンジンでの動作時のみ当てはまることに注意)。
+
+(頑強な命令の定義)
+
+ * `\bxNewrobustcmd[*]<LaTeXマクロ定義記述>`
+ * `\bxRenewrobustcmd[*]<LaTeXマクロ定義記述>`
+ * `\bxProviderobustcommand[*]<LaTeXマクロ定義記述>`
+ * `\bxRobustify{<命令>}`
+ e-TeX の \protected の代わりに LaTeX の protect 処理を用いる。結果
+ 的に \DeclareRobustCommand と同じ処理が使われる。
+
+(メイン文書コンパイル時フック)
+
+ * `\AfterPreamble{<テキスト>}`
+ * `\AtEndPreamble{<テキスト>}`
+ * `\AfterEndPreamble{<テキスト>}`
+ * `\AfterEndDocument{<テキスト>}`
+
+(マクロ定義)
+
+ * `\csdef<TeXマクロ定義記述*>`
+ * `\csgdef<TeXマクロ定義記述*>`
+ * `\csedef<TeXマクロ定義記述*>`
+ * `\csxdef<TeXマクロ定義記述*>`
+
+(命令の意味の操作)
+
+ * `\cslet{<命令名1>}{<命令2>}`
+ * `\letcs{<命令1>}{<命令名2>}`
+ * `\csletcs{<命令名1>}{<命令名2>}`
+ * `\bxCsuse{<命令名>}`
+ * `\undef{<命令>}`
+ * `\csundef{<命令名>}`
+ * `\bxCsshow{<命令名>}`
+ `\bxCsuse` と `\bxCsshow` は、LaTeX の protect を施しているが、
+ 動く引数の中で展開されるとエラーになる。
+
+(マクロの追記式定義)
+
+ * `\appto{<命令>}{<テキスト>}`
+ * `\gappto{<命令>}{<テキスト>}`
+ * `\eappto{<命令>}{<テキスト>}`
+ * `\xappto{<命令>}{<テキスト>}`
+ * `\csappto{<命令名>}{<テキスト>}`
+ * `\csgappto{<命令名>}{<テキスト>}`
+ * `\cseappto{<命令名>}{<テキスト>}`
+ * `\csxappto{<命令名>}{<テキスト>}`
+ * `\preto{<命令>}{<テキスト>}`
+ * `\gpreto{<命令>}{<テキスト>}`
+ * `\epreto{<命令>}{<テキスト>}`
+ * `\xpreto{<命令>}{<テキスト>}`
+ * `\cspreto{<命令名>}{<テキスト>}`
+ * `\csgpreto{<命令名>}{<テキスト>}`
+ * `\csepreto{<命令名>}{<テキスト>}`
+ * `\csxpreto{<命令名>}{<テキスト>}`
+
+(真理値変数―bool系)
+
+ * `\newbool{<名前>}`
+ * `\providebool{<名前>}`
+ * `\booltrue{<名前>}`
+ * `\boolfalse{<名前>}`
+ * `\setbool{<名前>}{<値>}`
+ * `\ifbool{<名前>}{<真>}{<偽>}`
+ * `\notbool{<名前>}{<真>}{<偽>}`
+
+(真理値変数―toggle系)
+
+ * `\newtoggle{<名前>}`
+ * `\providetoggle{<名前>}`
+ * `\toggletrue{<名前>}`
+ * `\togglefalse{<名前>}`
+ * `\settoggle{<名前>}{<値>}`
+ * `\iftoggle{<名前>}{<真>}{<偽>}`
+ * `\nottoggle{<名前>}{<真>}{<偽>}`
+
+(定義済判定)
+
+ * `\ifdef{<命令>}{<真>}{<偽>}`
+ * `\ifundef{<命令>}{<真>}{<偽>}`
+ * `\bxIfcsdef{<命令名>}{<真>}{<偽>}`
+ * `\bxIfcsundef{<命令名>}{<真>}{<偽>}`
+ `\bxIfcsdef` と `\bxIfcsdef` は動く引数の中で展開されるとエラーに
+ なる。
+
+### それ以外の命令
+
+種々の事情により、「etoolbox 互換用」以外の機能も含まれている。
+
+(エンジンチェック―ifトークン)
+
+ * `\ifbxineTeX`
+ * `\ifbxinpdfTeX`
+ * `\ifbxinLuaTeX`
+ * `\ifbxinOmega`
+ * `\ifbxinAleph`
+ * `\ifbxinXeTeX`
+ * `\ifbxinpTeX`
+ * `\ifbxinupTeX`
+ エンジンのチェック。これらは TeX の if-トークンである。
+
+(エンジンチェック―LaTeXテスト)
+
+ * `\bxIfineTeX{<真>}{<偽>}`
+ * `\bxIfinpdfTeX{<真>}{<偽>}`
+ * `\bxIfinLuaTeX{<真>}{<偽>}`
+ * `\bxIfinOmega{<真>}{<偽>}`
+ * `\bxIfinAleph{<真>}{<偽>}`
+ * `\bxIfinXeTeX{<真>}{<偽>}`
+ * `\bxIfinpTeX{<真>}{<偽>}`
+ * `\bxIfinupTeX{<真>}{<偽>}`
+ エンジンのチェック。これらは LaTeX 形式のテストである。(完全展開
+ 可能である。)
+
+(プリミティブifトークンのLaTeXテスト版)
+
+ * `\bxIf{<テスト>}{<真>}{<偽>}`
+ * `\bxIfcat{<テスト>}{<真>}{<偽>}`
+ * `\bxIfx{<テスト>}{<真>}{<偽>}`
+ * `\bxIfdim{<テスト>}{<真>}{<偽>}`
+ * `\bxIfnum{<テスト>}{<真>}{<偽>}`
+ TeX のプリミティブなテストを LaTeX 形式のテストにしたもの。例えば
+ 以下のようにして使う。
+ `\bxIfx{\somecs\relax}{\dotrue}{\dofalse}`
+ `\bxIfnum{\count@<3}{\dotrue}{\dofalse}`
+ (これらの命令は完全展開可能である。)
+
+(プリミティブ判定)
+
+ * `\bxIfPrimitive{<命令>}{<真>}{<偽>}`
+ * `\bxIfPrimitiveX{<命令名>}{<真>}{<偽>}`
+ `<命令>` が同名の TeX プリミティブであるかを判定する。機能としては
+ pdfTeX の `\ifpdfprimitive` と同じ。`\bxIfPrimitive` は脆弱である。
+ `\bxIfPrimitiveX` は完全展開可能(従って頑強)であるが、pdfTeX
+ 拡張の `\ifpdfprimitive` が使えない時は処理が非常に重い。
+ * `\bxIfCsPrimitive{<命令名>}{<真>}{<偽>}`
+ 引数が命令名であることを除き `\bxIfPrimitive` と同じ。
+
+(文字列化)
+
+ * `\bxDetokenize{<テキスト>}`
+ e-TeX 拡張の `\detokenize` と同じ機能で、e-TeX 拡張が有効の場合は
+ `\detokenize` のエイリアスになる。無効の場合は自前の実装を使うが、
+ 処理が非常に重い。(完全展開可能である。)
+ * `\bxStringify{<テキスト>}`
+ 完全展開して detokenize した文字列に展開する。現状では全エンジン
+ について自前の実装を使っていて処理が非常に重い。(完全展開可能。)
+
+(トークン列比較)
+
+ * `\bxIfExpToEqual{<テキスト1>}{<テキスト2>}{<真>}{<偽>}`
+ * `\bxIfExpToEqualX{<テキスト1>}{<テキスト2>}{<真>}{<偽>}`
+ 2つのテキストについて、完全展開して detokenize した結果の文字列が
+ 等しいかを判定する。機能としては pdfTeX の `\pdfstrcmp` での等価
+ 判定と同じ。`\bxIfExpToEqual` は脆弱である。`\bxIfExpToEqualX`
+ は完全展開可能だが、`\pdfstrcmp` が使えない時は処理が非常に重い。
+ * `\bxIfstrequalX{<テキスト1>}{<テキスト2>}{<真>}{<偽>}`
+ etoolbox の `\ifstrequal` と同じ機能、すなわち 2 つのテキストに
+ ついて展開せずに detokenize した結果の文字列が等しいかを判定する。
+ 元の `\ifstrequal` と異なり完全展開可能であるが、e-TeX 拡張が無効
+ の時は処理が非常に重い。
+
+(プレアンブル専用命令宣言)
+
+ * `\bxPreamble<TeXマクロ定義命令><TeXマクロ定義記述>`
+ * `\bxPreamble<LaTeXマクロ定義命令>[*]<LaTeXマクロ定義記述>`
+ `\@onlypreamble` を設定してマクロを定義する。
+ ※ 実際の動作は単に `\bxPreamble\制御綴A[*]\制御綴B` を
+ `\@onlypreamble\制御綴B \制御綴A[*]\制御綴B`
+ に置き換えているだけである。
+
+(保護付マクロ定義)
+
+ * `\bxRobustdef<TeXマクロ定義記述>`
+ * `\bxRobustgdef<TeXマクロ定義記述>`
+ * `\bxRobustedef<TeXマクロ定義記述>`
+ * `\bxRobustxdef<TeXマクロ定義記述>`
+ 保護付な命令を定義する。e-TeX 拡張が有効であれば、`\protected` を
+ 有効にし、無効であれば、LaTeX の保護機構を用いる。前に `\long` を
+ 付けられるが `\global` は不可。
+
+(その他)
+
+ * `\bxIfInMovingArg{<真>}{<偽>}`
+ いわゆる動く引数(実行が抑止された環境)であるかのテスト。実行が有効
+ である場合は、<偽> を実行したのと等価になる。実行が抑止されている
+ 場合は「無意味な代入文」の後に <真> を続けたものに展開される。この
+ 命令は、動く引数の中での使用を事前に検査してエラーを出すという目的
+ を想定している。(`\bxCheckForMovingArg` も参照。)
+
+ * `\bxMessageToken{<文字列>}{<テキスト>}`
+ `<テキスト>` の中の `#1` を制御綴 `\<文字列>` に置換したテキスト
+ を実行する。`\<文字列>` の意味は変化しない。`<テキスト>` 中で
+ パラメタ `#1` 等を使う場合は `##1` のように書く必要がある。例えば
+ 以下のように用いる。
+
+ \bxMessageToken{Hello TeX!}{\def\dohello{\do#1}}
+
+ `\dohello` の定義は `\do` の後に制御綴「`\Hello TeX!`」が続いた
+ ものになる。
+
+ * `\bxCheckForMovingArg{<テキスト>}`
+ 動く引数の中であるかの確認。動く引数の中でない場合は `<テキスト>`
+ が実行されるが、ある場合は次のように「未定義命令の形」でエラーが
+ 表示される。ここでは、`\xx@prepare` の中で `\bxCheckForMovingArg`
+ のテストを行っているとする。
+
+ ! Undefined control sequence.
+ <argument> \ ERROR: Use in wrong place!
+ <*> \protected@edef\xx@example{\xx@prepare
+ \xx@tmpa}
+
+ ※ 実行が抑止されている場合は `\errmessage` プリミティブも実行
+ されないので、普通にエラー表示ができないのである。
+ ※ `\bxIfInMovingArg` を利用しているので、そこに述べられている
+ ように、動く引数である場合の展開結果にはゴミが残る。
+
+zxbase パッケージ ― XeTeX 用基礎ライブラリ
+-------------------------------------------
+
+作者(ZR)の制作する他のパッケージで必要な、XeTeX 特有の機能を提供する。
+
+現状では、本パッケージに公開の機能は存在しない。
+
+更新履歴
+--------
+
+ * Version 1.1 〈2017/05/29〉
+ - 内容の整理。
+ - 一部の機能を非推奨にした。
+ * Version 1.0 〈2013/04/29〉
+ - ほぼ全面的な書き直し。
+ * Version 0.5 〈2010/06/15〉
+ - bxbase: `\JI`/`\KI` を追加。
+ - bxbase: `\dvipdfmxmapline`/`\dvipdfmxmapfont` を追加。
+ - bxutf8: BMP 外の符号値への対応。
+ * Version 0.4a 〈2009/11/16〉
+ - bxbase で `\UI`/`\Ux` を zxjatype と、`\AJ` を zxotf
+ と連携させた。
+ - zxbase パッケージを追加。
+ * Version 0.4 〈2009/07/05〉
+ - PXbase の v0.4 に合わせた改訂。
+ * Version 0.3 〈2008/04/06〉
+ - bxutf8x を追加。
+ - bxutf8 のバグを修正。
+ - bxbase でも pxbase の命令 `\recordpapersize` を使用可能にした。
+ * Version 0.2 〈2008/03/28〉
+ - 最初の公開版。
+
+--------------------
+Takayuki YATO (aka. "ZR")
+https://github.com/zr-tex8r
diff --git a/language/japanese/BX/bxbase/README.md b/language/japanese/BX/bxbase/README.md
new file mode 100644
index 0000000000..7daab0f13b
--- /dev/null
+++ b/language/japanese/BX/bxbase/README.md
@@ -0,0 +1,133 @@
+BXbase Package Bundle
+=====================
+
+LaTeX: Support library for other BX packages
+
+The main purpose of this bundle is to serve as underlying library
+to make work other packages created by the same author (their names
+start with “BX” or “PX”).
+
+However bxbase package contains a few user-level commands and is of
+some use by itself.
+
+### System Requirements
+
+ * TeX format: LaTeX.
+ * TeX engine: Any engine.
+ * DVI-ware (in DVI output): Anything.
+
+### Package content
+
+ * `bxbase.sty`: the ‘bxbase’ package
+ * `bxbase.def`: a submodule of ‘bxbase’
+ * `bxtoolbox.sty`: the ‘bxtoolbox’ package
+ * `bxtoolbox.def`: a submodule of ‘bxtoolbox’
+ * `bxtoolbox-ext.def`: a submodule of ‘bxtoolbox’
+ * `bxtoolbox-ja.def`: a submodule of ‘bxtoolbox’
+ * `bxutf8.def`: the ‘bxutf8’ input encoding definition
+ * `bxutf8x.def`: the ‘bxutf8x’ input encoding definition
+ * `zxbase.sty`: the ‘zxbase’ package
+ * `bxbase-ja.pdf`: the user manual for the ‘bxbase’ (in Japanese)
+ * `bxbase-ja.tex`: the source file of `bxbase-ja.pdf`
+
+### Installation
+
+In a system compliant to TDS 1.1, move the files as follows:
+
+ - `*.sty`, `*.def` → $TEXMF/tex/latex/BXbase
+
+And rehash your TEXMF trees if necessary.
+
+### License
+
+This package is distributed under the MIT License.
+
+bxbase Package ― The base library
+----------------------------------
+
+This package provides many package-level features, which are required by
+other packages created by the same author.
+
+It also contains some user-level commands, but most of such commands have
+been deprecated since v1.1, except a few which are related to inputting
+Japanese text.
+
+Unfortunately the documentation is available only in Japanese. (However,
+those unfamiliar with the Japanese language will probably have no need to
+load this package directly.)
+
+bxtoolbox Package ― To emulate etoolbox on non-e-TeX
+-----------------------------------------------------
+
+The main goal of this package is to provide part of the functions of the
+[etoolbox] package for TeX engines without e-TeX extension. (Note that
+TeX users in Japan have long used the pTeX engine for writing Japanese,
+and e-TeX extention for the engine did not appeared until around 2010.)
+
+[etoolbox]: https://www.ctan.org/pkg/etoolbox
+
+Note that when this package is loaded in e-TeX engines, then it loads
+the real etoolbox and uses the functions of that package.
+
+### e-TeX functions provided by this package
+
+Below is the list:
+
+ \AfterPreamble \AtEndPreamble \AfterEndPreamble
+ \AfterEndDocument
+ \csdef \csgdef \csedef \csxdef
+ \cslet \letcs \csletcs \undef \csundef
+ \appto \gappto \eappto \xappto
+ \csappto \csgappto \cseappto \csxappto
+ \preto \gpreto \epreto \xpreto
+ \cspreto \csgpreto \csepreto \csxpreto
+ \newbool \providebool \booltrue \boolfalse
+ \setbool \ifbool \notbool
+ \newtoggle \providetoggle \toggletrue \togglefalse
+ \settoggle \iftoggle \nottoggle
+ \ifdef \ifundef
+ \ifstrequal \ifstrempty
+
+### “Fakes” provided by this package
+
+These commands have a name of the original command prefixed by “bx”,
+that is, `\bxZzz` instead of `\zzz`. Some come in two versions: `\bxZzz`
+works as `\zzz` but is lack of expandability `\zzz` has, whereas `\bxZzzX`
+is expandable as `\zzz` is but otherwise flawed.
+
+ * `\bxNewrobustcmd`: Uses LaTeX-protect instead of `\protected`.
+ * `\bxRenewrobustcmd`: Ditto.
+ * `\bxProviderobustcmd`: Ditto.
+ * `\bxRobustify`: Ditto.
+ * `\bxCsuse`: Forbidden in moving arguments.
+ * `\bxCsuseX`: Suffering from `\relax`’ifying.
+ * `\bxCsshow`: Forbidden in moving arguments.
+ * `\bxIfcsdef`: Forbidden in moving arguments.
+ * `\bxIfcsundef`: Forbidden in moving arguments.
+ * `\bxIfcsundefX`: Suffering from `\relax`’ifying.
+
+Note: On e-TeX extended engines, these commands are simply aliases to the
+real commands of etoolbox.
+
+zxbase Package ― The base library for XeTeX
+--------------------------------------------
+
+This package provides XeTeX-specific features, which are required by
+other packages created by the same author.
+
+For the present this package contains no public features.
+
+Revision History
+----------------
+
+ * Version 1.1 〈2017/05/29〉
+ * Version 1.0 〈2013/04/29〉
+ * Version 0.5 〈2010/06/15〉
+ * Version 0.4a 〈2009/11/16〉
+ * Version 0.4 〈2009/07/05〉
+ * Version 0.3 〈2008/04/06〉
+ * Version 0.2 〈2008/03/28〉
+
+--------------------
+Takayuki YATO (aka. "ZR")
+https://github.com/zr-tex8r
diff --git a/language/japanese/BX/bxbase/bxbase-ja.pdf b/language/japanese/BX/bxbase/bxbase-ja.pdf
new file mode 100644
index 0000000000..8ce551a152
--- /dev/null
+++ b/language/japanese/BX/bxbase/bxbase-ja.pdf
Binary files differ
diff --git a/language/japanese/BX/bxbase/bxbase-ja.tex b/language/japanese/BX/bxbase/bxbase-ja.tex
new file mode 100644
index 0000000000..aac6d38777
--- /dev/null
+++ b/language/japanese/BX/bxbase/bxbase-ja.tex
@@ -0,0 +1,108 @@
+% 文字コードは UTF-8
+% uplatex で組版する
+\documentclass[a4paper,uplatex]{jsarticle}
+\usepackage{shortvrb}
+\MakeShortVerb{\|}
+\newcommand{\PkgVersion}{1.1}
+\newcommand{\PkgDate}{2017/05/29}
+\newcommand{\Pkg}[1]{\textsf{#1}}
+\newcommand{\Meta}[1]{$\langle$\mbox{}#1\mbox{}$\rangle$}
+\newcommand{\Note}{\par\noindent ※}
+\newcommand{\Means}{~:\quad}
+\providecommand{\pTeX}{p\TeX}
+\providecommand{\upTeX}{u\pTeX}
+\providecommand{\pLaTeX}{p\LaTeX}
+\providecommand{\upLaTeX}{u\pLaTeX}
+%-----------------------------------------------------------
+\begin{document}
+\title{\Pkg{bxbase} パッケージ\\
+(ユーザ命令の解説)}
+\author{八登崇之\ (Takayuki YATO; aka.~``ZR'')}
+\date{v\PkgVersion \quad[\PkgDate]}
+\maketitle
+
+%===========================================================
+\section{パッケージの読込}
+
+|\usepackage| で読み込む。オプションは無い。
+\begin{quote}\small\begin{verbatim}
+\usepackage{bxbase}
+\end{verbatim}\end{quote}
+
+\Note 本パッケージのライブラリとしての機能は特定の
+エンジンやDVIウェアに依存しないが、以下に述べる命令に
+ついては必ずしもそうでないことに注意。
+
+%===========================================================
+\section{機能}
+
+%-------------------
+\subsection{符号値による文字入力}
+
+\begin{itemize}
+\item |\Ux{|\Meta{コード値}|,...}|\\
+ |\UI{|\Meta{<コード値>}|,...}|\Means
+Unicode コード値による入力を行う。
+|\Ux| は欧文用、|\UI| は和文用
+(I は Ideographic の意味)。
+コード値は以下の形式で表す。
+コンマで区切って複数文字入力できる。
+\begin{itemize}
+\item \Meta{16進数}\Means |A72C|, |02000B|, |1bd| 等。
+\item |+|\Meta{10進数}\Means |+254|, |+0937| 等。
+\item |'|\Meta{8進数}\Means |'376|, |'1651| 等。
+\end{itemize}
+
+Unicode 文字の出力には次の順番で利用可能な最初の機能を用いる。
+(|\UI| の場合 3) を飛ばす。)
+\begin{enumerate}
+\item[1)] \Pkg{zxjatype}パッケージ。
+この場合、その機構に従って出力される。
+すなわち |\UI| は必ず和文フォントで出力し、
+|\Ux| は和文/欧文切替の対象となる。
+\item[2)] XeTeXのUnicode出力。
+\item[3)] (|\Ux| のみ)\Pkg{bxucs}パッケージ。
+\item[4)] {\upTeX}の和文Unicode出力。
+\item[5)] \Pkg{UTF}/\Pkg{OTF}パッケージ。
+\item[6)] \Pkg{ums}/\Pkg{bxsuika}パッケージ。
+\end{enumerate}
+どれも使えない場合は「16進表現による代替表現」になる。
+
+\item |\AJ{|\Meta{コード値}|,...}|\Means
+Adobe-Japan1のコード値による入力を行う。
+コード値は10進数で指定する。
+出力には次の順番で利用可能な最初の機能を用いる。
+\begin{enumerate}
+\item[1)] \Pkg{zxotf}パッケージ。
+\item[2)] \Pkg{UTF}/\Pkg{OTF}パッケージ。
+\end{enumerate}
+どれも使えない場合は代替表現になる。
+
+\item |\JI{|\Meta{コード値}|,...}|\Means
+いわゆる「JISコード」(JIS~X~0208のGL表現)
+のコード値による入力を行う。
+コード値指定の方法は |\Ux| と同じ。
+出力には{(u)\pTeX}のJISコード和文出力の機能を使う。
+使えない場合は代替表現になる。
+
+\item |\KI{|\Meta{コード値}|,...}|\Means
+いわゆる「区点コード」のコード値による入力を行う。
+コード値指定は「RRCC」(RRは区番号、CCは点番号を10進2桁で表したもの)
+の形式で指定する。
+出力には{(u)\pTeX}のJISコード和文出力の機能を使う。
+使えない場合は代替表現になる。
+
+\item |\bxUx| / |\bxUI| / |\bxAJ| / |\bxJI| / |\bxKI|\Means
+|\Ux| 等は非常に短い名前なので他のパッケージと衝突する恐れがあり、
+そこでこのパッケージでは既に同名の命令がある場合は上書きしない
+ようにしている。
+|\bxUx| 等はそれぞれ |\Ux| 等と同じで、
+先のような場合にも常に使える。
+
+\end{itemize}
+
+なお、このパッケージは\Pkg{bxutf8}の為のドライバ(|\bxUHex|)
+および\Pkg{bxutf8x}の為のドライバを |\Ux| に相当するものに設定する。
+
+%===========================================================
+\end{document}
diff --git a/language/japanese/BX/bxbase/bxbase.def b/language/japanese/BX/bxbase/bxbase.def
new file mode 100644
index 0000000000..614ac5dcc8
--- /dev/null
+++ b/language/japanese/BX/bxbase/bxbase.def
@@ -0,0 +1,673 @@
+%%
+%% This is file 'bxbase.def'.
+%%
+
+%% file declaration
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesFile{bxbase.def}[2017/05/29 v1.1 BX base library]
+\def\bx@pkgname{BXbase} % bundle name
+
+%% check intergrity
+\edef\bxbz@tmpa{\@currname.\@currext}\def\bxbz@tmpb{bxbase.def}
+\ifx\bxbz@tmpa\bxbz@tmpb\else
+ \PackageError\bx@pkgname{Illegal load sequence}\@eha
+\expandafter\endinput\fi\relax
+
+%% code guards
+\edef\bxbz@restore@codes{%
+ \catcode33=\the\catcode33%
+ \catcode34=\the\catcode34%
+ \catcode39=\the\catcode39%
+ \catcode43=\the\catcode43%
+ \catcode45=\the\catcode45%
+ \catcode46=\the\catcode46%
+ \catcode47=\the\catcode47%
+ \catcode58=\the\catcode58%
+ \catcode60=\the\catcode60%
+ \catcode62=\the\catcode62%
+ \catcode94=\the\catcode94%
+ \catcode96=\the\catcode96%
+\relax}
+\catcode33=12 % <!>
+\catcode34=12 % <">
+\catcode39=12 % <'>
+\catcode43=12 % <+>
+\catcode45=12 % <->
+\catcode46=12 % <.>
+\catcode47=12 % </>
+\catcode58=12 % <:>
+\catcode60=12 % <<>
+\catcode62=12 % <>>
+\catcode94=7 % <^>
+\catcode96=12 % <`>
+\AtEndOfPackage{%
+ \bxbz@restore@codes
+ \let\bxbz@restore@codes\@undefined}
+
+%--------------------------------------- general
+
+%% packages
+\RequirePackage{bxtoolbox}[2017/05/29]
+
+%% variables
+\let\bxHex\relax % result of \bxToHex...
+\let\bxRes\relax % result of \bxToLower
+\ifundef\bxUcv{\newcount\bxUcv}{} % argument of \bx@Ux
+
+%% unique tokens
+\def\bxbz@uniq{\bxbz@uniq@}
+
+%% error messages
+\def\bx@error{\PackageError\bx@pkgname}
+\def\bx@warn{\PackageWarningNoLine\bx@pkgname}
+\def\bx@err@nobbl{\bx@error{babel not yet loaded}\@eha}
+\def\bx@err@nanbc{\bx@error{Non-BMP characters not supported}\@eha}
+\def\bx@err@ilnfm{\bx@error{Illegal number format}\@eha}
+\def\bx@err@uddrv#1{\bx@error{\string#1 is undefined}\@eha}
+\def\bxbz@warn@depre#1#2{%
+ \PackageWarning\bx@pkgname
+ {The command '\string#1' is obsolete and\MessageBreak
+ its use is deprecated%
+ \ifx\relax#2\relax, \else
+ \MessageBreak (use #2 instead),\MessageBreak
+ \fi detected}}
+
+%--------------------------------------- programming tools
+
+%%<+> \bxCheckMA\CS <text> \bxEndCheckMA
+% If this construct appears in moving arguments, it expands to
+% an error message command.
+\def\bxCheckMA{\let\bx@chkma@a\bx@chkma@a\noexpand}
+\let\bxEndCheckMA\@empty \let\bx@chkma@z\relax
+\def\bx@chkma@a#1{\bx@chkma@z\relax\bx@chkma@b}
+\def\bx@chkma@b#1#2#3\bxEncCheckMA{\noexpand\bx@err@ivfrg#1#2}
+\def\bx@err@ivfrg#1{\bx@error{Cannot use \string#1 here}\@eha}
+
+%%<+D> \bxCheckCounterpart{<base_name>}
+% Compares the version between the current file and <base_name>
+% with the extension of current file, and if the latter file is
+% already loaded and moreover turns out to be newer than the
+% system aborts loading the current file.
+\bxPreamble\newcommand*\bxCheckCounterpart[1]{%
+ \PackageWarning\bx@pkgname
+ {'\string\bxCheckCounterpart' is no more supported,%
+ \MessageBreak detected}}
+
+%--------------------------------------- TeX engine distinction
+
+%%<+> \bxEngineTypeX / \bxEngineTypeY
+% Numbers that signify what I am.
+ % \bxEngineTypeX values
+\chardef\bxETTeX=0 % none of those
+\chardef\bxETpTeX=1 % pTeX-extended
+\chardef\bxETXeTeX=2 % XeTeX-extended
+\chardef\bxETOmega=3 % Omega-extended
+ % \bxEngineTypeY values (plus \bxETTeX)
+\chardef\bxETeTeX=1 % e-TeX-extended
+\chardef\bxETpdfTeX=3 % pdfTeX-extended
+\chardef\bxETLuaTeX=5 % LuaTeX-extended
+ % (here old pdfTeX without e-TeX is ignored)
+ %
+ % Note:
+ % Originally LuaTeX was supposed to be 'both pdfTeX- and Omega-
+ % extended' (\bxEngineTypeX/Y = 3/3); however, It seems that
+ % in today's LaTeX world LuaTeX is no longer seen as Omega-
+ % extended (indeed, current LuaTeX drops many of the Omega-
+ % specific features). So LuaTeX got relocated at \bxEngineTypeX/Y
+ % = 0/5.
+\ifbxinpTeX \let\bxEngineTypeX\bxETpTeX
+\else\ifbxinXeTeX \let\bxEngineTypeX\bxETXeTeX
+\else\ifbxinOmega \let\bxEngineTypeX\bxETOmega
+\else \let\bxEngineTypeX\bxETTeX
+\fi\fi\fi
+\ifbxineTeX \let\bxEngineTypeY\bxETeTeX
+\else\ifbxinpdfTeX \let\bxEngineTypeY\bxETpdfTeX
+\else\ifbxinLuaTeX \let\bxEngineTypeY\bxETLuaTeX
+\else \let\bxEngineTypeY\bxETTeX
+\fi\fi\fi
+\bxDebug{engine type = \the\bxEngineTypeX/\the\bxEngineTypeY}
+
+%--------------------------------------- Babel something
+
+%%<+> \bxBDHookBabel
+% A begindocument-hook about Babel.
+\newbool{bx@bbl@inuse}
+\bxPreamble\def\bx@bbl@bdhook{}
+\bxPreamble\newcommand*\bxBDHookBabel{%
+ \AtBeginDocument{%
+ \@ifpackageloaded{babel}{%
+ \bx@bbl@inusetrue
+ \ifx\bx@bbl@captlang\@undefined\else \bx@bbl@do@captlang \fi
+ \bx@bbl@bdhook
+ }{}}%
+ \bxNullify\bxBDHookBabel}
+
+%%<+> \bxAtBeginDocumentBabel{<text>}
+% Register a begin-document hook that will be invoked only when babel
+% is loaded.
+\bxPreamble\newcommand\bxAtBeginDocumentBabel{%
+ \g@addto@macro\bx@bbl@bdhook}
+
+%% \bx@bbl@patch@sel@lang
+% A patch to \select@language that disables automatic switching of
+% caption language.
+\bxPreamble\def\bx@bbl@patch@sel@lang{%
+ \global\let\bx@bbl@patch@sel@lang\relax
+ \global\let\bx@bbl@org@select@language\select@language
+ \gdef\select@language##1{%
+ \bx@bbl@copy{**C}{##1}\bx@bbl@copy{##1}{**Z}%
+ \bx@bbl@org@select@language{##1}\bx@bbl@copy{##1}{**C}}}
+
+%% \bx@bbl@do@captlang
+% Sets the caption language of Babel according to the value of
+% \bx@bbl@captlang.
+\bxPreamble\def\bx@bbl@do@captlang{%
+ \bxIfExpToEqual{\bx@bbl@captlang}{main}%
+ {\let\bx@bbl@captlang\bbl@main@language}{}%
+ \bxIfExpToEqual{\bx@bbl@captlang}{default}{}%else
+ {\bxIfcsundef{l@\bx@bbl@captlang}{\@nolanerr\bx@bbl@captlang}%
+ {\@nameuse{date\bx@bbl@captlang}%
+ \@nameuse{captions\bx@bbl@captlang}}}}
+
+%% \bx@bbl@copy{<lang1>}{<lang2>}
+% Copies \captions... and \date... for save.
+\def\bx@bbl@copy#1#2{%
+ \csletcs{captions#1}{captions#2}%
+ \csletcs{date#1}{date#2}}
+\csdef{captions**Z}{\@empty}
+\csdef{date**Z}{\@empty}
+
+%%<*D> \fixcaptionlanguage{<lang>}
+%%<+> \bxFixCaptionLanguage{<lang>}
+% Change the caption language manually, with disabling automatic
+% switching on it.
+\bxPreamble\newcommand*\fixcaptionlanguage[1]{%
+ \bxbz@warn@depre\fixcaptionlanguage{}%
+ \bxFixCaptionLanguage{#1}}
+\bxPreamble\newcommand*\bxFixCaptionLanguage[1]{%
+ \@ifpackageloaded{babel}%
+ {\bx@bbl@patch@sel@lang
+ \xdef\bx@bbl@captlang{#1}}%
+ {\bx@err@nobbl}}
+
+%%<+> \bxProvideCaptionLanguage{<lang>}
+\bxPreamble\newcommand*\bxProvideCaptionLanguage[1]{%
+ \ifundef\bx@bbl@captlang
+ {\bxFixCaptionLanguage{#1}}{}}
+
+%%<*> \setmainlanguage{<lang>}
+% Changes the 'main' language (one that is effective at beginning).
+\bxPreamble\newcommand*\setmainlanguage[1]{%
+ \bxIfcsundef{date#1}{\@nolanerr{#1}}{}%
+ \xdef\bbl@main@language{#1}}
+
+%%<+> \bxTrivLangDef{<lang>}
+% Makes a fake language option.
+\bxPreamble\newcommand*\bxTrivLangDef[1]{%
+ \bxIfcsundefX{date#1}{%
+ \bxIfcsundefX{l@#1}%
+ {\expandafter\chardef\csname l@#1\endcsname\z@}{}%
+ \csdef{date#1}{\relax}%
+ \csdef{captions#1}{\relax}%
+ \csdef{extras#1}{\relax}%
+ \csdef{noextras#1}{\relax}%
+ \csdef{date#1}{\relax}%
+ }{}}
+
+%--------------------------------------- input through code values
+
+%%<+> \bxBDHookUnicode
+% A begindocument-hook about Unicode (& CID) input.
+\bxPreamble\newcommand*\bxBDHookUnicode{%
+ \AtBeginDocument{\bx@assign@Ux}%
+ \bxNullify\bxBDHookUnicode}
+
+%%<+> \bxBDHookJisInput
+% A begindocument-hook about JIS-code input.
+\bxPreamble\newcommand*\bxBDHookJisInput{%
+ \AtBeginDocument{\bx@assign@JI}%
+ \bxNullify\bxBDHookJisInput}
+
+%%<+> \bxFallbackSym{<code>}
+\newcommand*\bxFallbackSym[1]{%
+ \leavevmode\bx@fbs@fnt{\dimen@=\bx@junit\relax
+ \hb@xt@\dimen@{\hss\vrule\@width\z@\@height.88\dimen@\@depth.12\dimen@
+ \frame{\lower.04\dimen@\hb@xt@.84\dimen@{\hss\vbox to.84\dimen@{\vss
+ \hsize=.84\dimen@\baselineskip\z@\lineskip.01\dimen@\parskip\z@skip
+ \leftskip\@flushglue\rightskip\@flushglue\parfillskip\z@skip
+ \parindent\z@\let\\\bx@fbs@c\leavevmode\let\sml=\bx@fbs@fs\bx@fbs@f
+ #1\unskip\par\vss}\hss}}\hss}}}
+\edef\bx@junit{\ifnum\bxEngineTypeX=\@ne 1zw\else 1em\fi}
+\def\bx@fbs@c{\unskip\par\ignorespaces}
+\def\bx@fbs@fnt{\global\let\bx@fbs@fnt\relax
+ \global\font\bx@fbs@fs=phvr at 2.4pt
+ \global\font\bx@fbs@f=phvr at 3.6pt}
+
+%%<+> \bxCodeValueSeq\CS{<text>}
+% Dispatcher for code value sequences.
+\newcommand*\bxCodeValueSeq{%
+ \let\bx@cvseq@branch\bx@cvseq@branch@hex
+ \bx@cvseq@a}
+\def\bx@cvseq@a#1#2{%
+ {\catcode33=12%
+ \xdef\bx@gtmpa{\uppercase{\def\noexpand\bx@tmpa{#2}}}}%
+ \let\bx@cvseq@do=#1\bx@gtmpa\relax
+ \expandafter\bx@cvseq@b\bx@tmpa,!\@nil}
+\def\bx@cvseq@b{\futurelet\bx@toka\bx@cvseq@branch}
+\def\bx@cvseq@branch@hex{%
+ \if !\bx@toka \let\bx@nxt\bx@cvseq@fin
+ \else\if "\bx@toka \let\bx@nxt\bx@cvseq@pfx
+ \else\if '\bx@toka \let\bx@nxt\bx@cvseq@pfx
+ \else\if +\bx@toka \let\bx@nxt\bx@cvseq@pfx
+ \else \let\bx@nxt\bx@cvseq@hex \fi\fi\fi\fi
+ \bx@nxt}
+\def\bx@cvseq@pfx{%
+ \afterassignment\bx@cvseq@post \bxUcv=}
+\def\bx@cvseq@hex{%
+ \afterassignment\bx@cvseq@post \bxUcv="0}
+\def\bx@cvseq@post#1{%
+ \if ,#1\expandafter\bx@cvseq@post@a
+ \else \bx@err@ilnfm \expandafter\bx@cvseq@fin \fi}
+\def\bx@cvseq@post@a{%
+ \bx@cvseq@do \bx@cvseq@b}
+\def\bx@cvseq@fin#1\@nil{}
+
+%%<+> \bxCodeValueSeqD\CS{<text>}
+% Same as \bxCodeValueSeq, except that it defaults to decimal.
+\newcommand*\bxCodeValueSeqD{%
+ \let\bx@cvseq@branch\bx@cvseq@branch@dec \bx@cvseq@a}
+\def\bx@cvseq@branch@dec{%
+ \if !\bx@toka \let\bx@nxt\bx@cvseq@fin
+ \else \let\bx@nxt\bx@cvseq@pfx \fi
+ \bx@nxt}
+
+%%<*> \bxUx, \bxUI, \bxAJ, \bxJI, \bxKI
+% The prefixed names for \Ux, etc. They are (more likely to be)
+% collision-safe.
+\bxNewrobustcmd*\bxUx{\bxCodeValueSeq\bx@Ux}
+\bxNewrobustcmd*\bxUI{\bxCodeValueSeq\bx@UI}
+\bxNewrobustcmd*\bxAJ{\bxCodeValueSeqD\bx@AJ}
+\bxNewrobustcmd*\bxJI{\bxCodeValueSeq\bx@JI}
+\bxNewrobustcmd*\bxKI{\bxCodeValueSeqD\bx@KI}
+
+%%<+> \bxUHex{<value>}, \bxUInt{<value>}
+% Alternative entry points for \Ux. The code value is specified in
+% hexadecimal (\bxUHex) / decimal (\bxUInt) numerals.
+\def\bxbz@tmpa{\bxUIntDummyBxutfx}
+\bxIfx{\bxUInt\bxbz@tmpa}{\undef\bxUInt}{}
+\def\bxbz@tmpa{\bxUHexDummyBxutf}
+\bxIfx{\bxUHex\bxbz@tmpa}{\undef\bxUHex}{}
+\newcommand*\bxUHex{\protect\bx@Uxh}
+\newcommand*\bxUInt{\protect\bx@UInt}
+\def\bx@UInt#1{\bxUcv=#1\relax\bx@Ux}
+
+%% \bx@UIh@fb, \bx@AJ@fb
+\def\bx@UIh@fb#1{\bxUcv="#1\relax\bxToHexFive\bxUcv
+ \expandafter\bx@b@fb@five\bxHex[Ux]}
+\def\bx@AJ@fb{\bxToDecFive\bxUcv
+ \expandafter\bx@b@fb@five\bxHex[AJ]}
+\def\bx@JI@fb{\bxToHexFour\bxUcv
+ \expandafter\bx@b@fb@four\bxHex[JI]}
+\def\bx@KI@fb{\bxToDecFive\bxUcv
+ \expandafter\bx@b@fb@five\bxHex[KI]}
+\def\bx@b@fb@five#1#2#3#4#5#6[#7]{%
+ \bxFallbackSym{{\sml#7}\\\bx@hx@supzero#1#2#3\\#4#5}}
+\def\bx@b@fb@four#1#2#3#4#5[#6]{%
+ \bxFallbackSym{{\sml#6}\\#1#2\\#3#4}}
+\def\bx@hx@supzero#1{\ifx0#1\else\expandafter#1\fi}
+
+%% \bx@assign@Ux
+% Picks up appropriate drivers \bx@Ux etc. according to current
+% load-states of packages.
+% [driver] [purpose] [argument] [default]
+% \bx@Ux Unicode \bxUcv go to \bx@UI
+% \bx@Uxh Unicode #1(hex) go to \bx@UIh
+% \bx@UI Unicode-ideo. \bxUcv go to \bx@UIh
+% \bx@UIh Unicode-ideo. #1(hex) fallback
+% \bx@AJ Adobe-Japan1 \bxUcv fallback
+% From the default value it can be said:
+% - Implemetations for \bx@Ux(h) must fallback on \bx@UI(h) when
+% they cannot be handle the given character, unless such fallback
+% is known to be useless.
+% - When you implement one of \bx@Ux or \bx@Uxh, then you must also
+% implement the other.
+% - When you implement \bx@UI, then you must also implement \bx@UIh.
+% (But you can implement only \bx@UIh.)
+ % Initial values
+\def\bx@Ux{\bx@UI} % pass to \bx@UI
+\def\bx@Uxh{\bx@UIh} % pass to \bx@UIh
+\def\bx@UI{\bxToHexUC\bxUcv\bx@UIh\bxHex} % pass to \bx@UIh
+\let\bx@UIh\bx@UIh@fb % 'fallback' driver
+\let\bx@AJ\bx@AJ@fb % 'fallback' driver
+ % some helpers
+ % one more step put so that \UTF could be redefined
+\def\bx@UIh@otf{\UTF}
+ % \UMS with the argument expanded
+\def\bx@UIh@ums#1{\expandafter\UMS\expandafter{#1}}
+ % \CID with \bxUcv
+\def\bx@AJ@otf{\CID\bxUcv}
+\bxPreamble\def\bx@assign@Ux{%
+ % If I have bxucs, then set \bx@Ux to \bx@Ux@ucs
+ % (which fallbacks on \bx@UI in failure).
+ \@ifpackageloaded{bxucs}{%
+ \let\bx@Ux\bx@Ux@ucs\let\bx@Uxh\bx@Uxh@ucs}{}%
+ % If I have ums or bxsuika then I use \UMS as \bx@UIh driver.
+ \@ifpackageloaded{ums}{\bxOktrue}{\bxOkfalse}
+ \@ifpackageloaded{bxsuika}{\bxOktrue}{}
+ \ifbxOk \let\bx@UIh\bx@UIh@UMS \fi
+ % If I have utf or otf then I use \UTF as \bx@UIh driver.
+ \@ifpackageloaded{utf}{\bxOktrue}{\bxOkfalse}
+ \@ifpackageloaded{otf}{\bxOktrue}{}
+ \ifbxOk \let\bx@UIh\bx@UIh@otf \let\bx@AJ\bx@AJ@otf \fi
+ % pxotf is same as otf, except that it also provides a direct
+ % way to \bx@UI and \bx@AJ.
+ \@ifpackageloaded{pxotf}{%
+ \let\bx@UIh\bxUIh@otf \let\bx@UI\pxUcvUTF \let\bx@AJ\pxUcvCID}{}%
+ % If I am upTeX I use \kchar.
+ \ifbxinupTeX
+ \def\bx@UI{\kchar\bxUcv}\def\bx@UIh##1{\kchar"##1\relax}%
+ % If I am a Unicode-aware engine, then...
+ \else\ifnum\bxEngineTypeX>\@ne %
+ \def\bx@UI{\char\bxUcv}\def\bx@UIh##1{\char"##1\relax}%
+ \let\bx@Ux\bx@UI \let\bx@Uxh\bx@UIh
+ % zxjatype provides better handling of \UI & \Ux.
+ \@ifpackageloaded{zxjatype}{%
+ \let\bx@UI\zxjt@UI \let\bx@UIh\zxjt@UIh
+ \let\bx@Ux\zxjt@Ux \let\bx@Uxh\zxjt@Uxh}{}%
+ % zxotf provides \CID comamnd.
+ \@ifpackageloaded{zxotf}{%
+ \def\bx@AJ{\CID\bxUcv}}{}%
+ \fi\fi
+ % If \bx@UIh@usr is known I use it.
+ \ifx\bx@UIh@usr\@undefined\else \let\bx@UIh\bx@UIh@usr \fi
+ \let\bx@setuidriver@a\bx@setuidriver@b
+ \ifx\bx@AJ@usr\@undefined\else \let\bx@AJ\bx@AJ@usr \fi
+ \let\bx@setajdriver@a\bx@setajdriver@b
+}
+
+%%<*> \setUIdriver\CS
+\newcommand*\setUIdriver[1]{%
+ \ifx#1\@undefined \bx@err@uddrv#1%
+ \else \bx@setuidriver@a#1\fi}
+\def\bx@setuidriver@a#1{\let\bx@UIh@usr#1}
+\def\bx@setuidriver@b#1{\let\bx@UIh#1}
+
+%%<*> \setAJdriver\CS
+\newcommand*\setAJdriver[1]{%
+ \ifx#1\@undefined \bx@err@uddrv#1%
+ \else \bx@setajdriver@a#1\fi}
+\def\bx@setajdriver@a#1{\let\bx@AJ@usr#1}
+\def\bx@setajdriver@b#1{\let\bx@AJ#1}
+
+%%%% \bx@assign@JI
+% Picks up appropriate drivers \bx@JI etc.
+% [driver] [purpose] [argument] [default]
+% \bx@JI JIS-code \bxUcv fallback
+% \bx@KI Kuten-code \bxUcv fallback
+\def\bx@JI{\bx@JI@fb}
+\def\bx@KI{\bx@KI@fb}
+\bxPreamble\def\bx@assign@JI{%
+ % \JI & \KI are available only in (u)pTeX
+ \ifnum\bxEngineTypeX=\@ne
+ \def\bx@JI{\char\jis\bxUcv\relax}\let\bx@KI\bx@KI@pTeX
+ \fi
+}
+\ifnum\bxEngineTypeX=\@ne %----<*pTeX>
+%% \bx@KI@pTeX
+ % \KI{2????} (0213 plane 2) works only when kanji-internal=sjis
+\mathchardef\bx@ki@max=\ifnum\jis"2121="8140 30000\else 20000\fi\relax
+\mathchardef\bx@ki@myr=10000
+\mathchardef\bx@ki@bas="2020
+\let\bx@ki@char=\char
+\ifx\kchar\@undefined\else \let\bx@ki@char=\kchar \fi
+\def\bx@KI@pTeX{%
+ \ifnum\bxUcv<\bx@ki@max\else \bxUcv=\z@ \fi
+ \ifnum\bxUcv<\bx@ki@myr \advance\bxUcv\bx@ki@myr \fi
+ \expandafter\bx@ki@ptex@a\the\bxUcv\@nil
+ \bx@ki@char\jis\bxUcv\relax}
+\begingroup \@tempcnta=94
+ \@for\bx@tmpa:=01,08,03,04,05,12,13,14,15\do{\advance\@tempcnta\@ne
+ \expandafter\xdef\csname bx@JSH/\bx@tmpa\endcsname{\the\@tempcnta}}
+ \@tempcntb=77 \loop
+ \advance\@tempcnta\@ne \advance\@tempcntb\@ne
+ \expandafter\xdef\csname bx@JSH/\the\@tempcntb\endcsname
+ {\the\@tempcnta}%
+ \ifnum\@tempcntb<94 \repeat
+\endgroup
+\def\bx@ki@ptex@a#1#2#3#4#5#6\@nil{%
+ \ifnum#1=\@ne \bxUcv=#2#3\relax
+ \else \bxUcv=0\csname bx@JSH/#2#3\endcsname\relax \fi
+ \multiply\bxUcv\@cclvi \advance\bxUcv#4#5\relax
+ \advance\bxUcv\bx@ki@bas}
+\fi %----</pTeX>
+
+%--------------------------------------- "safe-caret" module
+
+%% variables
+\newbool{bx@acr@ok}
+\newbool{bx@acr@needed}
+\newbool{bx@safecaret}
+
+\catcode`\^=13 %---- make caret active
+
+%%<*> \safecaret
+\bxPreamble\newcommand*\safecaret{%
+ \bx@safecarettrue}
+
+%%<+> \bxEnableSafeCaret
+\bxPreamble\newcommand*\bxEnableSafeCaret{%
+ \bx@acr@neededtrue}
+
+%% \bx@acr@defbytes
+\bxPreamble\def\bx@acr@defbytes{%
+ \bgroup\@tempcnta128\lccode`\Z=`\B\catcode`\^\active
+ \@whilenum\@tempcnta<256 \do{%
+ \lccode`\^\@tempcnta \chardef\bx@acr@tok\@tempcnta
+ \expandafter\bx@acr@defbytes@do@a\meaning\bx@acr@tok\@nil
+ \advance\@tempcnta\@ne}\egroup}
+\bxPreamble\def\bx@acr@defbytes@do@a#1"#2\@nil{% name is bx@acr@B/ab etc.
+ \lowercase{\expandafter\gdef\csname bx@acr@Z/#2\endcsname{^}}}
+\@onlypreamble\bx@acr@defbytes
+\@onlypreamble\bx@acr@defbytes@do@a
+
+%% \bx@acr@caret
+% This command should be \let'd to active <^>.
+\def\bx@acr@caret{%
+ \let\bx@acr@out\@empty \bx@acr@caret@a}
+\def\bx@acr@caret@a{%
+ \bx@acr@nextcaret{\bx@acr@caret@b}{\bx@acr@finish{\bx@acr@nxc}}}
+\def\bx@acr@caret@b#1{%
+ \let\bx@acr@hex\@empty
+ \bx@acr@nexthexdgt{\bx@acr@caret@c}{\bx@acr@finish{\bx@acr@nxdc}}}
+\def\bx@acr@caret@c#1{%
+ \edef\bx@acr@hex{#1}%
+ \bx@acr@nexthexdgt{\bx@acr@caret@d}{\bx@acr@finish{\bx@acr@nxdc\bx@acr@hex}}}
+\def\bx@acr@caret@d#1{%
+ \edef\bx@acr@hex{\bx@acr@hex#1}%
+ \expandafter\bx@acr@caret@e\csname bx@acr@B/\bx@acr@hex\endcsname
+ \bx@acr@ifok{\bx@acr@nextcaret{\bx@acr@caret@g}{\bx@acr@finish{}}}%
+ {\bx@acr@finish{\bx@acr@nxdc\bx@acr@hex}}}
+\def\bx@acr@caret@e#1{%
+ \ifx#1\relax \bx@acr@okfalse
+ \else \bx@acr@oktrue \expandafter\bx@acr@caret@f#1\fi}
+\def\bx@acr@caret@f#1{%
+ \expandafter\def\expandafter\bx@acr@out\expandafter{\bx@acr@out#1}}
+\def\bx@acr@caret@g#1{\bx@acr@caret@a}
+\def\bx@acr@nxc{\noexpand^}
+\def\bx@acr@nxdc{\noexpand^\noexpand^}
+\def\bx@acr@nextcaret#1#2{%
+ \def\bx@acr@tmpa{#1}\def\bx@acr@tmpb{#2}%
+ \futurelet\bx@acr@tok\bx@acr@nextcaret@a}
+\def\bx@acr@nextcaret@a{%
+ \let\bx@acr@nxt\bx@acr@tmpb
+ \ifx^\bx@acr@tok \let\bx@acr@nxt\bx@acr@tmpa
+ \fi \bx@acr@nxt}
+\def\bx@acr@nexthexdgt#1#2{%
+ \def\bx@acr@tmpa{#1}\def\bx@acr@tmpb{#2}%
+ \futurelet\bx@acr@tok\bx@acr@nexthexdgt@a}
+\def\bx@acr@nexthexdgt@a{%
+ \let\bx@acr@nxt\bx@acr@tmpb
+ \ifcat @\noexpand\bx@acr@tok \let\bx@acr@nxt\bx@acr@tmpa \fi
+ \ifcat "\noexpand\bx@acr@tok \let\bx@acr@nxt\bx@acr@tmpa \fi
+ \bx@acr@nxt}
+\def\bx@acr@ifok{%
+ \ifbx@acr@ok \expandafter\@firstoftwo \else \expandafter \@secondoftwo \fi}
+\def\bx@acr@finish#1{%
+ \edef\bx@acr@nxt{#1}%
+ \ifx\bx@acr@out\@empty \bx@acr@oktrue \else \bx@acr@okfalse \fi
+ \bx@acr@ifok{\expandafter\bx@acr@finish@a\bx@acr@nxt\@nil}%
+ {\expandafter\bx@acr@out\bx@acr@nxt}}
+\def\bx@acr@finish@a#1#2\@nil{%
+ % replace first ^ with normal one to avoid loop
+ \bx@acr@normcaret #2}
+\let\bx@acr@normcaret\sp % this does not mean much
+
+%% \bx@acr@initialize
+\bxPreamble\def\bx@acr@initialize{%
+ \bx@acr@defbytes}
+
+%% \bx@acr@annihilate
+\bxPreamble\def\bx@acr@annihilate{%
+ \let\bx@acr@caret\relax\let\bx@acr@caret@a\relax
+ \let\bx@acr@caret@b\relax\let\bx@acr@caret@c\relax
+ \let\bx@acr@caret@d\relax\let\bx@acr@caret@e\relax
+ \let\bx@acr@caret@f\relax\let\bx@acr@caret@g\relax
+ \let\bx@acr@nextcaret\relax\let\bx@acr@nextcaret@a\relax
+ \let\bx@acr@nexthexdgt\relax\let\bx@acr@nexthexdgt@a\relax
+ \let\bx@acr@finish\relax\let\bx@acr@finish@a\relax}
+
+%% \bx@acr@babel@hookcaret
+\bxPreamble\def\bx@acr@babel@hookcaret{%
+ \expandafter\ifx\csname active@char\string^\endcsname\relax\else
+ \declare@shorthand\system@group{^}{\bx@acr@caret}%
+ \let\bx@acr@normcaret\bx@acr@babel@normcaret
+ \bxEnableSafeCaret \fi}
+\edef\bx@acr@babel@normcaret{%
+ \expandafter\noexpand\csname normal@char\string^\endcsname}
+
+%% \bx@acr@verbatim@hookcaret
+\bxPreamble\def\bx@acr@verbatim@hookcaret{%
+ \g@addto@macro\@noligs{\catcode`\^\active\let^\bx@acr@caret
+ \let\bx@acr@normcaret\bx@acr@verb@normcaret}%
+ \bxEnableSafeCaret}
+\begingroup \catcode`\^=12
+\global\let\bx@acr@verb@normcaret=^%
+\endgroup
+
+%%<+> \bxBDHookSafeCaret
+% Begin-document hook.
+\bxPreamble\newcommand*\bxBDHookSafeCaret{%
+ \AtBeginDocument{%
+ %% function activated by '\safecaret'
+ \ifbx@safecaret
+ \@ifpackageloaded{babel}{\bx@acr@babel@hookcaret}{}%
+ \bx@acr@verbatim@hookcaret
+ \fi
+ %% initialize or annihilate...
+ \ifbx@acr@needed \bx@acr@initialize
+ \else \bx@acr@annihilate \fi
+ \let\bxEnableSafeCaret\@undefined}%
+ \bxNullify\bxBDHookSafeCaret}
+
+\catcode`\^=7 %---- make caret normal
+
+%--------------------------------------- hyphenation something
+
+%%<*> 'withnohyph' environment
+\expandafter\ifx\csname l@nohyphenation\endcsname\relax
+ \newlanguage\l@nohyphenation \fi
+\def\withnohyph{\language\l@nohyphenation}
+\let\endwithnohyph\relax
+
+%--------------------------------------- patch for 'ucs' package
+
+%% \bxBDHookUcsFastErrors
+% The begin-document hook, which forces the 'fasterrors' option
+% of 'ucs' package when running on pTeX.
+\bxPreamble\newcommand*\bxBDHookUcsFastErrors{%
+ \ifbxinpTeX
+ \AtBeginDocument{%
+ \@ifpackageloaded{ucs}{%
+ \let\UnicodeOptionfasterrorsfalse\UnicodeOptionfasterrorstrue
+ \UnicodeOptionfasterrorstrue}{}}%
+ \fi
+ \bxNullify\bxBDHookUcsFastErrors}
+
+%--------------------------------------- DVI-specials
+
+%%<*D> \usejapanesepdfstring
+\bxPreamble\newcommand*\usejapanesepdfstring{}
+\if s\bxInternalJaEncoding
+ \def\usejapanesepdfstring{% why use CP932??
+ \bxDocumentSpecialUrgent{pdf:tounicode 90ms-RKSJ-UCS2}%
+ \bxNullify\usejapanesepdfstring}
+\else\if e\bxInternalJaEncoding
+ \def\usejapanesepdfstring{%
+ \bxDocumentSpecialUrgent{pdf:tounicode EUC-UCS2}%
+ \bxNullify\usejapanesepdfstring}
+\else\if u\bxInternalJaEncoding
+ \def\usejapanesepdfstring{%
+ \bxDocumentSpecialUrgent{pdf:tounicode UTF8-UCS2}%
+ \bxNullify\usejapanesepdfstring}
+\else
+ \def\usejapanesepdfstring{%
+ \bx@warn{\string\usejapanesepdfstring\space ignored,\MessageBreak
+ since internal encoding is unknown}%
+ \bxNullify\usejapanesepdfstring}
+\fi\fi\fi
+\preto\usejapanesepdfstring{%
+ \bxbz@warn@depre\usejapanesepdfstring{'pxjahyper' package}}
+
+%%<*D> \recordpapersize
+\bxPreamble\newcommand*\recordpapersize{%
+ \bxbz@warn@depre\recordpapersize{'bxpapersize' package}%
+ \bxDocumentSpecial{papersize=\the\paperwidth,\the\paperheight}%
+ \bxNullify\recordpapersize}
+
+%%<*D> \dvipdfmxmapline{<text>}
+%%<*D> \dvipdfmxmapfile{<text>}
+\bxPreamble\newcommand*\dvipdfmxmapline[1]{%
+ \bxbz@warn@depre@dpxmap
+ \bxDocumentSpecial{pdf:mapline #1}}
+\bxPreamble\newcommand*\dvipdfmxmapfile[1]{%
+ \bxbz@warn@depre@dpxmap
+ \bxDocumentSpecial{pdf:mapfile #1}}
+\def\bxbz@warn@depre@dpxmap{%
+ \bxbz@warn@depre\dvipdfmxmapfile{'pxchfon' package}%
+ \global\let\bxbz@warn@depre@dpxmap\relax}
+
+%--------------------------------------- CJK font scaling
+
+%% \bxbz@doc@class@type
+%%<+D> \pxDocClassType
+% 1 = pLaTeX standard class
+% 2 = New standard classes by Okumura
+% 0 = otherwise
+\bxUcv=\z@
+\@ifclassloaded{jarticle}{\bxUcv=\@ne}{}
+\@ifclassloaded{jreport}{\bxUcv=\@ne}{}
+\@ifclassloaded{jbook}{\bxUcv=\@ne}{}
+\@ifclassloaded{tarticle}{\bxUcv=\@ne}{}
+\@ifclassloaded{treport}{\bxUcv=\@ne}{}
+\@ifclassloaded{tbook}{\bxUcv=\@ne}{}
+\@ifclassloaded{ujarticle}{\bxUcv=\@ne}{}
+\@ifclassloaded{ujreport}{\bxUcv=\@ne}{}
+\@ifclassloaded{ujbook}{\bxUcv=\@ne}{}
+\@ifclassloaded{utarticle}{\bxUcv=\@ne}{}
+\@ifclassloaded{utreport}{\bxUcv=\@ne}{}
+\@ifclassloaded{utbook}{\bxUcv=\@ne}{}
+\@ifclassloaded{jsarticle}{\bxUcv=\tw@}{}
+\@ifclassloaded{jsreport}{\bxUcv=\tw@}{}
+\@ifclassloaded{jsbook}{\bxUcv=\tw@}{}
+\chardef\bxbz@doc@class@type=\bxUcv
+\chardef\pxDocClassType=\bxUcv
+
+%%<+> \pxUpScale
+\edef\pxUpScale{%
+ \ifx\Cjascale\@undefined
+ \ifcase\bxbz@doc@class@type 1\or 0.962216\or 0.924690\else 1\fi
+ \else \Cjascale \fi}
+
+%--------------------------------------- all done
+\endinput
+%% EOF
diff --git a/language/japanese/BX/bxbase/bxbase.sty b/language/japanese/BX/bxbase/bxbase.sty
new file mode 100644
index 0000000000..194d7ccf3f
--- /dev/null
+++ b/language/japanese/BX/bxbase/bxbase.sty
@@ -0,0 +1,73 @@
+%%
+%% This is file 'bxbase.sty'.
+%%
+%% Copyright (c) 2017 Takayuki YATO (aka. "ZR")
+%% GitHub: https://github.com/zr-tex8r
+%% Twitter: @zr_tex8r
+%%
+%% This package is distributed under the MIT License.
+%%
+
+%% package declaration
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{bxbase}[2017/05/29 v1.1 BX base library]
+
+%--------------------------------------- main
+
+%% load submodule
+\providecommand*\bxRequireDefinition[1]{%
+ \def\bxbz@ext{def}\@onefilewithoptions{#1}[][]\bxbz@ext}
+\bxRequireDefinition{bxbase}
+
+%% enable begin-document hooks
+\bxBDHookBabel
+\bxBDHookUnicode
+\bxBDHookJisInput
+\bxBDHookSafeCaret
+\bxBDHookUcsFastErrors
+
+%% error messages
+\def\bxbz@pkgname{bxbase}
+\def\bxbz@inf@aecsq#1{%
+ \PackageInfo\bxbz@pkgname
+ {Command \string#1 already exists}}
+
+%--------------------------------------- extra
+
+%%<*> \Ux / \UI / \AJ / \JI / \KI
+% define commands unless their name is already used
+\bxPreamble\def\bxbz@charcmd#1#2{%
+ \ifundef#1{\def#1{#2}}{\bxbz@inf@aecsq#1}}
+\bxbz@charcmd\Ux\bxUx
+\bxbz@charcmd\UI\bxUI
+\bxbz@charcmd\AJ\bxAJ
+\bxbz@charcmd\JI\bxJI
+\bxbz@charcmd\KI\bxKI
+
+%--------------------------------------- all done
+\endinput
+%
+% * bxbase provides:
+% - bx@Uxh@fb (terminal)
+% - bxUx (passed to bx@Ux)
+% - bxUI (passed to bx@UI)
+% - bxUHex (passed to bx@Uxh)
+% * bxutf8 provides:
+% - conversion from UTF8 string to bxUHex
+% * bxucs provides:
+% - bx@Ux@ucs (fallback to bx@UI)
+% - bx@Uxh@ucs (fallback to bx@UIh)
+% * utf/otf provides:
+% - bx@UIh@p (terminal)
+%
+% [default]
+% bx@Ux bx@Uxh
+% v v
+% bx@UI > bx@UIh = bx@UIh@fb or bx@UIh@p
+%
+% [with bxucs]
+% bx@Ux = bx@Ux@ucs bx@Uxh = bx@Uxh@ucs
+% v v
+% bx@UI > bx@UIh = bx@Uxh@fb or bx@UIh@p
+%
+%% EOF
diff --git a/language/japanese/BX/bxbase/bxtoolbox-ext.def b/language/japanese/BX/bxbase/bxtoolbox-ext.def
new file mode 100644
index 0000000000..63b7927f5c
--- /dev/null
+++ b/language/japanese/BX/bxbase/bxtoolbox-ext.def
@@ -0,0 +1,563 @@
+%%
+%% This is file 'bxtoolbox-ext.def'.
+%%
+
+%% file declaration
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesFile{bxtoolbox-ext.def}[2017/05/29 v1.1]
+
+%% check intergrity
+\edef\bxtb@tmpa{\@currname.\@currext}\def\bxtb@tmpb{bxtoolbox-ext.def}
+\ifx\bxtb@tmpa\bxtb@tmpb\else
+ \PackageError\bxtb@pkgname{Illegal load sequence}\@eha
+\expandafter\endinput\fi\relax
+
+%% load submodule
+\providecommand*\bxRequireDefinition[1]{%
+ \def\bx@@def{def}\@onefilewithoptions{#1}[][]\bx@@def}
+\bxRequireDefinition{bxtoolbox}
+
+%% code guards
+\edef\bxtb@x@restore@codes{%
+ \catcode33=\the\catcode33%
+ \catcode34=\the\catcode34%
+ \catcode39=\the\catcode39%
+ \catcode45=\the\catcode45%
+ \catcode46=\the\catcode46%
+ \catcode47=\the\catcode47%
+ \catcode58=\the\catcode58%
+ \catcode59=\the\catcode59%
+ \catcode60=\the\catcode60%
+ \catcode62=\the\catcode62%
+ \catcode96=\the\catcode96%
+\relax}
+\catcode33=12 % <!>
+\catcode34=12 % <">
+\catcode39=12 % <'>
+\catcode45=12 % <->
+\catcode46=12 % <.>
+\catcode47=12 % </>
+\catcode58=12 % <:>
+\catcode59=12 % <;>
+\catcode60=12 % <<>
+\catcode62=12 % <>>
+\catcode96=12 % <`>
+\AtEndOfPackage{%
+ \bxtb@x@restore@codes
+ \undef\bxtb@x@restore@codes}
+
+%--------------------------------------- general
+
+%% variables
+\bxIfcsundefX{ifbxOk}{\newbool{bxOk}}{} % all-purpsoe switch
+\bxIfcsundefX{bxResDim}{\newdimen\bxResDim}{}
+\let\bxHex\relax % result of \bxToHex...
+\let\bxRes\relax % result of \bxToLower
+
+%% error messages
+\def\bxtb@err@oorng{\bxtb@error{Number out of range}\@eha}
+
+%--------------------------------------- programming tools
+
+%%<+> \bxDebug{<text>}
+% Prints a debug message. By default, it is no-op.
+\providecommand*\bxDebug{\@gobble}
+
+%%<+> \bxShowbool{<name>}
+\newcommand*{\bxShowbool}[1]{\ifbool{#1}{true}{false}}
+
+%%<+> \bxShowtoggle{<name>}
+\newcommand*{\bxShowtoggle}[1]{\iftoggle{#1}{true}{false}}
+
+%%<+> \bxRequireDefinition
+% Same as \RequirePackage except that it loads '.def' files.
+% [Definition appears near the top of this file]
+%%<+D> \bxInputDefFile
+% Old name for \bxRequireDefinition
+\bxPreamble\newcommand*{\bxInputDefFile}{\bxRequireDefinition}
+
+%%<+> \bxNullify\CS
+% Make \CS void and unoverridable by \providecommand.
+\def\bxNullify#1{\global\let#1\bx@nullified}
+\def\bx@nullified{\@gobble\bx@@nullified}
+
+%%<+> \bxForEachIn<arg>,...\do{<repl_text>}
+%%<+> \bxForEachTokenIn<arg>,...\do{<repl_text>}
+\newcommand*\bxForEachIn{\bxtb@forei@a\@for}
+\newcommand*\bxForEachTokenIn{\bxtb@forei@a\@tfor}
+\def\bxtb@forei@a#1#2\do#{%
+ \def\bxtb@forei@b{#1\bxtb@forei@x:=#2\do
+ {\expandafter\bxtb@forei@do\expandafter{\bxtb@forei@x}}}%
+ \afterassignment\bxtb@forei@b \def\bxtb@forei@do##1}
+
+%%<+> \bxWithArgExpd{<arg1>}\do{<repl-text>}
+%%<+> \bxWithArgFullExpd{<arg1>}\do{<repl-text>}
+\newcommand*\bxWithArgExpd{}
+\def\bxWithArgExpd#1\do#{%
+ \expandafter\bxtb@with@arg@expd@a#1\@nil}
+\def\bxtb@with@arg@expd@a#1\@nil{%
+ \def\bxtb@with@args@expd@do{\bxtb@do{#1}}%
+ \afterassignment\bxtb@with@args@expd@do
+ \def\bxtb@do##1}
+\newcommand*\bxWithArgFullExpd{}
+\def\bxWithArgFullExpd#1\do#{%
+ \edef\bxtb@args{{#1}}%
+ \def\bxtb@with@args@expd@do{\expandafter\bxtb@do\bxtb@args}%
+ \afterassignment\bxtb@with@args@expd@do
+ \def\bxtb@do##1}
+
+%%<+> \bxWithArgsExpd{<arg1>}...\do{<repl-text>}
+%%<+> \bxWithArgsFullExpd{<arg1>}...\do{<repl-text>}
+\newcommand*\bxWithArgsExpd{%
+ \begingroup
+ \count@=\z@ \let\do\bxtb@uniq
+ \let\bxtb@l@tmpa\@empty
+ \bxtb@with@args@expd@gth@a}
+\def\bxtb@with@args@expd@gth@a{%
+ \futurelet\bxtb@tok\bxtb@with@args@expd@gth@b}
+\def\bxtb@with@args@expd@gth@b{%
+ \bxIfx{\bxtb@tok\bxtb@uniq}%
+ {\bxtb@with@args@expd@pst@a}%
+ {\bxtb@with@args@expd@gth@c}}
+\def\bxtb@with@args@expd@gth@c#1{%
+ \expandafter\bxtb@with@args@expd@gth@d#1\@nil}
+\def\bxtb@with@args@expd@gth@d#1\@nil{%
+ \ifnum\count@<9
+ \appto\bxtb@l@tmpa{{#1}}%
+ \advance\count@\@ne
+ \fi
+ \bxtb@with@args@expd@gth@a}
+\def\bxtb@with@args@expd@pst@a#1{%
+ \@whilenum\count@<9 \do{%
+ \appto\bxtb@l@tmpa{{}}\advance\count@\@ne}%
+ \expandafter\def\expandafter\bxtb@l@tmpa\expandafter{%
+ \expandafter{\bxtb@l@tmpa}}%
+ \xpreto\bxtb@l@tmpa{\noexpand\bxtb@with@args@expd@ppst@a}%
+ \expandafter\endgroup\bxtb@l@tmpa}
+\newcommand*\bxWithArgsFullExpd{%
+ \bxtb@with@args@fexpd@a\@nil}
+\def\bxtb@with@args@fexpd@a\@nil#1\do{%
+ \bxtb@with@args@fexpd@b#1{}{}{}{}{}{}{}{}{}\do}
+\def\bxtb@with@args@fexpd@b#1#2#3#4#5#6#7#8#9{%
+ \edef\bxtb@with@args@fexpd@d{%
+ \noexpand\bxtb@with@args@expd@ppst@a
+ {{#1}{#2}{#3}{#4}{#5}{#6}{#7}{#8}{#9}}}%
+ \bxtb@with@args@fexpd@c}
+\def\bxtb@with@args@fexpd@c#1\do#{%
+ \bxtb@with@args@fexpd@d}
+\def\bxtb@with@args@expd@ppst@a#1{%
+ \def\bxtb@with@args@expd@do{\bxtb@do#1}%
+ \afterassignment\bxtb@with@args@expd@do
+ \def\bxtb@do##1##2##3##4##5##6##7##8##9}
+
+%%<+> \bxAssign <assignment>\relax
+% Do an assignment and checks if the assignment statement is
+% free of garbage and returns the result to \ifbxOk.
+\newcommand*\bxAssign{%
+ \bxOkfalse\afterassignment\bx@b@assign@a}
+\def\bx@b@assign@a#1\relax{%
+ \def\bx@tmpa{#1}\ifx\bx@tmpa\@empty\bxOktrue\fi}
+
+%%<+> \bxChompComma\CS
+\newcommand*\bxChompComma[1]{%
+ \expandafter\bxtb@chomp@comma@a#1\bxtb@chomp@comma@end#1}
+\def\bxtb@chomp@comma@a{%
+ \futurelet\bxtb@tmpa\bxtb@chomp@comma@b}
+\def\bxtb@chomp@comma@b{%
+ \bxIfx{,\bxtb@tmpa}{\bxtb@chomp@comma@c}%
+ {\bxtb@chomp@comma@skip}}
+\def\bxtb@chomp@comma@c#1\bxtb@chomp@comma@end#2{%
+ \expandafter\def\expandafter#2\expandafter{\@gobble#1}}
+\def\bxtb@chomp@comma@skip#1\bxtb@chomp@comma@end#2{}
+
+%% \bxProcessOptions[*]
+\newcommand*\bxProcessOptions{%
+ \@ifstar{\@tempswatrue\bxtb@process@options}%
+ {\@tempswafalse\bxtb@process@options}}
+\def\bxtb@process@options{%
+ \let\bxtb@org@@removeelement\@removeelement
+ \let\@removeelement\bxtb@@removeelement
+ \if@tempswa \ProcessOptions*%
+ \else \ProcessOptions\relax \fi
+ \let\@removeelement\bxtb@org@@removeelement}
+\def\bxtb@@removeelement#1#2#3{%
+ \bxtb@rem@elt@check#1\relax{}\bxtb@rem@elt@end
+ \if@tempswa \bxtb@org@@removeelement{#1}{#2}#3\fi}
+\def\bxtb@rem@elt@check#1#{\bxtb@rem@elt@check@a}
+\def\bxtb@rem@elt@check@a#1#2\bxtb@rem@elt@end{%
+ \ifstrempty{#2}{\@tempswatrue}{\@tempswafalse}}
+
+%--------------------------------------- character tokens
+
+%%<+> \ifbxHasUcsChar
+\newbool{bxHasUcsChar}
+\ifbxinOmega \bxHasUcsChartrue \fi
+\ifbxinXeTeX \bxHasUcsChartrue \fi
+\ifbxinLuaTeX \bxHasUcsChartrue \fi
+\ifbxinupTeX \bxHasUcsChartrue \fi
+\csletcs{ifbx@hx@bigchar}{ifbxHasUcsChar}
+
+%%<+> \ifbxHasAlUcsChar
+\newbool{bxHasAlUcsChar}
+\ifbxinOmega \bxHasAlUcsChartrue \fi
+\ifbxinXeTeX \bxHasAlUcsChartrue \fi
+\ifbxinLuaTeX \bxHasAlUcsChartrue \fi
+
+%%<+> \bxToChar{<num>}
+% Makes \bxRes expand to a single character token with character
+% code <num>. Note that in (u)pTeX this is valid only for 'alphabet'
+% characters.
+\newcommand*\bxToChar[1]{%
+ \bgroup \lccode`!=#1\relax
+ \lowercase{\xdef\bx@tch@g@temp{!}}%
+ \egroup \let\bxRes\bx@tch@g@temp}
+
+%%<+> \bxToJaChar{<num>}
+% Makes \bxRes expand to a single CJK character token with
+% character code <num> (in internal CJK encoding).
+\ifbxinpTeX
+ \newcommand*\bxToJaChar[1]{%
+ \bgroup \bxtb@forcecjktoken
+ \kansujichar\@ne=#1\relax
+ \xdef\bx@tch@g@temp{\kansuji\@ne}%
+ \egroup \let\bxRes\bx@tch@g@temp}
+ \ifdef{\forcecjktoken}%
+ {\let\bxtb@forcecjktoken\forcecjktoken}%
+ {\let\bxtb@forcecjktoken\relax}%
+\fi
+
+%%<+> \bxToUcsChar{<num>}
+% Makes \bxRes expand to a single character token with
+% character code <num> (in Unicode); valid for Unicode-aware
+% engines plus upTeX.
+\ifbxinupTeX
+\let\bxToUcsChar\bxToJaChar
+\else\ifbxHasAlUcsChar
+\let\bxToUcsChar\bxToChar
+\fi\fi
+
+%%<+> \bxToUcsCharDual{<jis>}{<ucs>}
+% Makes \bxRes expand to a single character token with the following
+% character code: (1) on pTeX, <jis> in internal CJK encoding; and
+% (2) on Unicode-aware engines, <ucs> in Unicode.
+\ifdef{\bxToUcsChar}
+ {\newcommand*\bxToUcsCharDual[2]{\bxToUcsChar{#2}}}%
+ {\newcommand*\bxToUcsCharDual[2]{\bxToJaChar{\jis#1}}}
+
+%%<+> \bxToUcsCharSeq{<jis>:<ucs>,...}
+\newcommand*\bxToUcsCharSeq[1]{%
+ \let\bx@tch@temp\@empty
+ \bxForEachIn#1\do{\bxtb@toucs@charseq@a##1\bxtb@end}%
+ \let\bxRes\bx@tch@temp}
+\def\bxtb@toucs@charseq@a#1:#2\bxtb@end{%
+ \bxToUcsCharDual{"#1}{"#2}%
+ \eappto\bx@tch@temp{\bxRes}}
+
+%--------------------------------------- number to hex-string
+% All public commands put their result in \bxHex.
+
+%%<+> \bxToHexTiny
+% For one-to-two-digit hex strings.
+\newcommand*\bxToHexTiny[1]{%
+ \chardef\bxHex=#1\relax
+ \expandafter\bx@hx@tohextiny@a\meaning\bxHex\@nil}
+\def\bx@hx@tohextiny@a#1"#2\@nil{\def\bxHex{#2}}
+
+%%<+> \bxToHexSmall
+% For one-to-three-digit hex strings.
+\newcommand*\bxToHexSmall[1]{%
+ \mathchardef\bxHex=#1\relax
+ \expandafter\bx@hx@tohexsmall@a\meaning\bxHex\@nil}
+\def\bx@hx@tohexsmall@a#1"#2\@nil{\def\bxHex{#2}}
+
+%%<+> \bxToHexTwo
+% For zero-padded two-digit hex strings.
+\newcommand*\bxToHexTwo[1]{%
+ \chardef\bxHex=#1\relax
+ \expandafter\bx@hx@tohextwo@a\meaning\bxHex"0\@nil}
+\def\bx@hx@tohextwo@a#1"#2#3#4#5\@nil{\bx@hx@tohextwo@b#2#3#4\@nil}
+\def\bx@hx@tohextwo@b#1"#2\@nil{\def\bxHex{#2#1}}
+
+%%<+> \bxToHexThree
+% For zero-padded three-digit hex strings.
+\newcommand*\bxToHexThree[1]{%
+ \mathchardef\bxHex=#1\relax
+ \expandafter\bx@hx@tohexthree@a\meaning\bxHex"00\@nil}
+\def\bx@hx@tohexthree@a#1"#2#3#4#5#6\@nil{\bx@hx@tohexthree@b#2#3#4#5\@nil}
+\def\bx@hx@tohexthree@b#1"#2\@nil{\def\bxHex{#2#1}}
+
+%%<+> \bxToHexFour
+% For zero-padded four-digit hex strings.
+\ifbx@hx@bigchar %----<*bigchar>
+\newcommand*\bxToHexFour[1]{%
+ \chardef\bxHex=#1\relax
+ \expandafter\bx@hx@tohexfour@a\meaning\bxHex"000\@nil}
+\def\bx@hx@tohexfour@a#1"#2#3#4#5#6#7\@nil{\bx@hx@tohexfour@b#2#3#4#5#6\@nil}
+\def\bx@hx@tohexfour@b#1"#2\@nil{\def\bxHex{#2#1}}
+\else %----<*!bigchar>
+\mathchardef\bx@hx@fzzz="4000
+\newcommand*\bxToHexFour[1]{\bgroup
+ \@tempcnta=#1\relax\@tempcntb\@tempcnta\divide\@tempcntb\bx@hx@fzzz
+ \ifcase\@tempcntb \advance\@tempcnta\bx@hx@fzzz \or \or
+ \advance\@tempcnta-\bx@hx@fzzz \or \advance\@tempcnta-"8000 \or
+ \@tempcnta\z@ \fi
+ \mathchardef\bx@hx@tmp\@tempcnta
+ \expandafter\bx@hx@tohexfour@a\meaning\bx@hx@tmp\@nil
+ \egroup \let\bxHex\bx@hx@gtmp}
+\def\bx@hx@tohexfour@a#1"#2#3\@nil{%
+ \expandafter\let\expandafter\bx@hx@tmp
+ \csname bxhx@X/\the\@tempcntb#2\endcsname
+ \ifx\bx@hx@tmp\relax \bxtb@err@oorng \global\let\bx@hx@gtmp\@empty
+ \else \xdef\bx@hx@gtmp{\bx@hx@tmp#3}\fi}
+\def\bx@hx@nxt#1#2#3{\bgroup\catcode`#3=12
+ \global\expandafter\def\csname bxhx@X/#1#2\endcsname{#3}\egroup}
+\@for\bx@hx@tmp:={040,051,062,073,144,155,166,177,248,259,26A,27B,%
+ 34C,35D,36E,37F}\do{\expandafter\bx@hx@nxt\bx@hx@tmp}
+\fi %----</bigchar>
+
+%%<+> \bxToHexFive
+%%<+> \bxToHexFiveX
+% For zero-padded five-digit hex strings.
+\newcommand*\bxToHexFive{\bx@tohexfive@aa\relax}
+\newcommand*\bxToHexFiveX{\bx@tohexfive@aa
+ {\ifnum\@tempcnta>\bx@hx@vdmax \@tempcnta=\bx@hx@vdmax\fi}}
+\ifbx@hx@bigchar %----<*bigchar>
+\chardef\bx@hx@vdmax="FFFFF
+\def\bx@tohexfive@aa#1#2{%
+ {\@tempcnta=#2\relax#1\global\chardef\bx@hx@gtmp=\@tempcnta}%
+ \expandafter\bx@hx@tohexfivex@a\meaning\bx@hx@gtmp"0000\@nil}
+\def\bx@hx@tohexfivex@a#1"#2#3#4#5#6#7#8\@nil{%
+ \bx@hx@tohexfivex@b#2#3#4#5#6#7\@nil}
+\def\bx@hx@tohexfivex@b#1"#2\@nil{\edef\bxHex{#2#1}}
+\else %----<*!bigchar>
+\edef\bx@hx@vdmax{"FFFFF\space}
+\def\bx@tohexfive@aa#1#2{%
+ \bgroup \@tempcnta=#2\relax#1%
+ \@tempcntb=\@tempcnta \divide\@tempcnta\bx@hx@m\relax
+ \bxToHexTwo\@tempcnta \let\bx@hx@tmp\bxHex
+ \multiply\@tempcnta-\bx@hx@m\advance\@tempcnta\@tempcntb\relax
+ \bxToHexThree\@tempcnta \xdef\bx@hx@gtmp{\bx@hx@tmp\bxHex}%
+ \egroup \let\bxHex\bx@hx@gtmp}
+\fi %----</bigchar>
+
+%%<+> \bxToHexEight
+% For zero-padded eight-digit hex strings.
+\newcommand*\bxToHexEight[1]{%
+ \bgroup \@tempcnta=#1\relax
+ \@tempcntb=\@tempcnta\divide\@tempcnta\p@\relax
+ \bxToHexFour\@tempcnta \let\bx@hx@tmp\bxHex
+ \multiply\@tempcnta-\p@\advance\@tempcnta\@tempcntb\relax
+ \bxToHexFour\@tempcnta \xdef\bx@hx@gtmp{\bx@hx@tmp\bxHex}%
+ \egroup \let\bxHex\bx@hx@gtmp}
+
+%%<+> \bxToHexUC
+% For zero-padded four-to-six-digit hex strings.
+\ifbx@hx@bigchar %----<*bigchar>
+\newcommand*\bxToHexUC[1]{%
+ \chardef\bxHex=#1\relax
+ \expandafter\bx@hx@tohexuc@a\meaning\bxHex"\@empty\@empty000\@nil}
+\def\bx@hx@tohexuc@a#1"#2#3#4#5#6#7#8#9\@nil{%
+ \bx@hx@tohexuc@b#2#3#4#5#6#7#8\@nil}
+\def\bx@hx@tohexuc@b#1"#2\@nil{\edef\bxHex{#2#1}}
+\else %----<*!bigchar>
+\mathchardef\bx@hx@m="1000
+\newcommand*\bxToHexUC[1]{%
+ \bgroup \@tempcnta=#1\relax
+ \@tempcntb=\@tempcnta \divide\@tempcnta\bx@hx@m\relax
+ \bxToHexSmall\@tempcnta \let\bx@hx@tmp\bxHex
+ \multiply\@tempcnta-\bx@hx@m\advance\@tempcnta\@tempcntb\relax
+ \bxToHexThree\@tempcnta \xdef\bx@hx@gtmp{\bx@hx@tmp\bxHex}%
+ \egroup \let\bxHex\bx@hx@gtmp}
+\fi %----</bigchar>
+
+%%<+> \bxToDecFour
+\newcommand*\bxToDecFour[1]{%
+ \expandafter\bx@hx@todecfour@a\number#1"000\@nil}
+\def\bx@hx@todecfour@a#1#2#3#4#5#6\@nil{\bx@hx@todecfour@b#1#2#3#4#5\@nil}
+\def\bx@hx@todecfour@b#1"#2\@nil{\def\bxHex{#2#1}}
+
+%%<+> \bxToDecFive
+\newcommand*\bxToDecFive[1]{%
+ \expandafter\bx@hx@todecfive@a\number#1"0000\@nil}
+\def\bx@hx@todecfive@a#1#2#3#4#5#6#7\@nil{\bx@hx@todecfive@b#1#2#3#4#5#6\@nil}
+\def\bx@hx@todecfive@b#1"#2\@nil{\def\bxHex{#2#1}}
+
+%--------------------------------------- case conversion
+
+%%<+> \bxToLower{<string>}
+% Sets to \bxRes <string> converted to lowercase.
+\newcommand*\bxToLower[1]{%
+ \edef\bxRes{\lowercase{\def\noexpand\bxRes{#1}}}\bxRes}
+
+%%<+> \bxToUpper{<string>}
+\newcommand*\bxToUpper[1]{%
+ \edef\bxRes{\uppercase{\def\noexpand\bxRes{#1}}}\bxRes}
+
+%--------------------------------------- document-level specials
+% Such specials must come before any typeset commands in DVI.
+
+%%<+> \bxDocumentSpecial{<text>}
+% Appends \special{<text>} to the list of 'document-level specials'.
+% A simple use of \AtBeginDvi will do in this case.
+\bxPreamble\newcommand*\bxDocumentSpecial[1]{%
+ \bxAtBeginDviX{\special{#1}}}
+
+%%%% \bxDocumentSpecialUrgent{<text>}
+% Similar to the above, but it demands that the given special be
+% placed as early as possible.
+\bxPreamble\newcommand*\bxDocumentSpecialUrgent[1]{%
+ \bx@docspec@urgent@init
+ \bx@prepend@box\bx@dsu@box{\special{#1}}}
+\def\bx@prepend@box#1#2{%
+ \global\setbox#1\vbox{\bxToYokoDir#2\unvbox#1}}
+\bxPreamble\def\bx@docspec@urgent@init{%
+ \newbox\bx@dsu@box
+ \AtBeginDocument{%
+ \ifx\AtBeginShipoutFirst\@undefined
+ \bx@prepend@box\@begindvibox{\unvbox\bx@dsu@box}%
+ \else % 'atbegshi' package is in use
+ {\toks@{\unvbox\bx@dsu@box}%
+ \toks\tw@\expandafter{\AtBegShi@HookFirst}%
+ \xdef\AtBegShi@HookFirst{\the\toks@\the\toks\tw@}}
+ \fi}%
+ \bxNullify\bx@docspec@urgent@init}
+
+%--------------------------------------- "shadow map" module
+
+%%<+> \bxUseShadowMap\CS{<map_tfm>}
+\bxPreamble\newcommand*\bxUseShadowMap[2]{%
+ \global\font#1=#2\relax}
+
+%%<+> \bxMap\CS
+\mathchardef\bx@m@cc=256
+\bxPreamble\newcommand*\bxMap[1]{%
+ \begingroup\count@\bxUcv\divide\count@\bx@m@cc
+ \chardef\bx@m@hb\count@ \multiply\count@\bx@m@cc
+ \advance\bxUcv-\count@ \setbox\z@\hbox{#1\bx@m@hb\char\bxUcv}%
+ \global\bxUcv\wd\z@ \endgroup}
+
+%--------------------------------------- module name
+
+%%<+> \bxSetModuleName{<name>}
+\newcommand*\bxSetModuleName[1]{%
+ \csxdef{bx@modname/\@currname.\@currext}{#1}}
+\let\bxtb@modname@default\bx@pkgname % name of this bundle
+
+%%<+> \bxModuleName
+\@ifpackageloaded{ifptex}{\undef\bxModuleName}{}
+\newcommand*\bxModuleName{%
+ \bxIfcsundefX{bx@modname/\@currname.\@currext}%
+ {\bxIfx{\@currname\@empty}{\bxtb@modname@default}%
+ {\@currname}}%
+ {\@nameuse{bx@modname/\@currname.\@currext}}}
+
+%%<+> \bxCurrentError / \bxCurrentWarning
+%%<+> \bxCurrentWarningNoLine / \bxCurrentInfo
+\newcommand*\bxCurrentError{\PackageError\bxModuleName}
+\newcommand*\bxCurrentWarning{\PackageWarning\bxModuleName}
+\newcommand*\bxCurrentWarningNoLine{%
+ \PackageWarningNoLine\bxModuleName}
+\newcommand*\bxCurrentInfo{\PackageInfo\bxModuleName}
+
+%--------------------------------------- keyval extension
+
+%%<+> \bxPrepareSetKeysSafe
+\bxPreamble\newcommand*\bxPrepareSetKeysSafe{%
+ \IfFileExists{xkeyval.sty}{\@tempswatrue}{\@tempswafalse}%
+ \if@tempswa
+ \RequirePackage{xkeyval}%
+ \def\bxtb@setkeys@safe##1##2{%
+ \setkeys*{##1}{##2}%
+% \bxDebug{\XKV@rm}%
+ \bxForEachIn\XKV@rm\do{\bxtb@setkeys@safe@a####1=\@nil}}%
+ \def\bxtb@setkeys@safe@a##1=##2\@nil{%
+ \bxtb@setkeys@safe@b{##1}}%
+ \else
+ \RequirePackage{keyval}%
+ \def\bxtb@setkeys@safe##1##2{%
+ \let\bxtb@KV@errx\KV@errx
+ \let\KV@errx\bxtb@setkeys@safe@a
+ \setkeys{##1}{##2}%
+ \let\KV@errx\bxtb@KV@errx}%
+ \def\bxtb@setkeys@safe@a##1{%
+ \expandafter\bxtb@setkeys@safe@b\expandafter{\@tempa}}%
+ \fi
+ \let\bxPrepareSetKeysSafe\relax}
+
+%%<+> \bxSetKeysSafe
+\newcommand*\bxSetKeysSafe[2]{%
+ \let\bxRestKeys\@empty
+ \bxtb@setkeys@safe{#1}{#2}%
+ \edef\bxRestKeys{\expandafter\@gobble\bxRestKeys\@empty}}
+\def\bxtb@setkeys@safe@b#1{%
+ \edef\bxRestKeys{\bxRestKeys,#1}}
+\def\bxtb@setkeys@safe#1#2{\bxCurrentError
+ {\string\bxSetKeysSafe\space not enabled}\@ehc}
+
+%--------------------------------------- driver handling
+
+%%<+> \bxDriverList
+\providecommand*\bxDriverList{dvips,dvipdfmx,dviout}
+
+%%<+> \bxDriverInherent
+\newcommand*\bxDriverInherent{}
+\bxIfinXeTeX{\def\bxDriverInherent{xetex}}{}
+\bxIfPdfOutput{\def\bxDriverInherent{pdftex}}{}
+
+%%<+> \bxDriver
+\newcommand*\bxDriver{%
+ \bxIfx{\bxDriverInherent\@empty}%
+ {\bxIfcsundefX{bx@driver/\@currname.\@currext}{default}%
+ {\@nameuse{bx@driver/\@currname.\@currext}}}%
+ {\bxDriverInherent}}
+
+%%<+> \bxSetDriver[<file>]{<driver>}
+\newcommand*\bxSetDriver{%
+ \@ifnextchar[%
+ {\bxtb@set@driver@a}{\bxtb@set@driver@a[\@currname.\@currext]}}
+\def\bxtb@set@driver@a[#1]#2{%
+ \bxIfx{\bxDriverInherent\@empty}{}{\bx@warn@ivdrv{#2}}%
+% \bxDebug{set driver for #1 to #2}%
+ \csxdef{bx@driver/#1}{#2}}
+\def\bx@warn@ivdrv#1{\bxCurrentWarningNoLine
+ {Driver specification '#1' ignored;\MessageBreak
+ driver is inherently set to '\bxDriverInherent'}}
+
+%%<+> \bxDriverSpecifiedFor{<file>}
+\newcommand*\bxDriverSpecifiedFor[1]{%
+ \bxCsuseX{bx@driver/#1}}
+
+%%<+> \bxDefineDDProcess{<name>}{<driver>}{<text>}
+%%<+> \bxDefineDDProcessDefault{<name>}{<text>}
+\newcommand*\bxDefineDDProcess[2]{%
+ \csdef{#1@@#2}}
+\newcommand*\bxDefineDDProcessDefault[1]{%
+ \csdef{#1@@default}}
+
+%%<+> \bxDoDDProcess{<name>}
+\bxNewrobustcmd*\bxDoDDProcess[1]{%
+ \edef\bxtb@drv{\bxDriver}%
+ \def\bxtb@do@ddproc@try{\bxtb@do@ddproc@try@a{#1}}%
+ \bxtb@do@ddproc@try\bxtb@drv
+ \bxCsuse{bxtb@do@ddproc@fb@@\bxtb@drv}%
+ \bxtb@do@ddproc@try{default}%
+ \bxtb@do@ddproc@try@end}
+\def\bxtb@do@ddproc@try@a#1#2{%
+% \bxDebug{try #1@@#2}%
+ \bxIfcsundefX{#1@@#2}{}%
+ {\csname#1@@#2\endcsname
+ \bxtb@do@ddproc@skip}}
+\def\bxtb@do@ddproc@skip#1\bxtb@do@ddproc@try@end{}
+\let\bxtb@do@ddproc@try@end\@empty
+\def\do{\noexpand\bxtb@do@ddproc@try}
+% fallback setup
+\edef\bxtb@do@ddproc@fb@@xetex{\do{dvipdfmx}}
+
+%%<+> \bxDeclareDriverOptions
+\newcommand*\bxDeclareDriverOptions{%
+ \bxForEachIn\bxDriverList\do{%
+ \DeclareOption{##1}{\bxSetDriver{##1}}}}
+
+%--------------------------------------- all done
+\endinput
+%% EOF
diff --git a/language/japanese/BX/bxbase/bxtoolbox-ja.def b/language/japanese/BX/bxbase/bxtoolbox-ja.def
new file mode 100644
index 0000000000..a522d6e29a
--- /dev/null
+++ b/language/japanese/BX/bxbase/bxtoolbox-ja.def
@@ -0,0 +1,186 @@
+%%
+%% This is file 'bxtoolbox-ja.def'.
+%%
+
+%% file declaration
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesFile{bxtoolbox-ja.def}[2017/05/29 v1.1]
+
+%% check intergrity
+\edef\bxtb@tmpa{\@currname.\@currext}\def\bxtb@tmpb{bxtoolbox-ja.def}
+\ifx\bxtb@tmpa\bxtb@tmpb\else
+ \PackageError\bxtb@pkgname{Illegal load sequence}\@eha
+\expandafter\endinput\fi\relax
+
+%% load submodule
+\providecommand*\bxRequireDefinition[1]{%
+ \def\bx@@def{def}\@onefilewithoptions{#1}[][]\bx@@def}
+\bxRequireDefinition{bxtoolbox-ext}
+
+%% code guards
+\edef\bxtb@j@restore@codes{%
+ \catcode34=\the\catcode34%
+ \catcode45=\the\catcode45%
+ \catcode46=\the\catcode46%
+ \catcode47=\the\catcode47%
+ \catcode58=\the\catcode58%
+ \catcode59=\the\catcode59%
+ \catcode63=\the\catcode63%
+ \catcode96=\the\catcode96%
+\relax}
+\catcode34=12 % <">
+\catcode45=12 % <->
+\catcode46=12 % <.>
+\catcode47=12 % </>
+\catcode58=12 % <:>
+\catcode59=12 % <;>
+\catcode63=12 % <?>
+\catcode96=12 % <`>
+\AtEndOfPackage{%
+ \bxtb@j@restore@codes
+ \undef\bxtb@j@restore@codes}
+
+%--------------------------------------- pTeX something
+
+%% switch 'bxtb@pxbase@ok'
+\newbool{bxtb@pxbase@ok}
+\ifbxinpTeX
+ \IfFileExists{pxbase.sty}{%
+ \bxtb@pxbase@oktrue
+ }{}
+\fi
+
+%%<+> \bxToYokoDir
+% Switches to horizontal(yoko) writing direction
+% when using pTeX.
+\ifbxinpTeX %----<*pTeX>
+\newcommand*\bxToYokoDir{%
+ \bxIfydir{}{\yoko}}
+\else %----<*!pTeX>
+\newcommand*\bxToYokoDir{}
+\fi %----</pTeX>
+
+%%<+> \bxAtBeginDviX
+% \AtBeginDvi that is safe to use in pTeX.
+\newcommand\bxAtBeginDviX[1]{%
+ \global\setbox\@begindvibox\vbox{%
+ \bxToYokoDir\unvbox\@begindvibox#1}}
+
+%--------------------------------------- Japanese something
+
+%%<+> \bxGetZenkakuWidth
+% Assigns 1zw to \bxResDim
+\ifbxinpTeX
+ \bxNewrobustcmd*\bxGetZenkakuWidth{%
+ \bxResDim=1zw\relax}
+\else\ifbxHasAlUcsChar
+ \bxToUcsChar{"4E00}\let\bx@jan@onekanji\bxRes
+ \bxNewrobustcmd*\bxGetZenkakuWidth{%
+ \begingroup \setbox\z@\hbox{\bx@jan@onekanji}%
+ \xdef\bx@jan@g@next{\bxResDim=\the\wd\z@\relax}%
+ \endgroup \bx@jan@g@next}
+ \AtBeginDocument{%
+ \ifdef\jsZw{%
+ \bxRenewrobustcmd*\bxGetZenkakuWidth{%
+ \bxResDim=1\jsZw}}{}%
+ \ifdef\zw{%
+ \bxRenewrobustcmd*\bxGetZenkakuWidth{%
+ \bxResDim=1\zw}}{}%
+ }
+\fi\fi
+
+%%<+> \bxIfCharToken{<token>}{<yes>}{<no>}
+% Tests if the token is a character token with catcode 11 or 12.
+\newcommand*\bxIfCharToken[1]{%
+ \bxIfcat{\relax\noexpand#1}{\@secondoftwo}%
+ {\expandafter\bxtb@ifchartok@a\meaning#1\bxtb@end}}
+\def\bxtb@ifchartok@a#1{%
+ \bxIfcsundefX{bxtb@ICTF/#1}{\bxtb@ifchartok@false}%
+ {\bxtb@ifchartok@b#1}}
+\def\bxtb@ifchartok@b#1#2#3#4#5#6{%
+ \bxIfcsundefX{bxtb@ICT/#1#2#3#4#5#6}{\bxtb@ifchartok@false}%
+ {\bxtb@ifchartok@true}}
+\def\bxtb@ifchartok@true#1\bxtb@end#2#3{#2}
+\def\bxtb@ifchartok@false#1\bxtb@end#2#3{#3}
+\def\do#1#2:{\cslet{bxtb@ICTF/#1}{t}\cslet{bxtb@ICT/#1#2}{t}}
+\do thelet:% 11
+\do thecha:% 12
+\do kanjic:% 16-19(upTeX)
+
+%--------------------------------------- kanji-encoding something
+
+%%<+> \bxInternalJaEncoding
+\let\bxInternalJaEncoding=?
+\ifbxHasAlUcsChar
+ \let\bxInternalJaEncoding=u
+\else\ifbxinpdfTeX
+ \let\bxInternalJaEncoding=b
+\else\ifbxinpTeX
+ \ifnum\jis"2121="8140 \let\bxInternalJaEncoding=s\else
+ \ifnum\jis"2121="A1A1 \let\bxInternalJaEncoding=e\else
+ \ifnum\jis"2121="3000 \let\bxInternalJaEncoding=u\fi\fi\fi
+\fi\fi\fi
+
+%%<+> \bxInputJaEncoding
+\let\bxInputJaEncoding=?
+\ifbxHasAlUcsChar
+ \let\bxInputJaEncoding=u
+\else\ifbxinpdfTeX
+ \let\bxInputJaEncoding=b
+\else\ifbxtb@pxbase@ok
+ \@@input pxbsjc.def\relax
+ \def\bxtb@tmpb#1#2\@nil{%
+ \ifnum `#1=\jis"723F \let\bxInputJaEncoding=s\else
+ \ifnum `#1=\jis"693D \let\bxInputJaEncoding=e\else
+ \ifnum `#1=\jis"7379 \let\bxInputJaEncoding=u\fi\fi\fi}
+ \expandafter\bxtb@tmpb\bxtb@tmpa\@nil
+ \ifx e\bxInputJaEncoding
+ \@@input pxbsjc1.def\relax
+ \def\bxtb@tmpb#1#2\@nil{%
+ \ifnum `#1=\jis"723F \let\bxInputJaEncoding=a\fi}
+ \expandafter\bxtb@tmpb\bxtb@tmpa\@nil
+ \fi
+\fi\fi\fi
+
+%%<+> \bxOutputJaEncoding
+\let\bxOutputJaEncoding=?
+% if input is 'auto', output should not be equal to it,
+% but I don't know what to do then.
+\let\bxOutputJaEncoding=\bxInputJaEncoding
+
+%% \bxtb@jaencname
+\def\bxtb@jaencname#1#2{%
+ \ifx u#1#2\else
+ \ifx s#1sjis\else
+ \ifx e#1euc\else
+ \ifx a#1auto\else
+ \ifx b#1byte\else
+ (unknown)\fi\fi\fi\fi\fi}
+
+%%<*> \internaljaencodingname
+\newcommand*\internaljaencodingname{}
+\edef\internaljaencodingname{%
+ \bxtb@jaencname\bxInternalJaEncoding{unicode}}
+
+%%<*> \inputjaencodingname
+\newcommand*\inputjaencodingname{}
+\edef\inputjaencodingname{%
+ \bxtb@jaencname\bxInputJaEncoding{utf8}}
+
+%%<*> \outputjaencodingname
+\newcommand*\outputjaencodingname{}
+\edef\outputjaencodingname{%
+ \bxtb@jaencname\bxOutputJaEncoding{utf8}}
+
+%%<*> \infojenc
+\newcommand*\infojenc{%
+ \typeout{%
+ Kanji encoding:
+ input=\inputjaencodingname;
+ output=\outputjaencodingname;
+ internal=\internaljaencodingname}%
+}
+
+%--------------------------------------- all done
+\endinput
+%% EOF
diff --git a/language/japanese/BX/bxbase/bxtoolbox.def b/language/japanese/BX/bxbase/bxtoolbox.def
new file mode 100644
index 0000000000..07dae477f1
--- /dev/null
+++ b/language/japanese/BX/bxbase/bxtoolbox.def
@@ -0,0 +1,1078 @@
+%%
+%% This is file 'bxtoolbox.def'.
+%%
+
+%% file declaration
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesFile{bxtoolbox.def}[2017/05/29 v1.1]
+\providecommand*\bxtb@pkgname{BXtoolbox}% bundle name
+
+%% check intergrity
+\edef\bxtb@tmpa{\@currname.\@currext}\def\bxtb@tmpb{bxtoolbox.def}
+\ifx\bxtb@tmpa\bxtb@tmpb\else
+ \PackageError\bxtb@pkgname{Illegal load sequence}\@eha
+\expandafter\endinput\fi\relax
+
+%% code guards
+\edef\bxtb@restore@codes{%
+ \catcode33=\the\catcode33%
+ \catcode34=\the\catcode34%
+ \catcode39=\the\catcode39%
+ \catcode45=\the\catcode45%
+ \catcode46=\the\catcode46%
+ \catcode47=\the\catcode47%
+ \catcode58=\the\catcode58%
+ \catcode60=\the\catcode60%
+ \catcode62=\the\catcode62%
+ \catcode63=\the\catcode63%
+ \catcode96=\the\catcode96%
+\relax}
+\catcode33=12 % <!>
+\catcode34=12 % <">
+\catcode39=12 % <'>
+\catcode45=12 % <->
+\catcode46=12 % <.>
+\catcode47=12 % </>
+\catcode58=12 % <:>
+\catcode60=12 % <<>
+\catcode62=12 % <>>
+\catcode63=12 % <?>
+\catcode96=12 % <`>
+\AtEndOfPackage{%
+ \bxtb@restore@codes
+ \let\bxtb@restore@codes\@undefined}
+
+%--------------------------------------- 0. Prologue
+
+%% variables
+\newif\ifbxOk % general-purpose switch
+\let\bxRes\relax % result container
+
+%% unique tokens
+\def\bxtb@uniq{\bxtb@uniq@}
+
+%% error messages
+\def\bxtb@error{\PackageError\bxtb@pkgname}
+\def\bxtb@warn{\PackageWarningNoLine\bxtb@pkgname}
+
+%--------------------------------------- 1. Engine-independent stuffs
+
+%% \bxtb@@bs
+\let\bxtb@@bs\@backslashchar
+
+%%<+> \bxIfcsundefX{<csname>}{<T>}{<F>}
+\newcommand*\bxIfcsundefX{}
+\let\bxIfcsundefX\@ifundefined
+
+%%<+> \bxCsuseX{<csname>}
+\newcommand*\bxCsuseX[1]{%
+ \@ifundefined{#1}{}{\csname#1\endcsname}}
+
+%% \bxtb@listmake@do
+\def\bxtb@listmake@do{\let\do\bxtb@lm@do}
+\def\bxtb@lm@do{\noexpand\do\noexpand}
+\def\bxtb@csdo#1{\expandafter\do\csname#1\endcsname}
+
+%% \bxtb@letcs\CSA{<csnameB>}
+%% \bxtb@cslet{<csnameA>}\CSB
+%% \bxtb@csletcs{<csnameA>}{<csnameB>}
+% Same as \letcs, \cslet, \csletcs in etoolbox.
+% They are defined here since subsequent stuffs use them.
+\def\bxtb@letcs#1#2{%
+ \expandafter\let\expandafter#1\csname #2\endcsname}
+\def\bxtb@cslet#1#2{%
+ \expandafter\let\csname #1\endcsname#2}
+\def\bxtb@csletcs#1#2{%
+ \expandafter\let\csname #1\expandafter\endcsname\csname #2\endcsname}
+
+%% \bxtb@ifprimitive\CS{<T>}{<F>}
+% Core of \bxIfPrimitive.
+\def\bxtb@ifprimitive#1{%
+ \edef\bxtb@tmpa{\string#1}\edef\bxtb@tmpb{\meaning#1}%
+ \ifx\bxtb@tmpa\bxtb@tmpb \expandafter\@firstoftwo
+ \else \expandafter\@secondoftwo \fi}
+
+%% \bxtb@ifstrempty{<str>}{<T>}{<F>}
+% Core of \ifstrempty.
+\def\bxtb@ifstrempty#1{%
+ \ifx\bxtb@empty@uniq#1\bxtb@empty@uniq
+ \expandafter\@firstoftwo
+ \else \expandafter\@secondoftwo \fi}
+\def\bxtb@empty@uniq{\bxtb@empty@uniq@}
+
+%%<+> \ifbxineTeX (if-token)
+%%<+> \bxIfineTeX{<T>}{<F>}
+%%<+> \ifbxinpdfTeX / \ifbxinLuaTeX / \ifbxinOmega / \ifbxinAleph
+%%<+> \ifbxinXeTeX / \ifbxinpTeX / \ifbxinupTeX / \ifbxinjTeX
+%%<+> \bxIfinpdfTeX / \bxIfinLuaTeX / \bxIfinOmega / \bxIfinAleph
+%%<+> \bxIfinXeTeX / \bxIfinpTeX / \bxIfinupTeX / \bxIfinjTeX
+%% Engine check.
+\def\bxtb@do#1#2{%
+ \bxtb@ifprimitive#2%
+ {\let\bxtb@tmpa\@firstoftwo}{\let\bxtb@tmpa\@secondoftwo}%
+ \bxtb@cslet{bxIfin#1}\bxtb@tmpa
+ \bxtb@csletcs{ifbxin#1}{if\bxtb@tmpa{true}{false}}}
+\bxtb@do{eTeX}{\eTeXversion}
+\bxtb@do{pdfTeX}{\pdftexversion}
+\bxtb@do{LuaTeX}{\luatexversion}
+\bxtb@do{Omega}{\OmegaVersion}
+\bxtb@do{Aleph}{\AlephVersion}
+\bxtb@do{XeTeX}{\XeTeXversion}
+\bxtb@do{pTeX}{\kanjiskip}
+\bxtb@do{upTeX}{\enablecjktoken}
+\bxtb@do{jTeX}{\jintercharskip}
+
+%%<+> \bxPreamble\CSX[*]\CSY
+% Prefix used for preamble-only commands.
+% \CSX can be \def, \newcommand, \DeclareRobustCommand, etc.
+\@onlypreamble\bxPreamble
+\newcommand*\bxPreamble[2]{%
+ \ifx *#2\def\bxtb@args{{#1*}}%
+ \else \def\bxtb@args{#1#2}%
+ \fi \expandafter\bxtb@preamble@a\bxtb@args}
+\@onlypreamble\bxtb@preamble@a
+\def\bxtb@preamble@a#1#2{%
+ \@onlypreamble#2#1#2}
+
+%%<+> \bxConstBool
+\newcommand*\bxConstIfToken[2]{%
+ \bxtb@cslet{if#1}{if#2}}
+
+%% \bxtb@skip@new@cmd...{<text>}
+% Gobbles a following whole macro definition sentence.
+\def\bxtb@skip@new@cmd#1#{\@gobble}
+
+%% \bxtb@name@cs\CS
+\def\bxtb@name@cs{%
+ \expandafter\bxtb@name@cs@a\string\$\@gobble\@empty\@nil}
+\def\bxtb@name@cs@a#1#2#3#4\@nil#5{%
+ \expandafter#3\string#5}
+
+%% \bxtb@let@name\CSX\CSY
+\def\bxtb@let@name#1#2{%
+ \edef#1{\bxtb@name@cs#2}}
+
+%%<+> \bxIf{<test>}{<T>}{<F>}
+%%<+> \bxIfcat{<test>}{<T>}{<F>}
+%%<+> \bxIfx{<test>}{<T>}{<F>}
+%%<+> \bxIfdim{<test>}{<T>}{<F>}
+%%<+> \bxIfnum{<test>}{<T>}{<F>}
+% Primitive if-tests rendered in LaTeX format.
+\let\bxtb@bumper\noindent % primitive other than \relax
+\bxPreamble\def\bxtb@defifmacro@noarg#1#2#3{%
+ \@gobble{\if}% if-match hack
+ \def#1{#2\expandafter\@firstoftwo
+ \else\expandafter\@secondoftwo\fi}}
+\bxPreamble\def\bxtb@defifmacro#1#2#3{%
+ \@gobble{\if}% if-match hack
+ \def#1##1{#2##1\expandafter\@firstoftwo
+ \else\expandafter\@secondoftwo\fi}}
+\bxPreamble\def\bxtb@defifmacro@val#1#2#3{%
+ \@gobble{\if}% if-match hack
+ \def#1##1{\expandafter\@gobble
+ #2##1\bxtb@bumper\expandafter\@firstoftwo
+ \else \bxtb@bumper\expandafter\@secondoftwo \fi}}
+\bxtb@defifmacro\bxIf\if\fi
+\bxtb@defifmacro\bxIfcat\ifcat\fi
+\bxtb@defifmacro\bxIfx\ifx\fi
+\bxtb@defifmacro@val\bxIfdim\ifdim\fi
+\bxtb@defifmacro@val\bxIfnum\ifnum\fi
+
+%%<+> \bxIfInMovingArg{<T>}{<F>}
+% Moving argument check. Note that it actually expands to <T> or
+% <F> prepended with some unexpandable garbles with no effect.
+% For that reason, this macro is not suitable for switching
+% implementation. Instead it is intended for error check for
+% use in moving arguments.
+\long\def\bxIfInMovingArg#1#2{%
+ \let\bxtb@ifinmovarg@a\bxtb@ifinmovarg@a\bxtb@ifinmovarg@c{#1}%
+ #2\bxtb@ifinmovarg@end}
+\def\bxtb@ifinmovarg@a#1{%
+ \bxtb@ifinmovarg@dummy\relax \bxtb@ifinmovarg@b}
+\def\bxtb@ifinmovarg@b#1#2#3\bxtb@ifinmovarg@end{#2}
+\def\bxtb@ifinmovarg@c#1#2\bxtb@ifinmovarg@end{#2}
+\let\bxtb@ifinmovarg@end\@empty
+\let\bxtb@ifinmovarg@dummy\relax
+
+%%<+> \bxMessageToken{<str>}{<text>}
+% Executes <text> where #1 is replaced by control sequence \<str>.
+% The meaning of \<str> is unchanged.
+% (In <text> # must be doubled.)
+\def\bxMessageToken#1{%
+ \begingroup
+ \xdef\bxtb@g@tmpa{\noexpand\bxtb@tmpa
+ \expandafter\noexpand\csname #1\endcsname}%
+ \endgroup
+ \afterassignment\bxtb@g@tmpa \long\def\bxtb@tmpa##1}
+
+%%<+> \bxCheckForMovingArg{<text>}
+% When in moving arguments, it raises an error in the form of
+% undefined conrol sequence; otherwise expands to <text>.
+%%<+> \bxCheckForMovingArgForTest{\SOMETEST{<arg>}}{<T>}{<F>}
+% When in moving arguments, it raises an error in the form of
+% undefined conrol sequence and expands to <F>; otherwise
+% it expands to \SOMETEST{<arg>}{<T>}{<F>}.
+\bxMessageToken{ ERROR: Use in wrong place!}{%
+ \def\bxCheckForMovingArg{\bxIfInMovingArg{#1}}%
+ \def\bxCheckForMovingArgForTest{%
+ \bxIfInMovingArg{#1\@secondoftwo}}%
+}
+
+%% \bxtb@ifnewdefok\CS{<T>}{<F>}
+%% \bxtb@ifrenewdefok\CS{<T>}{<F>}
+%% \bxtb@ifprovidedefok\CS{<T>}{<F>}
+\def\bxtb@ifnewdefok#1{%
+ \newcommand#1{\bxtb@uniq}\bxtb@ifnewdefok@a#1}
+\def\bxtb@ifrenewdefok#1{% <F> is never executed
+ \renewcommand#1{\bxtb@uniq}\let#1\@undefined \@firstoftwo}
+\def\bxtb@ifprovidedefok#1{%
+ \providecommand#1{\bxtb@uniq}\bxtb@ifnewdefok@a#1}
+\def\bxtb@ifnewdefok@a#1{%
+ \ifx#1\bxtb@ifdefok@probe
+ \let#1\@undefined \expandafter\@firstoftwo
+ \else \expandafter\@secondoftwo
+ \fi}
+\long\def\bxtb@ifdefok@probe{\bxtb@uniq}
+
+%% \bxtb@detokenize{<text>}
+% Resource consuming version of \detokenize ;)
+%% \bxtb@stringify{<text>}
+% Expands <text> and then detokenizes the result.
+\def\bxtb@detokenize{%
+ \romannumeral-`a\bxtb@detok@pre@a\bxtb@detok@lop@a}
+\def\bxtb@stringify{%
+ \romannumeral-`a\bxtb@detok@pre@a\bxtb@edetok@lop@a}
+\def\bxtb@detok@pre@a#1#2{%
+ \expandafter\bxtb@detok@ppst@a
+ \csname\bxtb@nonce@pfx"#1#2\bxtb@detok@enda
+ {} \bxtb@detok@endb\endcsname}
+\def\bxtb@detok@enda{\bxtb@detok@enda@}
+\def\bxtb@detok@endb{\bxtb@detok@endb@}
+\begingroup
+ \catcode`\(=12 \lccode`\(=`\{ \catcode`\)=12 \lccode`\)=`\}
+ \lowercase{\gdef\bxtb@detok@brc@a#1#2{(#1#2)}}
+\endgroup
+\def\bxtb@detok@lop@a#1 #2\bxtb@detok@endb{%
+ \bxtb@ifstrempty{#1}%
+ { \bxtb@detok@lop@a}{\bxtb@detok@lop@b#1 }%
+ #2\bxtb@detok@endb}
+\def\bxtb@detok@lop@b#1#{%
+ \bxtb@ifstrempty{#1}%
+ {\bxtb@detok@brc@a\bxtb@detok@lop@a}{\bxtb@detok@lop@c#1}}
+\def\bxtb@detok@lop@c#1{%
+ \bxIfx{#1\bxtb@detok@enda}{\bxtb@detok@pst@a}{%
+ \bxIfcat{\noexpand#1\relax}{\bxtb@format@cs#1}{\string#1}%
+ \bxtb@detok@lop@a}}
+\def\bxtb@edetok@lop@a#1 #2\bxtb@detok@endb{%
+ \bxtb@ifstrempty{#1}%
+ { \bxtb@edetok@lop@a}{\bxtb@edetok@lop@b#1 }%
+ #2\bxtb@detok@endb}
+\def\bxtb@edetok@lop@b#1#{%
+ \bxtb@ifstrempty{#1}%
+ {\bxtb@detok@brc@a\bxtb@edetok@lop@a}{\bxtb@edetok@lop@c#1}}
+\def\bxtb@edetok@lop@c#1{%
+ \bxIfx{#1\bxtb@detok@enda}{\bxtb@detok@pst@a}%
+ {\bxtb@edetok@lop@d#1}}
+\def\bxtb@edetok@lop@d#1{%
+ \bxtb@ifdefmacro#1{\expandafter\bxtb@edetok@lop@a#1}%
+ {\expandafter\bxtb@edetok@lop@e\romannumeral-`\a#1}}
+\def\bxtb@edetok@lop@e#1{%
+ \bxIfcat{\noexpand#1\relax}{\bxtb@format@cs#1}{\string#1}%
+ \bxtb@edetok@lop@a}
+\def\bxtb@detok@pst@a#1\bxtb@detok@endb{}
+\def\bxtb@detok@ppst@a#1{%
+ \expandafter\bxtb@detok@ppst@b\string#1\@nil}
+\def\bxtb@detok@ppst@b#1#2"#3\@nil{\space#3}
+
+%% \bxtb@format@cs\CS
+% Detokenizes control sequence \CS with an optional space
+% appended just in \write.
+\def\bxtb@format@cs{%
+ \expandafter\bxtb@format@cs@a\string\$%
+ \bxtb@format@cs@c\bxtb@format@cs@b\@nil}
+\def\bxtb@format@cs@a#1#2#3#4\@nil#5{%
+ \expandafter#3\string#5\@nil}
+\def\bxtb@format@cs@b{\bxtb@format@cs@c\@empty}
+\def\bxtb@format@cs@c#1#2#3\@nil{%
+ #1#2#3\ifcat_#3_\ifnum\catcode`#2=11 \space \fi\else\space\fi}
+
+%% \bxtb@return@true
+\def\bxtb@return@true#1\bxtb@esac{%
+ \fi\@firstoftwo}
+\def\bxtb@return@false#1\bxtb@esac{%
+ \fi\@secondoftwo}
+
+
+%--------------------------------------- 2. Dummy if-token definitions.
+
+%% \bxtb@make@dummy@if@setter
+\bxPreamble\def\bxtb@make@dummy@if@setter#1#2{%
+ \begingroup
+ \def\bxtb@bval{#1}%
+ \@for\bxtb@bname:=#2\do{\bxtb@make@dummy@if@setter@a}%
+ \endgroup}
+\bxPreamble\def\bxtb@make@dummy@if@setter@a{%
+ \expandafter\ifx\csname if\bxtb@bname\endcsname\relax
+ \bxtb@make@dummy@if@setter@appto\bxtb@set@dummy@ifs{%
+ \let \expandafter\noexpand\csname if\bxtb@bname\endcsname
+ \expandafter\noexpand\csname if\bxtb@bval\endcsname}%
+ \bxtb@make@dummy@if@setter@appto\bxtb@unset@dummy@ifs{%
+ \let \expandafter\noexpand\csname if\bxtb@bname\endcsname
+ \noexpand\@undefined}%
+ \fi}
+\bxPreamble\def\bxtb@make@dummy@if@setter@appto#1#2{%
+ \edef\bxtb@tmpx{#2}%
+ \expandafter\g@addto@macro\expandafter#1%
+ \expandafter{\bxtb@tmpx}}
+\let\bxtb@set@dummy@ifs\@empty
+\let\bxtb@unset@dummy@ifs\@empty
+\bxtb@make@dummy@if@setter{false}{%
+ % e-TeX if-tokens
+ fontchar,defined,csname,incsname,%
+ % pdfTeX if-tokens
+ pdfprimitive,pdfabsdim,pdfabsnum,%
+ % LuaTeX if-tokens
+ absdim,absnum,primitive,%
+ % pTeX if-tokens
+ tdir}
+\bxtb@make@dummy@if@setter{true}{%
+ % pTeX if-tokens
+ ydir}
+
+%%<+> \bxSetDummyIfs
+%%<+> \bxUnsetDummyIfs
+\newcommand*\bxSetDummyIfs{}
+\let\bxSetDummyIfs\bxtb@set@dummy@ifs
+\newcommand*\bxUnsetDummyIfs{}
+\let\bxUnsetDummyIfs\bxtb@unset@dummy@ifs
+
+%% dummy-ifs are enabled in this file
+\bxSetDummyIfs
+
+\bxPreamble\def\bxtb@defifmacro@engdep#1{%
+ \expandafter\bxtb@defifmacro@engdep@a
+ \csname bxIf#1\expandafter\endcsname
+ \csname if#1\expandafter\endcsname
+ \csname iftrue\expandafter\endcsname\csname iffalse\endcsname}
+\bxPreamble\def\bxtb@defifmacro@engdep@a#1#2#3#4{%
+ % be careful that #2,#3,#4 are \if-tokens
+ \bxtb@defifmacro@noarg#1#2\relax \chardef\bxtb@tmpa\z@
+ \ifx#2#3\chardef\bxtb@tmpa\@ne \fi
+ \ifx#2#4\chardef\bxtb@tmpa\tw@ \fi
+ \ifcase\bxtb@tmpa\relax
+ \or \let#1\@firstoftwo
+ \or \let#1\@secondoftwo
+ \fi}
+\bxPreamble\def\bxtb@make@engdep@test#1{%
+ \@for\bxtb@bname:=#1\do{%
+ \bxtb@defifmacro@engdep\bxtb@bname}}
+% this must be done in \bxSetDummyIfs effective
+\bxtb@make@engdep@test{%
+ ydir,tdir%
+}
+
+%--------------------------------------- 3. Macrodef prefix operations
+
+%% \bxtb@all@prefix
+\def\bxtb@all@prefix{\do{protected}\do{long}\do{outer}}
+
+%% \bxtb@set@prefix{<name>}
+%% \bxtb@unset@prefix{<name>}
+%% \bxtb@unset@all@prefix{<name>}
+\def\bxtb@set@prefix#1{\bxtb@cslet{bxtb@PFX/#1}{T}}
+\def\bxtb@unset@prefix#1{\bxtb@cslet{bxtb@PFX/#1}{F}}
+\def\do{\noexpand\bxtb@unset@prefix}
+\edef\bxtb@unset@all@prefix{\bxtb@all@prefix}
+
+%% \bxtb@clear@prefix
+\def\bxtb@clear@prefix{%
+ \def\bxtb@savepfx@dummy{}\let\bxtb@savepfx@dummy\relax}
+
+%% \bxtb@render@prefix
+\def\do{\noexpand\bxtb@render@prefix@a}
+\edef\bxtb@render@prefix{\bxtb@all@prefix}
+\def\bxtb@render@prefix@a#1{%
+ \bxIf{\csname bxtb@PFX/#1\endcsname T}{\csname #1\endcsname}{}}
+
+%% \bxtb@save@prefix
+\def\bxtb@save@prefix{%
+ \def\bxtb@savepfx@dummy{}% prefixes applied to this definition
+ \bxtb@unset@all@prefix
+ \begingroup \escapechar`\\
+ \expandafter\bxtb@savepfx@prs@a\meaning\bxtb@savepfx@dummy\@nil
+ %\endgroup already done
+}
+
+%% some internal stuffs
+\begingroup \escapechar\m@ne
+\xdef\bxtb@g@args{{\string\macro:}{\space}{\string\\}}
+\endgroup
+\def\bxtb@do#1#2#3{%
+ \def\bxtb@savepfx@prs@a##1#1##2\@nil{%
+ \endgroup
+ \let\bxtb@savepfx@dummy\relax
+ \bxIfcat{_##1_}{}{\bxtb@savepfx@prs@b##1\@nil}}
+ \def\bxtb@savepfx@prs@b##1##2#2##3\@nil{%
+ \bxtb@savepfx@prs@c##2#3#3}
+ \def\bxtb@savepfx@prs@c##1#3{%
+ \bxIfcat{_##1_}{}%
+ {\bxtb@set@prefix{##1}\bxtb@savepfx@prs@c}}
+ \def\bxtb@ifdefmacro##1{%
+ \expandafter\bxtb@ifdefmacro@a\meaning##1#1\@nil}
+ \def\bxtb@ifdefmacro@a##1#1##2\@nil##3##4{%
+ \bxIfcat{_##2_}{##4}{##3}}
+}
+\expandafter\bxtb@do\bxtb@g@args
+
+%--------------------------------------- 4. pdfTeX primitives
+
+%%<+> \ifbxPrimitive
+% The primitive equivalent to pdfTeX's \ifpdfprimitive; if the
+% primitive is not available, this is \let'd to \iffalse.
+%%<+> \bxIfHasIfPrimitive{<T>}{<F>}
+% Whether \ifbxPrimitive has a valid definition.
+\bxtb@cslet{ifbxPrimitive}\@undefined
+\expandafter\bxtb@ifprimitive\csname ifpdfprimitive\endcsname{%then
+ \let\bxIfHasIfPrimitive\@firstoftwo
+ \bxtb@csletcs{ifbxPrimitive}{ifpdfprimitive}%
+}{%else
+ \expandafter\bxtb@ifprimitive\csname ifprimitive\endcsname{%then
+ \let\bxIfHasIfPrimitive\@firstoftwo
+ \bxtb@csletcs{ifbxPrimitive}{ifprimitive}%
+ }{%else
+ \let\bxIfHasIfPrimitive\@secondoftwo
+ \bxtb@csletcs{ifbxPrimitive}{iffalse}%
+}}
+
+%%<+> \bxPrimitive
+% The primitive equivalent to pdfTeX's \pdfprimitive; if the
+% primitive is not available, this is defined to be empty.
+\bxtb@ifprimitive\pdfprimitive{%then
+ \let\bxPrimitive\pdfprimitive
+}{%else
+ \bxtb@ifprimitive\primitive{%then
+ \let\bxPrimitive\primitive
+ }{%else
+ \let\bxPrimitive\@empty
+}}
+
+%%<+> \bxStrcmp
+% The primitive equivalent to pdfTeX's \pdfstrcmp; if the
+% primitive is not available, this is left undefined.
+\let\bxStrcmp\@undefined
+\bxtb@ifprimitive\pdfstrcmp{%then
+ \let\bxStrcmp\pdfstrcmp
+}{%else
+ \bxtb@ifprimitive\strcmp{%then
+ \let\bxStrcmp\strcmp
+ }{%else
+}}
+\ifbxinLuaTeX %----<*LuaTeX>
+ \ifdefined\luatexluaescapestring
+ \unless\ifdefined\bxStrcmp
+ \directlua0{%
+ function bxtoolbox_strcmp(A, B)
+ if A == B then tex.write("0")
+ elseif A < B then tex.write("-1")
+ else tex.write("1")
+ end
+ end
+ }
+ \long\def\bxStrcmp#1#2{\directlua0{%
+ bxtoolbox_strcmp("\luatexluaescapestring{#1}",
+ "\luatexluaescapestring{#2}")
+ }}
+ \fi
+ \fi
+\fi %----</LuaTeX>
+
+%--------------------------------------- 5. non etoolbox stuffs
+
+%%<+> \bxRobustdef\CS
+%%<+> \bxRobustgdef\CS
+%%<+> \bxRobustedef\CS
+%%<+> \bxRobustxdef\CS
+\ifbxineTeX %<*etex>
+\def\bxRobustdef{\protected\def}
+\def\bxRobustgdef{\protected\gdef}
+\def\bxRobustedef{\protected\edef}
+\def\bxRobustxdef{\protected\xdef}
+\else %<*!etex>
+\def\bxRobustdef{\bxtb@robustdef\def}
+\def\bxRobustgdef{\bxtb@robustdef\gdef}
+\def\bxRobustedef{\bxtb@robustdef\edef}
+\def\bxRobustxdef{\bxtb@robustdef\xdef}
+\def\bxtb@robustdef#1#2{%
+ \bxtb@save@prefix
+ \let#2\@undefined \DeclareRobustCommand*#2{}%
+ \bxtb@let@name\bxtb@tmpb#2%
+ \bxtb@render@prefix
+ \expandafter#1\csname \bxtb@tmpb\space \endcsname}
+\fi %</etex>
+
+%% \bxtb@robustlet\CSA\CSB
+\ifbxineTeX %<*etex>
+\def\bxtb@robustlet#1#2{%
+ \protected\def#1{#2}}
+\else %<*!etex>
+\def\bxtb@robustlet#1{%
+ \expandafter\bxtb@robustlet@a
+ \csname\bxtb@name@cs#1\space\endcsname#1}
+\def\bxtb@robustlet@a#1#2#3{%
+ \DeclareRobustCommand*#2{}\let#1#3}
+\fi
+
+%%<+> \bxIfPdfOutput{<T>}{<F>}
+%%<+> \bxIfPdfOutputNow{<T>}{<F>}
+\newcommand*\bxIfPdfOutputNow{%
+ \ifx\pdfoutput\@undefined \bxtb@return@false \fi
+ \ifx\pdfoutput\relax \bxtb@return@false \fi
+ \ifnum\pdfoutput>\z@ \bxtb@return@true
+ \else \bxtb@return@false \fi
+ \bxtb@esac}
+\newcommand*\bxIfPdfOutput{}
+\bxIfPdfOutputNow
+{\let\bxIfPdfOutput\@firstoftwo
+ \bxtb@letcs\ifbxPdfOutput{iftrue}}%
+{\let\bxIfPdfOutput\@secondoftwo
+ \bxtb@letcs\ifbxPdfOutput{iffalse}}%
+
+%%<+> \bxIfPrimitive\CS
+%%<+> \bxCSIfPrimitive{<csname>}
+\newcommand*\bxIfPrimitive{}
+\bxtb@robustlet\bxIfPrimitive\bxtb@ifprimitive
+\def\bxtb@ifcsprimitive@a#1{%
+ \expandafter\bxIfPrimitive\csname #1\endcsname}
+\ifbxineTeX %<*etex>
+\def\bxIfCsPrimitive#1{%
+ \unless\ifcsname#1\endcsname \let\bxtb@tmpx\@secondoftwo
+ \else \def\bxtb@tmpx{\bxtb@ifcsprimitive@a{#1}}%
+ \fi \bxtb@tmpx}
+\else %<*!etex>
+\def\bxIfCsPrimitive#1{%
+ \begingroup\expandafter\endgroup
+ \expandafter\ifx\csname #1\endcsname\@undefined
+ \let\bxtb@tmpx\@secondoftwo
+ \else \def\bxtb@tmpx{\bxtb@ifcsprimitive@a{#1}}%
+ \fi \bxtb@tmpx}
+\fi %</etex>
+% use \ifbxPrimitive if available
+\bxIfHasIfPrimitive{%
+\bxtb@defifmacro\bxIfPrimitive\ifbxPrimitive\fi
+}{}
+
+%%<+> \bxIfPrimitiveX\CS
+%% TODO: for e-TeX, TeX
+% use \ifpdfprimitive if available
+\bxIfHasIfPrimitive\@tempswatrue\@tempswafalse
+\if@tempswa %----
+\let\bxIfPrimitiveX\bxIfPrimitive
+\else %----
+\def\bxIfPrimitiveX#1{%
+ \bxIfcat{\noexpand#1\relax}%
+ {\bxtb@ifdefmacro#1{\@secondoftwo}{\bxtb@ifprimitive@x@a#1}}%
+ {\@secondoftwo}}
+\def\bxtb@ifprimitive@x@a#1{%
+ \expandafter\bxtb@ifprimitive@x@b\meaning#1\bxtb@cmp@endb#1}
+\def\bxtb@ifprimitive@x@b#1\bxtb@cmp@endb#2{%
+ \expandafter\bxtb@ifprimitive@x@c\string#1\@bxtb@cmp@enda
+ #2\bxtb@cmp@endb}
+\def\bxtb@do#1{%
+ \def\bxtb@ifprimitive@x@b##1\bxtb@cmp@endb##2{%
+ \expandafter\bxtb@ifprimitive@x@c\string##1\@bxtb@cmp@enda
+ ##2\bxtb@cmp@endb#1\@nil}}
+\def\bxtb@ifprimitive@x@c#1 #2\@nil{%
+ \bxtb@ifstrempty{#2}{\bxtb@ifeq@pstr#1}%
+ {\@secondoftwo}}
+\fi %----
+
+%%<+> \bxIfExpToEqual{<text1>}{<text2>}{<T>}{<F>}
+\newcommand*\bxIfExpToEqual{}
+\bxRobustdef\bxIfExpToEqual#1#2{%
+ \bxCheckForMovingArgForTest{%
+ \bxtb@edef@detokenized\bxtb@tmpx{#1}%
+ \bxtb@edef@detokenized\bxtb@tmpy{#2}%
+ \bxIfx{\bxtb@tmpx\bxtb@tmpy}}}
+% use \bxStrcmp if available
+\ifx\bxStrcmp\@undefined\else
+\def\bxIfExpToEqual#1#2{%
+ \bxIfnum{\bxStrcmp{#1}{#2}=\z@}}
+\fi
+
+%%<+> \bxIfExpToEqualX{<text1>}{<text2>}{<T>}{<F>}
+\def\bxIfExpToEqualX#1#2{%
+ \bxtb@ifeq@text#1\bxtb@cmp@enda#2\bxtb@cmp@endb}
+% use \bxStrcmp if available
+\ifx\bxStrcmp\@undefined\else
+\let\bxIfExpToEqualX\bxIfExpToEqual
+\fi
+
+%% \bxtb@ifstrequal@pdftex{<str1>}{<str2>}{<T>}{<F>}
+% a version of \ifstrequal using \bxStrcmp
+\ifx\bxStrcmp\@undefined\else
+\def\bxtb@ifstrequal@pdftex#1#2{%
+ \bxIfnum{\bxStrcmp{\detokenize{#1}}{\detokenize{#2}}=\z@}}
+\AtEndOfPackage{% override the definition in etoolbox
+ \let\bxIfstrequal\bxtb@ifstrequal@pdftex}
+\fi
+
+%% \bxIfstrequalX{<str1>}{<str2>}{<T>}{<F>}
+\newcommand*\bxIfstrequalX{}
+\def\bxIfstrequalX#1#2{%
+ \bxtb@ifeq@str#1\bxtb@cmp@enda#2\bxtb@cmp@endb}
+% use \bxStrcmp if available
+\ifx\bxStrcmp\@undefined\else
+\let\bxIfstrequalX\bxtb@ifstrequal@pdftex
+\fi
+
+%% \bxtb@nonce@pfx
+\def\bxtb@nonce@pfx{bxtb@?@\string\$}
+
+%%<+> \bxDetokenize{<text>}
+\bxIfineTeX
+{\let\bxDetokenize\detokenize}
+{\let\bxDetokenize\bxtb@detokenize}
+%%<+> \bxStringify{<text>}
+\let\bxStringify\bxtb@stringify
+
+%% \bxtb@def@detokenized\CS{<text>}
+%% \bxtb@edef@detokenized\CS{<text>}
+\ifbxineTeX %<*etex>
+\def\bxtb@def@detokenized#1#2{%
+ \edef#1{\detokenize{#2}}}
+\def\bxtb@edef@detokenized#1#2{%
+ \edef\bxtb@args{\noexpand#1{#2}}%
+ \expandafter\bxtb@def@detokenized\bxtb@args}
+\else %<*!etex>
+\def\bxtb@def@detokenized{\bxtb@defdetok@a\def}
+\def\bxtb@edef@detokenized{\bxtb@defdetok@a\edef}
+\def\bxtb@defdetok@a#1#2#3{%
+ #1\bxtb@tmpa{#3}%
+ \expandafter\bxtb@defdetok@b\meaning\bxtb@tmpa\@nil#2}
+\def\bxtb@defdetok@b#1>#2\@nil#3{\def#3{#2}}
+\fi %</etex>
+
+%% \bxtb@ifeq@text
+\def\bxtb@ifeq@text#1\bxtb@cmp@enda#2\bxtb@cmp@endb{%
+ \expandafter\expandafter\expandafter\bxtb@ifeqtx@a
+ \bxtb@stringify@ss{#2}\bxtb@cmp@endb#1\bxtb@cmp@enda}
+\def\bxtb@ifeqtx@a#1\bxtb@cmp@endb#2\bxtb@cmp@enda{%
+ \expandafter\expandafter\expandafter\bxtb@ifeq@pstr
+ \bxtb@stringify@ss{#2}\bxtb@cmp@enda#1\bxtb@cmp@endb}
+
+%% \bxtb@ifeq@str#1#2
+\def\bxtb@ifeq@str#1\bxtb@cmp@enda#2\bxtb@cmp@endb{%
+ \expandafter\expandafter\expandafter\bxtb@ifeqstr@a
+ \bxtb@detokenize@ss{#2}\bxtb@cmp@endb#1\bxtb@cmp@enda}
+\def\bxtb@ifeqstr@a#1\bxtb@cmp@endb#2\bxtb@cmp@enda{%
+ \expandafter\expandafter\expandafter\bxtb@ifeq@pstr
+ \bxtb@detokenize@ss{#2}\bxtb@cmp@enda#1\bxtb@cmp@endb}
+
+%% \bxtb@ifeq@pstr
+\def\bxtb@ifeq@pstr#1\bxtb@cmp@enda#2\bxtb@cmp@endb{%
+ \bxtb@ifstrempty{#1}%
+ {\bxtb@ifstrempty{#2}}%
+ {\bxtb@ifstrempty{#2}{\@secondoftwo}%
+ {\bxtb@ifeqps@a#1\bxtb@cmp@enda#2\bxtb@cmp@endb}}}
+\def\bxtb@ifeqps@a#1#2\bxtb@cmp@enda#3#4\bxtb@cmp@endb{%
+ \bxIfx{#1#3}%
+ {\bxtb@ifeq@pstr#2\bxtb@cmp@enda#4\bxtb@cmp@endb}%
+ {\@secondoftwo}}
+\def\bxtb@cmp@enda{\bxtb@cmp@enda@}
+\def\bxtb@cmp@endb{\bxtb@cmp@endb@}
+
+%% \bxtb@space@subst
+\def\bxtb@space@subst#1 #2\bxtb@ss@endb{%
+ \bxtb@ifstrempty{#2}{\bxtb@spcsub@a#1\bxtb@ss@endb}%
+ {\bxtb@space@subst#1\space#2\bxtb@ss@endb}}
+\def\bxtb@spcsub@a#1\bxtb@ss@enda#2\bxtb@ss@endb{\space#1}
+\def\bxtb@ss@enda{\bxtb@ss@enda@}
+\def\bxtb@ss@endb{\bxtb@ss@endb@}
+
+%% \bxtb@combine@ss
+\def\bxtb@combine@ss#1#2{%
+ \expandafter\expandafter\expandafter\bxtb@space@subst
+ #1{#2}\bxtb@ss@enda{} \bxtb@ss@endb}
+\def\bxtb@detokenize@ss{%
+ \romannumeral-`\a\bxtb@combine@ss\bxDetokenize}
+\def\bxtb@stringify@ss{%
+ \romannumeral-`\a\bxtb@combine@ss\bxStringify}
+
+%%<+> \bxCsNoexpand{<csname>}
+\newcommand*\bxCsNoexpand[1]{%
+ \expandafter\noexpand\csname#1\endcsname}
+
+%--------------------------------------- 6. Import from etoolbox
+
+%% \bxtb@import{\CSA \CSB ...}
+% [e-TeX] Aliases each of macros to a new name with 'bx' prefixed.
+% [non-e-TeX] Adds the prefixed name to the function check list.
+\bxPreamble\def\bxtb@import#1{%
+ \bxtb@listmake@do
+ \@tfor\bxtb@tmpa:=#1\do{\expandafter\bxtb@importcmd\bxtb@tmpa}}
+\bxPreamble\def\bxtb@importcmd#1{%
+ \begingroup
+ \expandafter\bxtb@importcmd@a\string#1\@nil
+ \endgroup}
+\bxPreamble\def\bxtb@importcmd@a#1#2#3\@nil{%
+ \@tempcnta`#2 \@tempcntb\@tempcnta
+ \ifnum 96<\@tempcntb \ifnum 123>\@tempcntb
+ \advance\@tempcntb-32 \fi\fi
+ \uccode\@tempcnta\@tempcntb
+ \uppercase{\edef\bxtb@tmpa{#2}}%
+ \expandafter\bxtb@importcmd@b\csname bx\bxtb@tmpa#3%
+ \expandafter\endcsname\csname #2#3\endcsname}
+
+%% \bxtb@provide{\CSA \CSB ...}
+% [e-TeX] Does nothing.
+% [non-e-TeX] Adds the name to the function check list.
+\bxPreamble\def\bxtb@provide#1{%
+ \bxtb@listmake@do
+ \@tfor\bxtb@tmpa:=#1\do{\expandafter\bxtb@providecmd\bxtb@tmpa}}
+
+\ifbxineTeX %<*etex>
+%% Load etoolbox.
+\RequirePackage{etoolbox}\relax
+%%
+\bxPreamble\def\bxtb@importcmd@b#1#2{\global\let#1#2}
+\bxPreamble\def\bxtb@providecmd#1{}
+
+\else %<*!etex>
+%%
+\bxPreamble\let\bxtb@provided\@empty
+\bxPreamble\def\bxtb@importcmd@b#1#2{%
+ \xdef\bxtb@provided{\bxtb@provided\do#1}}
+\bxPreamble\def\bxtb@providecmd#1{%
+ \xdef\bxtb@provided{\bxtb@provided\do#1}}
+
+\fi %</etex>
+
+\bxtb@import{%
+%%==== Here is a list of commands imported to bx* namespace.
+%% For such commands, bxtoolbox provides compatible but not equivalent
+%% commands when e-TeX extension is not available, under the same
+%% 'bx'-prefixed name.
+ \newrobustcmd \renewrobustcmd \providerobustcmd %2.1
+ \robustify %2.2
+ \csuse \csshow %3.1.1
+ \ifcsdef \ifcsundef %3.6.1
+}
+\bxtb@provide{%
+%% For the following commands, bxtoolbox provides equivalent commands
+%% for non-e-TeX environment under the same name as in etoolbox.
+ \AfterPreamble \AtEndPreamble \AfterEndPreamble %2.5
+ \AfterEndDocument
+ \csdef \csgdef \csedef \csxdef %3.1.1
+ \cslet \letcs \csletcs \undef \csundef
+ \appto \gappto \eappto \xappto %3.3.1
+ \csappto \csgappto \cseappto \csxappto
+ \preto \gpreto \epreto \xpreto %3.3.2
+ \cspreto \csgpreto \csepreto \csxpreto
+ \newbool \providebool \booltrue \boolfalse %3.5.1
+ \setbool \ifbool \notbool
+ \newtoggle \providetoggle \toggletrue \togglefalse %3.5.2
+ \settoggle \iftoggle \nottoggle
+ \ifdef \ifundef %3.6.1
+ \ifstrequal \ifstrempty %3.6.2
+}
+
+\ifbxineTeX %<*etex>
+%% When the engine is eTeX, stop reading here.
+\bxUnsetDummyIfs
+\expandafter\endinput
+\fi %</etex>
+%--------------------------------------- 7. etoolbox compatible functions
+
+%% error messages
+\def\bxtb@err@ukbool#1{\bxtb@error
+ {\bxtb@@bs if#1 undefined}\@eha}
+\def\bxtb@err@ukbval#1{\bxtb@error
+ {Invalid boolean value '#1'}\@eha}
+\def\bxtb@err@aetgl#1{\bxtb@error
+ {Toggle '#1' already defined}\@eha}
+\def\bxtb@err@uktgl#1{\bxtb@error
+ {Toggle '#1' undefined}\@eha}
+\def\bxtb@err@nomcr#1{\bxtb@error
+ {\string#1 is not a macro}\@eha}
+
+%%<+> \cslet
+%%<+> \letcs
+%%<+> \csletcs
+\bxtb@robustlet\cslet\bxtb@cslet
+\bxtb@robustlet\letcs\bxtb@letcs
+\bxtb@robustlet\csletcs\bxtb@csletcs
+
+%%<+> \bxNewrobustcmd
+%%<+> \bxRenewrobustcmd
+%%<+> \bxProviderobustcmd
+\newcommand\bxNewrobustcmd{}
+\DeclareRobustCommand*\bxNewrobustcmd{%
+ \bxtb@dclrobustcmd@a\bxtb@ifnewdefok}
+\def\bxtb@dclrobustcmd@a#1{%
+ \@ifstar{\bxtb@dclrobustcmd@b#1{*}}{\bxtb@dclrobustcmd@b#1{}}}
+\def\bxtb@dclrobustcmd@b#1#2#3{%
+ #1#3{\DeclareRobustCommand#2#3}{\bxtb@skip@new@cmd}}
+\bxNewrobustcmd*\bxRenewrobustcmd{%
+ \bxtb@dclrobustcmd@a\bxtb@ifrenewdefok}
+\bxNewrobustcmd*\bxProviderobustcmd{%
+ \bxtb@dclrobustcmd@a\bxtb@ifprovidedefok}
+
+%%<+> \bxRobustify
+\bxNewrobustcmd*\bxRobustify[1]{%
+ \ifundef{#1}{\bxtb@err@nomcr#1}
+ {\bxtb@ifdefmacro{#1}%
+ {\begingroup
+ \expandafter\bxtb@robustify@a
+ \csname\bxtb@name@cs#1\space\endcsname#1}%
+ {\bxtb@err@nomcr#1}}}
+\def\bxtb@robustify@a#1#2{%
+ \global\let\bxtb@rbf@do\@empty
+ \let\bxtb@tmpa#2\let#2\@undefined
+ \let\bxtb@tmpb#1\let#1\@undefined
+ \DeclareRobustCommand*#2{}%
+ \ifx#2\bxtb@tmpa
+ \bxtb@warn{\string#2 is already robust}%
+ \else\ifx\bxtb@tmpb\relax
+ \global\let\bxtb@rbf@tmpa#2%
+ \gdef\bxtb@rbf@do{\let#1#2\let#2\bxtb@rbf@tmpa}%
+ \else \bxtb@error{Failed to robustify \string#1}\@ehc
+ \fi\fi
+ \endgroup \bxtb@rbf@do}
+
+%%<+> \csdef
+%%<+> \csedef
+%%<+> \csgdef
+%%<+> \csxdef
+\bxNewrobustcmd*\csdef[1]{\expandafter\def\csname #1\endcsname}
+\bxNewrobustcmd*\csedef[1]{\expandafter\edef\csname #1\endcsname}
+\bxNewrobustcmd*\csgdef[1]{\expandafter\gdef\csname #1\endcsname}
+\bxNewrobustcmd*\csxdef[1]{\expandafter\xdef\csname #1\endcsname}
+
+%%<+> \undef
+%%<+> \csundef
+\bxNewrobustcmd*\undef[1]{\let#1\@undefined}
+\bxNewrobustcmd*\csundef[1]{%
+ \expandafter\let\csname #1\endcsname\@undefined}
+
+%%<+> \ifdef\CS{<T>}{<F>}
+%%<+> \ifundef\CS{<T>}{<F>}
+%%<+> \bxIfcsdef{<csname>}{<T>}{<F>}
+%%<+> \bxIfcsundef{<csname>}{<T>}{<F>}
+\newcommand*\ifdef[1]{%
+ \ifx#1\@undefined \expandafter\@secondoftwo
+ \else \expandafter\@firstoftwo
+ \fi}
+\newcommand*\ifundef[1]{%
+ \ifx#1\@undefined \expandafter\@firstoftwo
+ \else \expandafter\bxtb@ifundef@a\expandafter#1%
+ \fi}
+\def\bxtb@ifundef@a#1{%
+ \ifx#1\relax \expandafter\@firstoftwo
+ \else \expandafter\@secondoftwo
+ \fi}
+\newcommand*\bxIfcsdef[1]{%
+ \bxCheckForMovingArgForTest{%
+ \begingroup\expandafter\endgroup
+ \expandafter\ifx\csname #1\endcsname\@undefined
+ \expandafter\@secondoftwo
+ \else \expandafter\@firstoftwo
+ \fi}}
+\newcommand*\bxIfcsundef[1]{%
+ \bxCheckForMovingArgForTest{%
+ \begingroup\expandafter\expandafter\expandafter\endgroup
+ \expandafter\ifx\csname #1\endcsname\relax
+ \expandafter\@firstoftwo
+ \else \expandafter\@secondoftwo
+ \fi}}
+
+%%<+> \bxCsuse
+\bxNewrobustcmd*\bxCsuse[1]{%
+ \bxIfcsdef{#1}{\csname #1\endcsname}{}}
+
+%%<+> \bxCsshow
+\bxNewrobustcmd*\bxCsshow[1]{%
+ \bxIfcsdef{#1}{\expandafter\show\csname #1\endcsname}{}}
+
+%%<+> \appto
+%%<+> \gappto
+%%<+> \eappto
+%%<+> \xappto
+\bxNewrobustcmd*\appto{\bxtb@appto\@empty}
+\bxNewrobustcmd*\gappto{\bxtb@appto\global}
+\bxNewrobustcmd*\eappto{\bxtb@eappto\@empty}
+\bxNewrobustcmd*\xappto{\bxtb@eappto\global}
+\bxNewrobustcmd*\csappto[1]{\expandafter\appto\csname#1\endcsname}
+\bxNewrobustcmd*\csgappto[1]{\expandafter\gappto\csname#1\endcsname}
+\bxNewrobustcmd*\cseappto[1]{\expandafter\eappto\csname#1\endcsname}
+\bxNewrobustcmd*\csxappto[1]{\expandafter\xappto\csname#1\endcsname}
+\def\bxtb@eappto#1#2#3{%
+ \edef\bxtb@args{\noexpand#1\noexpand#2{#3}}%
+ \expandafter\bxtb@appto\bxtb@args}
+\def\bxtb@appto#1#2#3{%
+ \begingroup
+ \ifx#2\@undefined \let#2\@empty \fi
+ \toks@\expandafter{#2#3}\xdef\bxtb@g@tmpa{\the\toks@}%
+ \endgroup #1\let#2\bxtb@g@tmpa}
+
+%%<+> \preto
+%%<+> \gpreto
+%%<+> \epreto
+%%<+> \xpreto
+\bxNewrobustcmd*\preto{\bxtb@preto\@empty}
+\bxNewrobustcmd*\gpreto{\bxtb@preto\global}
+\bxNewrobustcmd*\epreto{\bxtb@epreto\@empty}
+\bxNewrobustcmd*\xpreto{\bxtb@epreto\global}
+\bxNewrobustcmd*\cspreto[1]{\expandafter\preto\csname#1\endcsname}
+\bxNewrobustcmd*\csgpreto[1]{\expandafter\gpreto\csname#1\endcsname}
+\bxNewrobustcmd*\csepreto[1]{\expandafter\epreto\csname#1\endcsname}
+\bxNewrobustcmd*\csxpreto[1]{\expandafter\xpreto\csname#1\endcsname}
+\toksdef\bxtb@toksa=2
+\def\bxtb@epreto#1#2#3{%
+ \edef\bxtb@args{\noexpand#1\noexpand#2{#3}}%
+ \expandafter\bxtb@preto\bxtb@args}
+\def\bxtb@preto#1#2#3{%
+ \begingroup
+ \ifx#2\@undefined \let#2\@empty \fi
+ \toks@\expandafter{#2}\bxtb@toksa{#3}%
+ \xdef\bxtb@g@tmpa{\the\bxtb@toksa\the\toks@}%
+ \endgroup #1\let#2\bxtb@g@tmpa}
+
+%%<+> \newbool
+%%<+> \providebool
+\bxNewrobustcmd*\newbool[1]{%
+ \expandafter\bxtb@newbool@a\csname if#1\endcsname}
+\def\bxtb@newbool@a#1{\@ifdefinable#1{\newif#1}}
+\bxNewrobustcmd*\providebool[1]{%
+ \@ifundefined{if#1}%
+ {\expandafter\newif\csname if#1\endcsname}{}}
+
+%%<+> \booltrue
+%%<+> \boolfalse
+%%<+> \setbool
+% NB: Here \bxIfcsundef cannot be used because otherwise the use
+% with \global would fail.
+\bxNewrobustcmd*\booltrue[1]{%
+ \bxIfcsundefX{if#1}{\bxtb@clear@prefix\bxtb@err@ukbool{#1}}%
+ {\csname #1true\endcsname}}
+\bxNewrobustcmd*\boolfalse[1]{%
+ \bxIfcsundefX{if#1}{\bxtb@clear@prefix\bxtb@err@ukbool{#1}}%
+ {\csname #1false\endcsname}}
+\bxNewrobustcmd*\setbool[2]{%
+ \bxIfcsundefX{if#1}{\bxtb@clear@prefix\bxtb@err@ukbool{#1}}%
+ {\bxIfcsundefX{#1#2}{\bxtb@clear@prefix\bxtb@err@ukbval{#2}}%
+ {\csname #1#2\endcsname}}}
+
+%%<+> \ifbool
+%%<+> \notbool
+\@gobble{\if\if}% if-match hack
+\newcommand*\ifbool[1]{%
+ \bxIfcsundefX{if#1}{\bxtb@err@ukbool{#1}\@gobbletwo}%
+ {\csname if#1\endcsname\expandafter\@firstoftwo
+ \else \expandafter\@secondoftwo
+ \fi}}
+\newcommand*\notbool[1]{%
+ \bxIfcsundefX{if#1}{\bxtb@err@ukbool{#1}\@gobbletwo}%
+ {\csname if#1\endcsname\expandafter\@secondoftwo
+ \else \expandafter\@firstoftwo
+ \fi}}
+
+%%<+> \newtoggle
+%%<+> \providetoggle
+\bxNewrobustcmd*\newtoggle[1]{%
+ \bxIfcsdef{bxtb@TG/#1}{\bxtb@err@aetgl{#1}}%
+ {\cslet{bxtb@TG/#1}\bxtb@tgl@@false}}
+\bxNewrobustcmd*\providetoggle[1]{%
+ \bxIfcsdef{bxtb@TG/#1}{}{\cslet{bxtb@TG/#1}\bxtb@tgl@@false}}
+\let\bxtb@tgl@@true\@firstoftwo
+\let\bxtb@tgl@@false\@secondoftwo
+
+%%<+> \toggletrue
+%%<+> \togglefalse
+%%<+> \settoggle
+% NB: Here \bxIfcsdef cannot be used because otherwise the use
+% with \global would fail.
+\bxNewrobustcmd*\toggletrue[1]{%
+ \bxIfcsundefX{bxtb@TG/#1}{\bxtb@clear@prefix\bxtb@err@uktgl{#1}}%
+ {\cslet{bxtb@TG/#1}\bxtb@tgl@@true}}
+\bxNewrobustcmd*\togglefalse[1]{%
+ \bxIfcsundefX{bxtb@TG/#1}{\bxtb@clear@prefix\bxtb@err@uktgl{#1}}%
+ {\cslet{bxtb@TG/#1}\bxtb@tgl@@false}}
+\bxNewrobustcmd*\settoggle[2]{%
+ \bxIfcsundefX{bxtb@TG/#1}{\bxtb@clear@prefix\bxtb@err@uktgl{#1}}%
+ {\bxIfcsundefX{bxtb@tgl@@#2}{\bxtb@clear@prefix\bxtb@err@ukbval{#2}}%
+ {\csletcs{bxtb@TG/#1}{bxtb@tgl@@#2}}}}
+
+%%<+> \iftoggle
+%%<+> \nottoggle
+\newcommand*\iftoggle[1]{%
+ \bxIfcsundefX{bxtb@TG/#1}{\bxtb@err@uktgl{#1}\@gobbletwo}%
+ {\csname bxtb@TG/#1\endcsname}}
+\newcommand*\nottoggle[1]{%
+ \bxIfcsundefX{bxtb@TG/#1}{\bxtb@err@uktgl{#1}\@gobbletwo}%
+ {\csname bxtb@TG/#1\endcsname\@secondoftwo\@firstoftwo}}
+
+%%<+> \ifstrequal{<str1>}{<str2>}{<T>}{<F>}
+\newcommand*\ifstrequal{}
+\bxRobustdef\ifstrequal#1#2{%
+ \bxCheckForMovingArgForTest{%
+ \bxtb@def@detokenized\bxtb@tmpx{#1}%
+ \bxtb@def@detokenized\bxtb@tmpy{#2}%
+ \bxIfx{\bxtb@tmpx\bxtb@tmpy}}}
+
+%%<+> \ifstrempty{<str>}{<T>}{<F>}
+\newcommand*\ifstrempty{}
+\let\ifstrempty\bxtb@ifstrempty
+
+%% internal stuffs needed for hook commands
+\bxPreamble\def\bxtb@prepare@bdhook#1#2{%
+ \bxNewrobustcmd*#1{\gappto#2}%
+ \newcommand*#2{}}
+\def\bxtb@dispatch@bdhook#1#2{%
+ \let#1\@firstofone #2%
+ \bxRobustdef#1{\@notprerr\@gobble}\undef#2}
+
+%%<+> \AtEndPreamble
+%%<+> \AfterPreamble
+%%<+> \AfterEndPreamble
+%%<+> \AfterEndDocument
+\bxtb@prepare@bdhook\AtEndPreamble\@endpreamblehook
+\bxtb@prepare@bdhook\AfterEndPreamble\@afterendpreamblehook
+\bxtb@prepare@bdhook\AfterEndDocument\@afterenddocumenthook
+\bxNewrobustcmd*\AfterPreamble{\AtBeginDocument}
+\AtEndPreamble{\let\AfterPreamble\@firstofone}
+\AfterEndPreamble{\undef\bxtb@dispatch@bdhook}
+%
+\preto\document{\endgroup
+ \bxtb@dispatch@bdhook\AtEndPreamble\@endpreamblehook
+ \begingroup}
+\appto\document{%
+ \bxtb@dispatch@bdhook\AfterEndPreamble\@afterendpreamblehook
+ \ignorespaces}
+% patch to \enddocument
+\bxPreamble\def\bxtb@patch@enddocument{%
+ \expandafter\bxtb@patch@ed@a\enddocument\deadcycles\bxtb@end}
+\bxPreamble\def\bxtb@patch@ed@a#1\deadcycles#2\bxtb@end{%
+ \bxtb@ifstrempty{#2}{\bxtb@patch@ed@fail}%
+ {\def\bxtb@tmpa{#1}\bxtb@patch@ed@b#2\bxtb@end}}
+\bxPreamble\def\bxtb@patch@ed@b#1\deadcycles#2\bxtb@end{%
+ \bxtb@ifstrempty{#2}{\bxtb@patch@ed@c{#1}}%
+ {\bxtb@patch@ed@fail}}
+\bxPreamble\def\bxtb@patch@ed@c#1{%
+ \appto\bxtb@tmpa{\let\AfterEndDocument\@firstofone
+ \@afterenddocumenthook
+ \deadcycles#1}%
+ \let\bxtb@org@enddocument\enddocument
+ \let\enddocument\bxtb@tmpa}
+\bxPreamble\def\bxtb@patch@ed@fail{%
+ \bxtb@warn{\string\AfterEndDocument\space is set disabled}%
+ \bxRobustdef\AfterEndDocument##1{\bxtb@error
+ {\string\AfterEndDocument\space is now disabled}\@eha}}
+\bxtb@patch@enddocument
+
+%--------------------------------------- 8. Epilogue
+\def\do#1{%
+ \ifx#1\@undefined \bxtb@warn{\string#1 not yet implemented}\fi}
+\bxtb@provided
+\bxUnsetDummyIfs
+\endinput
+%% EOF
diff --git a/language/japanese/BX/bxbase/bxtoolbox.sty b/language/japanese/BX/bxbase/bxtoolbox.sty
new file mode 100644
index 0000000000..4f1ee3b831
--- /dev/null
+++ b/language/japanese/BX/bxbase/bxtoolbox.sty
@@ -0,0 +1,27 @@
+%%
+%% This is file 'bxtoolbox.sty'.
+%%
+%% Copyright (c) 2017 Takayuki YATO (aka. "ZR")
+%% GitHub: https://github.com/zr-tex8r
+%% Twitter: @zr_tex8r
+%%
+%% This package is distributed under the MIT License.
+%%
+
+%% file declaration
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{bxtoolbox}[2017/05/29 v1.1 BX developers' toolbox]
+\def\bxtb@pkgname{bxtoolbox}
+
+%--------------------------------------- main
+
+%% load submodules
+\providecommand*\bxRequireDefinition[1]{%
+ \def\bx@@def{def}\@onefilewithoptions{#1}[][]\bx@@def}
+\bxRequireDefinition{bxtoolbox}
+\bxRequireDefinition{bxtoolbox-ext}
+\bxRequireDefinition{bxtoolbox-ja}
+
+%--------------------------------------- all done
+\endinput
+%% EOF
diff --git a/language/japanese/BX/bxbase/bxutf8.def b/language/japanese/BX/bxbase/bxutf8.def
new file mode 100644
index 0000000000..9fd2168425
--- /dev/null
+++ b/language/japanese/BX/bxbase/bxutf8.def
@@ -0,0 +1,182 @@
+%%
+%% This is file 'bxutf8.def'.
+%%
+%
+%% file declaration
+\ProvidesFile{bxutf8.def}[2017/05/29 v1.1 BX UTF-8 input encoding]
+%
+% Note: All definitions in this file should be local.
+% This file should not spill any spaces or \par.
+%
+%% code guards
+% Here spaces are set back to effective. So great care must be taken
+% so spaces should not be spilt out (in horizontal mode).
+\catcode32=10\relax
+\edef\bxus@i@restore@codes{%
+ \catcode33=\the\catcode33%
+ \catcode34=\the\catcode34%
+ \catcode39=\the\catcode39%
+ \catcode45=\the\catcode45%
+ \catcode46=\the\catcode46%
+ \catcode47=\the\catcode47%
+ \catcode58=\the\catcode58%
+ \catcode63=\the\catcode63%
+ \catcode96=\the\catcode96%
+\relax}
+\catcode33=12 % <!>
+\catcode34=12 % <">
+\catcode39=12 % <'>
+\catcode45=12 % <->
+\catcode46=12 % <.>
+\catcode47=12 % </>
+\catcode58=12 % <:>
+\catcode63=12 % <?>
+\catcode96=12 % <`>
+\g@addto@macro\bxus@i@restore@codes{%
+ \let\bxus@i@restore@codes\@undefined}%
+%
+%--------------------------------------- dynamic part
+%
+% abort when this is first loaded after \begin{document}
+\def\bxus@i@error{\PackageError{inputenc}}%
+\ifx\@nodocument\relax
+ \ifx\bxus@bxutf@loaded\@undefined
+ \bxus@i@error
+ {cannot load `bxutf8' after \string\begin{document}}\@eha
+ \bxus@i@restore@codes\endinput\fi\fi
+%
+%% load 'utf8' encoding
+\InputIfFileExists{utf8.def}{}%
+ {\bxus@i@error{input encoding `utf8' unavailable}\@eha
+ \bxus@i@restore@codes\endinput}%
+\makeatletter % is this needed??
+%\@inpenc@test % This is done in utf8.def
+%
+%% attach the hook
+\def\UTFviii@two@octets#1#2{\expandafter\bxus@choice
+ \csname u8:#1\string#2\endcsname#1#2.@}%
+\def\UTFviii@three@octets#1#2#3{\expandafter\bxus@choice
+ \csname u8:#1\string#2\string#3\endcsname#1#2#3@}%
+\def\UTFviii@four@octets#1#2#3#4{\expandafter\bxus@choice@four
+ \csname u8:#1\string#2\string#3\string#4\endcsname#1#2#3#4@}%
+%
+% When this file is reloaded, the 'static' part will be skipped.
+\ifx\bxus@bxutf@loaded\@undefined\else
+ \bxus@i@restore@codes\endinput \fi
+\let\bxus@bxutf@loaded=t%
+%
+%--------------------------------------- static part
+%
+%% error messages
+\def\bxus@err@uknbc{\bxus@i@error
+ {Unknown non-BMP character found}%
+ {bxutf8 cannot handle non-BMP characters.}}%
+\def\bxus@err@nodrv{\bxus@i@error
+ {Unicode driver not found}\@ehb}%
+%
+%% make tables for 'nybble conversion'
+\def\bxus@fornbl{%
+ \bxus@fornbl@a00001102203310411512613720821922A23B30C31D32E33FXXX}%
+\def\bxus@fornbl@a#1#2#3{%
+ \if X#1\else
+ \@namedef{bxus@*#1#2}{#3}%
+ \bxus@defchr{F#3}{0#1#2}\bxus@defchr{E#3}{#1#2}%
+ \bxus@defchr{C#3}{000#1#2}\bxus@defchr{D#3}{001#1#2}%
+ \bxus@defchr{8#3}{0#1#2}\bxus@defchr{9#3}{1#1#2}%
+ \bxus@defchr{A#3}{2#1#2}\bxus@defchr{B#3}{3#1#2}%
+ \expandafter\bxus@fornbl@a\fi}%
+\def\bxus@defchr#1#2{%
+ {\lccode`\!="#1%
+ \lowercase{\expandafter\gdef\csname bxus@@!\endcsname{#2}}}}%
+\bxus@fornbl \@namedef{bxus@@.}{}%
+%
+%% \bxcs@choice
+% Called in the form
+% \bxus@choice[\u8:??]??.@ (2-byte) or
+% \bxus@choice[\u8:???]???@ (3-byte)
+% where ?? is a (TF-8 byte string and [\u8:...] denotes a single
+% control word. This macro expands to the control word if it is
+% defined; otherwise expands to \bxus@proc.
+\def\bxus@choice#1#2@{%
+ \ifx#1\relax \bxus@proc#2%
+ \else\expandafter#1\fi}%
+%
+%% \bxus@choice@four
+\def\bxus@choice@four#1#2@{%
+ \ifx#1\relax \bxus@prociv#2%
+ \else\expandafter#1\fi}%
+%
+%% \bxus@proc
+% When ??? is the UTF-8 string of U+XXXX (padded to length 3 with
+% a dot), then \bxus@proc@a??? fully expands to \bxUHex{XXXX}.
+% (\bxUHex should be robust.)
+\def\bxus@proc#1#2#3{%
+ \expandafter\bxus@proc@b\csname bxus@@\string#1\expandafter\endcsname
+ \csname bxus@@\string#2\expandafter\endcsname
+ \csname bxus@@\string#3\endcsname}%
+\def\bxus@proc@b#1#2#3{%
+ \expandafter\expandafter\expandafter\expandafter
+ \expandafter\expandafter\expandafter\bxus@proc@c
+ \expandafter\expandafter\expandafter#1%
+ \expandafter#2#3}%
+\def\bxus@proc@c#1#2#3#4#5#6#7#8{%
+ \expandafter\bxus@proc@d\csname bxus@*#1#2\expandafter\endcsname
+ \csname bxus@*#3#4\expandafter\endcsname
+ \csname bxus@*#5#6\expandafter\endcsname
+ \csname bxus@*#7#8\endcsname}%
+\def\bxus@proc@d#1#2{%
+ \expandafter\expandafter\expandafter\bxus@proc@e
+ \expandafter#1#2\@nil}%
+\def\bxus@proc@e#1\@nil#2#3{%
+ \bxus@proc@f#2#3#1\@nil}%
+\def\bxus@proc@f#1#2{%
+ \expandafter\expandafter\expandafter\bxus@proc@g
+ \expandafter#1#2\@nil}%
+\def\bxus@proc@g#1\@nil#2\@nil{%
+ \bxUHex{#2#1}}%
+%
+%% \bxus@prociv
+% The variant of \bxus@proc that is adapted to 4-octet sequences.
+\def\bxus@prociv#1#2#3#4{%
+ \expandafter\bxus@prociv@a\csname bxus@@\string#1\expandafter\endcsname
+ \csname bxus@@\string#2\expandafter\endcsname
+ \csname bxus@@\string#3\expandafter\endcsname
+ \csname bxus@@\string#4\endcsname}%
+\def\bxus@prociv@a#1#2#3#4{%
+ \expandafter\expandafter\expandafter\bxus@prociv@b
+ \expandafter#3#4@#1#2}%
+\def\bxus@prociv@b#1@#2#3{%
+ \expandafter\expandafter\expandafter\bxus@prociv@c
+ \expandafter#2#3#1@@}%
+\def\bxus@prociv@c#1#2#3#4{%
+ \expandafter\bxus@prociv@d\csname bxus@*#1#2\expandafter\endcsname
+ \csname bxus@*#3#4\endcsname}%
+\def\bxus@prociv@d#1#2{%
+ \expandafter\expandafter\expandafter\bxus@prociv@e
+ \expandafter#1#2}%
+\def\bxus@prociv@e#1#2#3@#4@{\bxus@prociv@f#3@#4#1#2@}%
+\def\bxus@prociv@f#1#2#3#4{%
+ \expandafter\bxus@prociv@g\csname bxus@*#1#2\expandafter\endcsname
+ \csname bxus@*#3#4\endcsname}%
+\def\bxus@prociv@g#1#2{%
+ \expandafter\expandafter\expandafter\bxus@prociv@h
+ \expandafter#1#2}%
+\def\bxus@prociv@h#1#2#3@#4@{\bxus@prociv@i#3@#4#1#2@}%
+\def\bxus@prociv@i#1#2#3#4{%
+ \expandafter\bxus@prociv@j\csname bxus@*#1#2\expandafter\endcsname
+ \csname bxus@*#3#4\endcsname}%
+\def\bxus@prociv@j#1#2{%
+ \expandafter\expandafter\expandafter\bxus@prociv@k
+ \expandafter#1#2}%
+\def\bxus@prociv@k#1#2@#3@{\bxUHex{#3#1#2}}%
+%
+%
+%% default (useless) Unicode driver
+% Note: this \bxUHex definition is used for check.
+\providecommand*\bxUHex{\bxUHexDummyBxutf}%
+\newcommand*\bxUHexDummyBxutf[1]{?\protect\bxus@err@nodrv}%
+%
+%--------------------------------------- all done
+\bxus@i@restore@codes
+\endinput
+%% EOF
diff --git a/language/japanese/BX/bxbase/bxutf8x.def b/language/japanese/BX/bxbase/bxutf8x.def
new file mode 100644
index 0000000000..972f392fd9
--- /dev/null
+++ b/language/japanese/BX/bxbase/bxutf8x.def
@@ -0,0 +1,96 @@
+%%
+%% This is file 'bxutf8x.def'.
+%%
+%
+%% file declaration
+\ProvidesFile{bxutf8x.def}[2017/05/29 v1.1 BX extended utf8x input]
+%
+% Note: All definitions in this file should be local.
+% This file should not spill any spaces or \par.
+%
+%% code guards
+\catcode32=10\relax
+\expandafter\edef\csname bxus@i@restore@codes\endcsname{%
+ \catcode34=\the\catcode34% <">
+ \catcode46=\the\catcode46% <.>
+ \catcode58=\the\catcode58% <:>
+ \catcode64=\the\catcode64% <@>
+\relax}%
+\catcode34=12 %
+\catcode46=12 %
+\catcode58=12 %
+\catcode64=11 %
+\g@addto@macro\bxus@i@restore@codes{%
+ \let\bxus@i@restore@codes\@undefined}%
+%
+%--------------------------------------- dynamic part
+%
+\def\bxus@i@error{\PackageError{inputenc}}%
+\ifx\@nodocument\relax
+ \ifx\bxus@bxutfx@loaded\@undefined
+ \bxus@i@error
+ {cannot load `bxutf8x' after \string\begin{document}}\@eha
+ \bxus@i@restore@codes\endinput\fi\fi
+%
+%% load 'utf8x' encoding
+\InputIfFileExists{utf8x.def}{}%
+ {\PackageError{inputenc}{input encoding `utf8x' unavailable}%
+ {You must install `unicode' package to use it.}%
+ \bxus@i@restore@codes\endinput}%
+%\@inpenc@test % This is done in utf8.def
+%
+% When this file is reloaded, the 'static' part will be skipped.
+\ifx\bxus@bxutfx@loaded\@undefined\else
+ \bxus@i@restore@codes \endinput \fi
+\let\bxus@bxutfx@loaded=t%
+%
+%--------------------------------------- Static part
+%
+%% error messages
+\def\bxus@err@nodrv{\bxus@i@error
+ {Unicode driver not found}\@ehb}%
+%
+%%%% \bxus@uc@char@notloaded
+% Hooked version of \uc@char@notloaded
+\def\bxus@uc@char@notloaded#1{%
+ \count@=#1\divide\count@256%
+ \edef\uc@temp@a{uni-\number\count@.def}%
+ \expandafter\ifx\csname\uc@temp@a\endcsname\relax\else
+ \uc@secondtry#1\relax\fi
+ \ifnum\uc@secondtry=#1\relax % all trial of utf8x failed
+ \bxUInt{#1}%
+ \else
+ \begingroup
+ \ifUnicodeOptionsavemem\else
+ \global\expandafter\let\csname\uc@temp@a\endcsname\@ne \fi
+ \def\uc@got{#1}\uni@resetcatcodes
+ \expandafter\InputIfFileExists\expandafter{\uc@temp@a}{%
+ \global\let\uni@dataloaded1}{}%
+ \endgroup
+ \uc@secondtry#1\relax\uni@char{#1}%
+ \fi}%
+\def\bxus@uc@notloaderr#1#2#3{%
+ \bxUInt{#1}}% \bxUInt should be robust
+%
+%% attach the hook
+% Note that ucs.sty could be loaded after utf8x.def.
+\AtBeginDocument{%
+ \let\uc@notloaderr\bxus@uc@notloaderr
+ \let\uc@char@notloaded\bxus@uc@char@notloaded}%
+%
+%% force ucs 'fasterrors' option switched on
+% Heavy 'uninames' decoding process is of no use in presence of the hook,
+% and it causes unexpected result in use of pTeX.
+\AtBeginDocument{%
+ \let\UnicodeOptionfasterrorsfalse\UnicodeOptionfasterrorstrue
+ \UnicodeOptionfasterrorstrue}%
+%
+%% default (useless) Unicode driver
+% Note: this \bxUHex definition is used for check.
+\providecommand*\bxUInt{\bxUIntDummyBxutfx}%
+\newcommand*\bxUIntDummyBxutfx[1]{?\protect\bxus@err@nodrv}%
+%
+%--------------------------------------- all done
+\bxus@i@restore@codes
+\endinput
+%% EOF
diff --git a/language/japanese/BX/bxbase/zxbase.sty b/language/japanese/BX/bxbase/zxbase.sty
new file mode 100644
index 0000000000..4d5b2baef3
--- /dev/null
+++ b/language/japanese/BX/bxbase/zxbase.sty
@@ -0,0 +1,149 @@
+%%
+%% This is file 'zxbase.sty'.
+%%
+%% Copyright (c) 2017 Takayuki YATO (aka. "ZR")
+%% GitHub: https://github.com/zr-tex8r
+%% Twitter: @zr_tex8r
+%%
+%% This package is distributed under the MIT License.
+%%
+
+%% package declaration
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{zxbase}[2017/05/29 v1.1]
+\RequirePackage{ifxetex}
+\RequireXeTeX
+
+%% preparations
+\RequirePackage{bxbase}
+\def\zx@pkgname{zxbase}
+
+%--------------------------------------- generic family detection
+
+%%<+> \zxSpecFamily / \zxRMFamily / \zxSFFamily / \zxTTFamily
+% The constants signifying each generic family.
+% These values can be considered as fixed, so you can say i.e.
+% "\ifnum\zxGFFlag<\zxSFFamily <non-sans> \else <sans> \fi"
+\chardef\zxSpecFamily=0
+\chardef\zxRMFamily=1
+\chardef\zxSFFamily=2
+\chardef\zxTTFamily=3
+
+%% \zx@set@genfamflag
+% A patch to be inserted to \selectfont. This makes \selectfont
+% set a right \zx..Family constant to \zxGFFlag.
+\def\zx@set@genfamflag{%
+ \zx@set@gff@get\zx@curfam\f@family
+ \let\zxGFFlag\zxSpecFamily
+ \zx@set@gff@match\ttdefault\zxTTFamily
+ \zx@set@gff@match\sfdefault\zxSFFamily
+ \zx@set@gff@match\rmdefault\zxRMFamily}
+\def\zx@set@gff@get#1#2{%
+ \expandafter\let\expandafter#1\csname
+ zf@family@fontname#2\endcsname
+ \ifx#1\relax \edef#1{#2}\fi}
+\def\zx@set@gff@match#1#2{%
+ \zx@set@gff@get\zx@genfam#1%
+ \ifx\zx@genfam\zx@curfam \let\zxGFFlag#2\fi}
+
+%%<+> \zxBDHookGenFamFlag
+\def\zxBDHookGenFamFlag{\zx@bdhook@genfamflag@do}
+\@onlypreamble\zx@bdhook@genfamflag@do
+\def\zx@bdhook@genfamflag@do{%
+ \expandafter\zx@bdhook@genfamflag@a\csname selectfont \endcsname
+ \let\zx@bdhook@genfamflag@do\relax}
+\@onlypreamble\zx@bdhook@genfamflag@a
+\def\zx@bdhook@genfamflag@a#1{%
+ \expandafter\def\expandafter#1\expandafter{%
+ \expandafter\zx@set@genfamflag#1}}
+
+%--------------------------------------- forge pTeX primitives
+% It is not totally safe, but is required so as to make
+% the 'ajmacros' package work.
+
+%%<+> \zxBDHookForgepTeXDir
+\def\zxBDHookForgepTeXDir{\zx@bdhook@forgeptexdir@do}
+\@onlypreamble\zx@bdhook@forgeptexdir@do
+\def\zx@bdhook@forgeptexdir@do{%
+ \zx@letconstif{ydir}{true}\zx@letconstif{tdir}{false}%
+ \ifx\yoko\@undefined \let\yoko\relax \fi
+ \ifx\tate\@undefined \let\tate\relax \fi
+}
+\def\zx@letconstif#1#2{%
+ \ifcsname if#1\endcsname\else
+ \expandafter\let\csname if#1\expandafter\endcsname
+ \csname if#2\endcsname \fi}
+
+%--------------------------------------- load pLaTeX packages
+
+%%<+> switch 'zxPPInUTFEight'
+\newif\ifzxPPInUTFEight
+
+%% variables
+\newif\ifzx@jisenc
+
+%% errors
+\def\zx@err@ukenc#1{\PackageError\zx@pkgname
+ {File '#1' is in unknown encoding}%
+ {The file must be encoded in ISO-2022-JP or UTF-8.}}
+
+%%<+> \zxRequirepLaTeXPackage{<package>}
+\@onlypreamble\zxRequirepLaTeXPackage
+\def\zxRequirepLaTeXPackage#1{%
+ \ifzxPPInUTFEight \zx@jisencfalse
+ \else \zx@checkjisorutfeight{#1.\@pkgextension}%
+ \ifcase\zx@joru \zx@err@ukenc{#1.\@pkgextension}\or
+ \zx@jisenctrue \else \zx@jisencfalse \fi
+ \fi
+ \let\NeedsTeXFormat\zx@mute@NeedsTeXFormat
+ \ifzx@jisenc \XeTeXdefaultencoding ISO-2022-JP\relax \fi
+ \RequirePackage{#1}\relax
+ \ifzx@jisenc \XeTeXdefaultencoding auto\relax \fi
+ \let\NeedsTeXFormat\zx@org@NeedsTeXFormat
+}
+
+%% \zx@mute@NeedsTeXFormat
+\def\zx@mute@NeedsTeXFormat#1{\@ifnextchar[{\zx@mute@ntf@a}{\relax}}
+\def\zx@mute@ntf@a[#1]{\relax}
+\let\zx@org@NeedsTeXFormat\NeedsTeXFormat
+
+%% \zx@checkjisorutfeight{<file>}
+% Decides whether <file> is encoded in JIS or UTF-8 and sets to \zx@joru.
+% 0:binary; 1:JIS; 2:UTF-8; 3:US-ASCII
+\def\zx@checkjisorutfeight#1{%
+ \begingroup
+ \XeTeXdefaultencoding bytes\relax
+ \let\zx@c@ctl=f\def\zx@found@ctl{\let\zx@c@ctl=t}%
+ \let\zx@c@esc=f\def\zx@found@esc{\let\zx@c@esc=t}%
+ \let\zx@c@high=f\def\zx@found@high{\let\zx@c@high=t}%
+ \zx@make@activelet{0}{32}\zx@found@ctl
+ \zx@make@ignorable{32}{127}%
+ \zx@make@activelet{127}{128}\zx@found@ctl
+ \zx@make@activelet{128}{256}\zx@found@high
+ \zx@make@activelet{27}{28}\zx@found@esc
+ \catcode13=5 \catcode32=10 \catcode9=10 \catcode`\~=9
+ \@@input"#1"\relax
+ \if t\zx@c@ctl \global\chardef\zx@g@joru0
+ \else\if t\zx@c@esc \global\chardef\zx@g@joru1
+ \else\if t\zx@c@high \global\chardef\zx@g@joru2
+ \else \global\chardef\zx@g@joru3 \fi\fi\fi
+ \XeTeXdefaultencoding auto\relax
+ \endgroup
+ \let\zx@joru\zx@g@joru}
+\def\zx@make@activelet#1#2#3{%
+ \catcode`\~=\active \let\zx@tmpx=#3\relax
+ \@tempcnta#1\relax\loop
+ \catcode\@tempcnta\active \lccode`\~=\@tempcnta
+ \lowercase{\let~\zx@tmpx}%
+ \advance\@tempcnta\@ne \ifnum\@tempcnta<#2 \repeat}
+\def\zx@make@ignorable#1#2{%
+ \@tempcnta#1\relax\loop \catcode\@tempcnta9
+ \advance\@tempcnta\@ne \ifnum\@tempcnta<#2 \repeat}
+
+%%<*> \platexpackagesinunicode
+\@onlypreamble\platexpackagesinunicode
+\newcommand*\platexpackagesinunicode{\zxPPInUTFEighttrue}
+
+%--------------------------------------- all done
+\endinput
+%% EOF
diff --git a/language/japanese/BX/bxjaholiday/LICENSE b/language/japanese/BX/bxjaholiday/LICENSE
new file mode 100644
index 0000000000..488617373d
--- /dev/null
+++ b/language/japanese/BX/bxjaholiday/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright 2018 Takuto ASAKURA (wtsnjp)
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/language/japanese/BX/bxjaholiday/README.md b/language/japanese/BX/bxjaholiday/README.md
new file mode 100644
index 0000000000..86ee29a75e
--- /dev/null
+++ b/language/japanese/BX/bxjaholiday/README.md
@@ -0,0 +1,62 @@
+# BXjaholiday Package
+
+LaTeX: Support for Japanese holidays
+
+## System requirements
+
+* TeX format: LaTeX
+* TeX engine: pdfTeX, XeTeX, LuaTeX, pTeX, and upTeX (The e-TeX extension is **required**)
+
+## Usage
+
+This package provides following LaTeX2e commands:
+
+```tex
+\jaholidayname{<year>}{<month>}{<day>}
+\jadayofweek{<year>}{<month>}{<day>}
+\IfJaHoliday(TF){<year>}{<month>}{<day>}{<true code>}{<false code>}
+```
+
+Further functions are provided for expl3. See the manual (`bxjaholiday.pdf`) for the details.
+
+## Building
+
+You can easily build this package with [l3build](https://github.com/latex3/l3build).
+
+* Installing the package to TEXMFHOME
+
+```
+$ ./build.lua install --full
+```
+
+* Typesetting documentation
+
+```
+$ ./build.lua doc
+```
+
+* Running tests
+
+```
+$ ./build.lua check
+```
+
+## License
+
+This package is distributed under [the MIT license](./LICENSE).
+
+## Revision History
+
+* Version 1.0.0 ‹2019/02/03›
+ * Add documentation
+ * Rename `\g_bxjh_sport_tl` -> `\g_bxjh_sports_tl`
+* Version 0.2.0 ‹2019/01/27›
+ * Support special holidays in 2019
+ * Add new expl3 interface `\bxjh_apply_(next|prev)_day:Nnnn`
+ * Fix a potential bug
+* Version 0.1.0 ‹2018/12/03›
+ * The first public version
+
+---
+
+Takuto ASAKURA ([wtsnjp](https://twitter.com/wtsnjp))
diff --git a/language/japanese/BX/bxjaholiday/bxjaholiday.pdf b/language/japanese/BX/bxjaholiday/bxjaholiday.pdf
new file mode 100644
index 0000000000..a67a5cdb65
--- /dev/null
+++ b/language/japanese/BX/bxjaholiday/bxjaholiday.pdf
Binary files differ
diff --git a/language/japanese/BX/bxjaholiday/bxjaholiday.sty b/language/japanese/BX/bxjaholiday/bxjaholiday.sty
new file mode 100644
index 0000000000..ce47457367
--- /dev/null
+++ b/language/japanese/BX/bxjaholiday/bxjaholiday.sty
@@ -0,0 +1,926 @@
+%%
+%% This is file 'bxjaholiday.sty'.
+%%
+%% Copyright 2018 Takuto ASAKURA (wtsnjp)
+%% GitHub: https://github.com/wtsnjp
+%% Twitter: @wtsnjp
+%%
+%% This package is distributed under the MIT License.
+%%
+
+% Note: This file is encoded entirely in us-ascii.
+
+% -------------------------------------------------- declarations
+
+\RequirePackage{expl3}
+\ProvidesExplPackage {bxjaholiday} {2019/02/03} {1.0.0}
+ {Support for Japanese holidays}
+
+% -------------------------------------------------- utilities
+
+% LaTeX2e stuff
+%% \__bxjh_only_preamble:N \CS
+\cs_new_eq:Nc \__bxjh_only_preamble:N { @onlypreamble }
+
+% short hands
+%% \__bxjh_int_compare_and:nn(TF) { <intexpr1> } { <intexpr2> }
+%% ( { <true code> } ) ( { <false code> } )
+\prg_new_conditional:Npnn \__bxjh_int_compare_and:nn #1#2 { T, TF }
+ {
+ \bool_lazy_and:nnTF
+ { \int_compare_p:n { #1 } }
+ { \int_compare_p:n { #2 } }
+ { \prg_return_true: } { \prg_return_false: }
+ }
+
+%% \__bxjh_date_compare(_p):nn(TF)
+%% { <year1> } { <month1> } { <day1> } <rel> { <year2> } { <month2> } { <day2> }
+%% ( { <true code> } ) ( { <false code> } )
+\prg_new_conditional:Npnn \__bxjh_date_compare:nnnNnnn #1#2#3#4#5#6#7 { p, T, TF }
+ {
+ \int_compare:nNnTF
+ { ( #1 ) * 10000 + ( #2 ) * 100 + ( #3 ) }
+ #4 % relation
+ { ( #5 ) * 10000 + ( #6 ) * 100 + ( #7 ) }
+ { \prg_return_true: } { \prg_return_false: }
+ }
+
+% -------------------------------------------------- messages
+
+\msg_new:nnn { bxjaholiday } { unknown-engine }
+ {
+ Unknown~TeX~engine; \\
+ loading~bxjaholiday~will~abort!
+ }
+
+% -------------------------------------------------- constants
+
+\int_const:Nn \c_bxjh_monday_int { 0 }
+\int_const:Nn \c_bxjh_tuesday_int { 1 }
+\int_const:Nn \c_bxjh_wednesday_int { 2 }
+\int_const:Nn \c_bxjh_thursday_int { 3 }
+\int_const:Nn \c_bxjh_friday_int { 4 }
+\int_const:Nn \c_bxjh_saturday_int { 5 }
+\int_const:Nn \c_bxjh_sunday_int { 6 }
+
+% -------------------------------------------------- Japanese string maker
+
+%% \__bxjh_next:n { <char> }
+\cs_new:Npn \__bxjh_next:n #1 {}
+
+%% \__bxjh_add_jchar:Nnnn <tl-var> { <hex-dump-of-utf8-bytes> }
+%% { <hex-dump-of-unicode-point> } { <hex-dump-of-JIS-bytes> }
+\__bxjh_only_preamble:N \__bxjh_add_jchar:Nnnn
+\__bxjh_only_preamble:N \__bxjh_add_jchar_dec:nnn
+\__bxjh_only_preamble:N \__bxjh_add_jchar_dec_helper:n
+
+\cs_new:Npn \__bxjh_add_jchar:Nnnn #1#2#3#4
+ {
+ \group_begin:
+ \cs_set:Npn \__bxjh_next:n ##1
+ {
+ \tl_gset:Nx #1 { \exp_not:o { #1 } ##1 }
+ }
+ \__bxjh_add_jchar_dec:nnn { #2 } { #3 } { #4 }
+ \group_end:
+ }
+
+% engine-dependent parts
+\str_case_e:nnF { \c_sys_engine_str }
+ {
+ { pdftex }
+ {
+ \cs_new:Npn \__bxjh_add_jchar_dec:nnn #1#2#3
+ {
+ \__bxjh_add_jchar_dec_helper:n { #1 }
+ }
+ \cs_new:Npn \__bxjh_add_jchar_dec_helper:n #1
+ {
+ % #1 should have three tl items
+ \tl_map_inline:nn { #1 }
+ {
+ \tl_set_rescan:Nnx \l_tmpa_tl
+ { \char_set_catcode_active:n { "##1 } }
+ { \char_generate:nn { "##1 } { 12 } }
+ \__bxjh_next:n { \exp_not:o { \l_tmpa_tl } }
+ }
+ }
+ }
+
+ { ptex }
+ {
+ \cs_new:Npn \__bxjh_add_jchar_dec:nnn #1#2#3
+ {
+ \ptex_kansujichar:D \c_one_int = \ptex_jis:D "#3 \scan_stop:
+ \__bxjh_next:n { \ptex_kansuji:D \c_one_int }
+ }
+ }
+
+ { uptex }
+ {
+ \cs_new:Npn \__bxjh_add_jchar_dec:nnn #1#2#3
+ {
+ \ptex_kansujichar:D \c_one_int = \ptex_jis:D "#3 \scan_stop:
+ \__bxjh_next:n { \ptex_kansuji:D \c_one_int }
+ }
+ }
+
+ { xetex }
+ {
+ \cs_new:Npn \__bxjh_add_jchar_dec:nnn #1#2#3
+ {
+ \__bxjh_next:n { \char_generate:nn { "#2 } { 11 } }
+ }
+ }
+
+ { luatex }
+ {
+ \cs_new:Npn \__bxjh_add_jchar_dec:nnn #1#2#3
+ {
+ \__bxjh_next:n { \char_generate:nn { "#2 } { 11 } }
+ }
+ }
+ }
+ {
+ % engines which expl3 does not support
+ \msg_warning:nn { bxjaholiday } { unknown-engine }
+ \file_input_stop:
+ }
+
+% -------------------------------------------------- Japanese words
+
+% youbi
+\tl_new:N \g_bxjh_getsu_tl
+\__bxjh_add_jchar:Nnnn \g_bxjh_getsu_tl { {E6}{9C}{88} } { 6708 } { 376E }
+
+\tl_new:N \g_bxjh_ka_tl
+\__bxjh_add_jchar:Nnnn \g_bxjh_ka_tl { {E7}{81}{AB} } { 706B } { 3250 }
+
+\tl_new:N \g_bxjh_sui_tl
+\__bxjh_add_jchar:Nnnn \g_bxjh_sui_tl { {E6}{B0}{B4} } { 6C34 } { 3F65 }
+
+\tl_new:N \g_bxjh_moku_tl
+\__bxjh_add_jchar:Nnnn \g_bxjh_moku_tl { {E6}{9C}{A8} } { 6728 } { 4C5A }
+
+\tl_new:N \g_bxjh_kin_tl
+\__bxjh_add_jchar:Nnnn \g_bxjh_kin_tl { {E9}{87}{91} } { 91D1 } { 3662 }
+
+\tl_new:N \g_bxjh_do_tl
+\__bxjh_add_jchar:Nnnn \g_bxjh_do_tl { {E5}{9C}{9F} } { 571F } { 455A }
+
+\tl_new:N \g_bxjh_nichi_tl
+\__bxjh_add_jchar:Nnnn \g_bxjh_nichi_tl { {E6}{97}{A5} } { 65E5 } { 467C }
+
+% common holidays
+\tl_new:N \g_bxjh_ganjitsu_tl
+\__bxjh_add_jchar:Nnnn \g_bxjh_ganjitsu_tl { {E5}{85}{83} } { 5143 } { 3835 }
+\__bxjh_add_jchar:Nnnn \g_bxjh_ganjitsu_tl { {E6}{97}{A5} } { 65E5 } { 467C }
+
+\tl_new:N \g_bxjh_seijin_tl
+\__bxjh_add_jchar:Nnnn \g_bxjh_seijin_tl { {E6}{88}{90} } { 6210 } { 402E }
+\__bxjh_add_jchar:Nnnn \g_bxjh_seijin_tl { {E4}{BA}{BA} } { 4EBA } { 3F4D }
+\__bxjh_add_jchar:Nnnn \g_bxjh_seijin_tl { {E3}{81}{AE} } { 306E } { 244E }
+\__bxjh_add_jchar:Nnnn \g_bxjh_seijin_tl { {E6}{97}{A5} } { 65E5 } { 467C }
+
+\tl_new:N \g_bxjh_kenkoku_tl
+\__bxjh_add_jchar:Nnnn \g_bxjh_kenkoku_tl { {E5}{BB}{BA} } { 5EFA } { 377A }
+\__bxjh_add_jchar:Nnnn \g_bxjh_kenkoku_tl { {E5}{9B}{BD} } { 56FD } { 3971 }
+\__bxjh_add_jchar:Nnnn \g_bxjh_kenkoku_tl { {E8}{A8}{98} } { 8A18 } { 352D }
+\__bxjh_add_jchar:Nnnn \g_bxjh_kenkoku_tl { {E5}{BF}{B5} } { 5FF5 } { 4730 }
+\__bxjh_add_jchar:Nnnn \g_bxjh_kenkoku_tl { {E3}{81}{AE} } { 306E } { 244E }
+\__bxjh_add_jchar:Nnnn \g_bxjh_kenkoku_tl { {E6}{97}{A5} } { 65E5 } { 467C }
+
+\tl_new:N \g_bxjh_tennou_tl
+\__bxjh_add_jchar:Nnnn \g_bxjh_tennou_tl { {E5}{A4}{A9} } { 5929 } { 4537 }
+\__bxjh_add_jchar:Nnnn \g_bxjh_tennou_tl { {E7}{9A}{87} } { 7687 } { 3944 }
+\__bxjh_add_jchar:Nnnn \g_bxjh_tennou_tl { {E8}{AA}{95} } { 8A95 } { 4342 }
+\__bxjh_add_jchar:Nnnn \g_bxjh_tennou_tl { {E7}{94}{9F} } { 751F } { 4038 }
+\__bxjh_add_jchar:Nnnn \g_bxjh_tennou_tl { {E6}{97}{A5} } { 65E5 } { 467C }
+
+\tl_new:N \g_bxjh_shunbun_tl
+\__bxjh_add_jchar:Nnnn \g_bxjh_shunbun_tl { {E6}{98}{A5} } { 6625 } { 3D55 }
+\__bxjh_add_jchar:Nnnn \g_bxjh_shunbun_tl { {E5}{88}{86} } { 5206 } { 4A2C }
+\__bxjh_add_jchar:Nnnn \g_bxjh_shunbun_tl { {E3}{81}{AE} } { 306E } { 244E }
+\__bxjh_add_jchar:Nnnn \g_bxjh_shunbun_tl { {E6}{97}{A5} } { 65E5 } { 467C }
+
+\tl_new:N \g_bxjh_showa_tl
+\__bxjh_add_jchar:Nnnn \g_bxjh_showa_tl { {E6}{98}{AD} } { 662D } { 3E3C }
+\__bxjh_add_jchar:Nnnn \g_bxjh_showa_tl { {E5}{92}{8C} } { 548C } { 4F42 }
+\__bxjh_add_jchar:Nnnn \g_bxjh_showa_tl { {E3}{81}{AE} } { 306E } { 244E }
+\__bxjh_add_jchar:Nnnn \g_bxjh_showa_tl { {E6}{97}{A5} } { 65E5 } { 467C }
+
+\tl_new:N \g_bxjh_midori_tl
+\__bxjh_add_jchar:Nnnn \g_bxjh_midori_tl { {E3}{81}{BF} } { 307F } { 245F }
+\__bxjh_add_jchar:Nnnn \g_bxjh_midori_tl { {E3}{81}{A9} } { 3069 } { 2449 }
+\__bxjh_add_jchar:Nnnn \g_bxjh_midori_tl { {E3}{82}{8A} } { 308A } { 246A }
+\__bxjh_add_jchar:Nnnn \g_bxjh_midori_tl { {E3}{81}{AE} } { 306E } { 244E }
+\__bxjh_add_jchar:Nnnn \g_bxjh_midori_tl { {E6}{97}{A5} } { 65E5 } { 467C }
+
+\tl_new:N \g_bxjh_kenpou_tl
+\__bxjh_add_jchar:Nnnn \g_bxjh_kenpou_tl { {E6}{86}{B2} } { 61B2 } { 377B }
+\__bxjh_add_jchar:Nnnn \g_bxjh_kenpou_tl { {E6}{B3}{95} } { 6CD5 } { 4B21 }
+\__bxjh_add_jchar:Nnnn \g_bxjh_kenpou_tl { {E8}{A8}{98} } { 8A18 } { 352D }
+\__bxjh_add_jchar:Nnnn \g_bxjh_kenpou_tl { {E5}{BF}{B5} } { 5FF5 } { 4730 }
+\__bxjh_add_jchar:Nnnn \g_bxjh_kenpou_tl { {E6}{97}{A5} } { 65E5 } { 467C }
+
+\tl_new:N \g_bxjh_kokumin_tl
+\__bxjh_add_jchar:Nnnn \g_bxjh_kokumin_tl { {E5}{9B}{BD} } { 56FD } { 3971 }
+\__bxjh_add_jchar:Nnnn \g_bxjh_kokumin_tl { {E6}{B0}{91} } { 6C11 } { 4C31 }
+\__bxjh_add_jchar:Nnnn \g_bxjh_kokumin_tl { {E3}{81}{AE} } { 306E } { 244E }
+\__bxjh_add_jchar:Nnnn \g_bxjh_kokumin_tl { {E4}{BC}{91} } { 4F11 } { 3559 }
+\__bxjh_add_jchar:Nnnn \g_bxjh_kokumin_tl { {E6}{97}{A5} } { 65E5 } { 467C }
+
+\tl_new:N \g_bxjh_kodomo_tl
+\__bxjh_add_jchar:Nnnn \g_bxjh_kodomo_tl { {E3}{81}{93} } { 3053 } { 2433 }
+\__bxjh_add_jchar:Nnnn \g_bxjh_kodomo_tl { {E3}{81}{A9} } { 3069 } { 2449 }
+\__bxjh_add_jchar:Nnnn \g_bxjh_kodomo_tl { {E3}{82}{82} } { 3082 } { 2462 }
+\__bxjh_add_jchar:Nnnn \g_bxjh_kodomo_tl { {E3}{81}{AE} } { 306E } { 244E }
+\__bxjh_add_jchar:Nnnn \g_bxjh_kodomo_tl { {E6}{97}{A5} } { 65E5 } { 467C }
+
+\tl_new:N \g_bxjh_furikae_tl
+\__bxjh_add_jchar:Nnnn \g_bxjh_furikae_tl { {E6}{8C}{AF} } { 632F } { 3F36 }
+\__bxjh_add_jchar:Nnnn \g_bxjh_furikae_tl { {E6}{9B}{BF} } { 66FF } { 4258 }
+\__bxjh_add_jchar:Nnnn \g_bxjh_furikae_tl { {E4}{BC}{91} } { 4F11 } { 3559 }
+\__bxjh_add_jchar:Nnnn \g_bxjh_furikae_tl { {E6}{97}{A5} } { 65E5 } { 467C }
+
+\tl_new:N \g_bxjh_umi_tl
+\__bxjh_add_jchar:Nnnn \g_bxjh_umi_tl { {E6}{B5}{B7} } { 6D77 } { 3324 }
+\__bxjh_add_jchar:Nnnn \g_bxjh_umi_tl { {E3}{81}{AE} } { 306E } { 244E }
+\__bxjh_add_jchar:Nnnn \g_bxjh_umi_tl { {E6}{97}{A5} } { 65E5 } { 467C }
+
+\tl_new:N \g_bxjh_yama_tl
+\__bxjh_add_jchar:Nnnn \g_bxjh_yama_tl { {E5}{B1}{B1} } { 5C71 } { 3B33 }
+\__bxjh_add_jchar:Nnnn \g_bxjh_yama_tl { {E3}{81}{AE} } { 306E } { 244E }
+\__bxjh_add_jchar:Nnnn \g_bxjh_yama_tl { {E6}{97}{A5} } { 65E5 } { 467C }
+
+\tl_new:N \g_bxjh_shubun_tl
+\__bxjh_add_jchar:Nnnn \g_bxjh_shubun_tl { {E7}{A7}{8B} } { 79CB } { 3D29 }
+\__bxjh_add_jchar:Nnnn \g_bxjh_shubun_tl { {E5}{88}{86} } { 5206 } { 4A2C }
+\__bxjh_add_jchar:Nnnn \g_bxjh_shubun_tl { {E3}{81}{AE} } { 306E } { 244E }
+\__bxjh_add_jchar:Nnnn \g_bxjh_shubun_tl { {E6}{97}{A5} } { 65E5 } { 467C }
+
+\tl_new:N \g_bxjh_keirou_tl
+\__bxjh_add_jchar:Nnnn \g_bxjh_keirou_tl { {E6}{95}{AC} } { 656C } { 3749 }
+\__bxjh_add_jchar:Nnnn \g_bxjh_keirou_tl { {E8}{80}{81} } { 8001 } { 4F37 }
+\__bxjh_add_jchar:Nnnn \g_bxjh_keirou_tl { {E3}{81}{AE} } { 306E } { 244E }
+\__bxjh_add_jchar:Nnnn \g_bxjh_keirou_tl { {E6}{97}{A5} } { 65E5 } { 467C }
+
+\tl_new:N \g_bxjh_sports_tl
+\__bxjh_add_jchar:Nnnn \g_bxjh_sports_tl { {E3}{82}{B9} } { 30B9 } { 2539 }
+\__bxjh_add_jchar:Nnnn \g_bxjh_sports_tl { {E3}{83}{9D} } { 30DD } { 255D }
+\__bxjh_add_jchar:Nnnn \g_bxjh_sports_tl { {E3}{83}{BC} } { 30FC } { 213C }
+\__bxjh_add_jchar:Nnnn \g_bxjh_sports_tl { {E3}{83}{84} } { 30C4 } { 2544 }
+\__bxjh_add_jchar:Nnnn \g_bxjh_sports_tl { {E3}{81}{AE} } { 306E } { 244E }
+\__bxjh_add_jchar:Nnnn \g_bxjh_sports_tl { {E6}{97}{A5} } { 65E5 } { 467C }
+
+\tl_new:N \g_bxjh_taiiku_tl
+\__bxjh_add_jchar:Nnnn \g_bxjh_taiiku_tl { {E4}{BD}{93} } { 4F53 } { 424E }
+\__bxjh_add_jchar:Nnnn \g_bxjh_taiiku_tl { {E8}{82}{B2} } { 80B2 } { 3069 }
+\__bxjh_add_jchar:Nnnn \g_bxjh_taiiku_tl { {E3}{81}{AE} } { 306E } { 244E }
+\__bxjh_add_jchar:Nnnn \g_bxjh_taiiku_tl { {E6}{97}{A5} } { 65E5 } { 467C }
+
+\tl_new:N \g_bxjh_bunka_tl
+\__bxjh_add_jchar:Nnnn \g_bxjh_bunka_tl { {E6}{96}{87} } { 6587 } { 4A38 }
+\__bxjh_add_jchar:Nnnn \g_bxjh_bunka_tl { {E5}{8C}{96} } { 5316 } { 323D }
+\__bxjh_add_jchar:Nnnn \g_bxjh_bunka_tl { {E3}{81}{AE} } { 306E } { 244E }
+\__bxjh_add_jchar:Nnnn \g_bxjh_bunka_tl { {E6}{97}{A5} } { 65E5 } { 467C }
+
+\tl_new:N \g_bxjh_kinrou_tl
+\__bxjh_add_jchar:Nnnn \g_bxjh_kinrou_tl { {E5}{8B}{A4} } { 52E4 } { 3650 }
+\__bxjh_add_jchar:Nnnn \g_bxjh_kinrou_tl { {E5}{8A}{B4} } { 52B4 } { 4F2B }
+\__bxjh_add_jchar:Nnnn \g_bxjh_kinrou_tl { {E6}{84}{9F} } { 611F } { 3436 }
+\__bxjh_add_jchar:Nnnn \g_bxjh_kinrou_tl { {E8}{AC}{9D} } { 8B1D } { 3C55 }
+\__bxjh_add_jchar:Nnnn \g_bxjh_kinrou_tl { {E3}{81}{AE} } { 306E } { 244E }
+\__bxjh_add_jchar:Nnnn \g_bxjh_kinrou_tl { {E6}{97}{A5} } { 65E5 } { 467C }
+
+% special holidays (mainly Emperor related)
+\tl_new:N \g_bxjh_showa_taisou_tl
+\__bxjh_add_jchar:Nnnn \g_bxjh_showa_taisou_tl { {E6}{98}{AD} } { 662D } { 3E3C }
+\__bxjh_add_jchar:Nnnn \g_bxjh_showa_taisou_tl { {E5}{92}{8C} } { 548C } { 4F42 }
+\__bxjh_add_jchar:Nnnn \g_bxjh_showa_taisou_tl { {E5}{A4}{A9} } { 5929 } { 4537 }
+\__bxjh_add_jchar:Nnnn \g_bxjh_showa_taisou_tl { {E7}{9A}{87} } { 7687 } { 3944 }
+\__bxjh_add_jchar:Nnnn \g_bxjh_showa_taisou_tl { {E3}{81}{AE} } { 306E } { 244E }
+\__bxjh_add_jchar:Nnnn \g_bxjh_showa_taisou_tl { {E5}{A4}{A7} } { 5927 } { 4267 }
+\__bxjh_add_jchar:Nnnn \g_bxjh_showa_taisou_tl { {E5}{96}{AA} } { 55AA } { 4153 }
+\__bxjh_add_jchar:Nnnn \g_bxjh_showa_taisou_tl { {E3}{81}{AE} } { 306E } { 244E }
+\__bxjh_add_jchar:Nnnn \g_bxjh_showa_taisou_tl { {E7}{A4}{BC} } { 793C } { 4E69 }
+
+\tl_new:N \g_bxjh_akihito_kekkon_tl
+\__bxjh_add_jchar:Nnnn \g_bxjh_akihito_kekkon_tl { {E7}{9A}{87} } { 7687 } { 3944 }
+\__bxjh_add_jchar:Nnnn \g_bxjh_akihito_kekkon_tl { {E5}{A4}{AA} } { 592A } { 4240 }
+\__bxjh_add_jchar:Nnnn \g_bxjh_akihito_kekkon_tl { {E5}{AD}{90} } { 5B50 } { 3B52 }
+\__bxjh_add_jchar:Nnnn \g_bxjh_akihito_kekkon_tl { {E6}{98}{8E} } { 660E } { 4C40 }
+\__bxjh_add_jchar:Nnnn \g_bxjh_akihito_kekkon_tl { {E4}{BB}{81} } { 4EC1 } { 3F4E }
+\__bxjh_add_jchar:Nnnn \g_bxjh_akihito_kekkon_tl { {E8}{A6}{AA} } { 89AA } { 3F46 }
+\__bxjh_add_jchar:Nnnn \g_bxjh_akihito_kekkon_tl { {E7}{8E}{8B} } { 738B } { 3226 }
+\__bxjh_add_jchar:Nnnn \g_bxjh_akihito_kekkon_tl { {E3}{81}{AE} } { 306E } { 244E }
+\__bxjh_add_jchar:Nnnn \g_bxjh_akihito_kekkon_tl { {E7}{B5}{90} } { 7D50 } { 376B }
+\__bxjh_add_jchar:Nnnn \g_bxjh_akihito_kekkon_tl { {E5}{A9}{9A} } { 5A5A } { 3A27 }
+\__bxjh_add_jchar:Nnnn \g_bxjh_akihito_kekkon_tl { {E3}{81}{AE} } { 306E } { 244E }
+\__bxjh_add_jchar:Nnnn \g_bxjh_akihito_kekkon_tl { {E5}{84}{80} } { 5100 } { 3537 }
+
+\tl_new:N \g_bxjh_naruhito_kekkon_tl
+\__bxjh_add_jchar:Nnnn \g_bxjh_naruhito_kekkon_tl { {E7}{9A}{87} } { 7687 } { 3944 }
+\__bxjh_add_jchar:Nnnn \g_bxjh_naruhito_kekkon_tl { {E5}{A4}{AA} } { 592A } { 4240 }
+\__bxjh_add_jchar:Nnnn \g_bxjh_naruhito_kekkon_tl { {E5}{AD}{90} } { 5B50 } { 3B52 }
+\__bxjh_add_jchar:Nnnn \g_bxjh_naruhito_kekkon_tl { {E5}{BE}{B3} } { 5FB3 } { 4641 }
+\__bxjh_add_jchar:Nnnn \g_bxjh_naruhito_kekkon_tl { {E4}{BB}{81} } { 4EC1 } { 3F4E }
+\__bxjh_add_jchar:Nnnn \g_bxjh_naruhito_kekkon_tl { {E8}{A6}{AA} } { 89AA } { 3F46 }
+\__bxjh_add_jchar:Nnnn \g_bxjh_naruhito_kekkon_tl { {E7}{8E}{8B} } { 738B } { 3226 }
+\__bxjh_add_jchar:Nnnn \g_bxjh_naruhito_kekkon_tl { {E3}{81}{AE} } { 306E } { 244E }
+\__bxjh_add_jchar:Nnnn \g_bxjh_naruhito_kekkon_tl { {E7}{B5}{90} } { 7D50 } { 376B }
+\__bxjh_add_jchar:Nnnn \g_bxjh_naruhito_kekkon_tl { {E5}{A9}{9A} } { 5A5A } { 3A27 }
+\__bxjh_add_jchar:Nnnn \g_bxjh_naruhito_kekkon_tl { {E3}{81}{AE} } { 306E } { 244E }
+\__bxjh_add_jchar:Nnnn \g_bxjh_naruhito_kekkon_tl { {E5}{84}{80} } { 5100 } { 3537 }
+
+\tl_new:N \g_bxjh_sokuirei_tl
+\__bxjh_add_jchar:Nnnn \g_bxjh_sokuirei_tl { {E5}{8D}{B3} } { 5373 } { 4228 }
+\__bxjh_add_jchar:Nnnn \g_bxjh_sokuirei_tl { {E4}{BD}{8D} } { 4F4D } { 304C }
+\__bxjh_add_jchar:Nnnn \g_bxjh_sokuirei_tl { {E7}{A4}{BC} } { 793C } { 4E69 }
+\__bxjh_add_jchar:Nnnn \g_bxjh_sokuirei_tl { {E6}{AD}{A3} } { 6B63 } { 4035 }
+\__bxjh_add_jchar:Nnnn \g_bxjh_sokuirei_tl { {E6}{AE}{BF} } { 6BBF } { 4542 }
+\__bxjh_add_jchar:Nnnn \g_bxjh_sokuirei_tl { {E3}{81}{AE} } { 306E } { 244E }
+\__bxjh_add_jchar:Nnnn \g_bxjh_sokuirei_tl { {E5}{84}{80} } { 5100 } { 3537 }
+
+\tl_new:N \g_bxjh_sokui_tl
+\__bxjh_add_jchar:Nnnn \g_bxjh_sokui_tl { {E5}{8D}{B3} } { 5373 } { 4228 }
+\__bxjh_add_jchar:Nnnn \g_bxjh_sokui_tl { {E4}{BD}{8D} } { 4F4D } { 304C }
+\__bxjh_add_jchar:Nnnn \g_bxjh_sokui_tl { {E3}{81}{AE} } { 306E } { 244E }
+\__bxjh_add_jchar:Nnnn \g_bxjh_sokui_tl { {E6}{97}{A5} } { 65E5 } { 467C }
+
+% -------------------------------------------------- day of week
+
+%% \bxjh_day_of_week_name:nnn { <year> } { <month> } { <day> }
+%% \bxjh_day_of_week:nnn { <year> } { <month> } { <day> }
+% The calculation is based on Zeller's congruence:
+%
+% W = y + floor ( y / 4 ) + floor ( h / 4 ) + ( 5 * h )
+% + floor ( ( 13 * ( m + 1 ) ) / 5 ) + d
+%
+% where
+%
+% h = \int_div_truncate:nn { #1 } { 100 } ,
+% y = \int_mod:nn { #1 } { 100 } ,
+% m = #2 ,
+% d = #3 .
+%
+% Note that January and February needs to be treated as 13th and 14th
+% month of the former year respectively.
+\cs_new:Npn \bxjh_day_of_week_name:nnn #1#2#3
+ {
+ \int_case:nn { \bxjh_day_of_week:nnn { #1 } { #2 } { #3 } }
+ {
+ { \c_bxjh_monday_int } { \g_bxjh_getsu_tl }
+ { \c_bxjh_tuesday_int } { \g_bxjh_ka_tl }
+ { \c_bxjh_wednesday_int } { \g_bxjh_sui_tl }
+ { \c_bxjh_thursday_int } { \g_bxjh_moku_tl }
+ { \c_bxjh_friday_int } { \g_bxjh_kin_tl }
+ { \c_bxjh_saturday_int } { \g_bxjh_do_tl }
+ { \c_bxjh_sunday_int } { \g_bxjh_nichi_tl }
+ }
+ }
+
+\cs_new:Npn \bxjh_day_of_week:nnn #1#2#3
+ {
+ \int_compare:nNnTF { #2 } < { 3 }
+ {
+ \__bxjh_zeller:nnn { #1 - 1 } { #2 + 12 } { #3 }
+ }
+ {
+ \__bxjh_zeller:nnn { #1 } { #2 } { #3 }
+ }
+ }
+
+\cs_new:Npn \__bxjh_zeller:nnn #1#2#3
+ {
+ \int_mod:nn
+ {
+ \int_mod:nn { #1 } { 100 }
+ + \int_div_truncate:nn { \int_mod:nn { #1 } { 100 } } { 4 }
+ + \int_div_truncate:nn { \int_div_truncate:nn { #1 } { 100 } } { 4 }
+ + ( 5 * \int_div_truncate:nn { #1 } { 100 } )
+ + \int_div_truncate:nn { ( 13 * ( #2 + 1 ) ) } { 5 }
+ + #3 + 5
+ }
+ { 7 }
+ }
+
+% -------------------------------------------------- next/prev day
+
+%% \__bxjh_number_of_days_in_month:nn { <year> } { <month> }
+\cs_new:Npn \__bxjh_number_of_days_in_month:nn #1#2
+ {
+ \int_case:nn { #2 }
+ {
+ { 1 } { 31 } % January
+ { 2 } % February
+ {
+ \int_compare:nNnTF { \int_mod:nn { #1 } { 4 } } = { 0 }
+ {
+ \__bxjh_int_compare_and:nnTF
+ { \int_mod:nn { #1 } { 100 } = 0 }
+ { \int_mod:nn { #1 } { 400 } > 0 }
+ { 28 }
+ { 29 } % leap year
+ }
+ { 28 }
+ }
+ { 3 } { 31 } % March
+ { 4 } { 30 } % April
+ { 5 } { 31 } % May
+ { 6 } { 30 } % June
+ { 7 } { 31 } % July
+ { 8 } { 31 } % August
+ { 9 } { 30 } % September
+ { 10 } { 31 } % October
+ { 11 } { 30 } % November
+ { 12 } { 31 } % December
+ }
+ }
+
+%% \__bxjh_apply_after_int_eval:Nnnn \CS { <intexpr1> } { <intexpr2> } { <intexpr3> }
+% this is for calculation efficiency
+\cs_new:Npn \__bxjh_apply_after_int_eval:Nnnn #1#2#3#4
+ {
+ \exp_args:Nfff #1
+ { \int_eval:n { #2 } } { \int_eval:n { #3 } } { \int_eval:n { #4 } }
+ }
+
+% get \exp_args:Nfff
+\exp_args_generate:n { fff }
+
+%% \bxjh_apply_next_day:Nnnn \CS { <year> } { <month> } { <day> }
+\cs_new:Npn \bxjh_apply_next_day:Nnnn #1#2#3#4
+ {
+ \int_compare:nNnTF
+ { #4 } < { \__bxjh_number_of_days_in_month:nn { #2 } { #3 } }
+ {
+ % just next day in the month
+ \__bxjh_apply_after_int_eval:Nnnn #1 { #2 } { #3 } { #4 + 1 }
+ }
+ {
+ \int_compare:nNnTF { #3 } < { 12 }
+ {
+ % the first day of next month
+ \__bxjh_apply_after_int_eval:Nnnn #1 { #2 } { #3 + 1 } { 1 }
+ }
+ {
+ % the first day of next year
+ \__bxjh_apply_after_int_eval:Nnnn #1 { #2 + 1 } { 1 } { 1 }
+ }
+ }
+ }
+
+%% \bxjh_apply_prev_day:Nnnn \CS { <year> } { <month> } { <day> }
+\cs_new:Npn \bxjh_apply_prev_day:Nnnn #1#2#3#4
+ {
+ \int_compare:nNnTF { #4 } > { 1 }
+ {
+ % just prev day in the month
+ \__bxjh_apply_after_int_eval:Nnnn #1 { #2 } { #3 } { #4 - 1 }
+ }
+ {
+ \int_compare:nNnTF { #3 } > { 1 }
+ {
+ % the last day of prev month
+ \__bxjh_apply_after_int_eval:Nnnn #1 { #2 } { #3 - 1 }
+ { \__bxjh_number_of_days_in_month:nn { #2 } { #3 - 1 } }
+ }
+ {
+ % the last day of prev year
+ \__bxjh_apply_after_int_eval:Nnnn #1 { #2 - 1 } { 12 } { 31 }
+ }
+ }
+ }
+
+% -------------------------------------------------- holidays
+
+%% \__bxjh_vernal_equinox:n { <year> }
+\cs_new:Npn \__bxjh_vernal_equinox:n #1
+ {
+ \int_compare:nNnTF { #1 } < { 1948 }
+ {
+ 99 % before the Act on National Holidays
+ }
+ {
+ \int_compare:nNnTF { #1 } < { 1980 }
+ {
+ \__bxjh_va_formula:nn { 20.8357 } { #1 }
+ }
+ {
+ \int_compare:nNnTF { #1 } < { 2100 }
+ {
+ \__bxjh_va_formula:nn { 20.8431 } { #1 }
+ }
+ {
+ \int_compare:nNnTF { #1 } < { 2151 }
+ {
+ \__bxjh_va_formula:nn { 20.8510 } { #1 }
+ }
+ {
+ 99 % unknown because no calculation formula
+ }
+ }
+ }
+ }
+ }
+
+%% \__bxjh_autumn_equinox:n { <year> }
+\cs_new:Npn \__bxjh_autumn_equinox:n #1
+ {
+ \int_compare:nNnTF { #1 } < { 1948 }
+ {
+ 99 % before the Act on National Holidays
+ }
+ {
+ \int_compare:nNnTF { #1 } < { 1980 }
+ {
+ \__bxjh_va_formula:nn { 23.2588 } { #1 }
+ }
+ {
+ \int_compare:nNnTF { #1 } < { 2100 }
+ {
+ \__bxjh_va_formula:nn { 23.2488 } { #1 }
+ }
+ {
+ \int_compare:nNnTF { #1 } < { 2151 }
+ {
+ \__bxjh_va_formula:nn { 24.2488 } { #1 }
+ }
+ {
+ 99 % unknown because no calculation formula
+ }
+ }
+ }
+ }
+ }
+
+%% \__bxjh_va_formula:nn { <magic> } { <year> }
+\cs_new:Npn \__bxjh_va_formula:nn #1#2
+ {
+ \fp_eval:n {
+ floor (
+ #1 + 0.242194 * ( #2 - 1980 ) - \int_div_truncate:nn { #2 - 1980 } { 4 }
+ )
+ }
+ }
+
+%% \bxjh_holiday_name:nnn { <year> } { <month> } { <day> }
+\cs_new:Npn \bxjh_holiday_name:nnn #1#2#3
+ {
+ \exp_args:Nf \__bxjh_holiday_name_wrapper:nnnn
+ { \__bxjh_holiday_name_naive:nnn { #1 } { #2 } { #3 } }
+ { #1 } { #2 } { #3 }
+ }
+
+%% \__bxjh_holiday_name_wrapper:nnnn { <naive holiday name> }
+%% { <year> } { <month> } { <day> }
+\cs_set:Npn \__bxjh_holiday_name_wrapper:nnnn #1#2#3#4
+ {
+ \tl_if_empty:nTF { #1 }
+ {
+ \bool_lazy_and:nnT
+ {
+ \__bxjh_date_compare_p:nnnNnnn
+ { #2 } { #3 } { #4 } > { 1973 } { 4 } { 11 }
+ }
+ {
+ \int_compare_p:n
+ {
+ \bxjh_day_of_week:nnn { #2 } { #3 } { #4 } = \c_bxjh_monday_int
+ }
+ }
+ {
+ \bxjh_apply_prev_day:Nnnn \bxjh_if_holiday:nnnT
+ { #2 } { #3 } { #4 } { \g_bxjh_furikae_tl }
+ }
+ }
+ { #1 }
+ }
+
+%% \__bxjh_holiday_name_naive:nnn { <year> } { <month> } { <day> }
+\cs_new:Npn \__bxjh_holiday_name_naive:nnn #1#2#3
+ {
+ \__bxjh_date_compare:nnnNnnnTF { #1 } { #2 } { #3 } < { 1948 } { 7 } { 20 }
+ {
+ % empty because before the Act on National Holidays
+ }
+ {
+ \int_case:nn { #2 }
+ {
+ { 1 } % January
+ {
+ \int_compare:nNnTF { #3 } = { 1 }
+ { \g_bxjh_ganjitsu_tl }
+ {
+ \int_compare:nNnTF { #1 } > { 1999 }
+ {
+ \__bxjh_int_compare_and:nnT % second Monday
+ { \int_div_truncate:nn { #3 - 1 } { 7 } = 1 }
+ {
+ \bxjh_day_of_week:nnn { #1 } { #2 } { #3 }
+ = \c_bxjh_monday_int
+ }
+ { \g_bxjh_seijin_tl }
+ }
+ {
+ \int_compare:nNnT { #3 } = { 15 }
+ { \g_bxjh_seijin_tl }
+ }
+ }
+ }
+
+ { 2 } % February
+ {
+ \__bxjh_int_compare_and:nnTF { #3 = 11 } { #1 > 1966 }
+ { \g_bxjh_kenkoku_tl }
+ {
+ \__bxjh_int_compare_and:nnTF { #3 = 23 } { #1 > 2019 }
+ { \g_bxjh_tennou_tl } % the "next" era (2020-)
+ {
+ \__bxjh_date_compare:nnnNnnnT
+ { #1 } { #2 } { #3 } = { 1989 } { 2 } { 24 }
+ { \g_bxjh_showa_taisou_tl }
+ }
+ }
+ }
+
+ { 3 } % March
+ {
+ \int_compare:nNnT { #3 } = { \__bxjh_vernal_equinox:n { #1 } }
+ { \g_bxjh_shunbun_tl }
+ }
+
+ { 4 } % April
+ {
+ \int_compare:nNnTF { #3 } = { 29 }
+ {
+ \int_compare:nNnTF { #1 } > { 2006 }
+ { \g_bxjh_showa_tl }
+ {
+ \int_compare:nNnTF { #1 } > { 1988 }
+ { \g_bxjh_midori_tl }
+ { \g_bxjh_tennou_tl } % the Showa period
+ }
+ }
+ {
+ \__bxjh_date_compare:nnnNnnnTF
+ { #1 } { #2 } { #3 } = { 2019 } { 4 } { 30 }
+ { \g_bxjh_kokumin_tl } % the abdication of the Heisei Emperor
+ {
+ \__bxjh_date_compare:nnnNnnnT
+ { #1 } { #2 } { #3 } = { 1959 } { 4 } { 10 }
+ { \g_bxjh_akihito_kekkon_tl }
+ }
+ }
+ }
+
+ { 5 } % May
+ {
+ \int_compare:nNnTF { #3 } = { 3 }
+ { \g_bxjh_kenpou_tl }
+ {
+ \int_compare:nNnTF { #3 } = { 4 }
+ {
+ \int_compare:nNnTF { #1 } > { 2006 }
+ { \g_bxjh_midori_tl }
+ {
+ \int_compare:nNnT { #1 } > { 1985 }
+ {
+ \int_case:nnF % if later than Tuesday (Tue. - Sat.)
+ { \bxjh_day_of_week:nnn { #1 } { #2 } { #3 } }
+ {
+ { \c_bxjh_monday_int } {} % substitute for Constitution Day
+ { \c_bxjh_sunday_int } {} % just a "normal" Sunday
+ }
+ { \g_bxjh_kokumin_tl }
+ }
+ }
+ }
+ {
+ \int_compare:nNnTF { #3 } = { 5 }
+ { \g_bxjh_kodomo_tl }
+ {
+ \int_compare:nNnTF { #3 } = { 6 }
+ {
+ \int_compare:nNnT { #1 } > { 2006 }
+ {
+ \int_case:nn
+ { \bxjh_day_of_week:nnn { #1 } { #2 } { #3 } }
+ {
+ { \c_bxjh_tuesday_int } { \g_bxjh_furikae_tl }
+ { \c_bxjh_wednesday_int } { \g_bxjh_furikae_tl }
+ }
+ }
+ }
+ {
+ \__bxjh_date_compare:nnnNnnnTF
+ { #1 } { #2 } { #3 } = { 2019 } { 5 } { 1 }
+ { \g_bxjh_sokui_tl } % Naruhito
+ {
+ \__bxjh_date_compare:nnnNnnnT
+ { #1 } { #2 } { #3 } = { 2019 } { 5 } { 2 }
+ { \g_bxjh_kokumin_tl }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ { 6 } % June
+ {
+ \__bxjh_date_compare:nnnNnnnT { #1 } { #2 } { #3 } = { 1993 } { 6 } { 9 }
+ { \g_bxjh_naruhito_kekkon_tl }
+ }
+
+ { 7 } % July
+ {
+ \int_compare:nNnTF { #1 } > { 2020 }
+ {
+ \__bxjh_int_compare_and:nnT % third Monday
+ { \int_div_truncate:nn { #3 - 1 } { 7 } = 2 }
+ {
+ \bxjh_day_of_week:nnn { #1 } { #2 } { #3 }
+ = \c_bxjh_monday_int
+ }
+ { \g_bxjh_umi_tl }
+ }
+ {
+ \int_compare:nNnTF { #1 } = { 2020 }
+ {
+ % 2020 Tokyo Olympic year: special case
+ \int_compare:nNnTF { #3 } = { 23 }
+ { \g_bxjh_umi_tl }
+ {
+ \int_compare:nNnT { #3 } = { 24 }
+ { \g_bxjh_sports_tl }
+ }
+ }
+ {
+ \int_compare:nNnTF { #1 } > { 2002 }
+ {
+ \__bxjh_int_compare_and:nnT % third Monday
+ { \int_div_truncate:nn { #3 - 1 } { 7 } = 2 }
+ {
+ \bxjh_day_of_week:nnn { #1 } { #2 } { #3 }
+ = \c_bxjh_monday_int
+ }
+ { \g_bxjh_umi_tl }
+ }
+ {
+ \__bxjh_int_compare_and:nnT { #1 > 1995 } { #3 = 20 }
+ { \g_bxjh_umi_tl }
+ }
+ }
+ }
+ }
+
+ { 8 } % August
+ {
+ \int_compare:nNnTF { #1 } > { 2020 }
+ {
+ \int_compare:nNnT { #3 } = { 11 }
+ { \g_bxjh_yama_tl }
+ }
+ {
+ \int_compare:nNnTF { #1 } = { 2020 }
+ {
+ % 2020 Tokyo Olympic year: special case
+ \int_compare:nNnT { #3 } = { 10 }
+ { \g_bxjh_yama_tl }
+ }
+ {
+ \__bxjh_int_compare_and:nnT { #1 > 2015 } { #3 = 11 }
+ { \g_bxjh_yama_tl }
+ }
+ }
+ }
+
+ { 9 } % September
+ {
+ \int_compare:nNnTF { #3 } = { \__bxjh_autumn_equinox:n { #1 } }
+ { \g_bxjh_shubun_tl }
+ {
+ \int_compare:nNnTF { #1 } > { 2002 }
+ {
+ \__bxjh_int_compare_and:nnTF % third Monday
+ { \int_div_truncate:nn { #3 - 1 } { 7 } = 2 }
+ {
+ \bxjh_day_of_week:nnn { #1 } { #2 } { #3 }
+ = \c_bxjh_monday_int
+ }
+ { \g_bxjh_keirou_tl }
+ {
+ \__bxjh_int_compare_and:nnT
+ {
+ \bxjh_day_of_week:nnn { #1 } { #2 } { #3 }
+ = \c_bxjh_tuesday_int
+ }
+ { #3 = \__bxjh_autumn_equinox:n { #1 } - 1 }
+ { \g_bxjh_kokumin_tl }
+ }
+ }
+ {
+ \__bxjh_int_compare_and:nnT { #1 > 1965 } { #3 = 15 }
+ { \g_bxjh_keirou_tl }
+ }
+ }
+ }
+
+ { 10 } % October
+ {
+ \int_compare:nNnTF { #1 } > { 2020 }
+ {
+ \__bxjh_int_compare_and:nnT % second Monday
+ { \int_div_truncate:nn { #3 - 1 } { 7 } = 1 }
+ {
+ \bxjh_day_of_week:nnn { #1 } { #2 } { #3 }
+ = \c_bxjh_monday_int
+ }
+ { \g_bxjh_sports_tl }
+ }
+ {
+ \int_compare:nNnTF { #1 } = { 2020 }
+ {
+ % pass because of 2020 Tokyo Olympic
+ }
+ {
+ \int_compare:nNnTF { #1 } > { 1999 }
+ {
+ \__bxjh_int_compare_and:nnTF % second Monday
+ { \int_div_truncate:nn { #3 - 1 } { 7 } = 1 }
+ {
+ \bxjh_day_of_week:nnn { #1 } { #2 } { #3 }
+ = \c_bxjh_monday_int
+ }
+ { \g_bxjh_taiiku_tl }
+ {
+ \__bxjh_date_compare:nnnNnnnT
+ { #1 } { #2 } { #3 } = { 2019 } { 10 } { 22 }
+ { \g_bxjh_sokuirei_tl } % Naruhito
+ }
+ }
+ {
+ \__bxjh_int_compare_and:nnT
+ { #1 > 1965 } { #3 = 10 }
+ { \g_bxjh_taiiku_tl }
+ }
+ }
+ }
+ }
+
+ { 11 } % November
+ {
+ \int_compare:nNnTF { #3 } = { 3 }
+ { \g_bxjh_bunka_tl }
+ {
+ \int_compare:nNnTF { #3 } = { 23 }
+ { \g_bxjh_kinrou_tl }
+ {
+ \__bxjh_date_compare:nnnNnnnT
+ { #1 } { #2 } { #3 } = { 1990 } { 11 } { 12 }
+ { \g_bxjh_sokuirei_tl }
+ }
+ }
+ }
+
+ { 12 } % December
+ {
+ \int_compare:nNnT { #3 } = { 23 }
+ {
+ \__bxjh_int_compare_and:nnT
+ { #1 > 1988 } { #1 < 2019 }
+ { \g_bxjh_tennou_tl } % the Heisei period
+ }
+ }
+ }
+ }
+ }
+
+%% \bxjh_if_holiday:nnn(TF) { <year> } { <month> } { <day> }
+%% ( { <true code> } ) ( { <false code> } )
+\prg_new_conditional:Npnn \bxjh_if_holiday:nnn #1#2#3 { T, F, TF }
+ {
+ \exp_args:Nf \tl_if_empty:nTF
+ { \bxjh_holiday_name:nnn { #1 } { #2 } { #3 } }
+ { \prg_return_false: }
+ { \prg_return_true: }
+ }
+
+% -------------------------------------------------- LaTeX2e interface
+
+%% \jaholidayname { <year> } { <month> } { <day> }
+\cs_new_eq:NN \jaholidayname \bxjh_holiday_name:nnn
+
+%% \jadayofweek { <year> } { <month> } { <day> }
+\cs_new_eq:NN \jadayofweek \bxjh_day_of_week_name:nnn
+
+%% \IfJaHoliday(TF) { <year> } { <month> } { <day> }
+%% ( { <true code> } ) ( { <false code> } )
+\cs_new_eq:NN \IfJaHolidayF \bxjh_if_holiday:nnnF
+\cs_new_eq:NN \IfJaHolidayT \bxjh_if_holiday:nnnT
+\cs_new_eq:NN \IfJaHolidayTF \bxjh_if_holiday:nnnTF
+
+% vim: ft=expl3 nospell:
+%% EOF
diff --git a/language/japanese/BX/bxjaholiday/bxjaholiday.tex b/language/japanese/BX/bxjaholiday/bxjaholiday.tex
new file mode 100644
index 0000000000..7980e7a8d1
--- /dev/null
+++ b/language/japanese/BX/bxjaholiday/bxjaholiday.tex
@@ -0,0 +1,279 @@
+%#!xelatex
+\RequirePackage{fontspec}
+\documentclass{l3doc}
+
+% packages
+\usepackage{bxjaholiday}
+\usepackage{caption}
+
+% fonts
+\newfontfamily{\fIpaex}{IPAexMincho}[Scale=0.95]
+\newcommand*{\Ja}[1]{{\fIpaex#1}}
+
+% logos
+\usepackage{bxtexlogo}
+\bxtexlogoimport{*}
+
+% syntax
+\newenvironment{code}{\quote\small}{\endquote}
+
+% cross-refs
+\usepackage{wtref}
+\newref{tab,sec}
+
+% macros
+\newcommand{\PkgName}{\pkg{bxjaholiday}}
+\newcommand{\Ie}{i.\,e.}
+\newcommand{\Eg}{e.\,g.}
+
+\ExplSyntaxOn
+\cs_set_eq:NN \_ \c_underscore_str
+\cs_new:Npn \__bxjh_doc_holiday_line:nn #1#2
+ {
+ % first column: holiday
+ #1 &
+ % second column: variable
+ \cs { g_bxjh_#2_tl } &
+ % third column: Name in Japanese
+ \Ja { \tl_use:c { g_bxjh_#2_tl } } \\
+ }
+\cs_new:Npn \__bxjh_doc_week_of_day:nn #1#2
+ {
+ % first column: holiday
+ #1 &
+ % second column: int variable
+ \cs { c_bxjh_ \tl_lower_case:n{ #1 } _int } &
+ % third column: int value
+ \int_use:c { c_bxjh_ \tl_lower_case:n{ #1 } _int } &
+ % fourth column: tl variable
+ \cs { g_bxjh_#2_tl } &
+ % fifth column: tl value
+ \Ja { \tl_use:c { g_bxjh_#2_tl } } \\
+ }
+\cs_new_eq:NN \HolidayLine \__bxjh_doc_holiday_line:nn
+\cs_new_eq:NN \WeekofdayLine \__bxjh_doc_week_of_day:nn
+\ExplSyntaxOff
+
+% metadata
+\GetFileInfo{\jobname.sty}
+\title{The {\PkgName} package}
+\author{Takuto ASAKURA (wtsnjp)}
+\date{\fileversion \quad [\filedate]}
+
+\begin{document}
+
+\maketitle
+
+\begin{abstract}
+This package provides a command to convert dates to names of Japanese holidays
+(\emph{shukujitsu}; \Ja{祝日}). For internal use, I need to implement a
+function to judge the day of week (\emph{youbi}; \Ja{曜日}), so a command
+converting dates to \emph{youbi} in the same manner is also available as a free
+gift. The equivalent functions and further (lower-level) APIs are provided for
+expl3.
+%All {\LaTeXe} and expl3 interfaces are (first-)fully expandable, so
+%those could be used almost anywhere in your documents.
+\end{abstract}
+
+%\tableofcontents
+
+\begin{documentation}
+
+%\section{Introduction}
+
+\section{System requirements}
+
+As one of the BX series\footnote{BX series is a collection of {\LaTeX} packages
+mainly developed by Takayuki YATO (a.k.a.~ZR.) ``BX'' stands for
+``\underline{b}abel e\underline{x}tensions'' and packages in this series are
+normally support various {\TeX} engines not only Japanese-specific ones
+({\pTeX}, {\upTeX}, and so on.)} packages, {\PkgName} supports all {\TeX}
+engines which supported by expl3 (\Ie, the {\eTeX} extension is required.)
+Specifically, following {\TeX} systems are supported:
+%
+\begin{itemize}
+\item {\TeX} format: {\LaTeXe}.
+\item {\TeX} engine: {\pdfTeX}, {\XeTeX}, {\LuaTeX},\footnote{Note that if you
+want to print Japanese characters with {\TeX} engines which is not specifically
+designed for Japanese, you need to setup proper fonts and other things.}
+{\pTeX}, and {\upTeX}.
+\end{itemize}
+
+\section{Loading the package}
+
+The package should be loaded in the usual {\LaTeXe} way. No package option is
+available.
+%
+\begin{code}
+|\usepackage{bxjaholiday}|
+\end{code}
+
+\section{{\LaTeXe} interfaces}
+
+\begin{function}[EXP]{\jaholidayname}
+\begin{syntax}
+|\jaholidayname|\marg{year}\marg{month}\marg{day}
+\end{syntax}
+%
+This command is expanded to the name of Japanese holiday corresponding to the
+specified date, if it is a holiday. For a date which is not a holiday, it will
+be expanded to nothing (an empty token.) See Table~\tabref{holidays} for all
+possible results.
+
+For \meta{year}, \meta{month}, and \meta{day}, you can explicitly write
+numbers, or use counters, \Eg, |\year|, |\month|, and |\day|. To be exact,
+those could be any \meta{integer expression}.
+\end{function}
+
+\begin{function}[EXP]{\jadayofweek}
+\begin{syntax}
+|\jadayofweek|\marg{year}\marg{month}\marg{day}
+\end{syntax}
+%
+This command converts from a date to the name of week, \Ie, one of \Ja{月, 火,
+水, 木, 金, 土, 日}. You can specify the arguments in exactly the same way as
+|\jaholidayname|.
+\end{function}
+
+\begin{function}[EXP]{\IfJaHolidayTF,\IfJaHolidayT,\IfJaHolidayF}
+\begin{syntax}
+|\IfJaHolidayTF|\marg{year}\marg{month}\marg{day}\marg{true code}\marg{false code}
+|\IfJaHolidayT|\marg{year}\marg{month}\marg{day}\marg{true code}
+|\IfJaHolidayF|\marg{year}\marg{month}\marg{day}\marg{false code}
+\end{syntax}
+%
+The |\IfJaHoliday(TF)| tests are used to check if a date is a Japanese holiday
+or not. Note that substitute holidays (\Ja{振替休日}) are also judged as a
+holiday in this test.
+\end{function}
+
+\section{expl3 interfaces}
+
+All expl3 interfaces provided by {\PkgName} belong to the \texttt{bxjh} module.
+
+\subsection{Functions}
+
+\begin{function}[EXP]{\bxjh_holiday_name:nnn}
+\begin{syntax}
+|\bxjh_holiday_name:nnn| \marg{year} \marg{month} \marg{day}
+\end{syntax}
+%
+This is expl3 version of |\jaholidayname|. It converts dates into Japanese
+holiday names.
+\end{function}
+
+\begin{function}[EXP]{\bxjh_day_of_week_name:nnn,\bxjh_day_of_week:nnn}
+\begin{syntax}
+|\bxjh_day_of_week_name:nnn| \marg{year} \marg{month} \marg{day}
+|\bxjh_day_of_week:nnn| \marg{year} \marg{month} \marg{day}
+\end{syntax}
+%
+|\bxjh_day_of_week_name:nnn| is an expl3 version of |\jadayofweek|. It converts
+a date into day of week in Japanese. To use that information in expl3, \Eg, for
+branching, |\bxjh_day_of_week:nnn| is more suitable. It returns an internal
+\texttt{int} value, so you can compare those results with the constants provided
+by this package. See Section~\secref{variables}.
+\end{function}
+
+\begin{function}[EXP,TF]{\bxjh_if_holiday:nnn}
+\begin{syntax}
+|\bxjh_if_holiday:nnnTF| \marg{year} \marg{month} \marg{day} \marg{true code} \marg{false code}
+\end{syntax}
+%
+This test is expl3 version of |\IfJaHoliday(TF)|.
+\end{function}
+
+\begin{function}[EXP]{\bxjh_apply_prev_day:Nnnn,\bxjh_apply_next_day:Nnnn}
+\begin{syntax}
+|\bxjh_apply_prev_day:Nnnn| \meta{function} \marg{year} \marg{month} \marg{day}
+|\bxjh_apply_next_day:Nnnn| \meta{function} \marg{year} \marg{month} \marg{day}
+\end{syntax}
+%
+These functions get previous/next day of the specified date, and apply it to
+the specified \meta{function}. The \meta{function} must take three arguments in
+the order. For example,
+%
+\begin{code}
+|\bxjh_apply_next_day:Nnnn \bxjh_holiday_name:nnn { 2019 } { 12 } { 31 }|
+\end{code}
+%
+produces the result of:
+%
+\begin{code}
+|\bxjh_holiday_name:nnn { 2020 } { 1 } { 1 }|
+\end{code}
+\end{function}
+
+\subsection{Variables and constants}\seclabel{variables}
+
+\paragraph{Names of Japanese holidays}
+
+All of them are provided as global \texttt{tl} variables. See
+Table~\tabref{holidays}.
+%
+\begin{table}[p]
+\centering\small
+\caption{Japanese holidays}
+\tablabel{holidays}
+\begin{tabular}{lll}
+\hline
+Holiday & Variable & Name in Japanese \\ \hline
+\HolidayLine{New Year's Day}{ganjitsu}
+\HolidayLine{Coming of Age Day}{seijin}
+\HolidayLine{National Foundation Day}{kenkoku}
+\HolidayLine{The Emperor's Birthday}{tennou}
+\HolidayLine{Vernal Equinox Day}{shunbun}
+\HolidayLine{Showa Day}{showa}
+\HolidayLine{Greenery Day}{midori}
+\HolidayLine{Constitution Memorial Day}{kenpou}
+\HolidayLine{National Holiday}{kokumin}
+\HolidayLine{Children's Day}{kodomo}
+\HolidayLine{(substitute holiday)}{furikae}
+\HolidayLine{Marine Day}{umi}
+\HolidayLine{Mountain Day}{yama}
+\HolidayLine{Autumnal Equinox Day}{shunbun}
+\HolidayLine{Respect for the Aged Day}{keirou}
+\HolidayLine{Sports Day}{sports}
+\HolidayLine{Health and Sports Day}{taiiku}
+\HolidayLine{Culture Day}{bunka}
+\HolidayLine{Labor Thanksgiving Day}{kinrou}
+\HolidayLine{National Mourning of Showa}{showa\_taisou}
+\HolidayLine{National Wedding of Akihito}{akihito\_kekkon}
+\HolidayLine{National Wedding of Naruhito}{naruhito\_kekkon}
+\HolidayLine{Core Enthronement Ceremony}{sokuirei}
+\HolidayLine{Coronation Day}{sokui}
+\hline
+\end{tabular}
+\end{table}
+
+\paragraph{Day of week}
+
+Internally, {\PkgName} uses integers to represent day of week, and corresponding
+\texttt{int} constants are defined. In addition to that, Japanese names of those
+are also provided as global \texttt{tl} variables. See
+Table~\tabref{dayofweek}.
+%
+\begin{table}[p]
+\centering\small
+\caption{Day of week}
+\tablabel{dayofweek}
+\begin{tabular}{l|lr|ll}
+\hline
+Day of week & Constant (\texttt{int}) & & Variable (\texttt{tl}) & \\ \hline
+\WeekofdayLine{Monday}{getsu}
+\WeekofdayLine{Tuesday}{ka}
+\WeekofdayLine{Wednesday}{sui}
+\WeekofdayLine{Thursday}{moku}
+\WeekofdayLine{Friday}{kin}
+\WeekofdayLine{Saturday}{do}
+\WeekofdayLine{Sunday}{nichi}
+\hline
+\end{tabular}
+\end{table}
+
+\end{documentation}
+
+%\PrintChanges
+
+\end{document}
+% vim: spell:
diff --git a/language/japanese/BX/bxjalipsum/LICENSE b/language/japanese/BX/bxjalipsum/LICENSE
new file mode 100644
index 0000000000..8ada757fbc
--- /dev/null
+++ b/language/japanese/BX/bxjalipsum/LICENSE
@@ -0,0 +1,21 @@
+The MIT License
+
+Copyright (c) 2017 Takayuki YATO (aka. "ZR")
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/language/japanese/BX/bxjalipsum/README.md b/language/japanese/BX/bxjalipsum/README.md
new file mode 100644
index 0000000000..da80c5dd56
--- /dev/null
+++ b/language/japanese/BX/bxjalipsum/README.md
@@ -0,0 +1,91 @@
+BXjalipsum Package
+==================
+
+LaTeX: Dummy text in Japanese
+
+This package enables users to print some Japanese text that can be used
+as dummy text. It is a Japanese counterpart of the lipsum package.
+
+Since there is no well-known nonsense text like Lipsum in the Japanese
+language, the package uses some real text in public domain.
+
+### System requirement
+
+ * TeX format: LaTeX.
+ * TeX engine: pdfTeX / pTeX / upTeX / XeTeX / LuaTeX.
+ * Dependent packages:
+ - intcalc (when using non-e-TeX engines)
+
+### Installation
+
+ - `*.sty` → $TEXMF/tex/latex/BXjalipsum
+
+### License
+
+This package is distributed under the MIT License.
+
+The bxjalipsum Package
+----------------------
+
+### Package Loading
+
+ \usepackage{bxjalipsum}
+
+No options are available.
+
+### Usage
+
+ * `\jalipsum[<range>,...]{<key>}`: Prints some paragraphs from the
+ text specified by the key.
+
+ - `iroha` (1 paragraph): The iroha sequence (いろはにほへと…).
+ - `jugemu` (1 paragraph): The "jugemu" name (寿限無寿限無五劫の…).
+ - `jugemuP` (1 paragraph): The "jugemu" name, with some punctuation
+ added in ad hoc manner (寿限無・寿限無、五劫の…).
+ - `wagahai` (33 paragraphs): The first chapter from the novel
+ "吾輩は猫である" (I Am A Cat) written by Natsume Soseki.
+ - `preamble` (4 paragraphs): The preamble of the Constitution of
+ Japan.
+ - `hatsukoi` (4 paragraphs): The whole text of the poem "初恋"
+ (First Love) written by Shimazaki Toson.
+ - `kusamakura` (13 paragraphs): The opening passage from the novel
+ "草枕" (Kusamakura) written by Natsume Soseki.
+
+ Ranges are specified in the form `[-3,7-10,5,12-]`. If ranges are not
+ given, then `[-]` (all paragraphs) will be assumed.
+
+ * `\jalipsumiroha`: The shorthand for `\jalipsum{iroha}`.
+ * `\jalipsumjugemu`: The shorthand for `\jalipsum{jugemu}`.
+ * `\jalipsumjugemuP`: The shorthand for `\jalipsum{jugemuP}`.
+
+### Notices on use with pdfTeX
+
+ * In using with pdfTeX, Japanese (non-ASCII) characters are represented
+ as UTF-8 byte sequences. Thus there must be some mechanism (such as
+ the CJKutf8 package) that will decode such sequences and display the
+ Japanese characters properly.
+
+### Notices for the TeX-programmers
+
+ * All the commands are fully expandable.
+ * The `\jalipsum` command is expanded to the actual text in two steps.
+ * The shorthand commands such as `\jalipsumiroha` are expanded to the
+ actual text in one step.
+ * Each of the paragraph texts consists only of character tokens and
+ optional `\\` (line-break) tokens.
+ * When `\jalipsum` with multiple paragraphs is expanded, each paragraph
+ is joined with `\par` tokens.
+
+Revision History
+----------------
+
+ * Version 0.3a ‹2017/03/01›
+ - Added text “kusamakura”.
+ * Version 0.3 ‹2016/11/06›
+ - Added the support for pdfTeX.
+ * Version 0.2 ‹2016/08/15›
+ - The first public version.
+
+--------------------
+Takayuki YATO (aka. "ZR")
+http://zrbabbler.sp.land.to/
diff --git a/language/japanese/BX/bxjalipsum/bxjalipsum.sty b/language/japanese/BX/bxjalipsum/bxjalipsum.sty
new file mode 100644
index 0000000000..83357ff7a7
--- /dev/null
+++ b/language/japanese/BX/bxjalipsum/bxjalipsum.sty
@@ -0,0 +1,1785 @@
+%%
+%% This is file 'bxjalipsum.sty'.
+%%
+%% Copyright (c) 2016 Takayuki YATO (aka. "ZR")
+%% GitHub: https://github.com/zr-tex8r
+%% Twitter: @zr_tex8r
+%%
+%% This package is distributed under the MIT License.
+%%
+
+%% package declaration
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{bxjalipsum}[2017/03/01 v0.3a]
+\def\bxjl@pkgname{bxjalipsum}
+
+%% preparation
+\newif\ifbxjl@ok
+\newif\ifbxjl@etex
+\newif\ifbxjl@CJKtilde
+\providecommand\bxDebug[1]{}
+
+%% code guards
+\edef\bxjl@restore@codes{%
+ \catcode33=\the\catcode33%
+ \catcode34=\the\catcode34%
+ \catcode43=\the\catcode43%
+ \catcode45=\the\catcode45%
+ \catcode46=\the\catcode46%
+ \catcode47=\the\catcode47%
+ \catcode58=\the\catcode58%
+ \catcode60=\the\catcode60%
+ \catcode62=\the\catcode62%
+ \catcode96=\the\catcode96%
+ \catcode126=\the\catcode126%
+\relax}
+\catcode33=12 % <!>
+\catcode34=12 % <">
+\catcode43=12 % <+>
+\catcode45=12 % <->
+\catcode46=12 % <.>
+\catcode47=12 % </>
+\catcode58=12 % <:>
+\catcode60=12 % <<>
+\catcode62=12 % <>>
+\catcode96=12 % <`>
+\catcode126=13 % <~>
+\AtEndOfPackage{%
+ \bxjl@restore@codes \let\bxjl@restore@codes\relax}
+
+%--------------------------------------- package options
+
+% 'noCJKtilde'/'CJKtilde'
+\DeclareOption{noCJKtilde}{%
+ \bxjl@CJKtildefalse
+}
+\DeclareOption{CJKtilde}{%
+ \bxjl@CJKtildetrue
+}
+% process
+\ExecuteOptions{CJKtilde}
+\ProcessOptions\relax
+
+%--------------------------------------- helpers
+
+%% unique tokens
+\def\bxjl@end{\bxjl@end@}
+\def\bxjl@mt{\bxjl@mt@}
+\let\bxjl@mk\noindent
+
+%% variables
+\newcount\bxjl@cc
+
+%% \bxjl@preamble\CSa\CSb
+\@onlypreamble\bxjl@preamble
+\def\bxjl@preamble#1#2{%
+ \@onlypreamble#2#1#2%
+}
+
+%% \bxjl@burst-`>...
+\let\bxjl@burst\romannumeral
+
+%% \bxjl@burst@stop
+\let\bxjl@burst@stop\space
+
+%% \bxjl@csletcs{<csA>}{<csB>}
+\def\bxjl@csletcs#1#2{%
+ \expandafter\let\csname#1\expandafter\endcsname\csname#2\endcsname
+}
+
+%% \bxjl@cond\ifXXX...\fi{<true>}{<false>}
+\@gobbletwo\if\if \def\bxjl@cond#1\fi{%
+ #1\expandafter\@firstoftwo\else\expandafter\@secondoftwo\fi
+}
+
+%% \bxjl@ifblank{<text>}{<true>}{<false>}
+\long\def\bxjl@ifblank#1{%
+ \bxjl@ifblank@a#1\bxjl@mt\bxjl@mt\@secondoftwo\@firstoftwo\bxjl@end
+}
+\long\def\bxjl@ifblank@a#1#2\bxjl@mt#3#4#5\bxjl@end{#4}
+
+%--------------------------------------- environment check
+
+%% engine check
+\def\bxjl@next#1{%
+ \edef\bxjl@tmpa{\string#1}\edef\bxjl@tmpb{\meaning#1}%
+ \ifx\bxjl@tmpa\bxjl@tmpb \expandafter\@firstofone
+ \else \expandafter\@gobble
+ \fi
+}
+
+%% \bxjl@engine
+\let\bxjl@engine=b
+\bxjl@next\kanjiskip{\let\bxjl@engine=p}
+\bxjl@next\enablecjktoken{\let\bxjl@engine=u}
+\bxjl@next\luatexversion{\let\bxjl@engine=l}
+\bxjl@next\XeTeXversion{\let\bxjl@engine=l}
+
+%% switchh bxjl@etex
+\bxjl@etexfalse
+\bxjl@next\eTeXversion{\bxjl@etextrue}
+
+%% adjustment
+\ifx b\bxjl@engine\else
+ \bxjl@CJKtildefalse
+\fi
+
+%--------------------------------------- error message
+\ifbxjl@etex %---<*eTeX>
+
+\bxjl@preamble\def\bxjl@decl@error#1#2{%
+ \protected\def#1{%
+ \PackageError\bxjl@pkgname{#2}\@ehc
+ }%
+}
+
+\else %---<*!eTeX>
+
+\newcount\bxjl@err@id
+\bxjl@preamble\def\bxjl@decl@error#1#2{%
+ \advance\bxjl@err@id\@ne
+ \expandafter\bxjl@decl@error@a
+ \csname \bxjl@pkgname[E\the\bxjl@err@id]\expandafter\endcsname
+ \csname ! #2.\endcsname#1%
+}
+\bxjl@preamble\def\bxjl@decl@error@a#1#2#3{%
+ \def#3{#1}\def#1{#2}\let#2\@undefined
+}
+
+\fi %---</eTeX>
+
+%%
+\bxjl@decl@error\bxjl@err@ivrsp{%
+ Invalid range specification%
+}
+\bxjl@decl@error\bxjl@err@ukkey{%
+ Unknown key is given%
+}
+
+%--------------------------------------- arithmetic
+\ifbxjl@etex %---<*eTeX>
+
+%% \bxjl@add@num{<x>}{<y>}
+\def\bxjl@add@num#1#2{%
+ \the\numexpr#1+(#2)\relax
+}
+%% \bxjl@sub@num{<x>}{<y>}
+\def\bxjl@sub@num#1#2{%
+ \the\numexpr#1-(#2)\relax
+}
+
+\else %---<*!eTeX>
+
+%% package
+\RequirePackage{intcalc}
+%% \bxjl@add@num{<x>}{<y>}
+\let\bxjl@add@num\intcalcadd@num
+%% \bxjl@sub@num{<x>}{<y>}
+\let\bxjl@sub@num\intcalcsub@num
+
+\fi %---</eTeX>
+%--------------------------------------- range list parser
+\catcode`\:=4 \catcode`\!=4 % really unique character tokens
+
+%% \bxjl@rx@ifnum{<text>}{<true>}{<false>}
+\def\bxjl@rx@ifnum#1{%
+ \expandafter\bxjl@rx@ifnum@a\bxjl@burst-#1:%
+}
+\def\bxjl@rx@ifnum@a#1:{%
+ \bxjl@ifblank{#1}%
+}
+
+%% \bxjl@rx@split{<text>}\CStrue\CSfalse
+\def\bxjl@rx@split#1{%
+ \bxjl@rx@split@a#1-:%
+}
+\def\bxjl@rx@split@a#1-#2:{%
+ \bxjl@cond\ifx!#2!\fi{%
+ \bxjl@rx@split@c#1:%
+ }{%else
+ \bxjl@rx@split@b#1:#2:%
+ }%
+}
+\def\bxjl@rx@split@b#1:#2-:#3#4{%
+ #3{#1}{#2}%
+}
+\def\bxjl@rx@split@c#1:#2#3{%
+ #3{#1}%
+}
+
+%% \bxjl@rx@splitbrk{<text>}\CStrue\CSfalse
+\def\bxjl@rx@splitbrk#1{%
+ \bxjl@rx@splitbrk@a#1[]:%
+}
+\def\bxjl@rx@splitbrk@a#1[#2]#3:{%
+ \bxjl@cond\ifx!#3!\fi{%
+ \@secondoftwo
+ }{\bxjl@ifblank{#1}{%
+ \bxjl@rx@splitbrk@b#3:{#2}%
+ }{%else
+ \@secondoftwo
+ }}%
+}
+\def\bxjl@rx@splitbrk@b#1[]:#2#3#4{%
+ \bxjl@ifblank{#1}{%
+ #3{#2}%
+ }{%else
+ #4%
+ }%
+}
+
+%% \bxjl@rx@clean@num{<text>}\CScont
+\def\bxjl@next#1{%
+ \def\bxjl@rx@clean@num##1{%
+ \expandafter\bxjl@rx@clean@num@a\number##1#1#1:%
+ }
+ \def\bxjl@rx@clean@num@a##1#1##2:##3{%
+ ##3{##1}%
+ }
+}\bxjl@next{ }
+
+%% \bxjl@rx@seq{<num1>}{<num2>}\CScont
+\def\bxjl@rx@seq#1{%
+ \bxjl@rx@clean@num{#1}\bxjl@rx@seq@a
+}
+\def\bxjl@rx@seq@a#1#2#3{%
+ \bxjl@rx@seq@b#1:#2:!:#3%
+}
+\def\bxjl@rx@seq@b#1:#2:#3:{%
+ \bxjl@cond\ifnum#2<#1 \fi{%
+ \bxjl@rx@seq@c#3:%
+ }{%else
+ \expandafter\bxjl@rx@seq@b\bxjl@burst-`>\bxjl@add@num{#1}{1}:%
+ #2:#3{#1}:%
+ }%
+}
+\def\bxjl@rx@seq@c#1:#2{%
+ \expandafter#2\expandafter{\@gobble#1}%
+}
+
+%% \bxjl@rx@parse{<text>}{<u-limit>}\CStrue\CSfalse
+\def\bxjl@rx@parse#1#2{%
+ \expandafter\bxjl@rx@parse@a\bxjl@burst-`>#1,!,:#2:!:%
+}
+\def\bxjl@rx@parse@a#1,{%
+ \bxjl@cond\ifx!#1\fi{%
+ \bxjl@rx@parse@b
+ }{%else
+ \bxjl@rx@split{#1}\bxjl@rx@parse@c\bxjl@rx@parse@d
+ }%
+}
+\def\bxjl@rx@parse@b#1:#2:#3:#4#5{%
+ \expandafter#4\expandafter{\@gobble#3}%
+}
+\def\bxjl@rx@parse@c#1{%
+ \bxjl@ifblank{#1}{%
+ \bxjl@rx@parse@e{1}%
+ }{\bxjl@rx@ifnum{#1}{%
+ \bxjl@rx@parse@e{#1}%
+ }{%else
+ \bxjl@rx@parse@fail
+ }}%
+}
+\def\bxjl@rx@parse@d#1{%
+ \bxjl@ifblank{#1}{%
+ \bxjl@rx@parse@f{1}{0}%
+ }{\bxjl@rx@ifnum{#1}{%
+ \bxjl@rx@parse@f{#1}{#1}%
+ }{%else
+ \bxjl@rx@parse@fail
+ }}%
+}
+\def\bxjl@rx@parse@e#1#2{%
+ \bxjl@ifblank{#2}{%
+ \bxjl@rx@parse@f{#1}{\maxdimen}%
+ }{\bxjl@rx@ifnum{#2}{%
+ \bxjl@rx@parse@f{#1}{#2}%
+ }{%else
+ \bxjl@rx@parse@fail
+ }}%
+}
+\def\bxjl@rx@parse@f#1{%
+ \bxjl@cond\ifnum#1<1 \fi{%
+ \bxjl@rx@parse@g{1}%
+ }{%else
+ \bxjl@rx@parse@g{#1}%
+ }%
+}
+\def\bxjl@rx@parse@g#1#2#3:#4:{%
+ \bxjl@cond\ifnum#2>#4 \fi{%
+ \bxjl@rx@seq{#1}{#4}\bxjl@rx@parse@h#3:#4:%
+ }{%else
+ \bxjl@rx@seq{#1}{#2}\bxjl@rx@parse@h#3:#4:%
+ }%
+}
+\def\bxjl@rx@parse@h#1#2:#3:#4:{%
+ \expandafter\bxjl@rx@parse@a\bxjl@burst-`>#2:#3:#4#1:%
+}
+
+\catcode`\:=12 \catcode`\!=12
+%--------------------------------------- lipsum public commands
+
+%%<*> \jalipsumiroha
+\@ifdefinable\jalipsumiroha{%
+ \AtEndOfPackage{%
+ \bxjl@csletcs{jalipsumiroha}{bxjl@tx@@iroha/1}%
+ }
+}
+
+%%<*> \jalipsumjugemu
+\@ifdefinable\jalipsumjugemu{%
+ \AtEndOfPackage{%
+ \bxjl@csletcs{jalipsumjugemu}{bxjl@tx@@jugemu/1}%
+ }
+}
+
+%%<*> \jalipsumjugemuP
+\@ifdefinable\jalipsumjugemuP{%
+ \AtEndOfPackage{%
+ \bxjl@csletcs{jalipsumjugemuP}{bxjl@tx@@jugemuP/1}%
+ }
+}
+
+%%<*> \jalipsum[<range>]{<key>}
+\newcommand*{\jalipsum}{%
+ \bxjl@burst-`>\bxjl@jalipsum@a
+}
+\def\bxjl@jalipsum@a#1#{%
+ \bxjl@ifblank{#1}{%
+ \bxjl@jalipsum@c{-}% whole
+ }{%else
+ \bxjl@rx@splitbrk{#1}\bxjl@jalipsum@c\bxjl@jalipsum@b
+ }%
+}
+\def\bxjl@jalipsum@b#1{%
+ \bxjl@err@ivrsp
+}
+\def\bxjl@jalipsum@c#1#2{%
+ \expandafter\bxjl@jalipsum@d\bxjl@burst-`>%
+ \csname bxjl@tc@@#2\endcsname\bxjl@mk{#1}{#2}%
+}
+\def\bxjl@jalipsum@d#1\bxjl@mk#2#3{%
+ \bxjl@cond\ifx\relax#1\fi{%
+ \bxjl@err@ukkey
+ }{%else
+ \bxjl@rx@parse{#2}{#1}\bxjl@jalipsum@e\bxjl@jalipsum@b{#3}%
+ }%
+}
+\def\bxjl@jalipsum@e#1#2{%
+ \bxjl@ifblank{#1}{%
+ \bxjl@burst@stop
+ }{%else
+ \bxjl@jalipsum@f{#2}{}#1\bxjl@end
+ }%
+}
+\long\def\bxjl@jalipsum@f#1#2#3{%
+ \bxjl@cond\ifx\bxjl@end#3\fi{%
+ \bxjl@jalipsum@h#2\bxjl@end
+ }{%else
+ \expandafter\expandafter\expandafter
+ \bxjl@jalipsum@g\csname bxjl@tx@@#1/#3\endcsname
+ \bxjl@mk{#1}{#2}%
+ }%
+}
+\long\def\bxjl@jalipsum@g#1\bxjl@mk#2#3{%
+ \bxjl@jalipsum@f{#2}{#3\par#1}%
+}
+\long\def\bxjl@jalipsum@h#1#2\bxjl@end{%
+ \bxjl@burst@stop#2%
+}
+
+%--------------------------------------- paipo decoder
+
+%% variables
+\let\bxjl@chr\relax
+\let\bxjl@@cr\relax
+\let\bxjl@@iai\relax
+\let\bxjl@tbuf\relax
+\let\bxjl@let@res\relax
+
+%% \bxjl@pdecode\CS{<p-code>}
+\chardef\bxjl@cst@x=10
+\chardef\bxjl@cst@xi=11
+\chardef\bxjl@cst@cxxviii=128
+\chardef\bxjl@cst@clx=160
+\bxjl@preamble\def\bxjl@pdecode#1#2{%
+ \def\bxjl@let@res{\let#1}%
+ \begingroup
+ \bxjl@set@activechar
+ \let\bxjl@@iai\relax\let\bxjl@@cr\relax
+ \let\bxjl@tbuf\@empty\edef\bxjl@next{#2}%
+ \expandafter\bxjl@pdecode@a\bxjl@next00%
+}
+\bxjl@preamble\def\bxjl@pdecode@a#1#2{%
+ \bxjl@cc"#1#2\relax
+ \ifnum\bxjl@cc=\z@
+ \let\bxjl@pdecode@nxt\bxjl@pdecode@e
+ \else\ifnum\bxjl@cc=\bxjl@cst@x
+ \bxjl@pdecode@add\bxjl@@cr
+ \let\bxjl@pdecode@nxt\bxjl@pdecode@a
+ \else\ifnum\bxjl@cc=\bxjl@cst@clx
+ \bxjl@pdecode@add\bxjl@@iai
+ \let\bxjl@pdecode@nxt\bxjl@pdecode@a
+ \else\ifnum\bxjl@cc<\bxjl@cst@cxxviii
+ \let\bxjl@pdecode@nxt\bxjl@pdecode@b
+ \else
+ \expandafter\let\expandafter\bxjl@next
+ \csname bxjl@pc/\number"#1#2\endcsname
+ \ifx\bxjl@next\relax
+ \def\bxjl@pdecode@nxt{\bxjl@pdecode@c#1#2}%
+ \else
+ \let\bxjl@pdecode@nxt\bxjl@pdecode@d
+ \fi
+ \fi\fi\fi\fi
+ \bxjl@pdecode@nxt
+}
+\bxjl@preamble\def\bxjl@pdecode@b{%
+ \bxjl@pdecode@alchr
+ \bxjl@pdecode@a
+}
+\bxjl@preamble\def\bxjl@pdecode@c{%
+ \let\bxjl@pdecode@nxt\bxjl@pdecode@a
+ \bxjl@pdecode@jacod
+}
+\bxjl@preamble\def\bxjl@pdecode@d{%
+ \let\bxjl@pdecode@nxt\bxjl@pdecode@a
+ \expandafter\bxjl@pdecode@jacod\bxjl@next
+}
+\bxjl@preamble\def\bxjl@pdecode@e{%
+ \def\bxjl@@cr{\noexpand\\}%
+ \def\bxjl@@iai{\noexpand~}%
+ \ifbxjl@CJKtilde\else
+ \let\bxjl@@iai\@empty
+ \fi
+ \xdef\bxjl@g@tmpa{\bxjl@tbuf}%
+ \endgroup
+ \bxjl@let@res\bxjl@g@tmpa
+ \let\bxjl@g@tmpa\@empty
+}
+%
+\bxjl@preamble\def\bxjl@pdecode@add#1{%
+ \edef\bxjl@tbuf{\bxjl@tbuf#1}%
+}
+\bxjl@preamble\def\bxjl@pdecode@alchr{%
+ \ifnum\catcode\bxjl@cc=\bxjl@cst@xi
+ \bxjl@get@alchr\bxjl@cc a%
+ \else
+ \bxjl@get@alchr\bxjl@cc 0%
+ \fi
+ \bxjl@pdecode@add\bxjl@chr
+}
+\bxjl@preamble\def\bxjl@pdecode@jachr{%
+ \bxjl@get@jachr\bxjl@cc
+ \bxjl@pdecode@add\bxjl@chr
+}
+%
+\ifx l\bxjl@engine
+ \bxjl@preamble\def\bxjl@pdecode@jacod#1#2#3#4#5#6#7#8{%
+ \bxjl@cc="#5#6#7#8\relax
+ \bxjl@pdecode@alchr
+ \bxjl@pdecode@nxt
+ }
+\else\ifx u\bxjl@engine
+ \bxjl@preamble\def\bxjl@pdecode@jacod#1#2#3#4#5#6#7#8{%
+ \bxjl@cc="#5#6#7#8\relax
+ \bxjl@pdecode@jachr
+ \bxjl@pdecode@nxt
+ }
+\else\ifx p\bxjl@engine
+ \bxjl@preamble\def\bxjl@pdecode@jacod#1#2#3#4#5#6#7#8{%
+ \bxjl@cc=\sjis"#1#2#3#4\relax
+ \bxjl@pdecode@jachr
+ \bxjl@pdecode@nxt
+ }
+\else
+ \chardef\bxjl@UERDX="40
+ \chardef\bxjl@UELDC="E0
+ \chardef\bxjl@UELDB="C0
+ \chardef\bxjl@UELDA="80
+ \mathchardef\bxjl@UEMDB="7FF
+ \bxjl@preamble\def\bxjl@pdecode@jacod#1#2#3#4#5#6#7#8{%
+ \bxjl@cc="#5#6#7#8\relax
+ \bxjl@get@utfchr
+ \bxjl@pdecode@add\bxjl@chr
+ \bxjl@pdecode@nxt
+ }
+ \bxjl@preamble\def\bxjl@get@utfchr{%
+ \let\bxjl@chr\@empty
+ \ifnum\bxjl@cc>\bxjl@UEMDB % 3-byte
+ \bxjl@get@utfchr@a
+ \bxjl@get@utfchr@a
+ \advance\bxjl@cc\bxjl@UELDC
+ \uccode`\~\bxjl@cc \uppercase{\edef\bxjl@chr{~\bxjl@chr}}%
+ \else % 2-byte
+ \bxjl@get@utfchr@a
+ \advance\bxjl@cc\bxjl@UELDB
+ \uccode`\~\bxjl@cc \uppercase{\edef\bxjl@chr{~\bxjl@chr}}%
+ \fi
+ }
+ \bxjl@preamble\def\bxjl@get@utfchr@a{%
+ \@tempcnta\bxjl@cc
+ \divide\bxjl@cc\bxjl@UERDX
+ \@tempcntb-\bxjl@cc \multiply\@tempcntb\bxjl@UERDX
+ \advance\@tempcnta\@tempcntb \advance\@tempcnta\bxjl@UELDA
+ \uccode`\~\@tempcnta \uppercase{\edef\bxjl@chr{~\bxjl@chr}}%
+ }
+\fi\fi\fi
+
+%% \bxjl@get@alchr
+\bxjl@preamble\def\bxjl@get@alchr#1#2{%
+ \uccode`#2=#1\relax
+ \uppercase{\def\bxjl@chr{#2}}%
+}
+
+%% \bxjl@get@jachr
+\bxjl@preamble\def\bxjl@get@jachr#1{%
+ \kansujichar\@ne=#1\relax
+ \edef\bxjl@chr{\kansuji\@ne}%
+}
+
+%% \bxjl@set@activechar
+\ifx b\bxjl@engine
+ \bxjl@preamble\def\bxjl@set@activechar{%
+ \@tempcnta\bxjl@cst@cxxviii
+ \@whilenum{\@tempcnta<\@cclvi}\do{%
+ \catcode\@tempcnta\active
+ \uccode`\~\@tempcnta \uppercase{\let~\relax}% freeze
+ \advance\@tempcnta\@ne}%
+ }
+\else
+ \bxjl@preamble\def\bxjl@set@activechar{}
+\fi
+
+%% \bxjl@pc/<num>
+\def\do#1#2{\@namedef{bxjl@pc/\number"#1}{#2}}
+\do{A1}{81423002}
+\do{A2}{8175300C}
+\do{A3}{8176300D}
+\do{A4}{81413001}
+\do{A5}{814530FB}
+\do{A6}{82F03092}
+\do{A7}{829F3041}
+\do{A8}{82A13043}
+\do{A9}{82A33045}
+\do{AA}{82A53047}
+\do{AB}{82A73049}
+\do{AC}{82E13083}
+\do{AD}{82E33085}
+\do{AE}{82E53087}
+\do{AF}{82C13063}
+\do{B0}{815B30FC}
+\do{B1}{82A03042}
+\do{B2}{82A23044}
+\do{B3}{82A43046}
+\do{B4}{82A63048}
+\do{B5}{82A8304A}
+\do{B6}{82A9304B}
+\do{B7}{82AB304D}
+\do{B8}{82AD304F}
+\do{B9}{82AF3051}
+\do{BA}{82B13053}
+\do{BB}{82B33055}
+\do{BC}{82B53057}
+\do{BD}{82B73059}
+\do{BE}{82B9305B}
+\do{BF}{82BB305D}
+\do{C0}{82BD305F}
+\do{C1}{82BF3061}
+\do{C2}{82C23064}
+\do{C3}{82C43066}
+\do{C4}{82C63068}
+\do{C5}{82C8306A}
+\do{C6}{82C9306B}
+\do{C7}{82CA306C}
+\do{C8}{82CB306D}
+\do{C9}{82CC306E}
+\do{CA}{82CD306F}
+\do{CB}{82D03072}
+\do{CC}{82D33075}
+\do{CD}{82D63078}
+\do{CE}{82D9307B}
+\do{CF}{82DC307E}
+\do{D0}{82DD307F}
+\do{D1}{82DE3080}
+\do{D2}{82DF3081}
+\do{D3}{82E03082}
+\do{D4}{82E23084}
+\do{D5}{82E43086}
+\do{D6}{82E63088}
+\do{D7}{82E73089}
+\do{D8}{82E8308A}
+\do{D9}{82E9308B}
+\do{DA}{82EA308C}
+\do{DB}{82EB308D}
+\do{DC}{82ED308F}
+\do{DD}{82F13093}
+\do{DE}{814A309B}
+\do{DF}{814B309C}
+
+%--------------------------------------- text data
+% Very unfortunately, no single encoding can serve all probable uses of
+% all TeX engines. So I have to give the Japanese text in hex dump....
+% (Non-ASCII in comments is safe, as long as it is in UTF-8.)
+
+%% \bxjl@text{<key>}{<number>}{<p-code>}
+\bxjl@preamble\def\bxjl@text#1#2{%
+ \@tempcnta=#2\relax
+ \expandafter\bxjl@text@a
+ \csname bxjl@tc@@#1\expandafter\endcsname
+ \csname bxjl@tx@@#1/\the\@tempcnta\endcsname
+}
+\bxjl@preamble\def\bxjl@text@a#1#2#3{%
+ \ifnum\ifx#1\relax\z@\else#1\fi<\@tempcnta
+ \edef#1{\the\@tempcnta}%
+ \fi
+ \bxjl@pdecode#2{#3}%
+}
+
+
+%===============================
+%% text 'iroha'
+% The 'Iroha' poem
+\bxjl@text{iroha}{1}{%
+% いろはにほへとちりぬ…
+B2DBCAC6CECDC4C1D8C7D9A6DCB6D6C0DABFC2C8C5D7D1B382EE3090C9B5B8D4CFB9CCBA%
+B4C3B1BBB7D5D2D0BC82EF3091CBD3BEBD%
+}
+
+%===============================
+%% text 'jugemu'
+% The person name from the rakugo tale Jugemu
+\bxjl@text{jugemu}{1}{%
+% 寿限無寿限無五劫の擦…
+8EF55BFF8CC0965096B371218EF55BFF8CC0965096B371218CDC4E948D8552ABC98E4364%
+E6D890D85207DA8A436D778DBB78029798522990856C348B9B9B5AC990856C348D73884C%
+9696672B895F96F2978867659696672B959798A8978867659696672B904898DFB390515B%
+DDD98F8851E6C68F5A4F4FD18F8851E6E54D85EAD78AB967D18E715B50C9E54D85EA8AB9%
+67D18E715B50837030D1834330A4837C30DD837030D1834330A4837C30DD837030D18343%
+30A4837C30DDC9835630B7838530E5B0838A30EA839330F3834B30AC839330F3835630B7%
+838530E5B0838A30EA839330F3834B30AC839330F3C9834F30B0B0838A30EA839330F383%
+5F30C0834330A4834F30B0B0838A30EA839330F3835F30C0834330A4C9837C30DD839330%
+F3837C30DD835230B3837330D4B0C9837C30DD839330F3837C30DD835230B3836930CAB0%
+C992B795778B764E4596BD547DC992B795778F9552A9%
+}
+\bxjl@text{jugemuP}{1}{% with ad hoc punctuations
+% 寿限無・寿限無、五劫…
+8EF55BFF8CC0965096B37121A58EF55BFF8CC0965096B37121A48CDC4E948D8552ABC98E%
+4364E6D890D85207DAA48A436D778DBB78029798522990856C348B9B9B5AC990856C348D%
+73884C9696672BA5895F96F2978867659696672BA5959798A8978867659696672BA49048%
+98DFB390515BDDD98F8851E6C68F5A4F4FD18F8851E6A4E54D85EAD78AB967D18E715B50%
+C9E54D85EA8AB967D18E715B50A4837030D1834330A4837C30DDA5837030D1834330A483%
+7C30DDA4837030D1834330A4837C30DDC9835630B7838530E5B0838A30EA839330F3834B%
+30AC839330F3A4835630B7838530E5B0838A30EA839330F3834B30AC839330F3C9834F30%
+B0B0838A30EA839330F3835F30C0834330A4A4834F30B0B0838A30EA839330F3835F30C0%
+834330A4C9837C30DD839330F3837C30DD835230B3837330D4B0C9837C30DD839330F383%
+7C30DD835230B3836930CAB0C992B795778B764E4596BD547DC992B795778F9552A9A1%
+}
+
+%===============================
+%% text 'wagahai'
+% The first chapter from "吾輩は猫である" (I Am A Cat)
+% Written by Natsume Sōseki (夏目漱石;1867-1916)
+% Text data from Aozora Bunko:
+% http://www.aozora.gr.jp/cards/000148/files/789_14547.html
+\bxjl@text{wagahai}{1}{%
+% 吾輩は猫である。名前…
+8CE1543E94798F29CA944C732B82C53067B1D9A196BC540D914F524DCACF82BE306096B3%
+7121B2A1%
+}
+\bxjl@text{wagahai}{2}{%
+% どこで生れたかとんと…
+82C73069BA82C5306790B6751FDAC0B6C4DDC48CA9898B93965F5382AA304CC2B6C7A189%
+BD4F5582C53067D39496858488C36697B282B63058D282B63058D2BCC08F8A624082C530%
+67836A30CB838330E3B0836A30CB838330E3B08B836CE3B2C3B2C08E964E8B82BE3060B9%
+CA8B4C8A1889AF61B6BCC3B2D9A18CE1543E94798F29CABABA82C530678E6E59CBD2C390%
+6C4EBA8AD49593C4B2B3D3C9A68CA9898BC0A1BCB6D3B1C482C5306795B7805EB8C4BFDA%
+CA8F9166F890B6751FC4B2B3906C4EBA8AD4959392864E2D82C5306788EA4E0094D4756A%
+E0D6737088AB60AAC58EED7A2E91B065CF82C53067B1AFC0BFB382BE3060A1BAC98F9166%
+F890B6751FC4B2B3C9CA8E9E66428158300589E4621181583005A695DF6355B4C38ECF71%
+6EC3904898DFB3C4B2B398628A7182C53067B1D9A1BCB6BCBFC993965F538E9E6642CA89%
+BD4F55C4B2B38D6C8003D3C5B6AFC0B6D795CA522592696BB58BB06050BCB2C4D38E7660%
+1DDCC5B6AFC0A1C082BE306094DE5F7CC98FB6638CC68DDA8F09BED7DAC3835830B9B0C4%
+8E9D6301C18FE34E0A82B03052D7DAC08E9E664289BD4F5582BE3060B6837430D5838F30%
+EF837430D5838F30EFBCC08AB4611F82B6305882AA304CB1AFC082CE3070B6D882C53067%
+B1D9A18FB6638CC98FE34E0A82C530678FAD5C11BC978E843DC1C2B2C38F9166F890B675%
+1FC98AE79854A68CA9898BC0C982AA304CB2DCD5D9906C4EBA8AD49593C4B2B3D3C9C98C%
+A9898B8E6E59CB82C53067B1DBB3A1BAC98E9E664296AD5999C5D3C982BE3060C48E7660%
+1DAFC08AB4611F82B6305882AA304C8DA14ECA82C53067D38E636B8BAFC3B2D9A191E67B%
+2C88EA4E0096D16BDBA6D3AFC3919588C58FFC98FEBBDA82D73079B7CA82B8305AC98AE7%
+985482AA304CC2D9C2D9BCC3CFD982C5306796F285AC8ACA7F3682BE3060A1BFC98CE35F%
+8C944C732BC6D382BE3060B282D4307688A79022AFC082AA304CBADDC595D0724797D68F%
+2AC6CA88EA4E0093785EA6D38F6F51FA89EF4F1ADCBCC08E964E8B82AA304CC5B2A1C9D0%
+C5D782B8305A8AE79854C9905E771F92864E2D82AA304CB1CFD8C693CB7A818B4E8D77BC%
+C3B2D9A1BFB3BCC3BFC98C8A7A74C992864E2DB6D78E9E66428158300582D53077B382D5%
+3077B3C4898C7159A690815439B8A182C73069B3D388F454BDBE82DB307DB8C38EC05B9F%
+C68EE35F31AFC0A1BADA82AA304C906C4EBA8AD49593C988F998F2D1898C715991908349%
+C4B2B3D3C982C53067B1D98E964E8BCAD6B3D4B8BAC98DA09803926D77E5AFC0A1%
+}
+\bxjl@text{wagahai}{3}{%
+% この書生の掌の裏でし…
+BAC98F9166F890B6751FC98FB6638CC997A088CF82C53067BC82CE3070D7B8CAD6B29053%
+5FC38E9D6301C68DBF5750AFC3B5AFC082AA304CA4BC82CE3070D7B8BDD9C494F1975E8F%
+ED5E38C591AC901F97CD529B82C53067895E904B935D8EE2BC8E6E59CBD2C0A18F9166F8%
+90B6751F82AA304C93AE52D5B8C9B68EA981EA95AA520682BE3060B982AA304C93AE52D5%
+B8C9B695AA5206D7C5B282AA304C96B3712188C36697C68AE1773C82AA304C89F45EFBD9%
+A18BB980F882AA304C88AB60AAB8C5D9A1939E523092EA5E958F9552A9B6D7C5B2C48E76%
+601DAFC3B2D9C4A482C73069BBD8C489B997F382AA304CBCC38AE1773CB6D789CE706B82%
+AA304C8F6F51FAC0A1BFDACF82C53067CA8B4C8A1889AF61B6BCC3B2D982AA304CB1C4CA%
+89BD4F55C98E964E8BD4D7B2B8D78D6C8003B48F6F51FABFB3C4BCC3D395AA5206D7C5B2%
+A1%
+}
+\bxjl@text{wagahai}{4}{%
+% ふと気が付いて見ると…
+CCC48B436C1782AA304C95744ED8B2C38CA9898BD9C48F9166F890B6751FCAB2C5B2A1C0%
+B8BBDDB5AFC08C5A514492ED5F1F82AA304C88EA4E009544758BD38CA9898BB4C7A18ACC%
+809D90535FC3C995EA6BCD906589AABBB48E7059FFA6894296A0BCC3BCCFAFC0A1BFC98F%
+E34E0A8DA14ECACF82C53067C98F8A6240C4CA88E19055AFC396B3712188C36697C696BE%
+660ED9B2A18AE1773CA696BE660EB2C3B2D7DAC7B8D7B282BE3060A1CAC3C589BD4F5582%
+C53067D397655BB98E715B5082AA304CB5B6BCB2C4A4C9BFC9BF94879019B28F6F51FABC%
+C38CA9898BD9C494F1975E8FED5E38C692C975DBB2A18CE1543E94798F29CA986D85C1C9%
+8FE34E0AB6D78B7D6025C68DF97B398CB4539FC992864E2DCD8AFC68C4C3D7DAC0C982C5%
+3067B1D9A1%
+}
+\bxjl@text{wagahai}{5}{%
+% ようやくの思いで笹原…
+D6B3D4B8C98E76601DB282C530678DF97B398CB4539FA694879019B28F6F51FABDC48CFC%
+5411B3C691E55927B7C592726C6082AA304CB1D9A18CE1543E94798F29CA92726C60C991%
+4F524DC68DBF5750AFC382C73069B3BCC0D7D6B6DBB3C48D6C8003B4C38CA9898BC0A195%
+CA5225C6BADAC4B2B395AA520695CA5225D38F6F51FAC5B2A1BC82CE3070D7B8BCC38B83%
+6CE3B2C0D78F9166F890B6751F82AA304CCFC08C7D8FCEC697886765C3B8DAD9B6C48D6C%
+8003B495744ED8B2C0A1836A30CB838330E3B0A4836A30CB838330E3B0C48E8E8A66D0C6%
+D4AFC38CA9898BC082AA304C924E8AB0D397886765C5B2A1BFC9B3C192726C60C98FE34E%
+0AA6BBD7BBD7C4959798A882AA304C936E6E21AFC393FA65E582AA304C95E966AEDAB6B6%
+D9A195A0817982AA304C94F1975E8FED5E38C68CB86E1BAFC397886765C0A18B836CE3B7%
+C0B8C3D390BA58F082AA304C8F6F51FAC5B2A18E644ED595FB65B982AA304CC5B2A489BD%
+4F5582C53067D3D6B2B6D7904898DF95A87269C9B1D98F8A6240CF82C53067B1D9BAB3C4%
+8C886C7A90535FC3A6BCC3BFDBD8BFDBD8C492726C60A68DB65DE6D8C689F45EFBD88E6E%
+59CBD2C0A182C73069B3D394F1975E8FED5E38C68BEA82E6BCB2A1BFBAA689E46211969D%
+6162BCC396B37121979D7406D4D8C694879019AFC38D73884CB8C4D6B3D4B8C98E964E8B%
+82C5306789BD4F55C4C5B8906C4EBA8AD495938F4C81EDB28F8A6240CD8F6F51FAC0A1BA%
+BACD9487901993FC5165AFC0D7A482C73069B3C6B6C5D9C48E76601DAFC3927C7AF98A5F%
+57A3C995F65D29DAC08C8A7A74B6D7A4C4B1D9934090B893E05185C6D382AE3050D88D9E%
+8FBCDD82BE3060A1898F7E01CA95734E0D8E76601D8B638B70C5D3C982C53067A4D3BCBA%
+C9927C7AF98A5F57A382AA304C946A7834DAC3B2C5B6AFC0C5D7A48CE1543E94798F29CA%
+C2B2C698488DEF9654508DC689EC99138E806B7BBCC0B6D3926D77E5DADDC982C53067B1%
+D9A188EA4E008EF76A39C988FC852DC4CAD6B8895D4E91AFC0D3C982BE3060A1BAC98A5F%
+57A38DAA6839C98C8A7A74CA8DA14ECA93FA65E5C68E8A81F3D9CF82C530678CE1543E94%
+798F2982AA304C97D796A389C65BB6C98E4F4E0996D16BDBA6964B8A2A96E2554FBDD98E%
+9E6642C992CA901A98488DEFC6C5AFC3B2D9A1BBC3934090B8CDCA94455FCD82D130738D%
+9E8FBCDD82BE3060D3C9C9BADAB6D790E6514882C73069B3BCC391505584B2B695AA5206%
+D7C5B2A1BFC9B3C1C688C36697B8C5D9A495A08179CA8CB86E1BD9A48AA65BD2BBCA8AA6%
+5BD2BCA4894A96E882AA304C8D7E964DAFC397886765D9C4B2B38E6E59CB9696672B82C5%
+3067D3B388EA4E008D8F523BC997507336975C4E8882AA304C8F6F51FA97886765C5B8C5%
+AFC0A18E644ED595FB65B982AA304CC5B2B6D7C4C6B6B896BE660ED9B8C392676696B6BF%
+B3C595FB65B9CD95FB65B9CDC4B1D9B2C38D73884CB8A18DA14ECAB6D78D6C8003B4D9C4%
+BFC98E9E6642CABD82C53067C689C65BB6C993E05185C69487901993FC5165AFC3B5AFC0%
+C982BE3060A1BABA82C530678CE1543E94798F29CA94DE5F7CC98F9166F890B6751F88C8%
+4EE58A4F5916C9906C4EBA8AD49593A68DC4518D82D130738CA9898BD982D73079B78B40%
+6A5F89EF4F1AC69198906D8BF69047BCC0C982C53067B1D9A191E67B2C88EA4E00C688A7%
+9022AFC0C982AA304CB5BBDD82C53067B1D9A1BADACA914F524DC98F9166F890B6751FD6%
+D888EA4E0091775C6497904E71965C66B4C595FB65B982C530678CE1543E94798F29A68C%
+A9898BD9D494DB5426D4B2B7C5D8E8F298388BD87B4BA6C2B6DD82C53067955C8868CD9D%
+65629BD88F6F51FABCC0A1B2D4BADACA91CA99C496DA76EE82BE3060C48E76601DAFC0B6%
+D78AE1773CA6C882D43076AFC3895E904BA693565929C694434EFBBEC3B2C0A1BCB6BCCB%
+D382B63058B2C9C48AA65BD2B2C9C6CA82C73069B3BCC3D389E46211969D616282AA304C%
+8F6F51FA97886765DDA18CE1543E94798F29CA8DC4518D82D13073B5BBDDC98C849699A6%
+8CA9898BC391E453F08F8A6240CD94879019B28FE34E0AAFC0A1BDD9C48AD49593D3C5B8%
+CFC0938A629582B030528F6F51FABBDAC0A18CE1543E94798F29CA938A629582B030528F%
+6F51FABBDAC3CA94879019B28FE34E0AD8A494879019B28FE34E0AAFC3CA938A629582B0%
+30528F6F51FABBDAA489BD4F5582C53067D393AF540C82B630588E964E8BA68E6C56DB8C%
+DC4E9495D5904D8C4A7E70D895D48FD4BCC0C9A68B4C8A1889AF61B6BCC3B2D9A1BFC98E%
+9E6642C6B5BBDDC4895D4E91B38ED28005CAC2B882C33065B8B2D4C6C5AFC0A1BAC98AD4%
+9593B5BBDDC98E4F4E09946E99ACA698F75078DD82C53067BAC995D48FD495F15831A6BC%
+C3D4AFC3B6D7A4D4AFC48BB980F8C9E17C75DE82AA304C89BA4E0BD8C0A18CE1543E9479%
+8F2982AA304C8DC567008CE35F8CC6C2CFD08F6F51FABBDAD6B3C4BCC0C4B7C6A4BAC989%
+C65BB6C98EE54E3B906C4EBA82AA304C919B9A1281583005BCB289BD4F5582BE3060C4B2%
+B2C582AA304CD78F6F51FAC397886765C0A189BA4E0B8F975973CA8CE1543E94798F29A6%
+82D43076D789BA4E0B82B03052C38EE54E3B906C4EBAC995FB65B9CD8CFC5411B9C3BAC9%
+8F685BBFC5BCC98FAC5C0F944C732B82AA304CB2B8D78F6F51FABCC3D38F6F51FABCC3D3%
+8CE45FA191E453F08F8A6240CD8FE34E0AAFC397886765C38DA256F0D8CFBDC4B2B3A18E%
+E54E3B906C4EBACA95409F3BC989BA4E0BC98D959ED2B296D16BDBA69451649AD8C582AA%
+304CD78CE1543E94798F29C98AE79854A6BC82CE3070D7B892AD773AD2C3B5AFC082AA30%
+4CA4D482AA304CC3BFDDC5D793E05185CD92757F6EB2C3D4DAC4B2AFC0CFCF899C5965CD%
+9487901993FC5165AFC3BCCFAFC0A18EE54E3B906C4EBACAB1CFD88CFB53E3A695B7805E%
+B6C7906C4EBAC48CA9898BB4C0A189BA4E0B8F975973CA8CFB53E390C960DCBCBFB3C68C%
+E1543E94798F29A691E453F08F8A6240CD9D65629BD88F6F51FABCC0A1B6B8BCC38CE154%
+3E94798F29CAC2B2C6BAC989C65BB6A68EA981EA95AA5206C98F5A4F4F89C65BB6C48BC9%
+6975D2D98E964E8BC6BCC0C982C53067B1D9A1%
+}
+\bxjl@text{wagahai}{6}{%
+% 吾輩の主人は滅多に吾…
+8CE1543E94798F29C98EE54E3B906C4EBACA96C56EC591BD591AC68CE1543E94798F29C4%
+8AE79854A68D875408BED98E964E8B82AA304CC5B2A1904580778BC6696DCA8BB365598E%
+745E2B82BE3060BFB382BE3060A18A775B668D5A6821B6D78B415E30D9C48F497D4293FA%
+65E58F9166F88DD6658EC69487901993FC5165AFC082AC304ED8CEC4DD82C730698F6F51%
+FAC397886765D98E964E8B82AA304CC5B2A189C65BB6C9D3C9CA91E5592795CF5909C595%
+D752C98BAD5F3789C65BB682BE3060C48E76601DAFC3B2D9A193965F53906C4EBAD395D7%
+52C98BAD5F3789C65BB682C53067B1D9B6C982B23054C4B88CA9898BBEC3B2D9A1BCB6BC%
+8EC05B9F8DDB969BCAB3C1C9D3C982AA304CB2B3D6B3C58BCE52E495D752C989C65BB682%
+C53067CAC5B2A18CE1543E94798F29CA8E9E66428158300594455FCD82D1307391AB8DB3%
+C694DE5F7CC98F9166F88DD6658EA694608997B2C38CA9898BD982AA304CA494DE5F7CCA%
+D6B8928B663C90515BDDA6BCC3B2D98E964E8B82AA304CB1D9A18E9E66428158300593C7%
+8AADD0B6B9C3B1D9967B672CC98FE34E0AC69FB56D8EA6C0D7BCC3B2D9A194DE5F7CCA88%
+DD80C38EE35F3182C5306794E776AE9586819AC99046827282AA304C92576DE189A99EC4%
+90468272A691D15E2F82D13073C392655F3E97CD529BC9C5B295734E0D8A886D3B94AC6E%
+8CC592A55FB48CF35019A6B1D7DCBCC3B2D9A1BFC995C87656C691E5592794D198EFA690%
+4898DFB3A191E5592794D198EFA6904898DFAFC08CE35F8C82C53067835E30BF834A30AB%
+835730B8838430E4835830B9835E30BFB0835B30BCA688F998F2D1A188F998F2DD82BE30%
+608CE35F8C82C530678F9166F895A87269A6CBDB82B03052D9A193F14E8C8E4F4E098379%
+30DAB0835730B893C78AADD1C496B07720B8C5D9A19FB56D8EA6967B672CC98FE34E0ACD%
+90825782D7BDA1BADA82AA304C94DE5F7CC996886BCE96E9591C8C4A7E70D895D48FD4BD%
+93FA65E589DB8AB282C53067B1D9A18CE1543E94798F29CA944C732BC582AA304CD78E9E%
+6642815830058D6C8003B4D98E964E8B82AA304CB1D9A18BB365598E745E2BC4B2B3D3C9%
+CA8EC05B9FC68A79697DC5D3C982BE3060A1906C4EBA8AD49593C490B6751FDAC0D78BB3%
+65598E745E2BC4C5D9C68CC09650D9A1BADDC5C690515BDDC3B2C38BCE52E4CFD9D3C9C5%
+D7944C732BC682C53067D38F6F51FA97886765C78E964E8BCAC5B2C4A1BFDA82C53067D3%
+8EE54E3B906C4EBAC6895D4E91DCBED9C48BB365598E745E2BCE82C73069C2D7B2D3C9CA%
+C5B2BFB382C5306794DE5F7CCA974653CB9242905482AA304C97886765D993785EA6C689%
+BD4F55C4B6B6DDC4B695734E0D95BD5E73A696C29CF4D7BCC3B2D9A1%
+}
+\bxjl@text{wagahai}{7}{%
+% 吾輩がこの家へ住み込…
+8CE1543E94798F2982AA304CBAC989C65BB6CD8F5A4F4FD08D9E8FBCDD82BE306093965F%
+538E9E6642CAA48EE54E3B906C4EBA88C84EE58A4F5916C9D3C9C6CACAC5CA82BE306095%
+734E0D906C4EBA965D671B82C53067B1AFC0A182C73069BACD8D73884CAFC3D392B58DF3%
+C895744ED8B9D7DAC3918A76F88EE8624BC6BCC3B8DA8EE8624B82AA304CC5B6AFC0A1B2%
+B6C692BF73CD8F6491CDBBDAC5B6AFC0B6CAA48DA14ECA93FA65E5C68E8A81F3D9CF82C5%
+306796BC540D914F524DBBB4C2B9C3B8DAC5B2C982C53067D395AA5206D9A18CE1543E94%
+798F29CA8E644ED595FB65B982AA304CC5B2B6D7A48F6F51FA9788676593BE5F97D98CC0%
+9650D88CE1543E94798F29A693FC5165DAC3B8DAC08EE54E3B906C4EBAC99654508DC6B2%
+D98E964E8BA6C2C4D2C0A192A9671D8EE54E3B906C4EBA82AA304C905665B095B7805EA6%
+93C78AADD1C4B7CA954B5FC582B8305A94DE5F7CC99547819DC98FE34E0AC68FE64E57D9%
+A194DE5F7C82AA304C928B663C90515BDDA6BDD9C4B7CA954B5FC582B8305ABFC9947780%
+CC92864E2DC68FE64E57D9A1BADACAB1C582AA304CC18EE54E3B906C4EBA82AA304C8D44%
+597DB7C4B2B396F38A3382C53067CAC5B282AA304C95CA5225C68D5C69CBB28EE8624B82%
+AA304CC5B6AFC0B6D7D4D1A693BE5F97DDC982C53067B1D9A1BFC98CE35F8CB2DBB2DB8C%
+6F7D4C8CB19A13C98FE34E0AA492A9671DCA94D198EF9F436AC3C98FE34E0AA496E9591C%
+CAE07870ACE09D71F5C98FE34E0AA4935659298B436C17C9D6B2928B663CCA9EBB693D91%
+A45074CD90515BDDD98E964E8BC4BCC0A1BCB6BC88EA4E0094D4756A90535FC38E9D6301%
+C98D44597DB2C9CA96E9591CC693FC5165AFC3BABAC9B3C1C98FAC5C0F8B9F4F9BC99051%
+5BDD8FB05E8ACDD382AE3050D88D9E8FBCDD82C53067B2AFBCAEC6C8D98E964E8B82C530%
+67B1D9A1BAC98FAC5C0F8B9F4F9BC4B2B3C9CA8CDC4E94C2C48E4F4E09C282C5306796E9%
+591CC6C5D9C493F14E8C906C4EBA82AA304C88EA4E00C28FB05E8ACD93FC5165AFC388EA%
+4E008AD49593CD90515BDDD9A18CE1543E94798F29CAB2C282C53067D394DE5F7C93997B%
+49C992864E2D8AD49593C68CC85DF1DAA697655BB9D982D73079B7975D4F59926E5730A6%
+8CA9898B8F6F51FABCC382C73069B3C6B6A4BAB3C6B68A845272D88D9E8FBCD1C982C530%
+67B1D982AA304CA4895E904B88AB60AAB88FAC5C0F8B9F4F9BC988EA4E00906C4EBA82AA%
+304C8AE1773CA690C19192CFBD82AA304C8DC567008CE35F8C91E5592795CF5909C58E96%
+4E8BC6C5D9A18FAC5C0F8B9F4F9BCA815C2015815C2015BAC4C68FAC5C0FBBB295FB65B9%
+82AA304C8EBF8CEA82AA304CDCD9B2815C2015815C2015944C732B82AA304C97886765C0%
+944C732B82AA304C97886765C0C4B2AFC396E9591C92864E2D82C53067D389BD4F5582C5%
+3067D391E55927B7C590BA58F082C530678B836CE3B78F6F51FABDC982C53067B1D9A1BD%
+D9C497E14F8BC9905F795E8C6F7D4C88DD80C38EE35F3190AB6027C98EE54E3B906C4EBA%
+CA954B5FC582B8305A8AE1773CA6BBCFBCC38E9F6B21C9959490E889AE5C4BB6D794F298%
+DB82D130738F6F51FABCC3B8D9A18CBB73FEC6BEDD82BE3060AFC3C582C73069CA95A872%
+698E77630782C53067904B5C3B82D8307AC0A6CB82C73069B8924053E9B6DAC0A1%
+}
+\bxjl@text{wagahai}{8}{%
+% 吾輩は人間と同居して…
+8CE1543E94798F29CA906C4EBA8AD49593C493AF540C8B8F5C45BCC394DE5F7C93997B49%
+A68ACF89B38E405BDFBDDA82CE3070BDD9CE82C73069A494DE5F7C93997B49CA89E46211%
+98D45118C5D3C982BE3060C4926665AD8CBE8A00BE82B43056D9A693BE5F97C5B2D6B3C6%
+C5AFC0A1BAC4C68CE1543E94798F2982AA304C8E9E66428158300593AF540CE5CE887EBD%
+D98FAC5C0F8B9F4F9BC982B23054C4B7C68E8A81F3AFC3CA8CBE8A008CEA8A9E93AF540C%
+926665AD82C53067B1D9A18EA981EA95AA5206C98F9F52DD8EE8624BC58E9E6642CA906C%
+4EBAA68B749006BBC6BCC0D8A493AA982DCD91DC888BA6B682D43076BEC0D8A49D65629B%
+D88F6F51FABCC0D8A4CDAFC2B2C992864E2DCD899F62BCBC8D9E8FBCDD82BE3060D8BDD9%
+A1BCB6D38CE1543E94798F29C995FB65B982C530678FAD5C11BC82C53067D38EE8624B8F%
+6F51FABCA6BCD6B3D3C9C5D789C65BB693E05185918D7DCF82AA304CB6D882C5306792C7%
+8FFDB289F45EFBBCC394978FEB8A515BB3A689C152A0B4D9A1BAC98AD49593D3C1AEAFC4%
+8FF4757382C5306792DC722AA6968178E8B282BE3060D78DD77D308C4E541B82AA304C94%
+F1975E8FED5E38C6937B6012AFC3BFDAB6D797655BB988D56613C68DC05EA7957E6577CD%
+93FC5165DAC5B2A191E453F08F8A6240C994C2677FC98AD4959382C5306791BC4ED682AA%
+304CE8FA986BB4C3B2C3D388EA4E008CFC541195BD5E738B436C17C5D3C982C53067B1D9%
+A18CE1543E94798F29C991B85C0A8C68656CBDD98BD87B4B8CFC5411C99492767D8C4E54%
+1BC582C73069CA88A79022B393785EA696886BCEC6906C4EBA8AD49593CE82C730699573%
+4E0D906C4EBA8FEE60C5C5D3C9CAC5B2C48CBE8A00AFC3B5D7D9D9A19492767D8C4E541B%
+CA90E6514893FA65E58BCA7389C9D6B3C58E715B50944C732BA68E6C56DB9544758B8E59%
+7523CFDAC0C982C53067B1D9A1C4BADB82AA304CBFBAC989C65BB6C98F9166F890B6751F%
+82AA304C8E4F4E0993FA65E596DA76EEC6BFB2C2A697A088CFC992726C60CD8E9D6301AF%
+C38D73884CAFC38E6C56DB9544758BC582AA304CD78AFC68C4C3C397886765C0BFB382BE%
+3060A19492767D8C4E541BCA97DC6D99A697AC6D41BCC3BFC988EA4E00959490E88E6E59%
+CB8F497D42A698628A71BCC08FE34E0AA482C73069B3BCC3D389E4621193997B49944C73%
+2B91B065CF82AA304C906589AA8E715B50C988A4611BA68AAE5B8CB8BCC394FC7F8EBCB2%
+89C65BB691B065CF9349768490B6751F8A886D3BA6BDD9C6CA906C4EBA8AD49593C490ED%
+6226AFC3BADAA69996527F96C56EC5BEC882CE3070C5D7C7C4B2DCDAC0A188EA4E008158%
+3005D3AFC4D3C98B638B70985F8AD6C48E76601DB3A1CFC097D796A3D8C98E4F4E0996D1%
+6BDB8C4E541BC582C73069CA906C4EBA8AD4959382AA304C8F8A6240974C67098CA06A29%
+C4B2B38E964E8BA689F089E3BCC3B2C5B2C4B2AFC391E55927C695AE61A48A536168BCC3%
+B2D9A18CB351439788676589E462118158300593AF540C91B065CF8AD4959382C53067CA%
+96DA76EE8E68523AC993AA982D82C53067D3E9DD9C21C9E46081CD82C53067D388EA4E00%
+94D4756A90E65148C68CA9898B95744ED8B9C0D3C982AA304CBADAA6904898DFB38CA06A%
+299798522982AA304CB1D9D3C9C4C5AFC3B2D9A1D3BC918A76F88EE8624B82AA304CBAC9%
+8B4B898F96F17D04A68EE75B88D7C5B9DA82CE30709872815597CD529BC691698A34B4C3%
+91505584B2B8D7B2C9D3C982BE3060A1BCB6D9C694DE5F7C93997B49906C4EBA8AD49593%
+CA9F7C6BEBD3BAC98ACF89B3944F5FF582AA304CC5B2C48CA9898BB4C389E4621193997B%
+4982AA304C8CA9898B95744ED8B9C08CE45FA1927999B391968D70CA954B5FC582B8305A%
+94DE5F7C93997B49C9C0D2C697A963A09244596ABED7D9D9C982C53067B1D9A194DE5F7C%
+93997B49CABFC98BAD5F3797CD529BA6978A983CDD82C5306790B36B6393965F53C68CE1%
+543E906C4EBA82AA304C904898DFB293BE5F9782D73079B7D3C9A69244596AAFC3BDCFBC%
+C3B2D9A19492767D8C4E541BCA8C528ECD906C4EBAC989C65BB6C6B5D88E4F4E0996D16B%
+DB8C4E541BCA91E34EE38CBE8A00C98EE54E3B906C4EBAA68E9D6301AFC3B2D9A18CE154%
+3E94798F29CA8BB365598E745E2BC989C65BB6C68F5A4F4FDD82C53067B2D982BE3060B9%
+A4BADDC58E964E8BC68AD695A2BDD9C497BC4E218C4E541BD6D8D3D1BCDB8A79697D9356%
+592982C53067B1D9A1C082BE3060BFC993FA65E5BFC993FA65E582AA304C82C73069B3C6%
+B6BAB3C6B691979001D7DADA82CE3070D6B2A1B2B8D7906C4EBA8AD4959382BE3060AFC3%
+A4BFB3B2C2CF82C53067D389686804B4D98E964E8BD3B1D9CFB2A1CFB18B436C17A68969%
+6C38B8944C732BC98E9E664290DF7BC0A691D25F85C282AA304CD6B6DBB3A1%
+}
+\bxjl@text{wagahai}{9}{%
+% 我儘で思い出したから…
+89E4621198D4511882C530678E76601DB28F6F51FABCC0B6D7C1AEAFC48CE1543E94798F%
+29C989C65BB6C98EE54E3B906C4EBA82AA304CBAC989E4621198D4511882C530678EB859%
+3194736557BCC098628A71A6BCD6B3A18CB3514397886765BAC98EE54E3B906C4EBACA89%
+BD4F55C4B2AFC3906C4EBAC68F9F52DDDAC38F6F51FA97886765D98E964E8BD3C5B282AA%
+304CA489BD4F55C682C53067D3D6B88EE8624BA68F6F51FABCC082AA304CD9A1946F4FF3%
+8BE553E5A6D4AFC3CEC4C482AC304EBDCD938A62958F9166F8A6BCC0D8A4905665B091CC%
+4F538E8D8A69A696BE660E90AF661FCD8F6F51FABCC0D8A48AD4959388E19055B282BE30%
+60D7B9C9897082F195B66587A6B6B2C0D8A48E9E6642C6D6D9C48B7C5F13C68BC351DDAF%
+C0D8A497778B21A68F4B7FD2AFC0D8A4CFC0B1D9C4B7CA839430F4834030A1834330A483%
+4930AA838A30EA839330F3C582C73069A6837530D6B0837530D6B096C29CF4D7BCC0D8BD%
+D982AA304CA48B436C17C993C56BD2C58E964E8BC6CAA482C73069DAD3BADAD395A87269%
+C6C5AFC3B5D7DDA1BFC995C87656D4D88F6F51FABDC488DD80C38EE35F31C995C87656C6%
+B2D4C6944D71B190535FC382BE3060A18CE35F8C89CB67B6C992864E2D82C5306797778B%
+21A6B3C0AFC3A48BDF8FD18F8A624082C530678CE35F8C89CB67B690E6514890B6751FC4%
+9FD36E3E96BC540DA6C2B9D7DAC3B2D9C6D38AD695A2BE82B8305A88EA4E008CFC541195%
+BD5E738B436C17C5D3C982C53067A4D4CAD8BADACA95BD5E73C98F405B9790B776DBC6C3%
+8CF35019A68C4A7E7095D48FD4BCC3B2D9A1D0DDC582AA304CBFD78F405B9790B776DB82%
+BE3060C490815439B78F6F51FABDB8D7B282C53067B1D9A1BAC98EE54E3B906C4EBA82AA%
+304C82C73069B3B2B38D6C8003C6C5AFC0D3C9B68CE1543E94798F29C98F5A4F4FD08D9E%
+8FBCDD82C53067B6D788EA4E008C8E670882CE3070B6D88CE35F8CC9B1D98C8E6708C98C%
+8E67088B8B7D6693FA65E5C6A491E55927B7C595EF5305D0A692F163D082B03052C3B1DC%
+C082BE3060BCB88B415E30AFC397886765C0A189BD4F55A694838CB7AFC397886765C0C9%
+B6C48E76601DB3C490856C348DCA5F698A477D758BEF5177C496D16BDB954D7B46C4838F%
+30EF836230C3836730C8837D30DE839330F3C4B2B38E867D1982C530678DA14ECA93FA65%
+E5B6D797778B21D4946F4FF38BE553E5A6D4D2C38A477D75A6B6B88C886C7A90535FC3C4%
+8CA9898BB4C0A189CA679CBCC397827FCC93FA65E5B6D793965F5395AA5206C98AD49593%
+C4B2B3D3C9CA96886BCE93FA65E596886BCE93FA65E58F9166F88DD6658E82C53067928B%
+663C90515BDDD3BCC5B282C530678A477D7582CE3070B6D8B6B2C3B2D9A1BCB6BCBFC9B6%
+B78FE34E0A82B03052C0D3C9A68CA9898BD9C489BD4F55A6B6B2C0D3C9D4D7924E8AB0C6%
+D38AD3945192E85B9A82AA304CC2B6C5B2A193965F53906C4EBAD3B1CFD88AC37518B8C5%
+B2C48E76601DAFC0D3C9B6A4B1D993FA65E5BFC9974653CB906C4EBA82C5306794FC7F8E%
+8A775B66C4B6A6D4AFC3B2D9906C4EBA82AA304C97886765C08E9E6642C689BA4E0BC9D6%
+B3C598628A71A6BCC3B2D9C9A695B7805EB2C0A1%
+}
+\bxjl@text{wagahai}{10}{%
+% 「どうも甘くかけない…
+A282C73069B3D38AC37518B8B6B9C5B2D3C982BE3060C8A1906C4EBAC9A68CA9898BD9C4%
+89BD4F5582C53067D3C5B2D6B382BE306082AA304C8EA981EAD7954D7B46A6C4AFC38CA9%
+898BD9C48DA14ECA8D5866F4C9D6B3C6D182B8305AB6BCB88AB4611F82B8305AD9A3BADA%
+CA8EE54E3B906C4EBAC98F718FF089F961D082C53067B1D9A1C5D9CE82C730698DBC8A50%
+D8C9C5B28F8851E682BE3060A194DE5F7CC9974653CBCA8BE091D1898F7E01C98AE1773C%
+8BBE93E1897A8D8AC68EE54E3B906C4EBAC98AE79854A68CA9898BC582AA304CD7A4A2BF%
+B38F89521DD2B6D78FE34E0A8EE8624BC6CAB6B9C5B2BBA491E67B2C88EA4E008EBA5BA4%
+93E05185C9917A60F3919C50CF82CE3070B6D882C5306789E6753B82AA304CB6B9D996F3%
+8A33C9D3C982C53067CAC5B2A190CC6614BC88C84EE591BE592A97985229C991E5592789%
+C65BB6834130A2839330F3836830C9838C30EC834130A2A5836630C7838B30EBA5835430%
+B5838B30EB836730C882AA304C8CBE8A00AFC08E964E8B82AA304CB1D9A189E6753BA6B6%
+B8C5D789BD4F5582C53067D38EA981EA91527136BFC995A87269A68ECA5199BEA1935659%
+29C690AF661F92438FB0B1D8A1926E5730C69849973289D883EFB1D8A194F298DB82D430%
+76C68BD779BDB1D8A191968D70D9C68F627363B1D8A192726C60C68BE091D18B9B9B5AB1%
+D8A18CCD67AF96D86728C68AA65BD2E9EB9D09B1D8A18EA981EA91527136CABADA88EA4E%
+00959D5E45C991E559278A886D3B89E6753BC5D8C4A182C73069B382BE30608C4E541BD3%
+89E6753BD7BCB289E6753BA6B6BAB3C48E76601DB3C5D7C1C48ECA519990B6751FA6BCC0%
+D7A3%
+}
+\bxjl@text{wagahai}{11}{%
+% 「へえアンドレア・デ…
+A2CDB4834130A2839330F3836830C9838C30EC834130A2A5836630C7838B30EBA5835430%
+B5838B30EB836730C882AA304CBFDDC58E964E8BA6B2AFC08E964E8B82AA304CB1D9B6B2%
+A1C1AFC4D3926D77E5D7C5B6AFC0A1C5D9CE82C73069BAD8ACD3AFC4D382BE3060A18EC0%
+5B9FC6BFC992CA901AD882BE3060A3C48EE54E3B906C4EBACA96B3712188C36697C68AB4%
+611F90535FC3BCC3B2D9A18BE091D1898F7E01C997A088CFC6CA9A7D5632B9D9D6B3C58F%
+CE7B1182AA304C8CA9898BB4C0A1%
+}
+\bxjl@text{wagahai}{12}{%
+% その翌日吾輩は例のご…
+BFC997827FCC93FA65E58CE1543E94798F29CA97E14F8BC982B23054C4B89EBB693D91A4%
+5074C68F6F51FAC390535FC38E9D630191505584B8928B663C90515BDDA6BCC3B2C0D7A4%
+8EE54E3B906C4EBA82AA304C97E14F8BC6C5B88F9166F88DD6658EB6D78F6F51FAC39788%
+6765C38CE1543E94798F29C98CE35F8CDB82C5306789BD4F55B6BCB7D8C6D4AFC3B2D9A1%
+CCC48AE1773C82AA304C8A6F899AD2C389BD4F55A6BCC3B2D9B6C488EA4E0095AA520682%
+CE3070B6D88DD77D3096DA76EEC68AE1773CA6B1B9C38CA9898BD9C4A494DE5F7CCA975D%
+4F59944F5FF5D3C5B8834130A2839330F3836830C9838C30EC834130A2A5836630C7838B%
+30EBA5835430B5838B30EB836730C8A68BC96975D28D9E8FBCDD82C53067B2D9A18CE154%
+3E94798F29CABAC9974C6709976C69D8A68CA9898BC38A6F899AB482B8305A8EB859318F%
+CE7B11BDD9C9A68BD6798182B6305893BE5F97C5B6AFC0A194DE5F7CCA94DE5F7CC99746%
+53CBC69D8863F69D8963C4BED7DAC0D98C8B7D5089CA679CC4BCC3CF82B8305A8EE8624B%
+8F89521DD2C68CE1543E94798F29A68ECA519990B6751FBCC2C2B1D9C982C53067B1D9A1%
+8CE1543E94798F29CABD82C53067C68F5C534195AA520690515BDDC0A18C876B20904C4F%
+3882AA304CBCC0B8C3C0CFD7C5B2A1BCB6BCBEAFB6B88EE54E3B906C4EBA82AA304C944D%
+71B190535FC3C6954D7B46A68EB757F7AFC3B2D9C9A693AE52D5B2C3CA8B436C17C993C5%
+6BD282BE3060C48E76601DAFC3A482B63058AFC490688F9B965F68D2BCC3B5AFC0A194DE%
+5F7CCA8DA14ECA8CE1543E94798F29C997D68F2A8A665ED3A6B6B78FE34E0A82B03052C3%
+8AE79854C9B1C0D8A6904682728DCA5F69AFC3B2D9A18CE1543E94798F29CA8EA981EA94%
+92767DBDD9A18CE1543E94798F29CA944C732BC4BCC38C886C7ABCC38FE34E0A8FE64E57%
+C98F6F51FA9788676582C53067CAC5B2A1947780CCC4B2B296D16BDB95C04E26C4B2B28A%
+E79854C991A290208DEC4F5CC4B2B2B1B4C391BC4ED6C9944C732BC68F9F52DDD9C4CA8C%
+886C7ABCC38E76601DAFC3B5D7DDA1BCB6BCB2B8D795734E0D8AED566897CA91CFC98CE1%
+543E94798F2982C53067D3A48DA14ECA8CE1543E94798F29C98EE54E3B906C4EBAC69560%
+63CFB78F6F51FABBDAC2C2B1D9D6B3C596AD5999C58E7059FFC4CAA482C73069B3BCC3D3%
+8E76601DDCDAC5B2A191E67B2C88EA4E009046827282AA304C88E19055B3A18CE1543E94%
+798F29CA94676CE28E7A65AF8E597523C9944C732BC982B23054C4B889A99EC4A68ADC54%
+2BD2D992576DE18A44707090468272C68EBD6F06C982B23054C4B794C1659193FC5165D8%
+C994E776AE9586819AA6974C6709BCC3B2D9A1BADA82BE3060B9CA924E8AB082AA304C8C%
+A9898BC3D38B5E7591B382D73079B6D782B43056D98E964E8B8EC05B9FC48E76601DB3A1%
+BCB6D9C68DA14ECA8EE54E3B906C4EBAC98DCA5F6990468272A68CA9898BD9C4A489A99E%
+C482C53067D3C5B9DA82CE30708D959ED282C53067D3C5B2A48A4470709046827282C530%
+67D3C5B9DA82CE30708A8C89109046827282C53067D3C5B2A4BBDA82CE3070C4C3BADAD7%
+A68CF04EA482BA305CC09046827282C53067D3C5B2A1C082BE306088EA4E008EED7A2EC9%
+9046827282C53067B1D9C4B2B3D6D8CEB6C6955D8A55BC95FB65B9C9C5B29046827282C5%
+3067B1D9A1BFC98FE34E0A95734E0D8E76601D8B638B70C58E964E8BCA8AE1773C82AA30%
+4CC5B2A1D3AFC4D3BADACA90515BDDC3B2D9C4BADBA68ECA519990B6751FBCC0C982BE30%
+60B6D796B37121979D7406D3C5B282AA304C8AE1773CD7BCB28F8A6240BBB48CA9898BB4%
+C5B2B6D796D376F2944C732B82BE3060B690515BDDC3B2D9944C732B82BE3060B694BB52%
+2491527136BCC5B2C982C53067B1D9A18CE1543E94798F29CA90535FC392864E2DCBBFB6%
+C6B2B8D7834130A2839330F3836830C9838C30EC834130A2A5836630C7838B30EBA58354%
+30B5838B30EB836730C882C53067D3BADA82C53067CABCD6B382AA304CC5B2C48E76601D%
+AFC0A1BCB6BCBFC9944D71B190535FC3C6CA8AB4611F959E670DBE82B43056D9A693BE5F%
+97C5B2A1C5D982D73079B8C5D793AE52D5B682B8305AC6B5AFC3D4D8C0B2C48E76601DAF%
+C082AA304CA4BBAFB7B6D78FAC5C0F95D64FBF82AA304C8DC350ACB3BCC3B2D9A190678E%
+AB93E05185C98BD87B4B93F78089CAD182B8305AD182B8305ABDD9A18DC56700918165E9%
+88EA4E0095AA5206D397507336975C4E8882AA304C8F6F51FA97886765C78E644ED58B56%
+5100C4C5AFC0B6D7A4D4D1A6B482B8305A8EB859318C68656CBCC397BC4E2191AB8DB3A6%
+914F524DCD91B65B5895AA5206C9BCC3A48EF19996A692E14F4EB8899F62BCBC8F6F51FA%
+BCC3B1B0B1C491E55927C5D98C876B20904C4F38A6BCC0A1BBC3BAB3C5AFC38CA9898BD9%
+C4A4D3B3B5C4C5BCB8BCC3B2C3D38E644ED595FB65B982AA304CC5B2A182C73069B3BE8E%
+E54E3B906C4EBAC9975C4E8892E85B9ACA91C56253C189F358CADCBCC0C982BE3060B6D7%
+A4C2B282C53067C697A088CFCD8D73884CAFC397707528A691AB8DB3BFB3C48E76601DAF%
+C3C9BFC9BF94879019B28F6F51FABCC0A1BDD9C48EE54E3B906C4EBACA8EB85931965D67%
+1BC4937B6012D8A6917E63BBB78CF04EA482BA305CC0D6B3C590BA58F0A6BCC3A48DC05E%
+A7957E6577C992864E2DB6D7A2BAC9946E99AC8EAD9E7F96EC91CE985990CEA3C4937B60%
+1296C29CF4AFC0A1BAC98EE54E3B906C4EBACA906C4EBAA6946C7F75D9C4B7CA954B5FC5%
+82B8305A946E99AC8EAD9E7F96EC91CE985990CEC4B2B3C982AA304C95C8765682C53067%
+B1D9A1CEB6C688AB60AA8CFB53E3C98CBE8A00B2D6B3A6926D77E5D7C5B2C982BE3060B6%
+D78E644ED595FB65B982AA304CC5B282AA304CA48DA14ECACF82C5306790688F9B965F68%
+D2BCC0906C4EBAC98B436C17D3926D77E5D7C5B282C53067A496B3712188C36697C6946E%
+99AC8EAD9E7F96EC91CE985990CE8CC4547CDCD8CA8EB859318C68656C82BE3060C48E76%
+601DB3A1BFDAD395BD5E7390B6751F8CE1543E94798F2982AA304C94DE5F7CC9947780CC%
+92864E2DCD8FE64E57D98E9E6642C68FAD5C11BCCA8D44597DB28AE7985482C53067D3BD%
+D9C5D7BAC9969F6F2B946C7F75D38AC37518DD82B63058C38EF353D7B9D982AA304CA4BA%
+AFC1C995D64FBF97985229C6C5D98E964E8BCA89BD4F5588EA4E00C289F55FEBB8BCC3B8%
+DAC08E964E8BD3C5B2C9C6A48FAC5C0F95D64FBFC697A77ACBAFC0C9A6946E99AC8EAD9E%
+7F96EC91CE985990CEC4CA8D939177B2A18CB3514397886765906C4EBA8AD49593C4B2B3%
+D3C9CA8EA981EA8CC85DF1C997CD529B97CA91CFC6969D616282B63058C3D0DDC5919D58%
+9792B79577BCC3B2D9A18FAD5C11BC906C4EBA8AD49593D6D88BAD5F37B2D3C982AA304C%
+8F6F51FAC397886765C3E27A7A98D2C3D4D7C5B8C3CABAC990E6514882C73069BACF82C5%
+3067919D589792B79577BDD9B695AA5206D7C5B2A1%
+}
+\bxjl@text{wagahai}{13}{%
+% 我儘もこのくらいなら…
+89E4621198D45118D3BAC9B8D7B2C5D789E46211969D6162BDD982AA304C8CE1543E9479%
+8F29CA906C4EBA8AD49593C995734E0D93BF5FB3C6C2B2C3BADAD6D8D390946570947B50%
+0D94DF60B2BCD182D73079B795F1583193B99053A68EA88033C6BCC08E964E8B82AA304C%
+B1D9A1%
+}
+\bxjl@text{wagahai}{14}{%
+% 吾輩の家の裏に十坪ば…
+8CE1543E94798F29C989C65BB6C997A088CFC68F5C534192D8576A82CE3070B6D8C99283%
+83368980571282AA304CB1D9A18D4C5E83B8CAC5B282AA304CE06E701F9FAD6D12C4BCC0%
+90535FC38E9D6301C18D44597DB893FA65E5C993965F53D98F8A624082BE3060A1B3C1C9%
+8FAC5C0F8B9F4F9B82AA304CB1CFD8919B9A12B282C530678A79697D81583005928B663C%
+90515BDDC98F6F51FA97886765C5B28E9E6642D4A4B1CFD891DE90008BFC5C4882C53067%
+95A0817989C152A08CB86E1BC9D6B8C5B290DC6298C582C73069CAA48CE1543E94798F29%
+CAB2C282C53067D3BABACD8F6F51FAC38D5F6D6991527136C98B436C17A6977B990AB3C9%
+82AA304C97E14F8B82C53067B1D9A1B1D98FAC5C0F8F746625C989B87A4FB6C593FA65E5%
+C993F14E8C8E9E66428DA0980382C53067B1AFC082AA304CA48CE1543E94798F29CA928B%
+663C94D198EF8CE35F8C89F55FEBD6B888EA4E0090877761BCC08CE35F8CA4895E904B93%
+AE52D5B6C082AA304CC0BAC99283833689805712CDC495E06B69A6895E904B82CE3070BC%
+C0A192838336C996D86728C98DAA6839A688EA4E00967B672C88EA4E00967B672C9A6B55%
+C582AC304EC582AA304CD7A490BC897F91A45074C9909967498A5F57A3C9BF82CE3070CF%
+82C53067B8D9C4A48CCD67AF8B6583CAA6899F62BCBC937C5012BCC3BFC98FE34E0AC691%
+E55927B7C5944C732B82AA304C914F524D8CE35F8C95734E0D8A6F899AC690515BDDC3B2%
+D9A194DE5F7CCA8CE1543E94798F29C98BDF8FD182C33065B8C9D388EA4E008CFC541190%
+535FC395744ED8B682B43056D982B23054C4B8A4CFC090535FC395744ED8B8D396B37121%
+93DA981392857740C5D982B23054C4B8A491E55927B7C5EA8D9F3EA6BCC392B795778158%
+3005C491CC4F53A689A16A2AB4C396B07720AFC3B2D9A191BC4ED6C992EB5EAD93E05185%
+C694455FCD82D1307393FC5165D8C0D9D3C982AA304CB6B8CF82C5306795BD5E738B436C%
+17C690877761D7DAD9D3C9B6C4A48CE1543E94798F29CA90DE7A83B6C6BFC991E5592792%
+5F80C6C5D993785EA68BB980F8C68BC19A5AB682B43056D9A693BE5F97C5B6AFC0A194DE%
+5F7CCA8F837D1490887C8BC98D959ED2944C732B82C53067B1D9A1DC82B8305AB6C68CDF%
+5348A689DF904E82AC304EC0D991BE592A977A967DCAA493A7900F96BE660EC5D98CF551%
+4990FC7DDAA694DE5F7CC994E776AE9586819AC98FE34E0AC69D65629B82B03052B6B9C3%
+A4B7D7B7D7BDD98F5F67D496D16BDBC98AD49593D6D88AE1773CC68CA9898BB4C7898A70%
+8E82C53067D3945271C3B48F6F51FA82B8305AD9D6B3C68E76601DDCDAC0A194DE5F7CCA%
+944C732B92864E2DC991E5592789A4738BC4D3895D4E91B382D73079B7CE82C73069C988%
+CC504991E55927C5D991CC4F538A69683CA6974C6709BCC3B2D9A18CE1543E94798F29C9%
+947B500DCAC0BCB6C6B1D9A18CE1543E94798F29CA925156068FDC8CDEC9944F5FF5C4A4%
+8D44597D8AEF5947C990535FC3C6914F524D8CE35F8CA696595FD8DAC394DE5F7CC9914F%
+524DC698C84F4797A77ACBBCC3975D4F59944F5FF5D3C5B892AD773AD2C3B2D9C4A490C3%
+9759B6C5D98FAC5C0F8F746625C9959798A882AA304CA4909967498A5F57A3C98FE34E0A%
+B6D78F6F51FAC0D98CE668A78BCB6850C98E7D679DA68C798EFDB897558A98AFC382CE30%
+70D782CE3070D7C493F14E8C8E4F4E099687679AC99774844982AA304C8CCD67AF8B6583%
+CAC996CE8302D0C6978E843DC1C0A191E5592789A4738BCAB6AFC4BFC9905E771F8ADB4E%
+38C98AE1773CA68A4A958BB2C0A18DA14ECA82C53067D38B4C8A1889AF61B6BCC3B2D9A1%
+BFC98AE1773CCA906C4EBA8AD49593C992BF73CD8F6491CDBDD9E0E67425E0DF73C0C4B2%
+B3D3C9D6D8D397799065B6C694FC7F8EBCB88B508F1DB2C3B2C0A194DE5F7CCA90678EAB%
+93AE52D5B7D3BCC5B2A1916F53CCE1C67738C9899C5965B6D78ECB5C04D982B23054C4B7%
+8CF55149A68CE1543E94798F29C9E1E277EE8FAC5C0FC5D98A7A984DC98FE34E0AC6B1C2%
+D2C3A48CE45FA1D2B4CA88EA4E0091CC4F5389BD4F5582BE3060C4895D4E91AFC0A191E5%
+592789A4738BC6BCC3CA8FAD5C11815830058CBE8A009774844982AA304C94DA5351BCB2%
+C48E76601DAFC082AA304C89BD4F55BCDBBFC990BA58F0C992EA5E95C68CA272ACA6D38D%
+C1632BBC82AE305082D73079B797CD529B82AA304CE2C47C60AFC3B2D9C982C530678CE1%
+543E94798F29CA8FAD5C11C5B6D782B8305A8BB06050DAA695F862B1B2C0A1BCB6BC88A5%
+63288E4162F6A6BCC5B2C48CAF967A93DB545182BE3060C48E76601DAFC0B6D7A28CE154%
+3E94798F29CA944C732B82C53067B1D9A196BC540D914F524DCACF82BE3060C5B2A3C4C5%
+D982D73079B895BD5E738B436C17A6919588C5AFC397E251B791527136C4939A7B54B4C0%
+A1BCB6BCBAC98E9E66428CE1543E94798F29C990535FC3919F81D3CAC0BCB6C695BD5E73%
+8E9E6642D6D8D397F370C8BCB88CDB9F1393AE52D5BCC3B5AFC0A194DE5F7CCA91E55927%
+C68C798EFD95CC8511BED992B28ABF8E715B5082C53067A289BD4F55A4944C732B82BE30%
+608148FF1F81403000944C732B82AA304C95B7805EB2C3B1B7DAD7B1A191535168C3B482%
+C73069BAC68F5A4F4FDD82C53067D9DD82BE3060A3908F968F95AA52069654508D8EE182%
+E596B37121906C4EBA82C53067B1D9A1A28CE1543E94798F29CABABAC98BB365598E745E%
+2BC989C65BB6C6B2D9C982BE3060A3A282C73069B3BEBFDDC58E964E8B82BE3060DBB3C4%
+8E76601DAFC0A1B2D4C6E18B7620BEC3D982B63058ACC8B4B6A3C491E5592789A4738B82%
+BE3060B9C68B436C17898B7114A690815439B7B6B9D9A18CBE8A009774844995744ED8B6%
+D78E405BDFBDD9C482C73069B3D397C7826F89C65BB6C9944C732BC4D38E76601DDCDAC5%
+B2A1BCB6BCBFC98D70818F90D85207AFC394EC80A5969E6E80BCC3B2D9C4BADBA68CA989%
+8BD9C48CE45FA1927999B391968D70A6904898DFAFC3D9D7BCB2A4964C8C4AB6C695E966%
+AEBCC3B2D9D7BCB2A18CE1543E94798F29CAA2BFB3895D4E91B38C4E541BCA88EA4E0091%
+CC4F53924E8AB082BE3060B2A3C495B7805EB682B43056D9A693BE5F97C5B6AFC0A1A28C%
+C85DF1DAB18ED48ECA89AE5C4BC98D959ED2D6A38D56660291527136C0D9D3C982BE3060%
+A18ED48ECA89AE5C4BC98D959ED2CABAC98BDF8FD195D38FBA82C53067926D77E5D7C78E%
+D28005C5B797904E71965C66B4944C732B82C53067B1D9A1BCB6BC8ED48ECA89AE5C4B82%
+BE3060B9C68BAD5F37B282CE3070B6D882C53067C1AFC4D38BB3655988E780B282AA304C%
+C5B2B6D7B1CFD8924E8AB0D38CF04EA48DDB969BBCC5B2A193AF540C96BF76DF8C68656C%
+899390608EE54E3B8B607FA9C993497684C6C5AFC3B2D9937A597482BE3060A18CE1543E%
+94798F29CA94DE5F7CC996BC540DA695B7805EB2C38FAD5C1181583005904B5C3BBABF82%
+CE3070D5B78AB4611F82B63058A68B4E8D77BDC493AF540C8E9E6642C6A488EA4E0095FB%
+65B982C53067CA8FAD5C11815830058C798EFD958E4FAEC9944F5FF5D390B6751F82B630%
+58C0C982C53067B1D9A18CE1543E94798F29CACF82B8305A94DE5F7C82AA304C82C73069%
+C9B8D7B296B371218A775B6682C53067B1D9B6A68E8E8A66BCC3D0D6B3C48E76601DAFC3%
+8DB65DE6C996E2554F939A7B54A6BCC38CA9898BC0A1%
+}
+\bxjl@text{wagahai}{15}{%
+% 「一体車屋と教師とは…
+A288EA4E0091CC4F538ED48ECA89AE5C4BC48BB365598E745E2BC4CA82C73069AFC182AA%
+304CB4D7B282BE3060DBB3A3%
+}
+\bxjl@text{wagahai}{16}{%
+% 「車屋の方が強いに極…
+A28ED48ECA89AE5C4BC995FB65B982AA304C8BAD5F37B2C68BC96975AFC3B2D7B1C5A18C%
+E45FA1D2B4C9B3C1C98EE54E3B906C4EBAA68CA9898BC8B4A4CFD982C530678D9C9AA8C4%
+94E776AE82CE3070B6D882BE306082BA305CA3%
+}
+\bxjl@text{wagahai}{17}{%
+% 「君も車屋の猫だけに…
+A28C4E541BD38ED48ECA89AE5C4BC9944C732B82BE3060B9C691E5592795AA52068BAD5F%
+37BFB382BE3060A18ED48ECA89AE5C4BC6B2D9C48CE45FA1927999B391968D7082AA304C%
+904898DFB4D9C48CA9898BB4D9C8A3%
+}
+\bxjl@text{wagahai}{18}{%
+% 「何におれなんざ、ど…
+A289BD4F55C6B5DAC5DD82B43056A482C73069BAC98D9156FDCD8D73884CAFC0AFC39048%
+98DFB295A87269C695734E0D8EA981EA97527531CABCC8B4C2D3D882BE3060A18CE45FA1%
+D2B4C5DDB6D39283833694A9756082CE3070B6D882AE3050D982AE3050D989F45EFBAFC3%
+B2C8B482C53067A4C1AFC48CC85DF1C98CE35F8CCDB8AF95744ED8B2C397886765C38CA9%
+898BC8B4A188EA4E00C48C8E6708C4C0C0C8B4B3C1C68CA9898B88E19055B4D9D6B3C691%
+BE592ADAD982BA305CA3%
+}
+\bxjl@text{wagahai}{19}{%
+% 「追ってそう願う事に…
+A292C78FFDAFC3BFB38AE89858B38E964E8BC6BCD6B3A1BCB6BC89C65BB6CA8BB365598E%
+745E2BC995FB65B982AA304C8ED48ECA89AE5C4BD6D891E55927B7B2C9C68F5A4F4FDD82%
+C53067B2D9D6B3C68E76601DDCDAD9A3%
+}
+\bxjl@text{wagahai}{20}{%
+% 「箆棒め、うちなんか…
+A295CD7B86965F68D2D2A4B3C1C5DDB6B2B8D791E55927B7B8C0AFC395A08179C991AB8D%
+B3BCC6C5D9D3DDB6A3%
+}
+\bxjl@text{wagahai}{21}{%
+% 彼は大に肝癪に障った…
+94DE5F7CCA91E55927C68ACC809DE19B766AC68FE1969CAFC0976C69D88E715B5082C530%
+67A48AA65BD2927C7AF9A6BFB282BE3060D6B3C58EA88033A6BCB7D8C482D23074B89574%
+4ED8B6BEC3B1D7D7B6C697A77ACBC18B8E53BBAFC0A18CE1543E94798F2982AA304C8ED4%
+8ECA89AE5C4BC98D959ED2C4926D77E58CC85DF1C6C5AFC0C9CABADAB6D782C53067B1D9%
+A1%
+}
+\bxjl@text{wagahai}{22}{%
+% その後吾輩は度々黒と…
+BFC98CE35F8C8CE1543E94798F29CA93785EA6815830058D959ED2C4E7AE9082E7909005%
+BDD9A1E7AE9082E7909005BDD996886BCEC694DE5F7CCA8ED48ECA89AE5C4B918A76F893%
+965F53C98B436C17898B7114A693665410B8A190E65148C68CE1543E94798F2982AA304C%
+8EA88033C6BCC0C4B2B395734E0D93BF5FB38E964E8B8C8F4EF6D38EC05B9FCA8D959ED2%
+B6D795B7805EB2C0C982C53067B1D9A1%
+}
+\bxjl@text{wagahai}{23}{%
+% 或る日例のごとく吾輩…
+88BD6216D993FA65E597E14F8BC982B23054C4B88CE1543E94798F29C48D959ED2CA9267%
+6696B6B29283833694A97560C992864E2D82C5306790515BDD935D8EE282D13073C582AA%
+304CD7B2DBB2DB8E4796D1926B8AC7A6BCC3B2D9C4A494DE5F7CCAB2C2D3C98EA981EA96%
+9D616298628A71BCA6BBD3905665B0BCBFB3C68C4A7E70D895D48FD4BCC0B1C482C53067%
+A48CE1543E94798F29C68CFC5411AFC389BA4E0BC982B23054C4B88EBF8CEA96E2554FBC%
+C0A1A28CE45FA1D2B4CA8DA14ECACF82C53067C6916C9F20A689BD4F5595435339C4AFC0%
+8E964E8B82AA304CB1D9A39271667A8EAF8B58CA8D959ED2D6D8D3975D4F5992F67A0B94%
+AD767A92429054BCC3B2D9C2D3D882BE306082AA304C9872815597CD529BC4974552C78B%
+436C17C4C68E8A81F3AFC3CA939E523092EA5E958D959ED2C994E46BD48A728F03C6CAC5%
+D7C5B2C48A6F899A8CE5609FCABCC3B2C0D3C9C9A4BAC996E2554FC690DA63A5BCC0D98E%
+9E6642CAA4BBBD82AA304CC68BC96975D882AA304C91505584B8CAC5B6AFC0A1B9DA82C7%
+3069D38E964E8B8EC05B9FCA8E964E8B8EC05B9F82C530678DBC8A50D996F38A33C6CA8D%
+73884CB6C5B2B6D7A48CE1543E94798F29CAA28EC05B9FCAC4DBB3C4DBB3C48E76601DAF%
+C3CF82BE306095DF6355D7C5B2A3C4939A7B54B4C0A18D959ED2CA94DE5F7CC995409F3B%
+C990E65148B6D782D23074DDC493CB7A8192A35F35AFC3B2D992B79577B295459AEDA682%
+D13073D882D13073D8C4906B9707DCBEC394F1975E8FED5E38C68FCE7B11AFC0A18CB351%
+43978867658D959ED2CA8EA981EA969D6162A6BDD98FE44E08C682C73069BAB691AB8DB3%
+D8C5B2C4BADB82AA304CB1AFC3A494DE5F7CC98B436C17898B7114A68AB4611F90535FC3%
+BCC0D6B3C688F454BD8D415589A6BADBBADB96C29CF4D7BCC38BDE8B3992AE8074BCC3B2%
+DA82CE3070CAC5CA82BE30608CE45FA1BCD4BDB2944C732B82C53067B1D9A18CE1543E94%
+798F29CA94DE5F7CC48BDF8FD195744ED8C6C5AFC3B6D792BC76F4C6BAC98CC4547C8B7A%
+5438A688F998F2D08D9E8FBCDD82BE3060B6D7BAC98FEA58348D875408C6D3C5CF82B630%
+58B28CC85DF1DAA695D95F018CEC8B77BCC3CFBDCFBD8C605F6290A852E2A6DCD9B8BDD9%
+C9D38BF0611A82C53067B1D9A4B2AFBFC98E964E8B94DE5F7CC68EA981EA95AA5206C98E%
+E8624B95BF67C498628A71A6BCAC82D73079D7BCC38CE45FA192838336A691F76FC1BDC6%
+8EE182E5B8CAC5B2C48E76601D88C46848A692E85B9AD2C0A1BFBA82C53067B5C4C5BCB8%
+A28C4E541BC582C73069CA944E5E7482AA304C944E5E7482C53067B1D9B6D791E5592795%
+AA5206C4AFC0DBB3A3C4BFBFC9B6BCC38CA9898BC0A189CA679C9152713694DE5F7CCA9A%
+D458BB95C758C1C98C876B208F8A6240C699E354369A5E558ABCC397886765C0A1A2C0DD%
+C482C53067D3C8B482AA304C8E4F4E098E6C56DB8F5C5341CAC4AFC0DBB3A3C4CA93BE5F%
+9788D3610F8B436C17C5D994DE5F7CC9939A7B5482C53067B1AFC0A194DE5F7CCAC5B58C%
+EA8A9EA6C282C33065B9C3A2916C9F20C99553767ED493F14E8C9553767ECA88EA4E0090%
+6C4EBA82C53067B2C282C53067D388F85F15B78EF353D7B9D982AA304CB2C0C1AFC3B493%
+7A5974CA8EE8624BC68D875408DCC8B4A188EA4E0093785EA6B2C0C1C68CFC5411AFC38D%
+939177B296DA76EEC688A79022AFC0A3A2CDB4C5D9CE82C73069A3C4918A76F892C669CC%
+A691C56253C2A18D959ED2CA91E55927B7C58AE1773CA682CF3071C1C2B6BEC3895D4E91%
+B3A1A28B8E53BB944E5E74C991E55927917C63838F9C9664C98E9E664282BE3060A1B3C1%
+C992E04EAD8EE54E3B82AA304C90CE77F38A447070C991DC888BA68E9D6301AFC39EBB69%
+3DC989BA4E0BCD94879019B28D9E8FBCDD82BE3060D78CE45FA1D2B491E55927B7C5B2C0%
+C1C996EC91CE985990CE82AA304C96CA97628BF255B0AFC394F298DB82D130738F6F51FA%
+BCC0C48E76601DB2C8B4A3A2CCDDA3C48AB4611F90535FC3BCC38CA9898BBED9A1A2B2C0%
+C1AFC3B982C73069D389BD4F55916C9F20C98FAD5C11BC91E55927B7B282AE3050DAB4C9%
+D3C982BE3060A1BADD927B755C90B6751FAFC38B436C1782C5306792C78FFDAFB6B9C3C4%
+B3C4B393446CE58D616E9DC992864E2DCD92C78FFDB28D9E8FBCDD82BE3060C48E76601D%
+B2C8B4A3A2B3CFB8D4AFC0C8A3C48A85559D8DD191C7BCC3D4D9A1A2C4BADB82AA304C8C%
+E45FA1D2B4B282B43056AFC3B492696BB5C6C5D9C4937A5974D28DC567008CE35F8CAF9B%
+9B5C41A6BAB7AC82AA304CAFC0A18F4C81EDB4C98F4C81EDB8C8B4C9AFC3BFDAB6D7AFC3%
+B4D3C9CAB2C0C1A68CA9898BD9C48BB980F882AA304C88AB60AAB8C5D7B1A394DE5F7CCA%
+BABAC68E8A81F3AFC3B1C0B6D38B8E53BB944E5E74C98F4C81ED8B436C17A68DA14ECAC5%
+B58AB4611F82B8305AD982B23054C4B8914F524D91AB8DB3A6976763DA82B03052C39540%
+9F3BC993AA982DA693F14E8C8E4F4E0995D5904DC582C5306789F45EFBDCBCC0A18CE154%
+3E94798F29D38FAD5C11815830058B436C17C993C56BD2C58AB4611F82B6305882AA304C%
+BDD9A1C1AFC48C69666F8B436C17A695744ED8B9C3D4DBB3C48E76601DAFC3A2BCB6BC91%
+6C9F20C5D78C4E541BC6E1C97768CFDAC3CA9553767E944E5E7496DA76EE82BE3060DBB3%
+A18C4E541BCAB1CFD8916C9F20A695DF6355D9C982AA304C96BC540D906C4EBA82C53067%
+916C9F2082CE3070B6D8904898DFB3D3C982BE3060B6D7BFDDC5C694EC80A5AFC3904682%
+72C2D482AA304C91505584B2C982BE3060DBB3A38D959ED2C98CE45FA18B406A5F8C995A%
+CCA6C4D9C0D2C9BAC98EBF8CEA96E2554FCA95734E0D8E76601D8B638B70C6D394BD53CD%
+91CE5BFEC98C8B7D5089CA679CA692E654488F6F51FABCC0A194DE5F7CCA9A5F559F9152%
+7136C4BCC391E5592791A7606FBCC3B2B3A1A28D6C800382B03052B4D9C4C2CFD7C8B4A1%
+B2B8D789D27A3CB282C53067916C9F20A6C4AFC0AFC3815C2015815C201588EA4E00C3B4%
+906C4EBA8AD49593CE82C73069CCC3B4937A5974CA90A24E16C992864E2DC6B2C8B482BA%
+305CA1906C4EBAC9C4AFC0916C9F20A6D0DDC58EE653D6D88FE34E0A82B03052D482AA30%
+4CAFC38CF04EA494D4756ACD8E9D6301AFC38D73884CB7ACB182AA304CD9A18CF04EA494%
+D4756A82B63058AC924E8AB082AA304C95DF6355AFC0B695AA5206D7C8B4B6D7BFC9C0DD%
+82D13073C68CDC4E94914B92AD82B8305AC2B8DAD982B63058ACC8B4B6A1B3C1C992E04E%
+AD8EE54E3BC5DDB68CC85DF1C98CE45FA188FC852D82C53067D3B388EB58F1897E51868C%
+DC4E948F5C5341914B92ADB8D7B296D75132B9C3B2D482AA304CD995C87656C6A4E1EF78%
+8CC5D3C9A6904898DFDCBEC08E964E8BD3B1D8ACBCC8B4A1B5B2906C4EBA8AD49593C3D3%
+C9B191CC4F53C991505584B293446CE5965F68D282BE306082BA305CA3BBBD82AA304C96%
+B371218A775B66C98D959ED2D3BAC9B8D7B2C9979D74068C417A9FCADCB6D9C48CA9898B%
+B4C3BDBA82D43076D9937B6012AFC097655BB98E715B5082C53067947780CC92864E2DC9%
+96D16BDBA68B74900697A77ACBC3C3B2D9A18CE1543E94798F29CA8FAD5C11815830058B%
+436C1796A1547382AA304C88AB60AAB8C5AFC0B6D791505584B289C152A08CB86E1BC6BF%
+C98FEA5834A68CD380E196829B5489BB5316BCC389C65BB6CD8B415E30AFC0A1BAC98E9E%
+6642B6D78CE1543E94798F29CA8C886C7ABCC3916C9F20A6C4D9CFB2C48C886C7A90535F%
+C3BCC0A1BCB6BC8D959ED2C98E715B5095AA5206C6C5AFC3916C9F2088C84EE58A4F5916%
+C98CE45FA1927999B391968D70A697C2731FAFC3B1D9B88E964E8BD3BCC5B6AFC0A18CE4%
+5FA1927999B391968D70A6904898DFB3D6D8D390515BDDC3B2C095FB65B982AA304C8B43%
+6C178A79697D82C53067B2B2A18BB365598E745E2BC989C65BB6C6B2D9C4944C732BD38B%
+B365598E745E2BC9D6B3C590AB60278EBF8CEAC6C5D9C48CA9898BB4D9A1977689819053%
+5FC3BCC5B2C48DA14ECAC688DD80C38EE35F31C6C5D9B6D3926D77E5DAC5B2A1%
+}
+\bxjl@text{wagahai}{24}{%
+% 教師といえば吾輩の主…
+8BB365598E745E2BC4B2B482CE30708CE1543E94798F29C98EE54E3B906C4EBAD38BDF8F%
+D18DA09803C68E8A81F3AFC3CA939E523092EA5E9590856C348DCA5F6989E6753BC6B5B2%
+C3965D671BC9C5B28E964E8BA68CE5609FAFC0D3C9C48CA9898BB4C38F5C534193F14E8C%
+8C8E670888EA4E0093FA65E5C993FA65E58B4C8A18C6BADDC58E964E8BA6B6B7C2B9C0A1%
+}
+\bxjl@text{wagahai}{25}{%
+% ○○と云う人に今日の…
+819B25CB819B25CBC4895D4E91B3906C4EBAC68DA14ECA93FA65E5C989EF4F1A82C53067%
+8E6E59CBD2C38F6F51FA88A79022AFC0A1B1C9906C4EBACA91E5592795AA520695FA653E%
+93A08569A6BCC0906C4EBA82BE3060C4895D4E91B382AA304CC5D9CE82C7306992CA901A%
+906C4EBAD7BCB2959798A88DD191C7A6BCC3B2D9A1BAB3895D4E91B38EBF8CEAC9906C4E%
+BACA8F975973C68D44597DB6DAD9D3C982BE3060B6D7819B25CB819B25CB82AA304C95FA%
+653E93A08569A6BCC0C4895D4E91B3D6D8D395FA653E93A08569A6BDD982D73079B8975D%
+4F598B565100C5B8BED7DAC0C4895D4E91B3C982AA304C934B906993965F5382C53067B1%
+DBB3A1B1C9906C4EBAC98DC859BB8C4E541BCA8C7C82B88ED2800582BE3060BFB382BE30%
+60A491417FA8CFBCB28E964E8B82C53067B1D9A18CB351439788676595FA653E93A08569%
+89C65BB6A688AB60AAB8B2B3906C4EBAC991E55927959490E895AA5206CA95FA653E93A0%
+8569A6BDD98E918CC78A69683CC9C5B2D3C982AA304C91BD591AB2A1CFC095FA653E93A0%
+856989C65BB6A6D3AFC38EA981EA94434EFBBDD99841902392864E2DC9B3C1C6D3A495FA%
+653E93A08569BDD98E918CC78A69683CC9C5B2D3C982AA304C91BD591AB2A1BADAD7CA97%
+5D4F598B565100C5B8BBDAC5B2C9C696B37121979D7406C690699032DD82C53067D4D9C9%
+82C53067B1D9A1B1C0B6D38CE1543E94798F29C990856C348DCA5F6989E6753BC6899765%
+BCB9D982AA304C82B23054C4B7D3C982C53067939E523092EA5E9591B253528BC6696DBD%
+D98B436C1782C33065B6B2CAC5B2A1BCB6D9C6D38AD695A2BE82B8305AA48EA981EA95AA%
+520682BE3060B9CA92CA901A906C4EBA82BE3060C48E76601DAFC38DCF6E08BCC3B2D9A1%
+97BF6599979D740689AE5C4BC98EF09152A688F998F2DD82BE3060D891D25F858D875408%
+CD9487901993FC5165D9B6D792CA901A906C4EBAC4C5D893BE5F97D9C4B2B3985F8AD682%
+AA304C97A77ACBC2C5D7A48CE1543E94798F29D388EA4E0097F55EC9C990856C348DCA5F%
+6989E6753B89C65BB6C6C5D893BE5F97D9979D74068C417A9F82BE3060A18CE1543E9479%
+8F29C990856C348DCA5F6989E6753BC982B23054C4B7CAB6B6C5B295FB65B982AA304CCF%
+BC82C53067B1D9C493AF540C82B63058D6B3C6A48BF0611A96866627C5D992CA901A906C%
+4EBAD6D8D38E525C718F6F51FABCC991E5592796EC91CE95E966AEC995FB65B982AA304C%
+97799065B6C68FE34E0A93997B4982BE3060A1%
+}
+\bxjl@text{wagahai}{26}{%
+% 通人論はちょっと首肯…
+92CA901A906C4EBA985F8AD6CAC1AEAFC48EF199968D6D80AFBCB6C8D9A1CFC08C7C82B8%
+8ED28005C98DC859BB8C4E541BA691417FA8BCB2C582C73069C4B2B3C4BADBCA8BB36559%
+8E745E2BC4BCC3CA8CFB53E3C6BD82D73079B6D782B43056D98BF0611A97F252A3C98D6C%
+800382C53067B1D982AA304CA48EA981EA8CC85DF1C990856C348DCA5F6989E6753BC6B5%
+B9D994E16279955D8A558AE1773C82BE3060B9CAC0BCB6C5D3C982BE3060A18EE54E3B90%
+6C4EBACAB6B8C982B23054C4B88EA981EA926D77E5C996BE660EB1D9C6D38AD695A2BE82%
+B8305ABFC98EA981EA8D9B60DA90535FC3CAC5B6C5B694B2629CB9C5B2A192864E2D93F1%
+4E8C93FA65E592757F6EB2C38F5C534193F14E8C8C8E67088E6C56DB93FA65E5C993FA65%
+E58B4C8A18C6BADDC58E964E8BA68F9166F8B2C3B2D9A1%
+}
+\bxjl@text{wagahai}{27}{%
+% 昨夜は僕が水彩画をか…
+8DF0662896E9591CCA966C50D582AA304C90856C348DCA5F6989E6753BA6B6B2C3939E52%
+3092EA5E9595A87269C6C5D7DDC48E76601DAFC3A4BFBAD7C69D65629BAFC392757F6EB2%
+C0C9A6924E8AB0B682AA304C97A77ACB94686D3EC58A7A984DC6BCC397936B048AD49593%
+C68C9C61F8B9C3B8DAC096B25922A68CA9898BC0A1BBC38A7A984DC6C5AFC0C4BADBA68C%
+A9898BD9C489E46211C582AA304CD78B7D6025C68FE34E0A8EE8624BC6C5AFC0A194F197%
+5E8FED5E38C68AF05B09BCB2A1BADAC5D797A77ACB94686D3EC5D3C982BE3060C493C672%
+ECD882C5306792AD773AD295E966AED7BCC3B2D9C4A496E9591C82AA304C96BE660EB9C3%
+8AE1773C82AA304C8A6F899AD2C3D4CAD88CB35143C992CA901AD889BA4E0B8EE8624B82%
+C53067B1D98E964E8B82AA304C92A9671D93FA65E5C48BA45171C696BE660E97C477ADC6%
+C5AFC3BCCFAFC0A1%
+}
+\bxjl@text{wagahai}{28}{%
+% 主人は夢の裡まで水彩…
+8EE54E3B906C4EBACA96B25922C997A188E1CF82C5306790856C348DCA5F6989E6753BC9%
+96A2672A97FB7DF4A6947780CC95898CA0AFC3B1D9B2C3B2D9C48CA9898BB4D9A1BADA82%
+C53067CA90856C348DCA5F6989E6753B89C65BB6CA96B37121985F8AD69576592B8E715B%
+50C98F8A624088E08B0292CA901A906C4EBAC6D3C5DAC5B28EBF8CEA82BE3060A1%
+}
+\bxjl@text{wagahai}{29}{%
+% 主人が水彩画を夢に見…
+8EE54E3B906C4EBA82AA304C90856C348DCA5F6989E6753BA696B25922C68CA9898BC097%
+827FCC93FA65E597E14F8BC98BE091D1898F7E018AE1773C8BBE93E1C994FC7F8E8A775B%
+668ED2800582AA304C8B764E45BC9055632FD882C530678EE54E3B906C4EBAA6964B8A2A%
+96E2554FBCC0A194DE5F7CCA8DC05EA7C6C2B8C4999C528893AA982D91E67B2C88EA4E00%
+C6A289E6753BCA82C73069B3B6C8A3C48CFB53E3A690D85207AFC0A18EE54E3B906C4EBA%
+CA95BD5E738B436C17C58AE79854A6BCC3A28C4E541BC992895FE08D90544AC68F5D5F93%
+AFC38ECA519990B6751FA697CD529BD2C3B2D982AA304CA4C5D9CE82C730698ECA519990%
+B6751FA6BDD9C48DA14ECACF82C530678B436C17C9C2B6C5B6AFC095A87269C98C605F62%
+D4A490468272C990B87CBE8DD77D30C595CF590989BB5316C582C7306982AA304CD6B895%
+AA5206D9D6B382BE3060A190BC897F976D6D0B82C53067CA90CC6614BCB6D78ECA519990%
+B6751FA68EE54E3B92A35F35BCC08C8B7D5089CA679C8DA14ECA93FA65E5C9D6B3C694AD%
+767A92429054BCC0D3C9C48E76601DDCDAD9A1BBBD82AA304C834130A2839330F3836830%
+C9838C30EC834130A2A5836630C7838B30EBA5835430B5838B30EB836730C882BE3060A3%
+C493FA65E58B4C8A18C98E964E8BCAB5B882D13073C6D38F6F51FABBC5B282C53067A4CF%
+C0834130A2839330F3836830C9838C30EC834130A2A5836630C7838B30EBA5835430B583%
+8B30EB836730C8C68AB4611F90535FC3BDD9A194FC7F8E8A775B668ED28005CA8FCE7B11%
+B2C582AA304CD7A28EC05B9FCA8C4E541BA4B1DACA8F6F51FA924C9C4896DA76EE82BE30%
+60D6A3C493AA982DA6917E63BBB8A1A289BD4F5582AA304CA3C48EE54E3B906C4EBACACF%
+82BE306081AC8B43DCD7DAC08E964E8BC68B436C1782AA304CC2B6C5B2A1A289BD4F5582%
+AA304CAFC38C4E541BC9BCB7D8C68AB4611F959E670DBCC3B2D9834130A2839330F38368%
+30C9838C30EC834130A2A5836630C7838B30EBA5835430B5838B30EB836730C8BBA1B1DA%
+CA966C50D5C9C1AEAFC49D73634F91A29020BCC098628A7182BE3060A18C4E541B82AA30%
+4CBFDDC5C6905E771F96CA976296DA76EEC6904D4FE182B63058D6B3C4CA8E76601DDCC5%
+B6AFC0836E30CF836E30CF836E30CF836E30CFA3C491E559278AEC559C897860A6C991CC%
+4F5382C53067B1D9A18CE1543E94798F29CA9EBB693D91A4507482C53067BAC991CE5BFE%
+98628A71A695B7805EB2C394DE5F7CC98DA14ECA93FA65E5C993FA65E58B4C8A18C6CAB2%
+B6C5D98E964E8B82AA304C8B4C8A18BBD9D982C53067B1DBB3B6C4975C4E88D2917A60F3%
+919C50CFBE82B43056D9A693BE5F97C5B6AFC0A1BAC994FC7F8E8A775B668ED28005CABA%
+DDC58D44597D89C152A08CB86E1BC58E964E8BA690815439B78E556563D7BCC3906C4EBA%
+A6925362C582AE3050C9A69742552F88EA4E00C98A79697DC6BCC3B2D9926A753782C530%
+67B1D9A194DE5F7CCA834130A2839330F3836830C9838C30EC834130A2A5836630C7838B%
+30EBA5835430B5838B30EB836730C88E964E8B8C8F4EF682AA304C8EE54E3B906C4EBAC9%
+8FEE60C590FC7DDAC6B2B6C5D98BBF97FFA693604F1DB4C0B6A69F7C6BEBD38CDA986797%
+B6616EBE82B43056D9D3C9C982B23054C4B893BE5F9788D3610FC6C5AFC389BA4E0BC9D6%
+B3C58E964E8BA6E960995290E3820CAFC0A1A2B2D48E9E6642815830058FE75197926B8A%
+C7A68CBE8A00B3C4906C4EBA82AA304C905E771FC68EF353D7B9D9C982C5306791E55927%
+C68A8A6ED18C6D7A3D9349768494FC7F8E8AB4611FA692A763119D9B64A5BDD9C9CA96CA%
+97629492767DB2A1BEDD82BE3060AFC3B1D98A775B6690B6751FC6836A30CB835230B383%
+8930E9835830B9A5836A30CB836230C3834E30AF838B30EB837830D9B082AA304C834D30%
+AE837B30DC839330F3C692895FE08D90544ABCC394DE5F7CC988EA4E0090A24E16C991E5%
+5927929884578F718FF0C5D995A74ECF8D9156FD8A76976996BD547D8E6A53F2A695A74E%
+CF8CEA8A9E82C530678F9166F8B8C9A6D4D2C6BCC3897082F195B6658782C530678F6F51%
+FA94C57248BBBEC0C48CBE8A00AFC0D7A4BFC98A775B6690B6751F82AA304CCFC0946E99%
+AC8EAD9E7FC68B4C8A1889AF61B6C991505584B2926A753782C53067A493FA65E5967B67%
+2C95B665878A775B6689EF4F1AC989896F1490E08AAC89EF4F1A82C53067905E771F96CA%
+976296DA76EEC6966C50D5C998628A71BCC092CA901AD8A68C4A7E70D895D48FD4BCC0C9%
+CA8A8A6ED18C6D7A3D82C53067B1AFC0A1C4BADB82AA304CBFC98E9E6642C99654508D92%
+AE80748ED28005CA96F17D049553767E96BC540D82CE3070B6D882C53067B1AFC082AA30%
+4CA48A467686944D71B190535FC3C6BFDAA68C5850BE92AE8074BCC3B5AFC0A1BFDAB6D7%
+CF82BE306096CA97629492767DB298628A7182AA304CB1D9A1BEDD82BE3060AFC388BD62%
+16D995B665878A775B668ED28005C9B2D990C85E2D82C53067836E30CF838A30EA835C30%
+BD839330F3C997F06B748E6A53F28FAC5C0F90E08AAC835A30BB834930AA837430D58340%
+30A1B0836D30CEC998628A71BC82AA304C8F6F51FAC0B6D7966C50D5CAB1DACA97F06B74%
+8E6A53F28FAC5C0F90E08AACC992864E2D82C530679492767D94FB770982C53067B1D9A1%
+BAC4C68F9759738EE54E3B906C4EBA8CF6516C82AA304C8E806B7BC7C4BADBCA8B539B3C%
+8B436C17906C4EBAA68F508972B3D6B382BE3060C4955D8A55BCC0D7A4966C50D5C98CFC%
+5411B3C68DBF5750AFC3B2D9926D77E5D7DDC4895D4E91AFC08E964E8BC9C5B290E65148%
+90B6751F82AA304CA4BFB3BFB3B1BDBACA8EC05B9FC696BC540D95B6658782BE3060C4B2%
+AFC0A1BFDA82C53067966C50D5CABAC9926A7537D3D4CAD8966C50D593AF540C976C69D8%
+BAC98FAC5C0F90E08AACA693C78AADDD82C53067B5D7C5B2C4B2B38E964E8BA6926D77E5%
+AFC0A3905F795E8C6F7D4C88DD80C38EE35F3190AB6027C98EE54E3B906C4EBACA8AE177%
+3CA68ADB4E38B8BCC396E2554FB2B6B9C0A1A2BFDDC58F6F51FA924C9C4896DA76EEA6B2%
+AFC3D3BC918A76F88EE8624B82AA304C93C78AADDD82C53067B2C0D782C73069B3BDD9C2%
+D3D882BE3060A3B1C0B6D3906C4EBAA68B5C6B3AB8C9CA8DB75DEE8E78652FC5B2A4C082%
+BE306089BB5316C994E776AE82AA304CB1D7DCDAC08E9E6642CA8DA256F0D982B63058AC%
+C5B2B6C48AB4611F82B63058C0D3C9C982B23054C4B882C53067B1D9A194FC7F8E8A775B%
+668ED28005CA8FAD5C11BCD393AE52D582B63058C5B2A1A2C5C6BFC98E9E6642AC95CA52%
+25C9967B672CC48AD4959388E19055B4C0C4B689BD4F55C4B6895D4E91B382CE3070B6D8%
+BBA3C4895D4E91AFC3B9D7B9D78FCE7B11AFC3B2D9A1BAC994FC7F8E8A775B668ED28005%
+CA8BE091D1898F7E01C98AE1773C8BBE93E1CA8A7C639BB9C3B2D982AA304CBFC990AB60%
+278EBF8CEA82AA304C8ED48ECA89AE5C4BC98D959ED2C68E974F3CC0C4BADB82AA304CB1%
+D9A18EE54E3B906C4EBACA96D99ED9AFC393FA65E5C98F6F51FAA697D68F2AC690815439%
+B2C38CE1543E94798F29C6CABFDDC5974552C78B436C17CAC5B2C4895D4E91DCDD82CE30%
+70B6D8C98AE79854A6BCC3B2D9A194FC7F8E8A775B668ED28005CABFDA82BE3060B6D789%
+E6753BA6B6B2C3D391CA99C496DA76EE82BE3060C4B2B396DA76EE95744ED882C53067A2%
+BCB6BC8FE75197926B8AC7CA8FE75197926B8AC782BE306082AA304C89E6753BC4B2B3D3%
+C9CA8EC05B9F8DDB969BD182B8305AB6BCB2D3C982BE3060D6A4838C30EC834930AA8369%
+30CA838B30EB836830C9A5835F30C0A5839430F4834230A3839330F3836030C1CA96E595%
+8089BA4E0B90B6751FC68E9B5BFA89409662C995C758C1C9BCD0A68ECA5199BEC48BB365%
+59B4C08E964E8B82AA304CB1D9BFB382BE3060A1C5D9CE82C7306990E196EA894296A0C5%
+82C73069C69487901993FC5165AFC3894A96E8C998526F0FD995C758C1A6975D4F59944F%
+5FF5C5B892AD773AD2C3B2D9C4A4C5B6C5B6B3CFB296CD6A21976C69D889E6753B82AA30%
+4C8EA981EA91527136C68F6F51FA97886765C3B2D982BA305CA18C4E541B928D6CE888D3%
+610FBCC38ECA519990B6751FBCC38CA9898B8B8B7D66B4B7AFC496CA97629492767DB2D3%
+C982AA304C8F6F51FA97886765D9B6D7A3A2CFC08B5C6B3ABDC982BE3060DBB3A3A2B2B4%
+BADA82BE3060B9CAC0BCB682BE3060D6A18EC05B9F8DDB969B8AEF59478C788B66C58CEA%
+8A9E82B63058ACC5B2B6A4835F30C0A5839430F4834230A3839330F3836030C182C53067%
+D3B2B2BFB3C58E964E8B82BE3060B1C8A3A2C5D9CE82C730698AEF59478C788B66C6CA91%
+8A76F888E19055C5B2C5A3C48EE54E3B906C4EBACA94BC534A95AA52068D7E964D8E5153%
+C2A6BCC0A1BCB6BC94DE5F7CCACF82BE306090E196EA894296A082C530678ECA519990B6%
+751FCABEC7D6B382BE3060A1%
+}
+\bxjl@text{wagahai}{30}{%
+% 車屋の黒はその後跛に…
+8ED48ECA89AE5C4BC98D959ED2CABFC98CE35F8CE6EA8DDBC6C5AFC0A194DE5F7CC98CF5%
+514991F26CA2B1D996D16BDBCA91516F38815830059046827282AA304CE5F2892AD2C394%
+B2629CB9C397886765D9A18CE1543E94798F2982AA304CE0E67425E0DF73C0D6D8D394FC%
+7F8EBCB2C4955D8A55BCC094DE5F7CC98AE1773CC6CA8AE1773C8E89810282AA304C88EA%
+4E009474676FC0CFAFC3B2D9A1BAC4C692988457D9BCB88CE1543E94798F29C9928D6CE8%
+88D3610FA68EE460F9B2C0C9CA94DE5F7CC98CB351438B436C17C98FC16D8892BE6C88C4%
+BFC991CC4F538A69683CC988AB60AAB8C5AFC08E964E8B82C53067B1D9A18CE1543E9479%
+8F2982AA304C97E14F8BC9928383368980571282C5306794DE5F7CC688A79022AFC08DC5%
+67008CE35F8CC993FA65E5A482C73069B382BE3060C4895D4E91AFC390715C0BC8C0D7A2%
+B2C0C1C98DC567008CE35F8C9B9B5C41C48DE680B489AE5C4BC993565929948979E4965F%
+68D2C6CA92A661F28158300582BE3060A3C4B2AFC0A1%
+}
+\bxjl@text{wagahai}{31}{%
+% 赤松の間に二三段の紅…
+90D48D648FBC677EC98AD49593C693F14E8C8E4F4E0992696BB5C98D677D05A692D47DB4%
+AFC08D677D0597748449CA90CC6614BCC996B25922C982B23054C4B88E556563AFC3C2B8%
+82CE3070B2C68BDF8FD1B891E34EE3D991E34EE3D989D482B195D95F01A6BA82DA307CBC%
+C08D677D059492767DC98E525C719283833689D482B1D38E636B8BD8C5B8978E843DC190%
+735C3DBCC0A18E4F4E098AD4959394BC534AC993EC53578CFC5411C99EBB693D91A45074%
+C6937E51ACC993FA65E58B72811A82AA304C918165E9B88C5850BEB2C396D867288CCD67%
+AFC990815439B6C5B293FA65E5CACEC4DD82C730698B487A00C6C5AFC3B6D78CE1543E94%
+798F29C9928B663C90515BDDC98E9E66428AD49593D38BB772EDD2D7DAC0D6B3C58B436C%
+1782AA304CBDD9A1%
+}
+\bxjl@text{wagahai}{32}{%
+% 主人は毎日学校へ行く…
+8EE54E3B906C4EBACA96886BCE93FA65E58A775B668D5A6821CD8D73884CB8A18B415E30%
+D9C48F9166F88DD6658ECD97A77ACBC3E2C47C60D9A1906C4EBA82AA304C97886765D9C4%
+A48BB365598E745E2B82AA304C897D53AD82BE3060897D53AD82BE3060C4B2B3A190856C%
+348DCA5F6989E6753BD396C56EC591BD591AC6B6B6C5B2A1835E30BF834A30AB835730B8%
+838430E4835830B9835E30BFB0835B30BCD38CF7529F945C80FD82AA304CC5B2C4B2AFC3%
+D4D2C3BCCFAFC0A18FAC5C0F8B9F4F9BCA8AB4611F90535FC3C68B784F11CFC5B282C530%
+6797635E7C92747A1A89805712CDB6D6B3A18B415E30D9C48FA5553189CC6B4CA689CC6B%
+4CAFC3A49F7B6BECA6C2B2C3A48E9E6642815830058CE1543E94798F29A6904B5C3B94F6%
+5C3E82C5306782D43076D789BA4E0B82B03052D9A1%
+}
+\bxjl@text{wagahai}{33}{%
+% 吾輩は御馳走も食わな…
+8CE1543E94798F29CA8CE45FA1927999B391968D70D3904898DFDCC5B2B6D795CA522592%
+696BB594EC80A5D8D3BCC5B282AA304CA4CF82B8305ACF82B8305A8C9250658D4E5EB782%
+C53067E6EA8DDBC6D3C5D782B8305AC6BFC993FA65E5BFC993FA65E5A695E966AEBCC3B2%
+D9A1916C9F20CA8C886C7ABCC38EE653D6D7C5B2A1B5BBDDCA96A2672A82BE3060C68C99%
+5ACCB282C53067B1D9A196BC540D914F524DCACF82BE3060C2B9C3B8DAC5B282AA304CA4%
+977E6B32A6B2AFC3D38DDB969B8CC0965082AA304CC5B2B6D790B6751F8A556DAFBAC98B%
+B365598E745E2BC989C65BB682C5306796B3712196BC540DC9944C732B82C530678F497D%
+42D9C2D3D882BE3060A1%
+}
+
+%===============================
+%% text 'preamble'
+% The Preamble of the Constitution of Japan
+% Text data from e-Gov:
+% http://law.e-gov.go.jp/htmldata/S21/S21KE000.htm l
+\bxjl@text{preamble}{1}{%
+% 日本国民は、正当に選…
+93FA65E5967B672C8D9156FD96AF6C11CAA490B36B6393965F53C6914990788B936319BB%
+DAC08D9156FD89EF4F1AC6B5B9D991E34EE3955C88688ED28005A692CA901A82B63058C3%
+8D73884C93AE52D5BCA4DCDAD7C4DCDAD7C98E715B5091B75B6BC9C0D2C6A48F948AF88D%
+9156FD96AF6C11C4C98BA653549861548CC6D6D990AC621089CA679CC4A4DC82AA304C8D%
+9156FD915351689379571FC6DCC0C2C38EA981EA97527531C9D3C0D7BD8C62607591F26C%
+A2A68A6D78BA95DB4FDDBCA490AD653F957B5E9CC98D73884C88D770BAC6D6C2C38DC451%
+8D82D1307390ED622691884E89C98E5360E889D0798D82AA304C8B4E8D77D9BAC4C9C5B2%
+D4B3C6BDD9BAC4A68C886C7A88D3610FBCA4BABAC68EE54E3B8CA06A2982AA304C8D9156%
+FD96AF6C11C691B65B58BDD9BAC4A690E95BA38CBE8A00BCA4BAC98C9B61B296406CD5A6%
+8A6D78BA92E85B9ABDD9A1BFD3BFD38D9156FD90AD653FCAA48D9156FD96AF6C11C98CB5%
+53B38F6C7C9BC5904D4FE191F58A17C6D6D9D3C982C53067B1C2C3A4BFC98CA06A2988D0%
+5A01CA8D9156FD96AF6C11C69752753197886765BCA4BFC98CA06A2997CD529BCA8D9156%
+FD96AF6C11C991E34EE3955C88688ED2800582AA304CBADAA68D73884C8E674F7FBCA4BF%
+C9959F798F97985229CA8D9156FD96AF6C1182AA304CBADAA68B9D4EAB8EF353D7BDD9A1%
+BADACA906C4EBA97DE985E9581666E95D5904DC98CB4539F979D740682C53067B1D8A4BA%
+C98C9B61B296406CD5CAA4B6B6D98CB4539F979D7406C68AEE57FAB8D3C982C53067B1D9%
+A1DCDAD7CAA4BADAC694BD53CDBDD988EA4E0090D85207C98C9B61B296406CD5A496406C%
+D597DF4EE48B7953CA82D130738FD98A5492BA52C5A6947263928F9C9664BDD9A1%
+}
+\bxjl@text{preamble}{2}{%
+% 日本国民は、恒久の平…
+93FA65E5967B672C8D9156FD96AF6C11CAA48D5060528B764E45C995BD5E739861548CA6%
+944F5FF58AE89858BCA4906C4EBA8AD49593918A76F88CDD4E92C98AD695A28C574FC2A6%
+8E78652F947A914DBDD990925D078D829AD8C5979D7406917A60F3A6905B6DF1B88EA981%
+EA8A6F899ABDD9C982C53067B1C2C3A495BD5E739861548CA688A4611BBDD98F948AF88D%
+9156FD96AF6C11C98CF6516C90B36B63C4904D4FE18B607FA9C6904D4FE1978A983CBCC3%
+A4DCDAD7C988C05B8991535168C490B6751F91B65B58A695DB4FDD8E9D6301BCD6B3C48C%
+886C7A88D3610FBCC0A1DCDAD7CAA495BD5E739861548CA688DB7DAD8E9D6301BCA490EA%
+5C0290A75236C497EA96B78F5D5F93A488B3572794978FEBC495CE504F8BB772EDA6926E%
+57308FE34E0AB6D789696C3889939060C68F9C96648B8E53BBBCD6B3C4937752AAD2C382%
+EE3090D98D9156FD8DDB969B8ED0793E89EF4F1AC6B5B2C3A496BC540D975F8A89B1D992%
+6E573088CA4F4DA690E85360D2C0B2C48E76601DCCA1DCDAD7CAA49153516890A24E168A%
+45754CC98D9156FD96AF6C1182AA304CA4CBC4BCB88BB06050957C6016C48C876B209652%
+4E4FB6D796C6514DB6DAA495BD5E739861548CC9B3C1C690B6751F91B65B58BDD98CA06A%
+2997985229A6974C6709BDD9BAC4A68A6D78BA94468A8DBDD9A1%
+}
+\bxjl@text{preamble}{3}{%
+% われらは、いづれの国…
+DCDAD7CAA4B282C33065DAC98D9156FD89C65BB6D3A48EA981EA8D9156FDC9BAC4C9D0C6%
+90EA5C02944F5FF5BCC391BC4ED68D9156FDA696B371218E8B8996BCC3CAC5D7C5B2C982%
+C53067B1C2C3A490AD653F8EA16CBB93B9905393BF5FB3C996406CD591A55247CAA49581%
+666E95D5904D93497684C5D3C982C53067B1D8A4BAC996406CD591A55247C68F5D5F93CC%
+BAC4CAA48EA981EA8D9156FDC98EE54E3B8CA06A29A688DB7DAD8E9D6301BCA491BC4ED6%
+8D9156FDC491CE5BFE93997B498AD695A28C574FC2C697A77ACBC0B3C4BDD98A6554048D%
+9156FDC990D38CAC96B152D982C53067B1D9C4904D4FE182B8305AD9A1%
+}
+\bxjl@text{preamble}{4}{%
+% 日本国民は、国家の名…
+93FA65E5967B672C8D9156FD96AF6C11CAA48D9156FD89C65BB6C996BC540D975F8A89C6%
+B6B9A49153516897CD529BA6B182B03052C3BAC990925D078D829AD8C5979D7406917A60%
+F3C496DA76EE93497684A69242905490AC6210BDD9BAC4A690BE8A93CCA1%
+}
+
+%===============================
+%% text 'hatsukoi'
+% "初恋" (First Love)
+% Written by Shimazaki Tōson (島崎藤村;1872-1943)
+% Text data from Aozora Bunko:
+% http://www.aozora.gr.jp/cards/000158/files/1508_18509.html
+\bxjl@text{hatsukoi}{1}{%
+% まだあげ初めし前髪の…
+CF82BE3060B182B030528F89521DD2BC914F524D94AF9AEAC90A97D167978CE76A8EC9D3%
+C4C68CA9898BB4BCC4B70A914F524DC6BBBCC0D989D482B18BF96ADBC90A89D482B1B1D9%
+8C4E541BC48E76601DCBB9D8%
+}
+\bxjl@text{hatsukoi}{2}{%
+% やさしく白き手をのべ…
+D4BBBCB89492767DB78EE8624BA6C982D73079C30A97D167978CE76A8EA6DCDAC6B1C0CD%
+BCCA0A949685848D677D05C98F4879CBC98EC05B9FC60A906C4EBABACB8F89521DD2BCCA%
+82B63058D2C5D8%
+}
+\bxjl@text{hatsukoi}{3}{%
+% わがこゝろなきためい…
+DC82AA304CBA8154309DDBC5B7C0D2B2B7C90ABFC994AF9AEAC996D16BDBC6B68154309D%
+D9C4B70AC0C9BCB797F6604BC9947576C3A60A8C4E541B82AA304C8FEE60C5C68EDE914C%
+D0BCB6C5%
+}
+\bxjl@text{hatsukoi}{4}{%
+% 林檎畑の樹の下におの…
+97D167978CE76A8E94A87551C98EF76A39C989BA4E0BC60AB5C982C33065B6D7C5D98DD7%
+7D3093B99053CA0A924E8AB082AA304C93A58E0FD0BFD2BCB6C0D082BC305EC40A96E255%
+4FCBC0CFCCBABFBACBBCB9DA%
+}
+
+%===============================
+%% text 'kusamakura'
+% The opening passage from "草枕" (Kusamakura; lit. "Grass Pillow")
+% Written by Natsume Sōseki (夏目漱石;1867-1916)
+% Text data from Aozora Bunko:
+% http://www.aozora.gr.jp/cards/000148/files/776_14941.html
+\bxjl@text{kusamakura}{1}{%
+% 山路を登りながら、こ…
+8E525C7198488DEFA6936F767BD8C582AA304CD7A4BAB38D6C8003B4C0A1%
+}
+\bxjl@text{kusamakura}{2}{%
+% 智に働けば角が立つ。…
+9271667AC693AD50CDB982CE30708A7089D282AA304C97A77ACBC2A18FEE60C5C69EA868%
+F9BBBE82CE307097AC6D41BBDAD9A188D3610F926E5730A692CA901ABE82CE30708B877A%
+AE8BFC5C4882BE3060A1C4B6B8C6906C4EBAC990A24E16CA8F5A4F4FD0C6B8B2A1%
+}
+\bxjl@text{kusamakura}{3}{%
+% 住みにくさが高じると…
+8F5A4F4FD0C6B8BB82AA304C8D829AD882B63058D9C4A488C05B89B28F8A6240CD88F85F%
+15B7897A8D8ABCC0B8C5D9A182C73069BACD897A8D8ABCC3D38F5A4F4FD0C6B8B2C48CE5%
+609FAFC08E9E6642A48E8D8A6982AA304C90B6751FDAC3A489E6753B82AA304C8F6F51FA%
+97886765D9A1%
+}
+\bxjl@text{kusamakura}{4}{%
+% 人の世を作ったものは…
+906C4EBAC990A24E16A68DEC4F5CAFC0D3C9CA905F795E82C53067D3C5B9DA82CE30708B%
+539B3C82C53067D3C5B2A1D4CAD88CFC5411B38E4F4E098CAC8ED297BC4E2197D796A3D8%
+C6C1D7C1D7BDD9C082BE3060C9906C4EBA82C53067B1D9A1C082BE3060C9906C4EBA82AA%
+304C8DEC4F5CAFC0906C4EBAC990A24E1682AA304C8F5A4F4FD0C6B8B2B6D7C4C3A4897A%
+8D8ABD8D9156FDCAB1D9CFB2A1B1DA82CE3070906C4EBA82C53067C5BCC98D9156FDCD8D%
+73884CB882CE3070B6D882BE3060A1906C4EBA82C53067C5BCC98D9156FDCA906C4EBAC9%
+90A24E16D6D8D3C5B58F5A4F4FD0C6B8B6DBB3A1%
+}
+\bxjl@text{kusamakura}{5}{%
+% 越す事のならぬ世が住…
+897A8D8ABD8E964E8BC9C5D7C790A24E1682AA304C8F5A4F4FD0C6B8B9DA82CE3070A48F%
+5A4F4FD0C6B8B28F8A6240A682C73069DACE82C73069B6A48AB05BDB97655BB9C3A491A9%
+675FC98AD49593C996BD547DA6A491A9675FC98AD4959382C53067D38F5A4F4FD0D6B8BE%
+C882CE3070C5D7C7A1BABAC68E8D8A69906C4EBAC4B2B3935659299045807782AA304C8F%
+6F51FA97886765C3A4BABAC689E6753B89C65BB6C4B2B38E674F7F96BD547D82AA304C8D%
+7E964DD9A1B1D7D5D98C7C82B88F708853C98E6D58EBCA906C4EBAC990A24E16A692B795%
+778AD59591C6BCA4906C4EBAC990535FC3A6964C8C4AB6C6BDD982AA304C8CCC6545C691%
+B85C0AC4B2A1%
+}
+\bxjl@text{kusamakura}{6}{%
+% 住みにくき世から、住…
+8F5A4F4FD0C6B8B790A24E16B6D7A48F5A4F4FD0C6B8B794CF7169B2A688F85F15B794B2%
+629CB2C3A4B1D882AA304CC0B290A24E168A45754CA6CFC9B1C0D8C68ECA5199BDC982AA%
+304C8E8D8A6982C53067B1D9A489E6753B82C53067B1D9A1B1D9CA89B997F38A79697DC4%
+92A45F6B8D8F523B82C53067B1D9A1BACFB6C6895D4E91B482CE30708ECA5199BBC5B282%
+C53067D3D6B2A1C082BE3060CFC9B1C0D8C68CA9898BDA82CE3070A4BFBAC68E8D8A69D3%
+90B6751FB7A489CC6B4CD3974E6E67B8A192857740917A60F3A68E867D19C6978E843DBB%
+C7C4D381AC7486E85593D8C989B997F3CA8BB980F897A088CFC68B4E8D77D9A1924F4E39%
+90C29752CA89E6753B89CB67B6C68CFC5411AFC393685857969562B9BEDD82C53067D38C%
+DC4E948DCA5F69C988BA7D62E0A3721BCA8EA981EAB6D790535FC38AE1773CC689666620%
+D9A1C082BE3060B5C982AA304C8F5A4F4FD190A24E16A6A4B6B88ACF89B382B6305893BE%
+5F97C3A497EC970A91E453F095FB65B990A15BF8C9834A30AB838130E1838930E9C6E043%
+6F868B475B639FE56EB791F76FC1C991AD4FD78A45754CA690B46E05B8B3D7D7B6C68EFB%
+53CED293BE5F97DA82CE307091AB8DB3D9A1BAC98CCC6545C696B3712190BA58F0C98E8D%
+8A69906C4EBAC6CA88EA4E008BE553E5C5B8A496B3712190468272C989E6753B89C65BB6%
+C6CA8EDA5C3A81AC7E11C5B7D3A4B6B8906C4EBA90A24E16A68ACF89B382B6305893BE5F%
+97D9C9935F70B9C6B5B2C3A4B6B894CF7169945960A9A689F089E392458131BDD9C9935F%
+70B9C6B5B2C3A4B6B890B46E058FF26D448A45754CC68F6F51FA93FC5165BC93BE5F97D9%
+C9935F70B9C6B5B2C3A4CFC0BAC995734E0D93AF540C95734E0D93F14E8CC98AA34E7E8D%
+A35764A68C9A5EFA97A77ACBBC93BE5F97D9C9935F70B9C6B5B2C3A489E4621197985229%
+8E8479C1977C617EC9E64A898AE34A7D46A6917C638393A08569BDD9C9935F70B9C6B5B2%
+C3A4815C2015815C201590E753438BE091D1C98E715B50D6D8D3A4969C4E078FE64E57C9%
+8C4E541BD6D8D3A4B1D7D5D991AD4FD78A45754CC9929E5BF58E995150D6D8D38D4B5E78%
+959F798F82C53067B1D9A1%
+}
+\bxjl@text{kusamakura}{7}{%
+% 世に住むこと二十年に…
+90A24E16C68F5A4F4FD1BAC493F14E8C8F5C5341944E5E74C6BCC3A48F5A4F4FD1C68D62%
+753294E36590B1D990A24E16C4926D77E5AFC0A193F14E8C8F5C53418CDC4E94944E5E74%
+C6BCC396BE660E88C36697CA955C886897A088CFC982B23054C4B8A493FA65E5C9B1C0D9%
+8F8A6240C6CAB7AFC489655F7182AA304CBBBDC48CE5609FAFC0A18E4F4E098F5C5341C9%
+8DA14ECA93FA65E5CABAB38E76601DB3C3B2D9A1815C2015815C20158AEC559C82D13073%
+C9905B6DF1B7C4B7974A6182B2D6B2D6905B6DF1B8A48A79697DD0C991E55927B2C5D9CE%
+82C730698BEA82E6BCD0D391E55927B7B2A1BADAA690D85207D895FA653EBFB3C4BDD9C4%
+90678EAB82AA304C8E9D6301C3C7A195D0724782C33065B9D6B3C4BDDA82CE307090A24E%
+1682AA304C97A77ACBC0C7A18BE091D1CA91E559278E964E8B82BE3060A491E559278E96%
+4E8BC5D3C982AA304C90426B96B4DA82CE307090515BDDD98AD49593D390535FC3947A91%
+4D82BE3060DBB3A197F6604BCAB3DABCB2A48AF05B09BCB297F6604B82AA304C90CF7A4D%
+D3DA82CE3070A497F6604BA6BEC790CC661482AA304CB6B4AFC397F6604BBCB6DBA18A74%
+95A397BB50DAC98CA880A9CA909465709553767E969C4E07906C4EBAC991AB8DB3A68E78%
+652FB4C3B2D9A1947780CC92864E2DC6CA8F6491CDB29356592989BA4E0B82AA304CB582%
+D43076BBAFC3B2D9A1B3CFB295A87269D3904898DFDCC882CE307090C960DCBCB2A18FAD%
+5C11BC904898DFB482CE3070964F98FDB791AB8DB3D7C7A191B65B5895AA5206904898DF%
+B482CE3070B1C482AA304C95734E0D96F9610989F55FEB82BE3060A18163202681632026%
+}
+\bxjl@text{kusamakura}{8}{%
+% 余の考がここまで漂流…
+975D4F59C98D6C800382AA304CBABACF82C5306795596F0297AC6D41BCC397886765C08E%
+9E6642C6A4975D4F59C9894553F391AB8DB3CA93CB7A81915271368DBF5750D8C9DCD9B2%
+8A7089D290CE77F3C9925B7AEFA693A58E0FD091B9640DB8C5AFC0A195BD5E738D748861%
+A695DB4FDDC2C0D2C6A4BDDCD4C4914F524DC694F298DB82D130738F6F51FABCC08DB65D%
+E691AB8DB382AA304CA48E644ED591B9640D82B63058C9968457CBD28D875408BEA6BDD9%
+C48BA45171C6A4975D4F59C98D988170CA8BEF51778D875408D6B895FB65B98E4F4E098E%
+DA5C3ACE82C73069C58AE25CA9C98FE34E0AC689B55378D8C0A18CA880A9C6B6B9C08A47%
+7D75C98BEF517794A07BB182AA304CE3FC814BC989BA4E0BB6D796F48E8DD88F6F51FABC%
+C082BE3060B982C53067A48D4B5E78B2C489BD4F55C98E964E8BD3C5B6AFC0A1%
+}
+\bxjl@text{kusamakura}{9}{%
+% 立ち上がる時に向うを…
+97A77ACBC18FE34E0A82AA304CD98E9E6642C68CFC5411B3A68CA9898BD9C4A498488DEF%
+B6D78DB65DE6C995FB65B9C6836F30D0835030B1836330C4A6959A4F0FBEC0D6B3C595F4%
+5CF082AA304CE3DE8073B4C3B2D9A190996749B69E776A9CB695AA5206B6D7C5B282AA30%
+4C8DAA68398CB35143B6D792B89802B7CF82C53067BAC482B23054C4B8919384BC8D959E%
+D2B292864E2DC6A48E525C718DF7685C82AA304C9496858490D48D64B882BE3060DD82BE%
+3060D7C6924968DA88F85F15B2C3A491B17D9A82AC304E96DA76EE82AA304C8A6D78BAC4%
+8CA9898BB4C7B8D7B2E8C9974482AA304C945A6FC3B2A18FAD5C11BC8EE8624B914F524D%
+C693C379BF8E525C7182AA304C88EA4E00C2A48C517FA4A6C7B7DD82C53067C394FB7709%
+C6954E903CD9A193C379BF82B03052C091A4507496CA9762CA8B905DE8906C4EBAC99580%
+65A782C530678DED524AD88B8E53BBAFC0B6A4897392ED82C73069B795BD5E7396CA9762%
+A6D4B9C6924A8C37C992EA5E95C6968457CBD2C3B2D9A19356592995D38FBAC688EA4E00%
+967B672C8CA9898BB4D9C9CA90D48D648FBC677E82BE3060DBB3A18E7D679DC98AD49593%
+C98BF37A7ABBB494BB522491527136BCC3B2D9A18D73884CB88EE8624BCA93F14E8C929A%
+4E01CE82C7306982C5306790D85207DAC3B2D982AA304CA48D829AD8B28F8A6240B6D790%
+D48D64B296D16BDB957A5E0382AA304C93AE52D5B2C397886765D9C9A68CA9898BD9C4A4%
+936F767BDA82CE3070B1BDBACD8F6F51FAD9C982BE3060DBB3A198488DEFCABDBA82D430%
+76D993EF96E38B607FA982BE3060A1%
+}
+\bxjl@text{kusamakura}{10}{%
+% 土をならすだけならさ…
+9379571FA6C5D7BD82BE3060B9C5D7BBCE82C730698EE8624B8AD49593D393FC5165D9CF%
+B282AA304CA49379571FC992864E2DC6CA91E55927B7C590CE77F382AA304CB1D9A19379%
+571FCA95BD5E73D7C6BCC3D390CE77F3CA95BD5E73D7C6C5D7C7A190CE77F3CA90D85207%
+D88DD37815B2C3D3A48AE25CA9CA8E6E59CB9696672B82AA304CC2B6C7A18C40639895F6%
+5D29BCC09379571FC98FE34E0AC6974960A091527136C49BB35CD9AFC3A48CE1543ED7C9%
+C0D2C693B99053A68FF78B72D98C69666F90468272CAC5B2A18CFC5411B382C5306795B7%
+805EB6C78FE34E0ACA8FE64E57D8897A8D8ABDB6A489F45EFBD7C5B9DA82CE3070C5D7DD%
+A18ADE5DCCC9C5B28F8A624082C53067BBB495E06B69D9B7D6B8CAC5B2A18DB65DE68945%
+53F382AA304C8D829AD8B8AFC3A492864E2D90535FC382AA304C8C457AAADD82C53067A4%
+CFD982C5306788EA4E008AD49593959D5E45A68E4F4E098A7089D2C690FA7A7FAFC3A4BF%
+C992B89802935F70B982AA304C905E771F92864E2DA68AD18CABB2C3B2D9C4955D8A55BC%
+C3D3D6B2A198488DEFA68D73884CB8C4895D4E91DCDDD6D890EC5DDD92EA5E95A68FC26E%
+09D9C4895D4E91B395FB65B982AA304C934B906993965F5382BE3060A18CC556FAD6D88B%
+7D602582AE305097B765C582C53067C5B2B6D7A482D43076D782D43076D7C48EB54E038B%
+C866F2D8CDB6B6D9A1%
+}
+\bxjl@text{kusamakura}{11}{%
+% たちまち足の下で雲雀…
+C0C1CFC191AB8DB3C989BA4E0B82C53067895F96F2909D96C0C990BA58F082AA304CBC8F%
+6F51FABCC0A1924A8C37A68CA9898B89BA4E0BBCC082AA304CA482C73069BA82C5306796%
+C29CF4B2C3D9B689655F71D38C605F62D38CA9898BB4C7A1C082BE306090BA58F082BE30%
+60B982AA304C96BE660ED7B6C695B7805EB4D9A1BEAFBEC4965A5FD9BCB8A490E27D768A%
+D49593C5B896C29CF4B2C3B2D9A195FB65B98AF45E7E97A291CCC98BF37A7A8B436C1782%
+AA304C88EA4E0096CA9762C6946186A4C68E68523ABBDAC3B2C0C0CFDAC5B2D6B3C58B43%
+6C1782AA304CBDD9A1B1C992B99CE5C996C29CF4B889B997F3C6CA8F7577AC8E9E6642C9%
+975D4F59975488D5D3C5B2A1C982C73069B6C58F746625C993FA65E5A696C29CF4B79073%
+5C3DB8BCA496C29CF4B7B1B6BCA4CFC096C29CF4B795E966AED7BBC5B9DA82CE30708B43%
+6C1782AA304C8DCF6E08CFDDC48CA9898BB4D9A1BFC98FE34E0A82C73069BACF82C53067%
+D3936F767BAFC38D73884CB8A4B2C2CF82C53067D3936F767BAFC38D73884CB8A1895F96%
+F2909D96C0CAB7AFC4895F96F2C992864E2D82C530678E806B7BC7C6918A76F888E19055%
+C5B2A1936F767BD88B6C8A70D2C0976763DA8BE553E5CAA497AC6D41DAC3895F96F2C693%
+FC5165AFC3A495596F02B3C3B2D9B3C1C68C605F62CA8FC16D88B4C3C5B8C5AFC3A4C082%
+BE306090BA58F082BE3060B982AA304C8BF37A7AC997A188E1C68E636B8BD9C9B6D3926D%
+77E5DAC5B2A1%
+}
+\bxjl@text{kusamakura}{12}{%
+% 巌角を鋭どく廻って、…
+8ADE5DCC8A7089D2A6897392ED82C73069B889F45EFBAFC3A488C2630996806469C5D790%
+5E771F8B749006976C69D8C6978E843DC2D9C4BADBA6A48DDB969B82C73069B8894553F3%
+CD90D85207DAC3A489A16A2AC68CA9898B89BA4E0BBDC4A48DD883DCC989D482B182AA30%
+4C88EA4E0096CA9762C68CA9898BB4D9A1895F96F2909D96C0CAB1BDBACD978E843DC1D9%
+C9B6C48E76601DAFC0A1B2B2D4A4B1C989A99EC48BE091D1C98CB4539FB6D794F298DB82%
+D130738FE34E0A82AA304CAFC3B8D9C9B6C48E76601DAFC0A18E9F6B21C6CA978E843DC1%
+D9895F96F2909D96C0C4A48FE34E0AD9895F96F2909D96C082AA304C8F5C534195B66587%
+8E9A5B57C6BDDA88E19055B3C9B6C48E76601DAFC0A18DC567008CE35F8CC6A4978E843D%
+C1D98E9E6642D3A48FE34E0AD98E9E6642D3A4CFC08F5C534195B665878E9A5B57C68E43%
+64E6DA88E19055B3C4B7C6D38CB351438B436C17D6B896C29CF4B7C282C33065B9D982BE%
+3060DBB3C48E76601DAFC0A1%
+}
+\bxjl@text{kusamakura}{13}{%
+% 春は眠くなる。猫は鼠…
+8F746625CA96B07720B8C5D9A1944C732BCA916C9F20A695DF6355D98E964E8BA696595F%
+D8DAA4906C4EBA8AD49593CA8ED8501F8BE091D1C9B1D98E964E8BA696595FD8DAD9A18E%
+9E6642C6CA8EA981EA95AA5206C98DB09B42C98B8F5C458F8A6240BBB496595FD8DAC390%
+B36B6391CC4F53C5B8C5D9A1C082BE30608DD883DCC989D482B1A689939060B8965D671B%
+DD82BE3060C4B7C68AE1773C82AA304C90C19192D2D9A1895F96F2909D96C0C990BA58F0%
+A695B7805EB2C0C4B7C68DB09B42C9B1D8B682AA304C94BB522491527136BDD9A1895F96%
+F2909D96C0C996C29CF4B8C9CA8CFB53E382C5306796C29CF4B8C982C53067CAC5B2A48D%
+B09B429153516891CC4F5382AA304C96C29CF4B8C982BE3060A18DB09B42C98A886D3B93%
+AE52D582AA304C90BA58F0C6B1D7DCDAC0D3C9C9B3C182C53067A4B1DACE82C730698CB3%
+51438B436C17C9B1D9D3C9CAC5B2A1B1B196F9610989F55FEB82BE3060A1BAB38E76601D%
+AFC3A4BAB396F9610989F55FEBC6C5D9C982AA304C8E8D8A6982C53067B1D9A1%
+}
+
+%--------------------------------------- all done
+\endinput
+%% EOF
diff --git a/language/japanese/BX/bxjalipsum/sample-bxjalipsum-1.tex b/language/japanese/BX/bxjalipsum/sample-bxjalipsum-1.tex
new file mode 100644
index 0000000000..d316dfe298
--- /dev/null
+++ b/language/japanese/BX/bxjalipsum/sample-bxjalipsum-1.tex
@@ -0,0 +1,45 @@
+% LuaLaTeX document
+\documentclass[a4paper]{ltjsarticle}
+\usepackage{bxjalipsum}
+\begin{document}
+
+\section{iroha}
+
+% the Iroha sequence
+\jalipsumiroha
+
+\section{jugemu}
+
+\begin{flushright}
+
+% the person name in Jugemu
+\begin{parbox}[t]{12\zw}{%
+\jalipsumjugemu
+}%
+\end{parbox}
+\hspace{2cm}%
+\begin{parbox}[t]{12\zw}{%
+\jalipsumjugemuP
+}%
+\end{parbox}
+
+\end{flushright}
+
+\section{wagahai}
+
+% "Wagahai wa Neko de aru" by Natsume Soseki
+\begin{itemize}
+\item \jalipsum[-2]{wagahai}
+\item \jalipsum[3-4]{wagahai}
+\item \jalipsum[5]{wagahai}
+\end{itemize}
+
+\section{hatsukoi}
+
+% "Hatsukoi" by Shimazaki Toson
+\begin{quote}
+\addtolength{\parskip}{\baselineskip}
+\jalipsum{hatsukoi}
+\end{quote}
+
+\end{document}
diff --git a/language/japanese/BX/bxjalipsum/sample-bxjalipsum-2.tex b/language/japanese/BX/bxjalipsum/sample-bxjalipsum-2.tex
new file mode 100644
index 0000000000..bd6344e6dc
--- /dev/null
+++ b/language/japanese/BX/bxjalipsum/sample-bxjalipsum-2.tex
@@ -0,0 +1,25 @@
+% upLaTeX document
+\documentclass[uplatex,a4paper]{jsarticle}
+\usepackage{bxjalipsum}
+\usepackage{plext}% for '\bou' command
+%!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! TeX code BEGIN
+% with a bit of TeXnique...
+%% Expand 'em all!!
+\edef\wagahaiOne{\jalipsum[1]{wagahai}}
+\edef\wagahaiTwo{\jalipsum[2-5]{wagahai}}
+%% \argexpd\CMD{<argument>}
+\def\argexpd#1{\expandafter#1\expandafter}
+%!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! TeX code END
+\begin{document}
+
+% rather nonsensical examples
+% (The \bou command add "bouten" to the given text.)
+
+\argexpd\bou{\jalipsumiroha}
+
+\argexpd\bou{\wagahaiOne}
+
+% NB. The meaning of \wagahaiTwo contains \par, so it is
+% not suitable for \bou.
+
+\end{document}
diff --git a/language/japanese/BX/bxjaprnind/LICENSE b/language/japanese/BX/bxjaprnind/LICENSE
new file mode 100644
index 0000000000..8ada757fbc
--- /dev/null
+++ b/language/japanese/BX/bxjaprnind/LICENSE
@@ -0,0 +1,21 @@
+The MIT License
+
+Copyright (c) 2017 Takayuki YATO (aka. "ZR")
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/language/japanese/BX/bxjaprnind/README-ja.md b/language/japanese/BX/bxjaprnind/README-ja.md
new file mode 100644
index 0000000000..8c82f26e7c
--- /dev/null
+++ b/language/japanese/BX/bxjaprnind/README-ja.md
@@ -0,0 +1,47 @@
+BXjaprnind パッケージ
+=====================
+
+LaTeX: 段落頭の開き括弧類の位置の自動調整
+
+段落冒頭および強制改行後の行頭における開き括弧の位置をユーザが予め
+設定した値に自動的に調整する。
+
+### 対応環境
+
+ - TeX フォーマット: LaTeX
+ - TeX エンジン: pTeX/upTeX/LuaTeX(+LuaTeX-ja)
+ - 依存パッケージ: bxtoolbox([BXbase] バンドル)
+
+[BXbase]: https://www.ctan.org/pkg/bxbase
+
+### インストール
+
+TDS 1.1 に準拠するシステムの場合、以下のようにファイルを移動する:
+
+ - *.sty → $TEXMF/tex/latex/BXjaprnind
+
+この後必要に応じて mktexlsr を実行する。
+
+### ライセンス
+
+本パッケージは MIT ライセンスの下で配布される。
+
+bxjaprnind パッケージ ― 本体
+-----------------------------
+
+詳細は解説文書 bxjaprnind.pdf を参照。
+
+更新履歴
+--------
+
+ * Version 0.3b 〈2017/09/12〉
+ - source special 挿入への対策。
+ * Version 0.3a 〈2013/05/05〉
+ - 会話用の特別な鉤括弧の処理を追加した。
+ * Version 0.3 〈2013/04/29〉
+ - everyhook パッケージへの依存を無くした。
+ * Version 0.2 〈2012/05/14〉
+
+----------------------------------------
+Takayuki YATO (aka. "ZR")
+http://zrbabbler.sp.land.to/
diff --git a/language/japanese/BX/bxjaprnind/README.md b/language/japanese/BX/bxjaprnind/README.md
new file mode 100644
index 0000000000..bbe62aeab0
--- /dev/null
+++ b/language/japanese/BX/bxjaprnind/README.md
@@ -0,0 +1,62 @@
+BXjaprnind Package
+==================
+
+LaTeX: To adjust the position of parentheses at paragraph head
+
+In Japanese typesetting, opening parentheses placed at the beginning
+of paragraphs or lines are treated specially; for example, while the
+paragraph indent before normal kanji characters is 1em, the indent
+before parentheses can be 0.5em, 1em or 1.5em deoending on the local
+rule in effect.
+
+This package allows users to specify the amount of indent just before
+Japanese parentheses placed at paragraph/line head.
+
+### System requirement
+
+ * TeX format: LaTeX.
+ * TeX engine: pTeX / upTeX / LuaTeX (+ LuaTeX-ja).
+ (The support for XeTeX is currently broken.)
+ * Dependent packages:
+ - bxtoolbox (from [BXbase] bundle)
+
+[BXbase]: https://www.ctan.org/pkg/bxbase
+
+### Package content
+
+ * `bxjaprnind.sty`: the package
+ * `bxjaprnind.pdf`: the user manual (in Japanese)
+ * `bxjaprnind.tex`: the source file of `bxjaprnind.pdf`
+ * `sample-bxjaprnind.pdf`: a sample document (in Japanese)
+ * `sample-bxjaprnind.tex`: the source file of `sample-bxjaprnind.pdf`
+
+### Installation
+
+In a system compliant to TDS 1.1, move the files as follows:
+
+ - `*.sty` → $TEXMF/tex/latex/BXjaprnind
+
+And rehash your TEXMF trees if necessary.
+
+### License
+
+This package is distributed under the MIT License.
+
+
+bxjaprnind package ― main
+--------------------------
+
+See the manual bxjaprnind.pdf (in Japanese) for detail.
+
+
+Revision History
+----------------
+
+ * Version 0.3b 〈2017/09/12〉
+ * Version 0.3a 〈2013/05/05〉
+ * Version 0.3 〈2013/04/29〉
+ * Version 0.2 〈2012/05/14〉
+
+--------------------
+Takayuki YATO (aka. "ZR")
+https://github.com/zr-tex8r
diff --git a/language/japanese/BX/bxjaprnind/bxjaprnind.pdf b/language/japanese/BX/bxjaprnind/bxjaprnind.pdf
new file mode 100644
index 0000000000..3de18a0b44
--- /dev/null
+++ b/language/japanese/BX/bxjaprnind/bxjaprnind.pdf
Binary files differ
diff --git a/language/japanese/BX/bxjaprnind/bxjaprnind.sty b/language/japanese/BX/bxjaprnind/bxjaprnind.sty
new file mode 100644
index 0000000000..77196e842f
--- /dev/null
+++ b/language/japanese/BX/bxjaprnind/bxjaprnind.sty
@@ -0,0 +1,388 @@
+%
+% bxjaprnind.sty
+%
+
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{bxjaprnind}[2017/09/12 v0.3b]
+
+\def\bxpi@pkgname{bxjaprnind}
+\def\bxpi@error{\PackageError\bxpi@pkgname}
+
+%% definitions
+\newdimen\bxpi@dima
+
+%% code guards
+\edef\bxpi@restore@codes{%
+\catcode33=\the\catcode33%<!>
+\catcode34=\the\catcode34%<">
+\catcode62=\the\catcode62%<>>
+\endlinechar=\the\endlinechar%
+\relax}%
+\catcode33=12 %
+\catcode34=12 %
+\catcode62=12 %
+\AtEndOfPackage{%
+\bxpi@restore@codes
+\undef\bxpi@restore@codes}
+
+%------------------- setting the everypar hook
+
+\RequirePackage{bxtoolbox}
+
+%% Checks if everyhook package is available
+\@tempswafalse
+\ifbxineTeX
+ \IfFileExists{everyhook.sty}{%
+ \@tempswatrue
+ }{}
+\fi
+
+\if@tempswa
+ % if everyhook is available...
+ \RequirePackage{everyhook}[2011/02/04]
+
+ % register the hook
+ \PushPostHook{par}{\bxpi@par@hook}
+
+\else
+ % otherwise...
+ % makes a hook to \everypar for myself
+ \let\bxpi@everypar\everypar
+ \newtoks\everypar
+ \everypar\bxpi@everypar
+ \bxpi@everypar{\the\expandafter\everypar\bxpi@par@hook}%
+
+\fi
+\endlinechar=-1 %
+%------------------- setting the newline hook
+
+%% adds hooks to (subcommands of) \\
+\preto\@xnewline{\bxpi@init@param}
+\let\bxpi@org@@newline\@newline
+\def\@newline[#1]{
+ \bxpi@parse@arg{#1}
+ \expandafter\bxpi@org@@newline\expandafter[\bxpi@res]
+}
+\begingroup
+ \toks@\expandafter{\@gnewline{#1}}
+ \edef\bxpi@next{
+ \gdef\noexpand\@gnewline##1{
+ \the\toks@
+ \noexpand\bxpi@paren@indent
+ }
+ }
+ \bxpi@next
+\endgroup
+
+%------------------- helpers
+
+%% \bxpi@inhibitglue
+\ifdef\inhibitglue{
+ \let\bxpi@inhibitglue\inhibitglue
+}{%else
+ \let\bxpi@inhibitglue\relax
+ \bxpi@warn{
+ \string\inhibitglue\space unavailable in current settings;
+ \MessageBreak the package may not work properly
+ }
+}
+
+%------------------- main
+
+%% \def\bxpi@parhead
+\def\bxpi@parhead{0}
+%% \def\bxpi@linehead
+\def\bxpi@linehead{0}
+%% \def\bxpi@dialogue
+\def\bxpi@dialogue{0.5}
+%% \def\bxpi@lineheadforce
+\def\bxpi@lineheadforce{1}
+%% \ifbxpi@d@parprnind
+\newbool{bxpi@d@parprnind}\bxpi@d@parprnindtrue
+%% \ifbxpi@d@lineprnind
+\newbool{bxpi@d@lineprnind}\bxpi@d@lineprnindtrue
+%% \ifbxpi@diaprnind
+\newbool{bxpi@diaprnind}\bxpi@diaprnindfalse
+%% \ifbxpi@prnind
+\newbool{bxpi@prnind}
+%% \ifbxpi@forceind
+\newbool{bxpi@forceind}
+%% \bxpi@choice
+\let\bxpi@choice\relax
+%% \bxpi@special
+\let\bxpi@special\relax
+
+%%<*> \useparheadparenindent
+\bxNewrobustcmd*{\useparheadparenindent}{
+ \bxpi@d@parprnindtrue
+}
+
+%%<*> \nouseparheadparenindent
+\bxNewrobustcmd*{\nouseparheadparenindent}{
+ \bxpi@d@parprnindfalse
+}
+
+%%<*> \uselineheadparenindent
+\bxNewrobustcmd*{\uselineheadparenindent}{
+ \bxpi@d@lineprnindtrue
+}
+
+%%<*> \nouselineheadparenindent
+\bxNewrobustcmd*{\nouselineheadparenindent}{
+ \bxpi@d@lineprnindfalse
+}
+
+%%<*> \usedialogueparenindent
+\bxNewrobustcmd*{\usedialogueparenindent}{
+ \bxpi@diaprnindtrue
+}
+
+%%<*> \nousedialogueparenindent
+\bxNewrobustcmd*{\nousedialogueparenindent}{
+ \bxpi@diaprnindfalse
+}
+
+%%<*> \parheadparenindentamount
+% Sets the value of \bxpi@parhead.
+\bxNewrobustcmd*{\parheadparenindentamount}[1]{
+ \edef\bxpi@parhead{#1}
+}
+
+%<*> \lineheadparenindentamount
+% Sets the value of \bxpi@linehead.
+\bxNewrobustcmd*{\lineheadparenindentamount}[1]{
+ \edef\bxpi@linehead{#1}
+}
+
+%<*> \lineheadforceindentamount
+% Sets the value of \bxpi@lineheadforce.
+\bxNewrobustcmd*{\lineheadforceindentamount}[1]{
+ \edef\bxpi@lineheadforce{#1}
+}
+
+%%<*> \prnind
+%
+\bxNewrobustcmd*{\prnind}{
+ \leavevmode\relax
+ \bxpi@prnindtrue
+ \bxpi@forceindfalse
+ \let\bxpi@choice=m
+ \let\bxpi@special\relax
+ \kernel@ifnextchar[{
+ \bxpi@prnind@a
+ }{%else
+ \let\bxpi@value\bxpi@parhead
+ \bxpi@paren@indent
+ }
+}
+\def\bxpi@prnind@a[#1]{
+ \def\bxpi@value{#1}
+ \bxpi@paren@indent
+}
+
+%% \bxpi@init@param
+% Initializes the parameters.
+% (Invoked at every \\.)
+\def\bxpi@init@param{
+ \bxpi@prnind@linedflt
+ \bxpi@forceindfalse
+ \let\bxpi@choice=l
+ \let\bxpi@value\bxpi@linehead
+ \let\bxpi@special\relax
+}
+
+%% \bxpi@parse@arg{<str>}
+% Parses the option argument of \\. It reads the prefix > and !
+% and sets the switches bxpi@forceind and bxpi@prnind, then
+% sets the remaining string to \bxpi@res, which is passed to
+% the original argument parser (\@newline).
+\def\bxpi@parse@arg#1{%
+ \bxpi@parse@arg@a#1\bxpi@end
+}
+\def\bxpi@parse@arg@a{
+ \futurelet\bxpi@tok\bxpi@parse@arg@b
+}
+\def\bxpi@parse@arg@b{
+ \bxIfx{\bxpi@tok\bgroup}{
+ \bxpi@parse@arg@c
+ }{%else
+ \bxpi@parse@arg@d
+ }
+}
+\def\bxpi@parse@arg@c#1\bxpi@end{
+ \ifstrempty{#1}{
+ \def\bxpi@res{\z@}
+ }{%else
+ \def\bxpi@res{#1}
+ }
+}
+\def\bxpi@parse@arg@d#1{%
+ \bxIfx{,#1}{
+ \bxpi@parse@arg@a
+ }{\bxIfx{!#1}{
+ \ifbxpi@prnind \bxpi@prnindfalse
+ \else \bxpi@prnindtrue
+ \fi
+ \bxpi@parse@arg@a
+ }{\bxIfx{>#1}{
+ \bxpi@forceindtrue
+ \bxpi@parse@arg@a
+ }{
+ \bxpi@parse@arg@c#1
+ }}}
+}
+
+%% \bxpi@par@hook
+\def\bxpi@par@hook{
+ \bxpi@prnind@pardflt
+ \bxpi@forceindfalse
+ \let\bxpi@choice=p
+ \let\bxpi@value\bxpi@parhead
+ \let\bxpi@special\relax
+ \futurelet\bxpi@tok\bxpi@par@hook@a
+}
+\def\bxpi@par@hook@a{
+ \bxIfx{\bxpi@tok\special}{
+ \bxpi@par@hook@b
+ }{%else
+ \bxpi@paren@indent
+ }
+}
+\def\bxpi@par@hook@b#1#2{
+ \def\bxpi@special{#2}
+\bxDebug{special:#2}
+ \bxpi@paren@indent
+}
+
+%% \bxpi@paren@indent
+\def\bxpi@paren@indent{
+ \bxpi@dima=-\maxdimen
+ \ifbxpi@forceind
+ \bxGetZenkakuWidth
+ \bxpi@dima=\bxResDim
+ % empty boxes never warn undefhull
+ \hb@xt@\bxpi@lineheadforce\bxpi@dima{}
+\bxDebug{forceind:\bxpi@lineheadforce}
+ \fi
+ \ifbool{bxpi@prnind}{
+ \futurelet\bxpi@tok\bxpi@prnindent@a
+ }{%else
+ \bxpi@put@special
+ \ignorespaces
+ }
+}
+\expandafter\def\expandafter\bxpi@prnindent@space\space{
+ \futurelet\bxpi@tok\bxpi@prnindent@a
+}
+\def\bxpi@prnindent@a{
+ \bxIf{\@sptoken\bxpi@tok}{
+ \bxpi@prnindent@space
+ }{\bxIfCharToken\bxpi@tok{
+ \bxpi@prnindent@b
+ }{%else
+ \bxpi@put@special
+ \ignorespaces
+ }}
+}
+\def\bxpi@prnindent@b#1{
+ \bxpi@if@open@paren#1{
+ \ifbxpi@diaprnind
+ \if m\bxpi@choice \else
+ \bxpi@if@dia@open@paren#1{
+ \let\bxpi@value\bxpi@dialogue
+ \if p\bxpi@choice
+ {\setbox0=\lastbox}
+\bxDebug{cancel parindent}
+ \fi
+ }
+ \fi
+ \fi
+ \bxpi@prnindent@c
+ }
+ \bxpi@put@special
+ #1
+}
+\def\bxpi@prnindent@c{
+ \ifdim \bxpi@dima<\z@
+ \bxGetZenkakuWidth
+ \bxpi@dima=\bxResDim
+ \fi
+ \kern\bxpi@value\bxpi@dima
+\bxDebug{parind:\bxpi@value}
+ \bxpi@inhibitglue
+}
+
+%% \bxpi@put@special
+\def\bxpi@put@special{
+ \ifx\bxpi@special\relax\else
+\bxDebug{put-special:}
+ \special{\bxpi@special}
+ \let\bxpi@special\relax
+ \fi
+}
+
+%% \bxpi@if@open@paren
+\def\bxpi@if@open@paren#1{
+ \bxIfcsundef{bxpi@P/#1}
+ {\@gobble}
+ {\@firstofone}
+}
+
+%% \bxpi@if@dia@open@paren
+\def\bxpi@if@dia@open@paren#1{
+ \bxIfcsundef{bxpi@DP/#1}
+ {\@gobble}
+ {\@firstofone}
+}
+
+%% \bxpi@prnind@pardflt
+\edef\bxpi@prnind@pardflt{
+ \let\bxCsNoexpand{ifbxpi@prnind}
+ \bxCsNoexpand{ifbxpi@d@parprnind}
+}
+%% \bxpi@prnind@linedflt
+\edef\bxpi@prnind@linedflt{
+ \let\bxCsNoexpand{ifbxpi@prnind}
+ \bxCsNoexpand{ifbxpi@d@lineprnind}
+}
+
+%------------------- character table
+
+%% \bxpi@P/<char>
+\def\do#1#2{%
+ \bxToUcsCharDual{"#1}{"#2}
+ \cslet{bxpi@P/\bxRes}{t}
+}
+\do{2146}{2018}
+\do{2148}{201C}
+\do{214A}{FF08}
+\do{214C}{3014}
+\do{214E}{FF3B}
+\do{2150}{FF5B}
+\do{2152}{3008}
+\do{2154}{300A}
+\do{2156}{300C}
+\do{2158}{300E}
+\do{215A}{3010}
+\ifbxHasUcsChar
+ \def\do#1{
+ \bxToUcsChar{"#1}
+ \cslet{bxpi@P/\bxRes}{t}
+ }
+\do{2985}
+\do{3018}
+\do{3016}
+\do{00AB}
+\do{301D}
+\fi
+
+%% \bxpi@DP/<char>
+\def\do#1#2{%
+ \bxToUcsCharDual{"#1}{"#2}
+ \cslet{bxpi@DP/\bxRes}{t}
+}
+\do{2156}{300C}
+\do{2158}{300E}
+
+%------------------- all done
+\endinput
diff --git a/language/japanese/BX/bxjaprnind/bxjaprnind.tex b/language/japanese/BX/bxjaprnind/bxjaprnind.tex
new file mode 100644
index 0000000000..d9f63c803a
--- /dev/null
+++ b/language/japanese/BX/bxjaprnind/bxjaprnind.tex
@@ -0,0 +1,119 @@
+% 文字コードは UTF-8
+% lualatex で組版する(LuaTeX-ja 使用)
+\documentclass[a4paper]{ltjsarticle}
+\usepackage[ipaex]{luatexja-preset}
+\usepackage{metalogo}
+\usepackage{shortvrb}
+\MakeShortVerb{\|}
+\newcommand{\PkgVersion}{0.3b}
+\newcommand{\PkgDate}{2017/09/12}
+\newcommand{\Pkg}[1]{\textsf{#1}}
+\newcommand{\Meta}[1]{$\langle$\mbox{}#1\mbox{}$\rangle$}
+\newcommand{\Note}{\par\noindent ※}
+\newcommand{\Means}{~:\quad}
+\providecommand{\pTeX}{p\TeX}
+\providecommand{\upTeX}{u\pTeX}
+%-----------------------------------------------------------
+\begin{document}
+\title{\Pkg{bxjaprnind} パッケージ(v\PkgVersion)}
+\author{八登崇之\ (Takayuki YATO; aka.~``ZR'')}
+\date{v\PkgVersion\quad[\PkgDate]}
+\maketitle
+
+%===========================================================
+\section{概要}
+
+以下の機能を提供する。
+\begin{itemize}
+\item 段落冒頭および強制改行後の行頭における開き括弧の前に
+ (環境により)挿入されるグルーを除去する。
+ このようなグルーが行分割の都合で伸縮すると、
+ ソース上で同じ条件にある括弧の位置が揃わないという
+ 不都合が生じる。
+\item さらに、そのような開き括弧の前の字下げを、
+ 著者が予め設定した量に自動的に調整する。
+\item 強制改行命令(|\\|)のオプションとして
+ 改行後に予め設定した量の字下げを行えるようにする。
+\end{itemize}
+
+\paragraph{対応フォーマット} \LaTeX。
+
+\paragraph{対応エンジン} 次の何れか。
+\begin{itemize}
+\item {\pTeX}またはその拡張。
+\item {\XeTeX}(\Pkg{ZXjatype}パッケージ使用時)
+\item {\LuaTeX}(\Pkg{LuaTeX-ja}パッケージ使用時)
+\end{itemize}
+
+\paragraph{依存パッケージ} 次の通り。
+\begin{itemize}
+\item \Pkg{bxtoolbox} パッケージ(\Pkg{BXbase}バンドルに含まれる)
+\item 0.3版以降は\Pkg{everyhook}パッケージに依存しなくなった。
+しかし、\Pkg{everyhook}パッケージが利用可能である場合はそれを利用する。
+\item \Pkg{everyhook}パッケージは\Pkg{svn-proc} パッケージに依存する。
+\end{itemize}
+
+%===========================================================
+\section{パッケージの読込}
+
+|\usepackage| で読み込む。
+オプションはない。
+\begin{verbatim}
+\usepackage{bxjaprnind}
+\end{verbatim}
+
+%===========================================================
+\section{機能}
+
+以下の命令が提供される。
+
+\begin{itemize}
+\item |\useparheadparenindent|/|\nouseparheadparenindent|\Means
+ 段落頭での開き括弧調整を有効/無効にする。
+\item |\uselineheadparenindent|/|\nouselineheadparenindent|\Means
+ 強制改行後の行頭での開き括弧調整を有効/無効にする。
+ \Note 折り返しの行頭の調整には対応しない
+ (これにはJFMの修正が必須)。
+ 現在(u){\pTeX}で標準的に用いられるJFMの場合、
+ 折り返し行頭の開き括弧の前には空きは入らない。
+\item |\prnind[|\Meta{実数$r$}|]|\Means
+ 段落頭で用いて、当該の箇所での調整を
+ (|\nouseparheadparenindent| の状態でも)有効にする。
+ オプションの引数が存在する場合は、
+ 開き括弧の前の空きを$r$全角幅とする。
+\item |\\[|\Meta{引数}|]|/|\\*[|\Meta{引数}|]|\Means
+ 強制改行命令のオプション引数が次のように拡張される。
+ \begin{itemize}
+ \item |\\[>]|\Means
+ 行頭に |\lineheadforceindentamount| で指定した幅の
+ 字下げを挿入する。
+ \item |\\[!]|\Means
+ 開き括弧調整の有効・無効を逆転する。
+ 元々の引数(改行調整の値)と併用する場合は、
+ |!| や |>| を長さの値の前に記述する
+ (例えば |\\[>!2mm]|)。
+ \end{itemize}
+\item |\parheadparenindentamount{|\Meta{実数$r$}|}|\Means
+ 段落頭での開き括弧の前の追加の空きを$r$全角幅とする。
+ 段落下げの空き(|\parindent|)はこれとは独立に入ることに注意。
+\item |\lineheadparenindentamount{|\Meta{実数$r$}|}|\Means
+ 強制改行後の行頭での開き括弧の前の追加の空きを$r$全角幅とする。
+ (強制字下げ(|\\[>]|)の空きとは独立。)
+\item |\lineheadforceindentamount{|\Meta{実数$r$}|}|\Means
+ 強制字下げ(|\\[>]|)の空きを$r$全角幅とする。
+\item |\usedialogueparenindent|/|\nousedialogueparenindent|\Means
+ 会話用の特別な開き括弧調整を有効/無効にする。
+ 有効にすると鉤括弧「」『』について以下のように調整方法が変わる。
+ \begin{itemize}
+ \item 空きの量を |\dialogueparenindentamount| で指定された値にする。
+ \item 段落頭の場合は段落下げの空き(|\parindent|)を無効にする。
+ \end{itemize}
+ \Note
+ 臨時に鉤括弧の扱いを通常の括弧と同じにしたい場合は、
+ 当該の鉤括弧の前に |\prnind| を置けばよい。
+\item |\dialogueparenindentamount{|\Meta{実数$r$}|}|\Means
+ 段落頭・強制改行行頭での会話用の開き鉤括弧の前の追加の
+ 空きを$r$全角幅とする。
+\end{itemize}
+
+\end{document}
diff --git a/language/japanese/BX/bxjaprnind/sample-bxjaprnind.pdf b/language/japanese/BX/bxjaprnind/sample-bxjaprnind.pdf
new file mode 100644
index 0000000000..57bf934eac
--- /dev/null
+++ b/language/japanese/BX/bxjaprnind/sample-bxjaprnind.pdf
Binary files differ
diff --git a/language/japanese/BX/bxjaprnind/sample-bxjaprnind.tex b/language/japanese/BX/bxjaprnind/sample-bxjaprnind.tex
new file mode 100644
index 0000000000..676ea2fd54
--- /dev/null
+++ b/language/japanese/BX/bxjaprnind/sample-bxjaprnind.tex
@@ -0,0 +1,131 @@
+% upLaTeX文書; 文字コードはUTF-8
+\documentclass[a4paper,uplatex]{jsarticle}
+\usepackage{bxjaprnind}
+\newcommand{\Pkg}[1]{\textsf{#1}}
+\begin{document}
+\title{\Pkg{bxjaprnind}パッケージサンプル出力}
+\author{八登崇之\ (Takayuki YATO; aka.~``ZR'')}
+\date{2013/04/29}
+\maketitle
+
+%-------------------
+\section{段落頭の括弧類の空き自動補正}
+\newcommand\SampleTextA{%
+「□□□□?」\par
+「□□□□□□□□、□□□□□□□□」\par
+「□□□□□□□□!」\par
+}
+
+\begin{itemize}
+\item 左は自動補正を無効化(\verb|\nouseparheadparenindent|)。
+\item 右は自動補正を有効化(\verb|\useparheadparenindent|)。
+\end{itemize}
+\begin{center}
+% 既定は有効だが敢えて無効にする
+\nouseparheadparenindent % 段落頭での補正を無効に
+\fbox{\begin{minipage}{10zw}
+ \setlength{\parindent}{1zw}
+ \SampleTextA
+\end{minipage}}%
+\hspace{4zw}
+\useparheadparenindent % 段落頭での補正を有効に
+\fbox{\begin{minipage}{10zw}
+ \setlength{\parindent}{1zw}
+ \SampleTextA
+\end{minipage}}%
+\end{center}
+
+%-------------------
+\section{段落頭の括弧類の空きの補正値の変更}
+\newcommand\SampleTextB{%
+「□□□□□□□、□□□□□□□□□□□□□□□」
+}
+
+\begin{itemize}
+\item 左は既定(\verb|\parheadparenindentamount{0}|)。
+\item 右は半角下げに変更(\verb|\parheadparenindentamount{-0.5}|)。
+\item 段落下げ(\verb|\parindent|)が入った位置を基準にしている。
+\item 強制改行後の空白の調整は可能(\verb|\lineheadparenindentamount|)
+だが折り返し行頭の空白の調整は{\pTeX}の仕様上困難である。
+\end{itemize}
+\begin{center}
+\parheadparenindentamount{0} % 全角下げ(既定値)
+\fbox{\begin{minipage}{10zw}
+ \setlength{\parindent}{1zw}
+ \SampleTextB
+\end{minipage}}%
+\hspace{4zw}
+\parheadparenindentamount{-0.5} % 二分下げ
+\fbox{\begin{minipage}{10zw}
+ \setlength{\parindent}{1zw}
+ \SampleTextB
+\end{minipage}}%
+\end{center}
+
+%-------------------
+\section{強制改行後の括弧類の空きの補正値の変更}
+\newcommand\SampleTextC{%
+「□□□□?」\\
+「□□□。□□!」\\
+「□□□□□□。□□□□□□□□□□□□□□」\\
+「□□□□□□□!」
+}
+
+\begin{itemize}
+\item ソースでは各台詞の間に強制改行が入れられている。
+\item 左は既定の設定。
+\item 右は %
+\verb|\parheadparenindentamount{-0.5}\lineheadparenindentamount{0.5}|。
+\item 鉤括弧以外の括弧にも効くのでグローバル設定には不適切であるが、
+この設定にする環境を作る等の方法が考えられる。
+\item やっぱり不便なので次節の機能を作った。
+\end{itemize}
+\begin{center}
+\fbox{\begin{minipage}{10zw}
+ \setlength{\parindent}{1zw}
+ \SampleTextC
+\end{minipage}}%
+\hspace{4zw}
+\parheadparenindentamount{-0.5}\lineheadparenindentamount{0.5}
+\fbox{\begin{minipage}{10zw}
+ \setlength{\parindent}{1zw}
+ \SampleTextC
+\end{minipage}}%
+\end{center}
+
+%-------------------
+\section{会話の鉤括弧のための特別な処理}
+\newcommand\SampleTextD{%
+□□□、□□□□□□□□□。\par
+「□□□□?」\\
+「□□□。□□!」\\
+「□□□□□□。□□□□□□□□□□□□□□」\\
+「□□□□□□□!」\par
+(□□□)□□□□、□□□□□□。\par
+}
+
+\begin{itemize}
+\item ソースでは各台詞の間に強制改行が入れられている。
+(その前後は改段落している。)
+\item 左は既定の設定。
+\item 右は \verb|\usedialogueparenindent|。
+\item 鉤括弧だけ \verb|\dialogueparenindentamount| で指定した字下げ量
+(既定は半角)になり、さらに段落下げが無効になる。
+鉤括弧以外の括弧の処理は通常通り。
+\item 鉤括弧を通常の括弧として扱いたい場合は、直前に \verb|\prnind|
+を置けばよい。
+\end{itemize}
+\begin{center}
+\fbox{\begin{minipage}{10zw}
+ \setlength{\parindent}{1zw}
+ \SampleTextD
+\end{minipage}}%
+\hspace{4zw}
+\usedialogueparenindent
+\fbox{\begin{minipage}{10zw}
+ \setlength{\parindent}{1zw}
+ \SampleTextD
+\end{minipage}}%
+\end{center}
+
+\end{document}
diff --git a/language/japanese/BX/bxjscls/LICENSE b/language/japanese/BX/bxjscls/LICENSE
new file mode 100644
index 0000000000..4e794feb3a
--- /dev/null
+++ b/language/japanese/BX/bxjscls/LICENSE
@@ -0,0 +1,28 @@
+The BSD 2-Clause License
+
+Copyright 1995-1999 ASCII Corporation.
+Copyright 1999-2016 Haruhiko Okumura
+Copyright 2016-2019 Japanese TeX Development Community
+Copyright 2013-2019 Takayuki YATO (aka. "ZR")
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+1. Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+
+2. Redistributions in binary form must reproduce the above copyright notice,
+this list of conditions and the following disclaimer in the documentation
+and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/language/japanese/BX/bxjscls/README-ja.md b/language/japanese/BX/bxjscls/README-ja.md
new file mode 100644
index 0000000000..5dce4a844e
--- /dev/null
+++ b/language/japanese/BX/bxjscls/README-ja.md
@@ -0,0 +1,279 @@
+BXjscls パッケージバンドル
+==========================
+
+LaTeX: 全エンジン対応日本語文書クラス集
+
+奥村晴彦氏作製の [pLaTeX2e 新ドキュメントクラス] の和文文書クラス集を
+拡張したもの。元のクラスは (u)pLaTeX 専用であるが、こちらは pdfLaTeX /
+XeLaTeX / LuaLaTeX の上でも日本語処理パッケージと連携して使用すること
+ができる。
+
+[pLaTeX2e 新ドキュメントクラス]:
+(http://oku.edu.mie-u.ac.jp/~okumura/jsclasses/)
+
+### 前提環境
+
+ * TeX エンジン: pdfTeX / XeTeX / LuaTeX / pTeX / upTeX / pTeX-ng
+ - e-TeX 拡張は必須でない
+ - XeTeX は 0.997 版以降が必要
+ * フォーマット: LaTeX
+ * DVI ウェア: 不問
+ * 必須パッケージ:
+ - keyval
+ - calc
+ - geometry
+ * standard 和文ドライバで連携するパッケージ:
+ - (pdf)LaTeX の場合:
+ CJK / bxcjkjatype(v0.2c以降)
+ - XeLaTeX の場合:
+ xeCJK(v3.0以降) / zxjatype(v0.6以降)
+ - LuaLaTeX の場合:
+ LuaTeX-ja
+ * その他、場合により必須となるパッケージ:
+ - type1cm : `magstyle` が `real`/`xreal` である場合
+ - pxchfon(v0.5以降): pLaTeX で `jafont` を指定した場合
+ - zxjafont(v0.2a以降): XeLaTeX で `jafont` を指定した場合
+ * エンジンが (u)pTeX 以外で、かつ和文ドライバが standard 以外の場合、
+ そのエンジンに対応する日本語処理パッケージが必要となる。
+
+### 構成物
+
+ * `bxjscls-manual.pdf`: ユーザ向け説明書
+ * `bxjscls-manual.tex`: 上項のソースファイル
+ * `bxjscls.dtx`: DocStrip ソースファイル
+ * `bxjscls.ins`: DocStrip インストーラファイル
+ * `bxjscls.pdf`: DocStrip 文書(ソースコード説明書)
+
+※アーカイブ中に DocStrip からの生成ファイル(`*.cls`/`*.def`、一覧は
+次節に後掲)が含まれる場合もある。
+
+### インストール
+
+本パッケージバンドルは DocStrip 形式ファイルの形で提供されている。
+
+アーカイブに文書クラスファイル(`*.cls`/`*.def`)が含まれていない場合
+は、以下のコマンドを実行して生成する。
+
+ luatex bxjscls.ins
+
+このコマンドにより次のファイル群が生成される。
+
+ * `bxjsarticle.cls`: BXJS版 article クラスファイル
+ * `bxjsbook.cls`: BXJS版 book クラスファイル
+ * `bxjsreport.cls`: BXJS版 report クラスファイル
+ * `bxjsslide.cls`: BXJS版 slide クラスファイル
+ * `bxjsja-minimal.def`: minimal 和文ドライバファイル
+ * `bxjsja-standard.def`: standard 和文ドライバファイル
+ * `bxjsja-pandoc.def`: pandoc 和文ドライバファイル
+ * `bxjsja-modern.def`: modern 和文ドライバファイル
+ * `bxjscompat.sty`: bxjscompat パッケージファイル
+ * `bxjscjkcat.sty`: bxjscjkcat パッケージファイル
+ * `bxjspandoc.sty`: bxjspandoc パッケージファイル
+
+その後、各ファイルを次の場所に移動する。
+(TDS 1.1 に従ったシステムの場合。)
+
+ - `*.cls`/`*.def`/`*.sty` → $TEXMF/tex/latex/bxjscls/
+ - `*.dtx`/`*.ins` → $TEXMF/source/latex/bxjscls/
+ - `*.pdf`/`*.tex` → $TEXMF/doc/latex/bxjscls/
+
+その後、(必要に応じて)`mktexlsr` を実行する。
+
+#### (参考)説明書文書のコンパイル
+
+アーカイブに含まれる説明書の PDF 文書は以下のコマンドによって生成
+されたものである。
+
+ * `bxjscls-manual.pdf` ← `lualatex bxjscls-manual.tex`
+ * `bxjscls.pdf` ← `lualatex bxjscls.dtx`
+
+### 使用方法
+
+ユーザ向け説明書 `bxjscls-manual.pdf` を参照されたい。
+
+### ライセンス
+
+修正BSDライセンス(The BSD 2-Clause License)の下で配布される。
+
+更新履歴
+--------
+
+ * Version 1.9h 〈2019/07/27〉
+ - jsclasses の 2019/07/25 と同期。
+ - バグ修正。
+ * Version 1.9g 〈2019/06/23〉
+ - バグ修正。
+ * Version 1.9f 〈2019/03/10〉
+ - Pandoc モードを最新の Pandoc に対応させる。
+ * Version 1.9e 〈2019/01/13〉
+ - XeTeX の場合の既定の IPAex フォントをファイル名指定にする。
+ * Version 1.9d 〈2018/10/03〉
+ - 原則的に和暦の処理を bxwareki パッケージに任せる。
+ - バグ修正。
+ * Version 1.9c 〈2018/09/04〉
+ - pandoc 和文ドライバの Babel 対策を改良。
+ - バグ修正。
+ * Version 1.9b 〈2018/08/20〉
+ - バグ修正。
+ * Version 1.9a 〈2018/07/20〉
+ - jsclasses の 2018/06/23 と同期。
+ + `\jsTocLine` を新設。
+ * Version 1.9 〈2018/04/19〉
+ - 一部のオプションの名前を変更:
+ `use-zw`、`disguise-js`、`precise-text`、`simple-ja-setup`
+ * Version 1.8b 〈2018/04/14〉
+ - bxjscjkcat を新しい upTeX に追随させる。
+ - 新元号に関する何か。
+ * Version 1.8a 〈2018/03/29〉
+ - jsclasses の 2018/03/11 と同期。(仕様変更は無し。)
+ - バグ修正。
+ * Version 1.8 〈2018/03/03〉
+ - `textwidth`、`number-of-lines` オプションを新設。
+ - `\setpagelayout+` 命令をを新設。
+ - jlreq 文書クラスとの互換用のオプション(`fontsize` 等)を追加。
+ - (u)pLaTeX 以外のエンジンでは常に `ja` オプションを明示することを
+ 推奨する。
+ - 二文字フォント命令の使用の警告を少し冗長にした。
+ - バグ修正。
+ * Version 1.7c 〈2018/02/04〉
+ - オプション `label-section` を新設。
+ * Version 1.7b 〈2018/01/28〉
+ - 和文パラメタ `units` を新設。
+ - `jafont` オプションの丸括弧記法。
+ - バグ修正。
+ * Version 1.7a 〈2017/12/09〉
+ - 〈試験的〉新元号対応の準備。`\jayear` 命令を追加。
+ - `\@` の定義を修正。`fix-at-cmd` オプションを追加。
+ * Version 1.7 〈2017/10/21〉
+ - 和文空白命令(`\jaenspace` 等)を追加。
+ - `everyparhook` オプションを新設。
+ * Version 1.6b 〈2017/09/28〉
+ - Pandoc モードでは bxcjkjatype に autotilde を付けない。
+ * Version 1.6a 〈2017/09/24〉
+ - `bxjspandoc` パッケージを新設。
+ - Pandoc モードで起こる細かい不具合に対処した。
+ * Version 1.6 〈2017/09/09〉
+ - bxjsreport の継承元を jsbook + report から jsreport に変更した。
+ - jsclasses の 2017/09/03 版と同期。
+ * Version 1.5d 〈2017/07/07〉
+ - バグ修正。
+ * Version 1.5c 〈2017/06/10〉
+ - `\jafontsize` 命令を追加。
+ - 和文パラメタ `jis2004` を新設。
+ - 和文パラメタ `font` を新設。
+ - `jafont=auto` 設定で updmap.cfg を読む際に `kanjiEmbed` に加えて
+ `jaEmbed` も読み取る。
+ - バグ修正。
+ * Version 1.5b 〈2017/04/01〉
+ - 全エンジンについて、`\>` で和欧文間空白を挿入するようにした。
+ - `xkanjiskip-cmd` オプションを新設。
+ - `nodvidriver` ドライバオプションを新設。
+ - バグ修正。
+ * Version 1.5a 〈2017/03/14〉
+ - バグ修正。
+ * Version 1.5 〈2017/03/11〉
+ - jsreport の `layout=v2` 指定で、従来の jsbook + report に代わって、
+ jsclasses で新設された jsreport のレイアウトを継承する。
+ - pLaTeX-ng のためのエンジンオプション `platex-ng` を新設。
+ - `chapterabstract` 環境を新設。
+ - `hyperref-enc`、`whole-zw-lines` オプションを新設。
+ - jsclasses の 2017/03/05 と同期。
+ + `openleft` オプションを新設。
+ + `\frontmatter`、`\backmatter` の仕様の変更。
+ * Version 1.4 〈2017/02/03〉
+ - `\zwapace` 命令を追加。
+ - 数式中の和文出力をサポートした。
+ - バグ修正。
+ * Version 1.3a 〈2017/01/28〉
+ - jsclasses の 2017/01/13 と同期。
+ * Version 1.3 〈2016/11/01〉
+ - bxjsbook について、水平マージンの量が jsbook と大きく異なると
+ いう不具合を修正した。同時に修正前のレイアウトを継続するための
+ オプション `layout` を新設した。
+ - jsclasses の 2016/10/08 と同期。
+ ※ページレイアウトの修正にはまだ追随てきていない。
+ + `(no)jslogo` オプションを新設。`jslogo` 指定時は(jsclasses
+ の)jslogo パッケージを読みこむ。(既定は `nojslogo`。)
+ + bxjsslide の一部の節見出しのレイアウトを修正。
+ + 和文用の微調整。
+ * Version 1.2a 〈2016/08/17〉
+ - fancyhdr パッケージに対する調整を入れた。
+ - `fancyhdr`、`textwidth-limit`、`paragraph-mark` オプションを新設。
+ - `\ascpt` 命令を新設した。
+ * Version 1.2 〈2016/08/01〉
+ - `geometry` オプションを新設した。
+ - `dvi` オプションを新設した。
+ - `\bf` や `\it` などの“二文字フォント命令”の使用に対して警告を
+ (現状では控えめに)出すようにする。この警告を制御するオプション
+ `(no)oldfontcommands` および `\(dis)allowoldfontcommands` 命令
+ を新設した。
+ - 万一“2.09 互換モード”で BXJS クラスが読み込まれた場合は致命的
+ エラーとする。
+ * Version 1.1f 〈2016/07/16〉
+ - jsclasses の開発体制の変更に応じて、原作に関する記述を修正。
+ - magstyle オプションの値の名前を jsclasses に合わせて変更。
+ - 動く引数中で `\@` を用いた場合に aux ファイル中で後続の空白文字
+ が消えてしまう不具合を修正。
+ - graphics/color パッケージ対策で `nosetpagesize` をグローバルに
+ 指定した。
+ * Version 1.1e 〈2016/05/28〉
+ - `\subtitle` の定義を遅延させる。
+ * Version 1.1d 〈2016/05/21〉
+ - XeTeX でも「hyperref で `unicode` を既定で有効」にする。
+ - `bigcode`/`nobigcode` オプションを追加。
+ * Version 1.1c 〈2016/05/01〉
+ - バグ修正。
+ * Version 1.1b 〈2016/03/27〉
+ - 〈試験的〉`precisetext` オプションを追加。
+ * Version 1.1a 〈2016/02/20〉
+ - `\jachar` 命令を追加。
+ - バグ修正。
+ * Version 1.1 〈2016/02/14〉
+ - “Pandoc モード”および pandoc 和文ドライバを追加。
+ - サブタイトル命令 `\subtitle` を追加。
+ - 〈試験的〉modern 和文ドライバを追加。
+ - 〈試験的〉補助パッケージ bxjscompat と bxjscjkcat を追加。
+ * Version 1.0d 〈2015/11/21〉
+ - バグ修正。
+ * Version 1.0c 〈2015/10/18〉
+ - バグ修正。
+ * Version 1.0b 〈2015/09/07〉
+ - 未知のオプションがあるとエラーになるという不具合(これだと
+ “グローバルオプション”が使えない)を修正した。
+ - `ja(driver)` が非指定の場合はエンジンやドライバのオプションが
+ 無い場合のエラー・警告を抑止した。(v0.3 との互換性対策。)
+ - 別行立て数式で不要な警告が出ていたのを修正。
+ * Version 1.0a 〈2015/08/23〉
+ - `base`/`jbase` での Q 単位の指定に対応。
+ - pdflatex 使用時に `\hypersetup` で和文文字を含む文書情報を
+ 指定可能にする。
+ - バグ修正。
+ * Version 1.0 〈2015/08/05〉
+ - bxjsreport と bxjsslide クラスを提供する。
+ - `jafont` オプションを追加。
+ - `nopapersize` オプションを追加。
+ - hyperref 対策を追加。
+ - microtype 対策を追加。
+ - `\ifdraft` の定義を遅延させる。
+ - その他もろもろ。
+ * Version 0.9 〈2013/10/03〉
+ - LuaTeX-ja との連携をサポート。
+ - `magstyle`、`(no)zw`、`(no)js` オプションを追加。
+ - “和文ドライバ”の概念を採用して、ソースコードの構成を
+ 大幅に変更した。
+ * Version 0.4 〈2013/08/03〉
+ - CJK + bxcjkjatype との連携を追加。
+ * Version 0.3a 〈2012/05/01〉
+ - 一部の用紙サイズオプション(`b4paper` 等)で、縦と横の長さを
+ 逆に指定していたのを修正した。
+ * Version 0.3 〈2010/08/15〉
+ - (u)pLaTeX 用連携モジュールを追加。
+ - `jbase` クラスオプションを追加。
+ - `base`, `jbase`, `mag` を calc パッケージの数式で
+ 記述できるようにした。
+ * Version 0.2 〈2009/08/15〉
+ - 最初の公開版。
+
+--------------------
+Takayuki YATO (aka. "ZR")
+https://github.com/zr-tex8r
diff --git a/language/japanese/BX/bxjscls/README.md b/language/japanese/BX/bxjscls/README.md
new file mode 100644
index 0000000000..c0071f8824
--- /dev/null
+++ b/language/japanese/BX/bxjscls/README.md
@@ -0,0 +1,146 @@
+BXjscls Package
+===============
+
+LaTeX: Japanese document class collection for all major engines
+
+This package provides an extended version of the Japanese document
+class collection provided by [jsclasses package]. While the original
+version supports only pLaTeX and upLaTeX, the extended version also
+supports pdfLaTeX, XeLaTeX and LuaLaTeX, with the aid of suitable
+packages that provide capability of Japanese typesetting.
+
+[jsclasses package]: (https://www.ctan.org/pkg/jsclasses)
+
+### SYSTEM REQUIREMENTS
+
+ * TeX engine: pdfTeX, XeTeX, LuaTeX, pTeX, upTeX or pTeX-ng.
+ - e-TeX extension is not needed.
+ - XeTeX must be of version 0.997 or later.
+ * TeX format: LaTeX.
+ * DVIware: Anything.
+ * Prerequisite packages:
+ - keyval
+ - calc
+ - geometry
+ * Packages that the standard ja-driver cooperates with:
+ - On (pdf)LaTeX:
+ CJK + bxcjkjatype (v0.2c+)
+ - On XeLaTeX:
+ xeCJK (v3.0+) + zxjatype (v0.6+)
+ - On LuaLaTeX:
+ LuaTeX-ja
+ * Other packages required on occasion:
+ - type1cm: when `magstyle` is `nomag`/`nomag*`
+ - pxchfon (v0.5+): when `jafont` is used on pLaTeX
+ - zxjafont (v0.2a+): when `jafont` is used on XeLaTeX
+ * When you use ja-drivers other than standard, you generally need
+ packages for processing Japanese documents that the employed
+ combination of the ja-driver and the engine supports.
+
+### PACKAGE CONTENT
+
+ * `bxjscls-manual.pdf`: the user manual
+ * `bxjscls-manual.tex`: the source file for the above
+ * `bxjscls.dtx`: the DocStrip source file
+ * `bxjscls.ins`: the DocStrip installer file
+ * `bxjscls.pdf`: the DocStrip document (source code description)
+
+### INSTALLATION
+
+This package bundle is provided in the form of a DocStrip file.
+
+First, run the command to create some files:
+
+ luatex bxjscls.ins
+
+This command will generate the following files:
+
+ * `bxjsarticle.cls`: the BXJS-flavored article class file
+ * `bxjsbook.cls`: the BXJS-flavored book class file
+ * `bxjsreport.cls`: the BXJS-flavored report class file
+ * `bxjsslide.cls`: the BXJS-flavored slide class file
+ * `bxjsja-minimal.def`: the `minimal` ja-driver file
+ * `bxjsja-standard.def`: the `standard` ja-driver file
+ * `bxjsja-pandoc.def`: the `pandoc` ja-driver file
+ * `bxjsja-modern.def`: the `modern` ja-driver file
+ * `bxjscompat.sty`: the `bxjscompat` package file
+ * `bxjscjkcat.sty`: the `bxjscjkcat` package file
+ * `bxjspandoc.sty`: the `bxjspandoc` package file
+
+After that, move the files as follows (in a system compliant to
+TDS 1.1):
+
+ - `*.cls`/`*.def`/`*.sty` → $TEXMF/tex/latex/bxjscls/
+ - `*.dtx`/`*.ins` → $TEXMF/source/latex/bxjscls/
+ - `*.pdf`/`*.tex` → $TEXMF/doc/latex/bxjscls/
+
+And rehash your TEXMF trees if necessary.
+
+### USAGE
+
+Please refer to the user manual `bxjscls-manual.pdf`.
+Unfortunately, the manual is available only in Japanese....
+
+### LICENSE
+
+This package is distributed under the BSD 2-Clause License.
+
+Revision History
+----------------
+
+ * Version 1.9h 〈2019/07/27〉
+ * Version 1.9g 〈2019/06/23〉
+ * Version 1.9f 〈2019/03/10〉
+ * Version 1.9e 〈2019/01/13〉
+ * Version 1.9d 〈2018/10/03〉
+ * Version 1.9c 〈2018/09/04〉
+ * Version 1.9b 〈2018/08/20〉
+ * Version 1.9a 〈2018/07/20〉
+ - Sync with jsclasses 2018/06/23.
+ * Version 1.9 〈2018/04/19〉
+ * Version 1.8b 〈2018/04/14〉
+ * Version 1.8a 〈2018/03/29〉
+ - Sync with jsclasses 2018/03/11.
+ * Version 1.8 〈2018/03/03〉
+ * Version 1.7c 〈2018/02/04〉
+ * Version 1.7b 〈2018/01/28〉
+ * Version 1.7a 〈2017/12/09〉
+ * Version 1.7 〈2017/10/21〉
+ * Version 1.6b 〈2017/09/28〉
+ * Version 1.6a 〈2017/09/24〉
+ * Version 1.6 〈2017/09/09〉
+ - Sync with jsclasses 2017/09/03.
+ * Version 1.5d 〈2017/07/07〉
+ * Version 1.5c 〈2017/06/10〉
+ * Version 1.5b 〈2017/04/01〉
+ * Version 1.5a 〈2017/03/14〉
+ * Version 1.5 〈2017/03/11〉
+ - Sync with jsclasses 2017/03/05.
+ * Version 1.4 〈2017/02/03〉
+ * Version 1.3a 〈2017/01/28〉
+ - Sync with jsclasses 2017/01/13.
+ * Version 1.3 〈2016/11/01〉
+ - Sync with jsclasses 2016/10/08.
+ * Version 1.2a 〈2016/08/17〉
+ * Version 1.2 〈2016/08/01〉
+ * Version 1.1f 〈2016/07/16〉
+ * Version 1.1e 〈2016/05/28〉
+ * Version 1.1d 〈2016/05/21〉
+ * Version 1.1c 〈2016/05/01〉
+ * Version 1.1b 〈2016/03/27〉
+ * Version 1.1a 〈2016/02/20〉
+ * Version 1.1 〈2016/02/14〉
+ * Version 1.0d 〈2015/11/21〉
+ * Version 1.0c 〈2015/10/18〉
+ * Version 1.0b 〈2015/09/07〉
+ * Version 1.0a 〈2015/08/23〉
+ * Version 1.0 〈2015/08/05〉
+ * Version 0.9 〈2013/10/03〉
+ * Version 0.4 〈2013/08/03〉
+ * Version 0.3a 〈2012/05/01〉
+ * Version 0.3 〈2010/08/15〉
+ * Version 0.2 〈2009/08/15〉
+
+--------------------
+Takayuki YATO (aka. "ZR")
+https://github.com/zr-tex8r
diff --git a/language/japanese/BX/bxjscls/bxjscls-manual.pdf b/language/japanese/BX/bxjscls/bxjscls-manual.pdf
new file mode 100644
index 0000000000..00b4706eec
--- /dev/null
+++ b/language/japanese/BX/bxjscls/bxjscls-manual.pdf
Binary files differ
diff --git a/language/japanese/BX/bxjscls/bxjscls-manual.tex b/language/japanese/BX/bxjscls/bxjscls-manual.tex
new file mode 100644
index 0000000000..fd0a4a019d
--- /dev/null
+++ b/language/japanese/BX/bxjscls/bxjscls-manual.tex
@@ -0,0 +1,1664 @@
+% 文字コードは UTF-8
+% lualatex で組版する
+\documentclass[a4paper]{ltjsarticle}
+\usepackage{color}
+\definecolor{myblue}{rgb}{0,0,0.75}
+\definecolor{mygreen}{rgb}{0,0.45,0}
+%\usepackage{url}
+\usepackage[unicode,colorlinks,hyperfootnotes=false]{hyperref}
+\hypersetup{linkcolor=myblue,urlcolor=mygreen}
+\usepackage{metalogo}
+\pdfstringdefDisableCommands{%
+ \renewcommand*{\XeLaTeX}{XeLaTeX}}
+\usepackage{shortvrb}
+\MakeShortVerb{\|}
+\newcommand{\PkgVersion}{1.9h}
+\newcommand{\PkgDate}{2019/07/27}
+\newcommand{\Pkg}[1]{\textsf{#1}}
+\newcommand{\Meta}[1]{$\langle$\mbox{}\nobr#1\nobr\mbox{}$\rangle$}
+\newcommand{\Note}{\par\noindent ※}
+\newcommand{\Means}{:\ }
+\newcommand{\jemph}{\textsf}
+\newcommand{\wbr}{\linebreak[0]}
+\newcommand{\nobr}{\nolinebreak[4]}
+\newcommand{\xast}{\mbox{}\mbox{$^*$}}
+\providecommand{\pTeX}{p\TeX}
+\providecommand{\pLaTeX}{p\LaTeX}
+\providecommand{\upTeX}{u\pTeX}
+\providecommand{\upLaTeX}{u\pLaTeX}
+\providecommand{\pdfLaTeX}{pdf\LaTeX}
+\providecommand{\BibTeX}{Bib\TeX}
+%-----------------------------------------------------------
+\begin{document}
+\title{\Pkg{BXjscls} パッケージ\\
+ (BXJS文書クラス集)\\
+ ユーザマニュアル}
+\author{八登崇之\ (Takayuki YATO; aka.~``ZR'')}
+\date{v\PkgVersion\quad[\PkgDate]}
+\maketitle
+\tableofcontents
+
+%===========================================================
+\section*{注意}
+
+BXJS文書クラスについては、サイト“{\TeX} Wiki”中の記事、
+\footnote{\url{https://texwiki.texjp.org/?BXjscls}}%
+およびそこからたどれる情報も併せて参照してほしい。
+
+%===========================================================
+\section{概要}
+\label{sec:Ovewview}
+
+本パッケージに含まれる文書クラス集
+(以下では\jemph{BXJS(文書)クラス}と呼ぶ)
+は、奥村晴彦氏および“日本語{\TeX}開発コミュニティ”により作製された
+\Pkg{jsclasses}パッケージの文書クラス集
+(以下では\jemph{JS(文書)クラス}と呼ぶ)
+の拡張版に相当する。
+JSクラスのレイアウトデザインと機能をほぼ踏襲しているが、
+以下の点で改良が加えられている。
+\begin{itemize}
+\item JSクラスは{\pLaTeX}と{\upLaTeX}のみをサポートするが、
+ BXJSクラスはこれらに加えて{\pdfLaTeX}と{\XeLaTeX}と{\LuaLaTeX}を
+ サポートしており主要エンジンの全てで使用可能である。
+\item (u){\pLaTeX}以外では各々のエンジンの日本語処理パッケージを
+ 利用するが、“標準設定”を用いることで、それらのパッケージの
+ 設定を書かずに済ませられるので、{\pLaTeX}並に簡単に日本語の
+ 文書を書き始めることができる。
+\item JSクラスでは、フォントのオプティカルサイズを最適にするため、
+ 基底フォントサイズが10\,pt以外の時に{\TeX}の版面拡大(mag)機能を
+ 利用しているが、これが他のパッケージと衝突して
+ 不具合を起こすことがある。
+ BXJSクラスではmag機能を使う他に別の方式を選べるようにしている。
+ \Note JSクラスについても新しい(2016/07/11以降の)版では
+ 同様の機能が提供されている。
+\item 用紙サイズや基底フォントサイズについて、任意の値を指定する
+ ことができる。
+\end{itemize}
+
+%===========================================================
+\section{最も基本的な使い方}
+\label{sec:Basic}
+
+ここでは、BXJSクラスを“標準設定”(standard和文ドライバ)で
+用いる場合について解説する。
+この場合、|\documentclass| 命令を次のように書く。
+\footnote{もちろんクラスオプションの順序は任意である。}%
+
+\begin{quote}
+|\documentclass[|\Meta{エンジン}|,|\Meta{ドライバ}%
+|,ja=standard,jafont=|\Meta{フォント指定}|,|\Meta{他オプション}|]|\\
+| {|\Meta{クラス名}|}|
+\end{quote}
+
+\begin{itemize}
+\item \Meta{エンジン}の指定は必須で、実際に使っている
+ 「{\LaTeX}のコマンド名」を書く。
+ |platex|、|uplatex|、
+ |pdflatex|、|xelatex|、|lualatex|等が指定できる。
+\item DVI出力のエンジンを使う場合は、\Meta{ドライバ}の指定が必須で、
+ これは実際に使っている「DVIウェアの名前」を書く。
+ |dvips|、|dvipdfmx|、|dviout|、|xdvi|が指定できる。
+ PDF出力のエンジンの場合は\Meta{ドライバ}の指定は不要である。
+\item “標準設定”を適用するので |ja=standard| を指定する。
+\item 既定以外のフォント設定を利用する場合は、\Meta{フォント指定}に
+ その名前を書く。
+ 既定の設定を用いる場合は |jafont=...| 自体を省略する。
+\item その他のクラスオプション(|a4paper| 等)については、
+ 多くの場合JSクラスと同じものが使える。
+\item BXJSクラスについて、\Meta{クラス名}は以下のものがある。
+ \begin{itemize}
+ \item \Pkg{bxjsarticle}\Means 章のないレポート
+ (\Pkg{jsarticle}に相当する)
+ \item \Pkg{bxjsreport}\Means 章のあるレポート
+ (\Pkg{jsreport}に相当する)
+ \item \Pkg{bxjsbook}\Means 書籍
+ (\Pkg{jsbook}に相当する)
+ \item \Pkg{bxjsslide}\Means スライド
+ (\Pkg{jsarticle}\,+\,|slide|に相当する)
+ \end{itemize}
+\end{itemize}
+
+{\XeLaTeX}で\Pkg{bxjsarticle}クラスを用いた文書の例を示す。
+\footnote{組版結果における日付の出力はJSクラスと同様の
+「2015年7月3日」の形式になる。}%
+
+\begin{quote}\small\begin{verbatim}
+\documentclass[a4paper,xelatex,ja=standard]{bxjsarticle}
+\usepackage[unicode,colorlinks,
+ pdftitle={いきなり日本語}]{hyperref}
+\title{いきなり日本語}
+\author{七篠 権兵衛}
+\begin{document}
+\maketitle
+
+\section{日本語で{\LaTeX}する}
+中身はまだない。
+
+\end{document}
+\end{verbatim}\end{quote}
+
+以下では各エンジンについて、挙動を少し詳しく説明する。
+
+%-------------------
+\subsection{{\pLaTeX}の場合}
+
+例えば次の設定は:
+\begin{quote}\small\begin{verbatim}
+\documentclass[a4paper,platex,dvipdfmx,ja=standard]{bxjsarticle}
+\end{verbatim}\end{quote}
+対応するJSクラスを用いた次の設定とほぼ等価になる
+\footnote{すなわち、論理フォントは明朝がjis、
+ゴシックがjisgが使われる。
+なお、BXJSでは |mingoth| 等の論理フォント変更の
+オプションはサポートされていない。}:
+\begin{quote}\small\begin{verbatim}
+\documentclass[a4paper,dvipdfmx]{jsarticle}
+\end{verbatim}\end{quote}
+
+次のように |jafont| を指定した場合は:
+\begin{quote}\small\begin{verbatim}
+\documentclass[a4paper,platex,dvipdfmx,ja=standard,jafont=ms]{bxjsarticle}
+\end{verbatim}\end{quote}
+|jafont| の値をプリセットオプションとして\Pkg{pxchfon}が読み込まれる:
+\begin{quote}\small\begin{verbatim}
+\documentclass[a4paper,dvipdfmx]{jsarticle}
+\usepackage[ms]{pxchfon}
+\end{verbatim}\end{quote}
+
+%-------------------
+\subsection{{\upLaTeX}の場合}
+
+例えば次の設定は:
+\begin{quote}\small\begin{verbatim}
+\documentclass[a4paper,uplatex,dvipdfmx,ja=standard]{bxjsarticle}
+\end{verbatim}\end{quote}
+次の設定とほぼ等価になる
+\footnote{論理フォントについては、従来のもの
+ (明朝がupjisr-h、ゴシックがupjisg-h)
+ に代わって、BMP外の文字に対応したもの
+ (明朝がupjpnrm-h、ゴシックがupjpngt-h)
+ を採用した。
+ 組み方は従来のものと変わらない。}:
+\begin{quote}\small\begin{verbatim}
+\documentclass[uplatex,a4paper,dvipdfmx]{jsarticle}
+\end{verbatim}\end{quote}
+
+|jafont| オプションの扱いは{\pLaTeX}の場合と同じである。
+
+%-------------------
+\subsection{{\pdfLaTeX}の場合}
+
+エンジン指定が |pdflatex| の場合、
+日本語処理パッケージとして\Pkg{bxcjkjatype}
+(これ自体は内部で\Pkg{CJK}パッケージを読み込む)
+を利用する。
+
+例えば次の設定は:
+\begin{quote}\small\begin{verbatim}
+\documentclass[a4paper,pdflatex,ja=standard]{bxjsarticle}
+\end{verbatim}\end{quote}
+次の設定と大体同じであるが、ただし文書レイアウトは
+\Pkg{article}でなく\Pkg{jsarticle}とほぼ同じになっている:
+\begin{quote}\small\begin{verbatim}
+\documentclass[a4paper]{article}
+\usepackage[whole,autotilde]{bxcjkjatype}
+\end{verbatim}\end{quote}
+
+|jafont| を指定した場合は:
+\begin{quote}\small\begin{verbatim}
+\documentclass[a4paper,pdflatex,ja=standard,jafont=ipaex]{bxjsarticle}
+\end{verbatim}\end{quote}
+その値が\Pkg{bxcjkjatype}のフォントプリセットになる。
+\begin{quote}\small\begin{verbatim}
+\documentclass[a4paper]{article}
+\usepackage[whole,autotilde,ipaex]{bxcjkjatype}
+\end{verbatim}\end{quote}
+
+\Note 補足:
+\begin{itemize}
+\item 自動的に文書本体が |CJK*| 環境
+ \footnote{\Pkg{CJKspace}パッケージが読み込まれた下での |CJK*|
+ 環境である。}%
+ で囲まれかつ |\CJKtilde| が有効な状態になっている。
+ 従っていきなり日本語を書き始めることができる。
+ ただし和欧文間空白(四分空き)は手動で |~| を入れる必要がある。
+ \footnote{\Pkg{CJK}パッケージには自動で和欧文間空白を入れる
+ 機能はない。}%
+ 日本語出力の挙動の詳細については\Pkg{bxcjkjatype}のマニュアルを
+ 参照してほしい。
+ 以下に完全な文書ソースの例を示す:
+\begin{quote}\small\begin{verbatim}
+\documentclass[a4paper,pdflatex,ja=standard]{bxjsarticle}
+\begin{document}
+日本語で~pdf{\LaTeX}~するテスト。
+\end{document}
+\end{verbatim}\end{quote}
+\item \Pkg{bxcjkjatype}パッケージにおけるフォントの既定設定は
+ 「Type1形式のIPAexフォント」(\Pkg{ipaex-type1}パッケージ)である。
+ 一方、|ipaex| プリセットを指定した場合は
+ 「TrueType形式のIPAexフォント」が使われるので、両者の出力は
+ 見かけは同じであるが、PDFデータとしては異なる。
+ \footnote{ちなみに、\Pkg{bxcjkjatype}には |ipaex-type1| という
+ オプションもあるが、この設定と既定設定(オプション無し)も
+ 動作は異なる。
+ BXJSクラスが用いるのは既定設定の方である。}%
+\end{itemize}
+
+%-------------------
+\subsection{{\XeLaTeX}の場合}
+
+エンジン指定が |xelatex| の場合、
+日本語処理パッケージとして\Pkg{zxjatype}
+(これ自体は内部で\Pkg{xeCJK}パッケージを読み込む)
+を利用する。
+
+例えば次の設定は:
+\begin{quote}\small\begin{verbatim}
+\documentclass[a4paper,twocolumn,xelatex,ja=standard]{bxjsarticle}
+\end{verbatim}\end{quote}
+次の設定と大体同じであるが、ただし文書レイアウトは
+\Pkg{jsarticle}とほぼ同じになっている:
+\begin{quote}\small\begin{verbatim}
+\documentclass[a4paper,twocolumn]{article}
+\usepackage{zxjatype}
+\setCJKmainfont[BoldFont=IPAexGothic]{IPAexMincho}% 明朝→IPAex明朝
+\setCJKsansfont[BoldFont=IPAexGothic]{IPAexGothic}% ゴシック→IPAexゴシック
+\end{verbatim}\end{quote}
+
+|jafont| を指定した場合は:
+\begin{quote}\small\begin{verbatim}
+\documentclass[a4paper,xelatex,ja=standard,jafont=ms]{bxjsarticle}
+\end{verbatim}\end{quote}
+その値が\Pkg{zxjafont}のプリセットになる。
+\begin{quote}\small\begin{verbatim}
+\usepackage{zxjatype}
+\usepackage[ms]{zxjafont}
+\end{verbatim}\end{quote}
+
+%-------------------
+\subsection{{\LuaLaTeX}の場合}
+
+エンジン指定が |lualatex| の場合、
+日本語処理パッケージとして\Pkg{\LuaTeX-ja}を利用する。
+
+例えば次の設定は:
+\begin{quote}\small\begin{verbatim}
+\documentclass[b5paper,9pt,lualatex,ja=standard]{bxjsarticle}
+\end{verbatim}\end{quote}
+次の設定とほぼ等価になる
+(ただし\Pkg{luatexja-preset}は実際には読み込まれない):
+\begin{quote}\small\begin{verbatim}
+\documentclass[b5paper,9pt]{ltjsarticle}
+\usepackage{luatexja-fontspec}
+\usepackage[ipaex]{luatexja-preset}
+\end{verbatim}\end{quote}
+
+|jafont| を指定した場合は:
+\begin{quote}\small\begin{verbatim}
+\documentclass[b5paper,lualatex,ja=standard,jafont=ms]{bxjsarticle}
+\end{verbatim}\end{quote}
+次の設定とほぼ等価になる:
+\begin{quote}\small\begin{verbatim}
+\documentclass[b5paper]{ltjsarticle}
+\usepackage{luatexja-fontspec}
+\usepackage[ms]{luatexja-preset}
+\end{verbatim}\end{quote}
+
+\Note 補足:
+\begin{itemize}
+\item \Pkg{luatexja-preset}パッケージの読込が行われるのは |jafont| を
+ 指定した場合に限られる。
+\end{itemize}
+
+%-------------------
+\subsection{注意事項}
+
+主にJSクラスとの違いについての注意。
+
+\begin{itemize}
+\item ページレイアウトについて、JSクラスの設計思想を受け継いで
+ いるが、全く同じになるわけではない。
+\item JSクラスの一部のオプションで、
+ BXJSクラスでは使用不可能なものがある。
+ (\ref{ssec:JS-deleted-option}節参照。)
+\item BXJSクラスではページレイアウトを設定するために
+ 内部で\Pkg{geometry}パッケージを読み込んでいる。
+ そのため、後からユーザが\Pkg{geometry}を読み込むことはできない。
+ ページレイアウトを変更する場合は、BXJSクラスが用意している
+ 再設定用の命令(\ref{ssec:page-layout}節参照)か、または
+ \Pkg{geometry}パッケージが提供する再設定用命令(|\geometry| 等)
+ を利用する。
+\item |papersize|オプションは既定で有効になっていて、
+ 出力用紙サイズはクラスオプションで指定したものに
+ 自動的に設定される。
+ この処理を無効にするには|nopapersize|オプションを指定すればよい。
+\item |papersize|オプションの処理は\Pkg{geometry}パッケージの
+ 機能により行われる。
+ \Pkg{hyperref}パッケージや(最近の)\Pkg{graphics}/
+ \Pkg{color}パッケージがもつ出力用紙サイズ設定の機能は
+ これと干渉する可能性があるので、
+ BXJSクラスにおいては自動的に無効化される。
+\item \Pkg{hyperref}パッケージにおける“PDFの文字コード”の設定は
+ エンジンごとに適切な値が異なっていて複雑であり、
+ これが不適切であるためにPDF文書情報(しおり等)が文字化けして
+ しまう事例が数知れない。
+ そこで、文書クラス側でエンジン毎に適切な設定を予め行う
+ ようにした。
+ \footnote{従って、(u){\pLaTeX}において、ほとんどの場合に
+ \Pkg{pxjahyper}パッケージを読み込む必要がない。
+ ただし読み込んでも構わないし、必要な場合もある。}%
+ (ただし文書クラスが\Pkg{hyperref}を読み込むわけではない。)
+\item pdf{\LaTeX}上で\Pkg{hyperref}で |pdftitle| 等の文書情報に
+ 和文文字を含めたい場合は、|\hypersetup| 命令を通常通り
+ 使うことができる。
+ \footnote{ちなみに、普通に\Pkg{CJKutf8}パッケージを用いた場合は、
+ この方法では失敗してしまう。
+ 恐らく |\hypersetup| 命令全体を |CJK*| 環境で囲う必要が
+ あるのだと思われる。}%
+\begin{quote}\small\begin{verbatim}
+\documentclass[pdflatex,a4paper,ja=standard]{bxjsarticle}
+\usepackage[colorlinks]{hyperref}
+\hypersetup{pdftitle={日本語タイトル}}
+\end{verbatim}\end{quote}
+ \Note \Pkg{hyperref}のパッケージオプションで和文文字を含む文書情報を
+ 指定することはできない。
+ (\Pkg{hyperref}の制限仕様。)
+\item |jafont| が無い場合の既定のフォント設定は多くのエンジンに
+ おいて「IPAexフォント使用」であるが、(u){\pLaTeX}だけは異なっていて
+ 「何も指定しない状態」(JSクラスと同様)である。
+ すなわち実際に使われる物理フォントの選択はDVIウェアの設定に
+ 委ねられている。
+\item 1.2版より、|\bf| や |\it| 等の
+ {\LaTeX}\,2.09方式のフォント選択命令の使用が
+ 非推奨となり、これらの命令を使うと警告が出るようになった。
+ 詳細は\ref{sec:Old-font-commands}節を参照。
+% TODO: \@ptsize の話
+\end{itemize}
+
+%===========================================================
+\section{Pandocモードの使い方}
+\label{sec:Pandoc-mode}
+
+「Pandocモード」は文書形式変換ツールである
+Pandoc\footnote{\url{http://pandoc.org/}}%
+を用いた日本語{\LaTeX}文書生成(および{\LaTeX}経由のPDF生成)
+のために調整された設定である。
+
+\begin{quote}
+|\documentclass[pandoc,|\Meta{ドライバ}%
+|,jafont=|\Meta{フォント指定}|,|\Meta{他オプション}|]|%
+|{|\Meta{クラス名}|}|
+\end{quote}
+
+\begin{itemize}
+\item クラスオプションに |pandoc| を指定し、代わりに
+ 「エンジン」と「和文ドライバ(|ja|)」のオプションを省く。
+ \footnote{|pandoc| が指定された場合は、エンジンオプションの
+ 値は |autodetect-engine|、和文ドライバの値は |pandoc| に
+ 固定される。}
+\item エンジンがDVI出力である場合のドライバの
+ 既定値が |dvipdfmx| になる。
+ ただし明示的にドライバオプションを与えることで |dvips| などに
+ 変更できる。
+\item 「和文フォント(|jafont|)」および他のクラスオプションは
+ 従来通り使用できる。
+\end{itemize}
+
+以下でPandocでBXJSクラスを用いる例を示す。
+
+\Note なお、以下の記述はPandoc 2.x版に従う。
+(1.x版からかなり変更されている。)
+
+\begin{itemize}
+\item \Pkg{bxjsarticle}クラスを使用する一例。
+ \begin{itemize}
+ \item {\XeLaTeX}経由
+ \item 用紙サイズはA4判
+ \item 和文フォント設定は |ipaex|
+ \end{itemize}
+
+ コマンド行は次のようになる。
+ \footnote{もちろん、実際には改行を含めず1行で書く。
+ なお、日本語文書の場合、変換先書式(|-t|)は |latex|
+ でなく |lates-smart|(|smart| 機能を無効化)とすべきである。}
+ \begin{quote}
+ |pandoc| \Meta{入力ファイル名}\
+ |-o| \Meta{出力ファイル名}|.pdf|
+ |-t latex-smart|\\\quad
+ |--pdf-engine=xelatex|
+ |-V papersize=a4|
+ |-V documentclass=bxjsarticle|\\\quad
+ |-V classoption=pandoc|
+ |-V classoption=jafont=ipaex|
+ \end{quote}
+
+ なおこの場合、途中で生成される{\LaTeX}文書のクラス指定は
+ 以下のようになる:
+ \begin{quote}
+ |\documentclass[a4paper,jafont=ipaex,pandoc]{bxjsarticle}|
+ \end{quote}
+
+\item \Pkg{bxjsbook}クラスを用いる場合の一例。
+ \begin{itemize}
+ \item 節番号を出力する
+ \item Lua{\LaTeX}経由
+ \item 用紙サイズはJIS~B5判
+ \item 和文の基底フォントサイズは11\,Q
+ \item 和文フォント設定は |ipaex|
+ \item 欧文フォントをPandocの機能で設定
+ \end{itemize}
+
+ コマンド行は次のようになる:
+ \begin{quote}
+ |pandoc| \Meta{入力ファイル名}\
+ |-o| \Meta{出力ファイル名}|.pdf|
+ |-N|
+ |-t latex-smart|\\\quad
+ |--top-level-division=chapter|
+ |--pdf-engine=xelatex|\\\quad
+ |-V papersize=b5|
+ |-V documentclass=bxjsbook|
+ |-V classoption=pandoc|\\\quad
+ |-V classoption=jbase=11Q|
+ |-V classoption=jafont=ipaex|\\\quad
+ |-V mainfont="TeX Gyre Termes"|
+ |-V sansfont="TeX Gyre Heros"|
+ \end{quote}
+
+ 注意事項:
+ \begin{itemize}
+ \item \Pkg{bxjsbook}クラスは「章(|\chapter|)」をもつクラスなので、
+ Pandocで |--top-level-division=|\linebreak[0]|chapter| の指定
+ が必要。
+ \end{itemize}
+
+\item Pandocで{\LaTeX}経由でPDFを出力する場合、
+ エンジン指定(|--pdf-engine|)は
+ |pdflatex|、|xelatex|、|lualatex|のみがサポートされる。
+ しかし、Pandocの出力を「単体の{\LaTeX}文書」(|-s|指定)とすることで、
+ {\LaTeX}エンジンに(u){\pLaTeX}を使用することができる。
+ 出力された{\LaTeX}文書は通常の方法でPDFやPostScript形式に
+ 変換できる。
+
+ \begin{quote}\small
+\begin{verbatim}
+pandoc mydoc.md -o mydoc.tex -s -V documentclass=bxjsarticle -V classoption=pandoc
+uplatex mydoc
+uplatex mydoc
+dvipdfmx mydoc
+\end{verbatim}
+ \end{quote}
+\end{itemize}
+
+%===========================================================
+\section{クラスオプション}
+\label{sec:Class-Option}
+
+一般的な値の書式についての注意\Means
+\begin{itemize}
+\item 真偽値は、 |true|(真)または |false|(偽)で指定する。
+\item 長さ値および整数値は\Pkg{calc}パッケージの式で指定できる。
+\item \Meta{長さ\xast}のように“\xast”のついた長さパラメタについては、
+ \Pkg{calc}の長さ式の代わりに、和文用単位(|Q|、|H|、|zw|、|zh|)
+ 付きの実数値で指定することもできる。
+ \footnote{この機能は |units| 和文パラメタとは無関係である。
+ 和文用単位を含む長さ式は((u){\pLaTeX}以外では)使えない。
+ なお、ここで使われる |zw| は常に((u){\pLaTeX}でも)
+ “規約上の全角幅”(|\jsZw|)を指す
+ (和文フォント設定が未完了のため)。}
+\end{itemize}
+
+%-------------------
+\subsection{BXJSクラスに特有のオプション}
+\label{ssec:BXJS-specific-option}
+
+JSクラスには無くBXJSクラスで追加されたクラスオプション。
+
+\begin{itemize}
+\item エンジンオプション\Means
+ 実際に使用するエンジン({\LaTeX}コマンド名)を指定する。
+ 有効な値は |latex|、|platex|、|uplatex|、|pdflatex|、|xelatex|、
+ |lualatex|、|platex-ng| である。
+ エンジンオプション(と次項の |autodetect-engine| の何れか)
+ の指定は必須である。
+ \Note |platex-ng| は{\pTeX-ng}エンジン
+ (別名A\pTeX、Asiatic \pTeX)のためのオプションである。
+ 現時点では |platex-ng| 指定時の仕様は流動的であり詳細を述べる
+ ことは避けるが、大体は |uplatex| と同様になる。
+ {\pTeX-ng}はPDF出力を行うので、ドライバオプションは指定しない。
+ \footnote{現状の実装では、自動的に |dvipdfmx| が
+ グローバルオプションに追加される。
+ また、|platex-ng| オプションの変種に |platex-ng*| があり、
+ こちらは |dvipdfmx| の自動追加を行わない。}
+\item |autodetect-engine|\Means
+ 使用しているエンジンを判定して、自動的に適切なエンジンオプションを
+ 設定する。
+ \footnote{実はエンジンの判定は常に行っていて、エンジンオプションが
+ 指定された場合はそれが正しいかを検査して、誤りの場合はエラーを
+ 出すようにしている。}%
+ \Note BXJSクラスの設計の思想としては、
+ 「{\LaTeX}文書がどのエンジンでコンパイルすべきものかは
+ ソース中に明示されるべき」と考えていて、
+ 従って、人間が“普通に”文書を作る際にはこのオプションの
+ 使用は推奨されない。
+ このオプションは 「{\LaTeX}ソースの自動生成」が絡む処理を念頭において
+ 用意されている。
+\item ドライバオプション\Means
+ DVI出力のエンジンを用いる場合に、実際に使用するDVIウェアの名前を
+ 指定する。
+ 有効な値は |dvips|、|dvipdfmx|、|dviout|、|xdvi| である。
+ DVI出力時はドライバオプション(と次項の |nodvidriver| の何れか)
+ の指定は必須である。
+ \footnote{ただし現状では、ドライバオプションが無い場合には
+ エラーではなく警告が出る。}
+\item |nodvidriver|\Means
+ 特殊なドライバオプションの一種で、BXJSクラスが持つ
+ ドライバ依存の機能を全て抑止することを指定する。
+ \footnote{従って、ドライバ依存のパッケージを使用しなければ、
+ 出力されるDVIファイルは特定のDVIウェアに依存しないものになる。}
+\item |dvi=|\Meta{ドライバ名}\Means
+ エンジンがDVI出力の場合に限り、指定のドライバオプションを
+ 有効にする。
+ \footnote{実際にドライバオプションが有効化された場合は、
+ そのオプションがグローバルオプションとしても働く。
+ 例えば、DVI出力のエンジンで |dvi=dvipdfmx| が指定された場合は、
+ |dvipdfmx| がグローバルオプションに追加される。}%
+ |autodetect-engine| と一緒に使うことが想定されている。
+\item |pandoc|\Means
+ 「Pandocモード」(\ref{sec:Pandoc-mode}節)を指定する。
+ 以下の設定が行われる:
+ \begin{itemize}
+ \item エンジンオプションが |autodetect-engine| に固定される。
+ \item 和文ドライバが |pandoc| に固定される。
+ \item ドライバオプションについて |dvi=dvipdfmx| が既定になる
+ (明示指定で上書可能)。
+ \end{itemize}
+\item |nopapersize|\Means
+ 出力用紙サイズ設定
+ (DVI出力の場合は所謂“papersize special出力”)
+ を抑止する。
+ (JSクラスとは異なり、出力用紙サイズ設定のオプション |papersize|
+ は既定で有効である。)
+ \Note 出力用紙サイズ設定を行う他のパッケージとの干渉に
+ 対する対策。
+\item |ja=|\Meta{名前}\Means
+ 使用する和文ドライバの名前を指定する。
+ (詳細は\ref{sec:Ja-Driver}節を参照。)
+ 標準で提供されている和文ドライバには |minimal|、
+ |standard|、|pandoc| がある。
+ エンジンが |platex| か |uplatex| の時は |ja| の
+ 既定値は |standard| である。
+ それ以外の場合は、一応 |minimal| とするが、
+ 明示的な指定が推奨される。
+\item |jafont=|\Meta{名前}\Means
+ 「和文フォントプリセット指定」の名前を設定する。
+ \Note \ref{sec:Basic}節で解説した通り、standard和文ドライバでは |jafont|
+ の値が利用される。
+ \par
+ プリセット指定の値が丸括弧を含む(例えば“|sourcehan(-otc)|”)場合、
+ 以下のように解釈される。
+ \begin{itemize}
+ \item エンジンが{\XeLaTeX}/{\LuaLaTeX}の場合は、
+ 丸括弧囲いの部分を削除した文字列(“sourcehan”)が使われる。
+ \item それ以外の場合は、
+ 丸括弧だけ削除した文字列(“sourcehan-otc”)が使われる。
+ \end{itemize}
+\item |japaram={|\Meta{キー}|=|\Meta{値}|,...}|\Means
+ 「和文ドライバパラメタ」の値を設定する。
+ 詳しくは\ref{sec:Ja-Driver-Param}節を参照。
+ \Note |jafont| と |japaram| の値がどのように解釈されるかは
+ 和文ドライバの仕様次第である。
+\item |base=|\Meta{長さ\xast}\Means
+ 基底フォントサイズ(|\normalsize| のサイズ)を指定する。
+ JSクラスの |10pt|、|11pt| 等と同じ役割で、任意の長さ値を指定できる。
+ 基底フォントサイズの既定値は10\,ptである。
+ \Note |##pt| の形のオプションには名前と実際に設定される値が
+ ずれているものが多く、例えば |11pt| は10.95\,pt、
+ |14pt| は 14.4\,pt が実際の設定値である。
+ \footnote{これは昔の{\LaTeX}の“magstep”の習慣に由来する。}%
+ これに対して |base=14pt| は文字通り14\,ptを設定する。
+\item |jbase=|\Meta{長さ\xast}\Means
+ 和文を基準にして基底フォントサイズを指定する。
+ すなわち和文フォントの |\normalsize| のサイズを指定の長さとする。
+ \footnote{この場合に決定されるmag値は和文スケール値にも依存する
+ ことに注意。}
+ \Note 1.8版から、|base| と |jbase| の両方の指定が可能になった。
+ この場合、和文スケール値がそれらに基づいて決定される
+ (|scale| 指定は無効になる)。
+\item |scale=|\Meta{実数}\Means
+ 和文スケール値を設定する。
+ 既定値は 0.924715(= 13\,Q/10\,pt)である。
+ \footnote{これはJSクラスの設計に基づく値である。
+ ただし実装の都合で、JSクラスの実際のスケール値はこれから
+ 僅かだけずれている。}
+\item |paper={|\Meta{横幅}|}{|\Meta{縦幅}|}|\Means
+ 用紙サイズ設定。
+ |a4paper| 等と同じ役割で、任意の長さ値を指定できる。
+ 用紙サイズの既定値はA4縦
+ ($\mbox{210\,mm}\times\mbox{294\,mm}$)である。
+\item |enablejfam=|\Meta{値}\Means
+ 数式中の和文出力をサポートするか否か。
+ 値は |true|(有効)/|false|(無効)/|default|(既定値に従う)
+ の何れかである。
+ エンジンや和文ドライバの種類により、
+ 既定値が有効・無効の何れになるかは異なり、また、
+ そもそも有効・無効の一方しか選択できない場合もある。
+ 詳細については\ref{sec:Ja-math-fonts}節を参照されたい。
+\item |textwidth=|\Meta{長さ}\Means
+ 行長(本文領域の横幅;|\textwidth|)を指定する。
+ \Note 実際には全角の整数倍に丸めた値が使われる
+ (\ref{ssec:page-layout}節参照)。
+ \begin{itemize}
+ \item \Pkg{bxjsbook}以外では、\Pkg{geometry}で |textwidth| を
+ 指定したのと同値。
+ この場合、既定では |textwidth| を指定しない。
+ \item \Pkg{bxjsbook}では、\Pkg{geometry}の |textwidth| は
+ 実際には |\fullwidth|(ヘッダ部分の横幅)の指定とみなされる。
+ 従って、|\textwidth| はこのオプションで指定する必要がある。
+ この場合の既定値は40\,zwである。
+ \Note |\textwidth| が |\fullwidth| を超えることはできない。
+ \end{itemize}
+\item |number-of-lines=|\Meta{整数}\Means
+ 1ページあたりの行数を指定する。
+ \Pkg{geometry}で |lines| を指定したのと同値。
+ 既定では |lines| を指定しない。
+\end{itemize}
+
+\paragraph{上級者向けのオプション}\mbox{}
+
+\begin{itemize}
+\item |use-zw=|\Meta{真偽値}\Means
+ |\jsZw| と等価な命令として |\zw| を定義するか。
+ 既定値は真。
+ \Note つまり |\zw| の命令名が衝突する場合に、
+ |use-zw=false| を指定する。
+\item |disguise-js=|\Meta{真偽値}\Means
+ JSクラス(例えば\Pkg{bxjsreport}の場合は\Pkg{jsbook})
+ が読込済であるように振舞うか否か。
+ 既定値は真。
+ \Note つまり「JSクラスの一種である」と判定されると不都合な場合に、
+ |disguise-js=false| を指定する。
+\item |bigcode|\Means
+ {\upTeX}エンジンとdvipdfmxの組合せで\Pkg{hyperref}パッケージを
+ 利用する時に適用されるToUnicode CMapとして |UTF8-UTF16| を指定する。
+ PDFの文書情報の文字列にBMP外の文字が含まれる場合には
+ この指定が必要である。
+ |UTF8-UTF16| のファイルがインストールされていないと、
+ dvipdfmxの処理が失敗する。
+\item |nobigcode|\Means
+ |bigcode| の否定。ToUnicode CMapとして |UTF8-UCS2| を指定する。
+ この場合は文書情報の文字列にBMP外の文字を使用できない。
+ \Note |UTF8-UTF16| のファイルが利用できるかを確実に判定するのは
+ 困難なため、|bigcode| の既定値は次のようなアドホックな方法で
+ 決めている:
+ {\TeX}エンジンのバージョンが3.14159265以上
+ \footnote{{\TeX}のバージョン3.14159265は2014年1月にリリースされた。}
+ である場合は、
+ ({\TeX}環境がある程度新しく、|UTF8-UTF16| が利用可能と思われるので)
+ |bigcode| を既定とし、それ以外は |nobigcode| を既定とする。
+\item |precise-text=|\Meta{真偽値}\Means
+ {\XeTeX}エンジンにおいて、「ActualText生成機能」を有効化する
+ \footnote{つまり、|\XeTeXgenerateactualtext=1| を行う。
+ ActualText 生成機能と日本語処理は相性が悪いため、これを使うと
+ 出力PDFのサイズが増大する(1.5~2倍)ことに注意。}%
+ か否か。
+ 既定値は偽。
+\item |simple-ja-setup=|\Meta{真偽値}\Means
+ {\XeTeX}エンジン自体の行組版機能(|\XeTeXlinebreaklocale| 等)
+ を利用した、簡易的な日本語用組版設定を行うか否か。
+ 既定値は真(だが多くの場合に無効化される)。
+ \Note {\XeTeX}エンジン以外では無効である。
+ また、\Pkg{xeCJK}や\Pkg{zhspacing}等の日本語(CJK)組版用
+ パッケージが読み込まれた場合も無効化される。
+ 特に、和文ドライバがstandardである場合は、必ず\Pkg{xeCJK}が
+ 読み込まれるため、このオプションは無意味である。
+\item |a4varpaper|、|b5varpaper|\Means
+ 用紙サイズ指定オプション |a4var|、|b5var| の別名。
+ \Note Pandocで |-V papersize=a4var| の指定を可能にするため。
+\item |mag=|\Meta{整数}\Means
+ 版面拡大率(mag値)の直接設定。
+ 既定は |base| から算出する。
+ \Note mag値が$n$の場合、版面が $n/1000$ 倍に拡大される。
+\item |magstyle=|\Meta{値}\Means
+ “版面拡大”の実現方法を指定する。
+ 有効な値は |usemag|、|nomag|、|nomag*| の何れか。
+ 詳細は\ref{ssec:magstyle}節を参照。
+\item |geometry=|\Meta{値}\Means
+ \Pkg{geometry}パッケージの読込に対する制御。
+ \begin{itemize}
+ \item |class|(既定)\Means
+ 通常通り、文書クラスが\Pkg{geometry}パッケージを読み込む。
+ ユーザは\Pkg{geometry}を後から読み込むことはできない。
+ \item |user|\Means
+ 文書クラスによる\Pkg{geometry}パッケージの読込をスキップする。
+ この場合、ユーザが自分で\Pkg{geometry}を読み込むことが想定される。
+ \footnote{\Pkg{geometry}の読込は必須ではなく、ページレイアウトの
+ パラメタを自分で設定しても構わない。
+ ただし\Pkg{geometry}の読込が強く推奨される。
+ (\Pkg{geometry}非読込時の動作テストはほとんど行っていない。)}
+ \end{itemize}
+ \Note 「どうしても\Pkg{geometry}パッケージを自分で読み込みたい」
+ という人のための設定。
+\item |oldfontcommands|\Means
+ |\bf| 等の“二文字フォント命令”の使用を許容する。
+\item |nooldfontcommands|(既定)\Means
+ “二文字フォント命令”の使用に対して警告を出す。
+ 詳細については\ref{sec:Old-font-commands}節を参照されたい。
+\item |fancyhdr=|\Meta{真偽値}\Means
+ \Pkg{fancyhdr}パッケージの機能に対する補正を行うか。
+ 真の場合、以下の補正が行われる。既定値は真。
+ \begin{itemize}
+ \item ヘッダ・フッタ書式の既定値に含まれる“二文字フォント命令”
+ を除去する。
+ \item \Pkg{bxjsbook}クラスでヘッダ・フッタの横幅を(|\textwidth|
+ ではなく)|\fullwidth| に一致させる。
+ \end{itemize}
+\item |paragraph-mark=|\Meta{文字1つ}\Means
+ パラグラフ(|\paragraph|)の見出し先頭に付く記号。
+ 既定値は“■”。
+ \Note “|paragraph-mark=|”のように値を空にするのも可能。
+\item |whole-zw-lines=|\Meta{真偽値}\Means
+ ページレイアウト策定において「行長を全角幅の整数倍に丸める処理」
+ を行うか否か。
+ 既定値は真。
+\item |hyperref-enc=|\Meta{真偽値}\Means
+ \Pkg{hyperref}パッケージについて
+ 「PDF文字列の文字コード設定を補正する処理」
+ を行うか否か。
+ 既定値は真。
+\item |jaspace-cmd=|\Meta{真偽値}\Means
+ 以下に挙げる和文空白命令を定義するか否か。
+ (詳しくは\ref{ssec:ja-settings}節を参照。)
+ \begin{quote}
+ |\jaenspace|、|\jathinspace|、|\>|、
+ |\_|(|\|\,+\,全角空白)
+ \end{quote}
+ 既定値は真。
+\item |fix-at-cmd=|\Meta{真偽値}\Means
+ |\@| 命令に対してJSクラスと同様の拡張を施すか否か。
+ 既定値は真。
+\item |label-section=|\Meta{値}\Means
+ 節番号の書式出力、特に
+ 「|\pre|/|postsectionname|」
+ 「\Pkg{bxjsarticle}での付録部における |\appendixname|」
+ の語句の付加の方法を選択する。
+ \begin{itemize}
+ \item |compat|(既定)\Means
+ JSクラスと同じ実装を用いる。
+ この場合、節のカウンタの書式(|\thesection|)そのものに語句が
+ 付加されるため、|\thesection| を参照する他のカウンタ書式が
+ 奇妙になる可能性がある。
+ \item |modern|\Means
+ 節のカウンタの書式(|\thesection|)には語句の付加を行わず、
+ 実際にそれが節番号として出力される際に語句を付加する。
+ \item |none|\Means
+ 節番号に対する語句の付加を抑止する。
+ 欧文・和文の標準文書クラスと同等になる。
+ \end{itemize}
+\item |layout=|\Meta{値}\Means
+ レイアウトの変種を選択する。
+ 現状では、過去の版との互換性を維持するために用いられている。
+ 有効な値は以下の通り。
+ \begin{itemize}
+ \item \Pkg{bxjsbook}クラスの場合:
+ \begin{itemize}
+ \item |v2|(既定)\Means
+ 現版の既定のレイアウト。
+ \item |v1|\Means
+ 1.2a版以前の(本来は不適切な)水平マージンの設定を適用する。
+ (詳細は\ref{ssec:page-layout}節を参照。)
+ \end{itemize}
+ \item \Pkg{bxjsreport}クラスの場合:
+ \begin{itemize}
+ \item |v2|(既定
+ \footnote{1.6版より既定値が |v2| に変更された。})\Means
+ JSクラスに新設された\Pkg{jsreport}クラスのレイアウトを継承する。
+ \item |v1|\Means
+ 従来の「\Pkg{jsbook}クラス\,+\,|report|オプション」の
+ レイアウトを継承する。
+ \end{itemize}
+ \item それ以外のクラスでは、本オプションは無効である。
+ \end{itemize}
+\end{itemize}
+
+\paragraph{jlreq文書クラスとの互換用のオプション}\mbox{}
+
+\begin{itemize}
+\item |paper={|\Meta{横幅}|,|\Meta{縦幅}|}|\Means
+ |paper={|\Meta{横幅}|}{|\Meta{縦幅}|}| と同値(用紙サイズ設定)。
+\item |fontsize=|\Meta{長さ}\Means
+ |base=|\Meta{長さ} と同値(基底フォントサイズ)。
+\item |jafontsize=|\Meta{長さ}\Means
+ |jbase=|\Meta{長さ} と同値(和文基底フォントサイズ)。
+\item |line_length=|\Meta{長さ}\Means
+ |textwidth=|\Meta{長さ} と同値(行長指定)。
+\item |number_of_lines=|\Meta{整数}\Means
+ |number-of-lines=|\Meta{整数} と同値(行数指定)。
+\end{itemize}
+
+\paragraph{旧版との互換用のオプション}\mbox{}
+
+\begin{itemize}
+\item |zw|\Means
+ |use-zw=true| と同値。
+\item |nozw|\Means
+ |use-zw=false| と同値。
+\item |js|\Means
+ |disguise-js=true| と同値。
+\item |nojs|\Means
+ |disguise-js=false| と同値。
+\item |precisetext|\Means
+ |precise-text=true| と同値。
+\item |noprecisetext|\Means
+ |precise-text=false| と同値。
+\item |simplejasetup|\Means
+ |simple-ja-setup=true| と同値。
+\item |nosimplejasetup|\Means
+ |simple-ja-setup=false| と同値。
+ \Note 以上の8個は1.9版より前で使われた。
+\item |textwidth-limit=|\Meta{整数}\Means
+ |textwidth-limit=|\Meta{整数}|zw| と同値。
+ \Note 1.8版より前で使われた。
+\item |dvipdfmx-if-dvi|\Means
+ |dvi=dvipdfmx| と同値。
+ \Note 1.2版より前で使われた。
+\item |magstyle=mag|/|real|/|xreal|\Means
+ それぞれ |magstyle=usemag|/|nomag|/|nomag*| と同値。
+ \Note 1.1f版より前で使われた。
+\item |jadriver=|\Meta{名前}\Means
+ |ja=|\Meta{名前} と同値(和文ドライバ指定)。
+ \Note 1.0版より前で使われた。
+\item |noscale|\Means
+ |scale=1| と同値。
+ \Note 0.9版より前で使われた。
+\end{itemize}
+
+%-------------------
+\subsection{JSクラスのオプションで使用可能なもの}
+\label{ssec:JS-inherited-option}
+
+これらについては名前だけ列挙するに留める。
+ただし、“JSクラス特有”(標準クラスに無い)オプションの一部に
+ついては解説を加える。
+
+\paragraph{用紙サイズ指定}
+|a3paper|、|a4paper|、|a5paper|、|a6paper|、
+|b4paper|、|b5paper|、|b6paper|、
+|a4j|、|a5j|、|b4j|、|b5j|、|a4var|、|b5var|、
+|letterpaper|、|legalpaper|、|executivepaper|。
+\Note |a4var| はA4変判($\mbox{210\,mm}\times\mbox{283\,mm}$)、
+|b5var| はB5変判($\mbox{182\,mm}\times\mbox{230\,mm}$)。
+\Note JS/BXJSクラスでは |a4j| は |a4paper| と全く等価である。
+(他の |b4j| 等も同様。)
+
+\paragraph{横置き}
+|landscape|。
+
+\paragraph{基底フォントサイズ}
+|8pt|、|9pt|、|10pt|、|11pt|、|12pt|、|14pt|、|17pt|、|20pt|、
+|21pt|、|25pt|、|30pt|、|36pt|、|43pt|、
+|12Q|、|14Q|、
+|10ptj|、|10.5ptj|、|11ptj|、|12ptj|。
+\Note |10pt|、|11pt|、|12pt|、|14pt|、|17pt|、|21pt|、|25pt|、
+|30pt|、|36pt|、|43pt| はそれぞれmagstepの
+0、0.5、1、2、3、4、5、6、7、8である。
+|8pt|、|9pt|、|20pt| は文字通りの値。
+|##Q|/|##ptj| は |jbase=##Q|/|jbase=##pt| を表す
+(つまり和文規準)。
+\footnote{ちなみにJSクラスの(固定の)和文スケール値に従うと |10pt|
+ が |jbase=13Q| に相当するので |13Q| というオプションは無い。}%
+
+\paragraph{両面用レイアウト}
+|oneside|、|twoside|、|vartwoside|。
+\Note |vartwoside| は |twoside| と同様だが
+傍注が常に右側余白に出力される。
+
+\paragraph{段組み}
+|onecolumn|、|twocolumn|。
+
+\paragraph{表題ページ}
+|titlepage|、|notitlepage|。
+
+\paragraph{起こし}
+|openright|、|openleft|、|openany|。
+\Note \Pkg{jsreport}と\Pkg{jsbook}にのみ存在するオプション。
+\Note |openleft| は部・章の開始を見開き左側のページ
+(偶数ページ)に強制する(左起こし)。
+
+\paragraph{数式配置}
+|leqno|、|fleqn|。
+
+\paragraph{オーバーフル警告}
+|final|、|draft|。
+
+\paragraph{papersize special出力}
+|papersize|。
+\Note BXJSクラスでは |papersize| は既定で有効。
+
+\paragraph{英語化}
+|english|。
+
+\paragraph{エンジン種別}
+|uplatex|、|autodetect-engine|。
+\Note 既に\ref{ssec:BXJS-specific-option}節で述べた通り。
+
+\paragraph{magstyle指定}
+|usemag|、|nomag|、|nomag*|。
+\Note BXJSクラスでは、これらは“|magstyle=|”を前置したものと
+同等に扱われる。
+詳細は\ref{ssec:magstyle}節を参照。
+
+\paragraph{和文数式ファミリ不使用}
+|disablejfam|。
+\Note BXJSクラスでは |enablejfam=false| と同値。
+詳細は\ref{sec:Ja-math-fonts}節を参照。
+
+\paragraph{ロゴ命令パッケージの読込}
+|jslogo|、|nojslogo|。
+\Note BXJSクラスでは |nojslogo| が既定値である。
+
+%-------------------
+\subsection{JSクラスのオプションで使用不可能なもの}
+\label{ssec:JS-deleted-option}
+
+\begin{itemize}
+\item クラス変種指定\Means
+ |report|、|slide|。
+ \Note |report| 相当は\Pkg{bxjsreport}、|slide| 相当は\Pkg{bxjsslide}と
+ 別クラスになっている。
+\item トンボ出力\Means
+ |tombow|、|tombo|、|mentuke|
+ \Note これは{\pLaTeX}のカーネル命令を利用しているので
+ とりあえず除外。
+\item 和文フォントメトリック指定\Means
+ |jis|、|mingoth|。
+ \Note 異なるエンジンで汎用的に扱うのが難しい。
+\end{itemize}
+
+%-------------------
+\subsection{クラスオプション設定の既定値}
+
+\begin{itemize}
+\item BXJSクラス共通\Means
+ |a4paper|、|onecolumn|、|final|、
+ |ja=minimal|、|jafont|は空、|japaram|は空、
+ |scale=0.924715|、|magstyle=usemag|%
+ \footnote{Lua{\TeX}の0.87版以降では |magstyle=nomag*| が既定となる。
+ \ref{ssec:magstyle}節参照。}
+\item \Pkg{bxjsarticle}\Means
+ |10pt|、|oneside|、|notitlepage|
+\item \Pkg{bxjsreport}\Means
+ |10pt|、|oneside|、|titlepage|、|openany|
+\item \Pkg{bxjsbook}\Means
+ |10pt|、|twoside|、|titlepage|、|openright|
+\item \Pkg{bxjsslide}\Means
+ |36pt|、|oneside|、|notitlepage|
+\end{itemize}
+
+%-------------------
+\subsection{magstyleオプション}
+\label{ssec:magstyle}
+
+JSクラスにおけるページレイアウト決定の過程では、
+基底フォントサイズが10\,pt以外の場合に、
+「版面を拡大縮小する」という処理を採用している。
+\footnote{例えば、基底フォントサイズが20\,ptだとすると、
+まずは指定されたものの半分の縦横幅をもつ用紙に対して
+基底フォントサイズが10\,ptとしてレイアウトを決定し、
+それを縦横2倍に拡大する、という過程をとっている。}%
+これには、「フォントのオプティカルサイズの選択を最適にするため
+\footnote{{\LaTeX}の既定の欧文フォントであるComputer Modernフォントが
+オプティカルサイズの性質をもつことは有名であるが、
+少々癖が強くて、本文を10\,pt(cmr10)で組んだ場合と
+12\,pt(cmr12)で組んだ場合でかなり異なった印象を受ける場合がある。
+JSクラスではそれを嫌って、本文(|\normalsize| のフォント)が
+必ず「cmr10を拡大縮小したもの」で組まれることを
+企図しているのである。}%
+」という理由があり、またこれにより、多種の基底フォントサイズへの
+対応が容易になるという利点もある。
+\footnote{BXJSで「任意の」基底フォントサイズが設定できるのも
+この利点があるため。}%
+ところがここで、JSクラスではこの“版面拡大”を実現するために
+{\TeX}エンジンが持つ版面拡大機能(仮に「mag設定」と呼称する)
+を用いていて、これについて批判されることが多い。
+また、現実問題として、mag設定が{\LaTeX}で用いられる機会は少ないため、
+実際に用いられた時にそれを想定していないパッケージが誤動作すると
+いう問題もある。
+
+これらの問題を緩和するため、BXJSクラスでは“版面拡大”について
+他の実現方法を提供している。
+それを選択するのが以下に挙げる「magstyleオプション」である。
+\footnote{「magstyleオプション」の値は、|magstyle|をキー名にした
+keyval形式(例えば|magstyle=nomag*|)で書くこともできる。
+1.1e版以前では、keyval形式のみがサポートされ、しかも値の識別子として
+|usemag|/|nomag|/|nomag*|の代わりに|mag|/|real|/|xreal|を用いて
+(つまり|magstyle=xreal|と書いて)いた。}
+
+\begin{itemize}
+\item |usemag|\Means
+ JSクラスと同様に、“版面拡大”のためにmag設定を用いる。
+\item |nomag|\Means
+ mag設定を一切用いず、代わりに、
+ 全てのページレイアウトのパラメタの値をスケールさせる。
+ |\normalsize| や |\large| 等の高位フォントサイズ命令で指定される
+ フォントサイズもスケールさせるが、
+ “オプティカルサイズの調整”は行わない。
+ いわゆる「基本35書体」のようなオプティカルサイズでない
+ \footnote{或いは、オプティカルサイズに“変な癖”のない。}%
+ フォントのみを用いるのであれば、この設定が最も適切である。
+\item |nomag*|\Means
+ |nomag| と同様に、
+ 全てのページレイアウトのパラメタの値をスケールさせる。
+ さらに、“オプティカルサイズの調整”を実現するために、
+ NFSSの実装コードにパッチを当てる。
+ \footnote{要するに、|OT1/cmr/m/n/12| が要求された時に、
+ |cmr12| でなくて |cmr10 at 12pt| が選ばれるようにする。}%
+ この場合、mag設定による不具合は起こらなくなるが、
+ 当然、NFSSのパッチのせいで別の不具合が起こる可能性はある。
+\end{itemize}
+
+\Note Lua{\TeX}の0.87版以降では(PDF出力時の)「mag設定」の機能が
+廃止されている。
+そのため、そのようなエンジンでは |usemag| はサポートされない
+(エラーになる)。
+
+\Note |magstyle| オプションの既定値は |usemag| である。
+ただし例外として、|usemag| がサポートされない
+エンジンでは |nomag*| が既定値となる。
+
+%===========================================================
+\section{和文ドライバ}
+\label{sec:Ja-Driver}
+
+BXJSクラスでは様々なエンジンについて、そのエンジンおよび
+それに対応するパッケージが提供する日本語処理機能を活用することで、
+日本語用の文書クラスとしての機能を実現している。
+そこでの汎用性を確保するため、
+“日本語処理機能と連携する部分”の実装をモジュールとして分離していて、
+これを\jemph{和文ドライバ}と呼ぶ。
+\footnote{\Pkg{graphicx}パッケージ等の「ドライバ」と類似した概念
+のためこの名称を用いた。}%
+\Pkg{BXjscls}のバンドルでは以下に挙げる和文ドライバを提供している。
+
+\begin{itemize}
+\item standard和文ドライバ\Means
+各エンジンについて、最も一般的に用いられる特定の
+“日本語処理機能”(例えば |lualatex| なら\Pkg{\LuaTeX-ja})
+を連携対象とした和文ドライバ。
+(u){\pLaTeX}上のJSクラスと同じくらい容易に日本語が
+書き始められることを目指している。
+\item minimal和文ドライバ\Means
+“何も実装されていない”和文ドライバ。
+上級ユーザがプレアンブルや自作パッケージ等に
+アドホックな連携コードを書いて、
+好きな“日本語処理機能”との連携を実現するために
+用いることを想定している。
+\item pandoc和文ドライバ\Means
+「Pandocモード」で仕様される和文ドライバ。
+standardドライバの機能を継承するが、
+「Pandocの既定のlatexテンプレート」が使われることを前提として、
+それとBXJSの設定を整合させるための措置を加えている。
+\Note 本マニュアルで「standard和文ドライバの場合」という場合、
+特に明示がない限りはpandoc和文ドライバも含まれる。
+\end{itemize}
+
+和文ドライバは自分で作製することも可能である。
+\footnote{和文ドライバの実装に必要な連携仕様の
+ 情報については、ソースコード説明書(bxjscls.pdf)
+ の付録Aを参照してほしい。}%
+|bxjsja-XXX.def|(|XXX| は任意の文字列
+\footnote{{\LaTeX}の非特殊文字
+({\TeX}言語でいうとカテゴリコードが11または12の文字)
+からなる必要がある。}%
+)の名前のファイルに実装コードを書いてそのファイルを配置すると、
+|ja=XXX| のオプション指定でその和文ドライバを利用できる。
+
+なお、和文ドライバ指定オプション(|ja|)の既定値は |minimal|
+である。
+現実には、ほとんど全ての場合に |standard| が用いられると思われるが、
+種々の理由があって、これを既定値にはしていない。
+
+\Note ただし、(u){\pLaTeX}については、日本語処理機能がエンジン自体に
+備わっていて不可分なため少し異なる扱いになっている。
+\footnote{JSクラスの実装から分離した「日本語処理関連」のコードを
+minimalに配置している。}%
+|minimal| を用いる意義がほとんどないため、
+|standard| が既定値になっている。
+
+\Note 1.8版より、(u){\pLaTeX}以外のエンジンについては、
+和文ドライバを明示指定することを推奨する。
+
+
+%===========================================================
+\section{和文ドライバパラメタ}
+\label{sec:Ja-Driver-Param}
+
+和文ドライバパラメタ(|japaram| オプション)は
+和文ドライバに依存する設定を指定するために用意されている。
+|japaram| オプションの値はそれ自身がキー値ペアのリストであり、
+一般的に次のような形式で指定される。
+\begin{quote}\small\begin{verbatim}
+\usepackage[...,japaram={key=value,...},...]{bxjsarticle}
+\end{verbatim}\end{quote}
+
+minimal和文ドライバには有効な和文ドライバパラメタは存在しない。
+
+%-------------------
+\subsection{standard和文ドライバの場合}
+
+以下の和文ドライバパラメタが存在する。
+
+\begin{itemize}
+\item |jis2004=|\Meta{真偽値}\Means
+ 漢字の字形について「2004JIS字形を優先させる」処理を行うか。
+ 真の場合、以下の処理が行われる。既定値は偽。
+ \begin{itemize}
+ \item グローバルオプションに |jis2004| を追加する。%
+ \footnote{\Pkg{japanese-otf}や\Pkg{luatexja-preset}などの
+ パッケージが |jis2004| オプションを利用する。}
+ \item エンジンが{(u)\pLaTeX}の場合、|pxchfon| と |pxbabel|
+ パッケージに予め |prefer2004jis| オプションが渡される。
+ \end{itemize}
+\item |units=|\Meta{真偽値}\Means
+ これを真にすると、
+ {\LaTeX}における長さ指定において、{\pTeX}の和文用の単位
+ (|zw|、|zh|、|(true)Q|、|(true)H|)
+ を全てのエンジンで使用できるようにする。
+ 既定値は偽。
+ \Note \Pkg{bxcalc}パッケージを読み込む。
+ \Note 厳密にいうと、「\Pkg{calc}の長さ数式が使える箇所」
+ において和文用の単位が使用できるようになる。
+\item |font={|\Meta{文字列}|}|\Means
+ standard和文ドライバが利用する和文フォントパッケージについて
+ 追加のオプションを指定する。
+\end{itemize}
+
+
+%===========================================================
+\section{ユーザ用命令}
+\label{sec:Commands}
+
+原則として、BXJSクラスで追加されたものだけを説明する。
+
+%-------------------
+\subsection{レイアウト設定関連}
+\label{ssec:page-layout}
+
+BXJSクラスではページレイアウトの設定に\Pkg{geometry}パッケージを
+用いて次の手順で行っている。
+
+\begin{enumerate}
+\item
+ (基底フォントサイズにより決定されたmag値を実際に設定する。)
+\item
+ \Pkg{geometry}で次のパラメタを設定する。
+ \label{itm:pl-param}
+ \begin{enumerate}
+ \item
+ クラスオプションで指定された用紙サイズ、
+ および|truedimen| とドライバ指定。
+ \label{itm:pl-parama}
+ \item
+ \Pkg{bxjsarticle}/\Pkg{bxjsreport}の場合は次のパラメタ値。
+ \label{itm:pl-paramb}
+\begin{quote}\small\begin{verbatim}
+headheight=10pt, footskip=0.03367\paperheight,
+headsep=\footskip-\topskip, includeheadfoot,
+hscale=0.76, hmarginratio=1:1, vscale=0.83, vmarginratio=1:1
+\end{verbatim}\end{quote}
+ \item
+ \Pkg{bxjsbook}の場合は次のパラメタ値。%
+ \label{itm:pl-paramc}
+\begin{quote}\small\begin{verbatim}
+headheight=10pt, headsep=6mm, nofoot, includeheadfoot,
+hmargin=18mm, vscale=0.83, vmarginratio=1:1
+\end{verbatim}\end{quote}
+ \Note \Pkg{bxjsbook}の1.2a版以前では、この設定の中の
+ “|hmargin=18mm|”の代わりに“|hmargin=36mm,| |hmarginratio=1:1|”
+ を用いていた。
+ これでは\Pkg{jsbook}の水平マージン設定と同等にならないため
+ 1.3版で現在の設定に修正された。
+ もし1.2a版以前との互換性を保ちたい場合は、
+ クラスオプションに |layout=v1| を指定してほしい。
+ \item
+ \Pkg{bxjsslide}の場合は次のパラメタ値。
+ \label{itm:pl-paramd}
+\begin{quote}\small\begin{verbatim}
+noheadfoot, hscale=0.9, hmarginratio=1:1,
+vscale=0.944, vmarginratio=1:1
+\end{verbatim}\end{quote}
+ \end{enumerate}
+\item
+ 後処理を行う。
+ \label{itm:pl-post}%
+ 以下の処理が含まれる。
+ \begin{itemize}
+ \item |textwidth| を全角幅の整数倍に、|textheight| を整数行分の
+ 自然長になるように丸める。
+ \item |marginpar| 関連の設定を行う。
+ \end{itemize}
+ \Note ただし、横幅の全角整数倍への丸めは、|whole-zw-lines=false|
+ 指定時には抑止される。
+\end{enumerate}
+
+ページレイアウトの再設定のために次の命令が用意されている。
+\begin{itemize}
+\item |\setpagelayout{|\Meta{設定}|}|\Means
+ 現在のページレイアウトの設定の一部を修正する。
+ \Meta{設定}は\Pkg{geometry}のパラメタの記述であり、
+ 現在の設定に追記して\Pkg{geometry}が再設定を行った後、
+ 再び\ref{itm:pl-post}の後処理が行われる。
+\item |\setpagelayout*{|\Meta{設定}|}|\Means
+ 用紙以外の設定をリセットして改めてページレイアウトの設定を行う。
+ 具体的には、まず\Pkg{geometry}の |reset| オプションで初期化し、
+ その後\ref{itm:pl-parama}と\Meta{設定}の
+ 内容を用いて再設定を行った後、
+ 再び\ref{itm:pl-post}の後処理が行われる。
+\item |\setpagelayout+{|\Meta{設定}|}|\Means
+ |\setpagelayout*| の変種で、「本文領域のサイズと位置」の設定のみを
+ リセットして改めてページレイアウトの設定を行う。
+ すなわち、前項の“再設定”の際に、
+ \ref{itm:pl-paramb}~\ref{itm:pl-paramd}の内容のうち
+ 「本文領域」以外のものが追加される。
+\end{itemize}
+
+なお、|\geometry| 命令を直接呼び出すことも可能である。
+当然この場合は\ref{itm:pl-post}の後処理は行われない。
+
+%-------------------
+\subsection{構造マークアップ関連}
+
+\begin{itemize}
+\item |\subtitle{|\Meta{テキスト}|}|\Means
+ サブタイトルを設定する。
+ \Note |\maketitle| の出力にサブタイトルが含まれるようになる。
+\item |chapterabstract| 環境\Means
+ \Pkg{jsbook}クラスの |abstract| 環境
+ \footnote{article系やreport系のクラスにあるような
+ (文書要旨のための)abstract 環境は、book系クラスでは
+ 用意されていないことが多いことに注意。}%
+ と等価な環境で、
+ 「各章の初めにちょっとしたことを書く」用途を想定したもの。
+ (ただし使用可能な場所に特に制限はない。)
+
+ なお、|abstract| 環境の機能については継承元のJSクラスと同一に
+ なるため以下のようになる。
+ \begin{itemize}
+ \item \Pkg{bxjsarticle}および|layout=v2|指定の\Pkg{bxjsreport}\Means
+ \Pkg{jsarticle}/\Pkg{jsreport}クラスと同じ、
+ つまり「文書要旨」のための環境。
+ \item \Pkg{bxjsbook}および|layout=v1|指定の\Pkg{bxjsreport}\Means
+ \Pkg{jsbook}クラスと同じ、
+ つまり |chapterabstract| 環境と等価。
+ \end{itemize}
+
+\item |\jayear|\Means
+ 和暦表示(|\和暦|)が有効な時の |\today| のテキスト中の年号
+ (「年」より前の部分、例えば「平成28」)
+ の部分を表すマクロ。
+\end{itemize}
+
+|label-section=modern| の場合に限り、以下の命令が利用できる。
+
+\begin{itemize}
+\item |\labelsection|\Means
+ 節見出し(|\section|)における節番号の表示形式を表すマクロ。
+ 通常、|\thesection|(|section| カウンタの出力形式)に
+ 必要な装飾(“節”や“§”など)を加えたテキストを指定する。
+ \par
+ 既定値は以下に示すものと同等になっている。
+ \begin{itemize}
+ \item 文書開始時は“|\presectionname\thesection\postsectionname|”。
+ \item 付録開始時(|\appendix| 実行時)に
+ “|\appendixname\thesection|”に切り替わる。
+ \footnote{|\labelsection| を実際に再定義するわけではないので、
+ ユーザが独自の |\labelsection| を設定している場合は
+ 切替は発生しなくなる。}
+ \end{itemize}
+ \Note |label-section=compat| の場合は(JSクラスと同様に)
+ 付録開始時に
+ 「|\presectionname| を |\appendixname| で上書きする」
+ という動作が発生するが、|label-section=modern| では
+ これは起こらない。
+\item |\labelsubsection|/|\labelsubsubsection|\Means
+ これらのマクロが定義されている場合は、各々の内容のテキストが
+ 小節見出しおよび小々節見出しの表示形式として利用される。
+ 未定義の場合は |\thesub(sub)section| で代用される。
+\end{itemize}
+
+%-------------------
+\subsection{和文用設定関連}
+\label{ssec:ja-settings}
+
+\begin{itemize}
+\item |\jsZw|\Means
+ 和文の全角幅を表す。
+ 例えば |2\jsZw| が pLaTeX の |2zw| に相当する。
+\item |\zw|\Means
+ |\jsZw| の別名。
+ \footnote{\Pkg{\LuaTeX-ja}では「実際の全角幅」を表す
+ 命令 |\zw|({\pLaTeX}の |zw| と本当に等価)が規定されている。
+ |lualatex| エンジン指定かつ和文ドライバが |standard| の場合は
+ この |\zw| の定義がそのまま使われる。
+ (従って |use-zw| は実質的に意味を持たない。)
+ なお、|\jsZw| は「規約上の全角幅」であり、「実際の全角幅」と本来は
+ 一致するはずだが、実際には計算誤差のせいで僅かに値が異なる。}%
+ ただし |use-zw=false| 指定時は定義されない。
+\item |\zwspace|\Means
+ 全角(|\jsZw|)幅の水平空き。
+\item |\_|(|\|\,の後に全角空白文字)\Means
+ |\zwspace| の別名。
+ 全角幅の水平空き。
+ \Note \Pkg{jlreq}クラスと互換の命令。
+ ただしBXJSクラスはJLREQの和字間隔の規定とは無関係であり、
+ この命令は単純に |\hspace|\wbr|{\jsZw}| と等価である。
+\item |\jaenspace|\Means
+ 半角(0.5\,|\jsZw|)幅の水平空き。
+\item |\allowoldfontcommands|\Means
+ これ以降に実行される二文字フォント命令を警告の対象にしない。
+\item |\disallowoldfontcommands|\Means
+ これ以降に実行される二文字フォント命令を警告の対象にする。
+\Note 詳細については\ref{sec:Old-font-commands}節を参照されたい。
+\end{itemize}
+
+\subsubsection{standard和文ドライバの場合}
+
+standard和文ドライバ(およびそれを継承するドライバ)では和文に関連する
+文書ソース記述をエンジンに依らずに共通になることを目指している。
+従って、和文関連の組版パラメタの設定についても
+「共通の命令」が提供される。
+
+\begin{itemize}
+\item 和文ファミリ変更命令\Means
+ {\pLaTeX}と同様に、
+ |\mcfamily| で「明朝」、|\gtfamily| で「ゴシック」に変更される。
+ |\textmc|、|\textgt| も使える。
+\item 欧文ファミリ変更命令での和文の連動\Means
+ JSクラスと同様
+ \footnote{ちなみに、(u){\pLaTeX}の既定ではこの連動は起こらない。}%
+ に、|\rmfamily| で和文が「明朝」、
+ |\sffamily| および |\ttfamily| で和文が「ゴシック」に変更される。
+\item |\jQ|、|\jH|、|\trueQ|、|\trueH|\Means
+ それぞれ{\pLaTeX}の単位Q、H、true\,Q、true\,Hに相当する長さ。
+\item |\ascQ|\Means
+ 1\,true\,Qを和文スケール値で割った長さ。
+ \footnote{命令名は“anti-scaled Q”の略。}%
+ 例えば、|\fontsize{10\ascQ}{16\trueH}|
+ で和文のサイズが10\,Qになる。%
+ \footnote{1.5c版で導入された |\jafontsize| 命令を用いて %
+ |\jafontsize{10trueQ}{16trueH}| としてもよい。}
+\item |\ascpt|\Means
+ 1\,true\,ptを和文スケール値で割った長さ。
+ 例えば、|\fontsize{9\ascpt}{13truept}|
+ で和文のサイズが9ポイントになる。
+\item |\setxkanjiskip{|\Meta{長さ}|}|\Means
+ 和欧文間空白の量を指定する。
+ {\pLaTeX}での |\setlength{\xkanjiskip}{|\Meta{長さ}|}| に相当する。
+\item |\getxkanjiskip|\Means
+ 現在の和欧文間空白の量を表す文字列に展開される。
+ {\pLaTeX}での |\xkanjiskip| の読出
+ \footnote{{\TeX}言語でいうと |\the\xkanjiskip|。}%
+ に相当する。
+\item |\autoxspacing|/|\noautoxspacing|\Means
+ 和欧文間空白の挿入を有効/無効にする。
+ {\pLaTeX}の同名の命令と同等。
+\item |\setkanjiskip{|\Meta{長さ}|}|\Means
+ 和文間空白の量を指定する。
+ {\pLaTeX}での |\setlength{\kanjiskip}{|\Meta{長さ}|}| に相当する。
+\item |\getkanjiskip|\Means
+ 現在の和文間空白の量を表す文字列に展開される。
+ {\pLaTeX}での |\kanjiskip| の読出
+ \footnote{{\TeX}言語でいうと |\the\kanjiskip|。}%
+ に相当する。
+\item |\autospacing|/|\noautospacing|\Means
+ 和文間空白の挿入を有効/無効にする。
+ {\pLaTeX}の同名の命令と同等。
+\item |\jathinspace|\Means
+ 和欧文間空白を挿入する。
+\item |\>|\Means
+ (非数式モードで
+ \footnote{|\>| という命令名は、plain {\TeX}では数式中の空白
+ ({\LaTeX}の |\:| と同等)を表す。
+ このため、実際には{\LaTeX}でも |\>| は |\:| と同等の命令として
+ 定義されている。
+ この「plain互換の |\>|」を利用したコードが影響を受けるのを避ける
+ ため、数式中では |\>| は従来通り |\:| と同等の動作を行う。}%
+ )和欧文間空白を挿入する。
+ \Note |jaspace-cmd=false| 指定時は定義されない。%
+ \footnote{ただし、standard和文ドライバで自動的に読み込まれる
+ \Pkg{zxjatype}や\Pkg{bxcjkjatype}のパッケージは、
+ それ自体が同様の機能の |\>| を提供することにも注意を要する。}
+\item |\jachar{|\Meta{文字1つ}|}|\Means
+ 指定の文字を和文文字として(現在の和文フォントで)出力する。
+\item |\jafontsize{|\Meta{フォントサイズ\xast}|}{|\Meta{行送り\xast}|}|\Means
+ “和文規準”でフォントサイズを指定する。
+ すなわち、和文の1\,zwが\Meta{フォントサイズ}と等しくなるように
+ フォントサイズを設定する。
+\item 和文数式フォント命令\Means
+ JSクラスと同様に、
+ |\mathmc| で「明朝」、|\mathgt| で「ゴシック」の
+ 和文数式フォントを指定する。
+\item 欧文数式フォント命令での和文の連動\Means
+ |\mathrm| で和文が「明朝」、
+ |\mathsf| および |\mathtt| で和文が「ゴシック」に指定される。
+ \Note JSクラスとは異なり、連動の組合せは
+ テキストと同一であることに注意。
+\end{itemize}
+
+例えば、{\pLaTeX}において、次のように「和文間空白」を
+利用して均等割りを行うという技法が知られている。
+
+\begin{quote}\small\begin{verbatim}
+%% \kintouwari{<整数n>}{<テキスト>}
+% n全角の幅にテキストを均等割りで出力する.
+\newcommand\kintouwari[2]{{%
+ \setlength{\kanjiskip}{\fill}%
+ \makebox[#1zw][s]{#2}}}
+\end{verbatim}\end{quote}
+
+これと同等のものを、次のようにエンジン非依存な形で書くことができる。
+
+\begin{quote}\small\begin{verbatim}
+\newcommand\kintouwari[2]{{%
+ \setkanjiskip{\fill}%
+ \makebox[#1\zw][s]{#2}}}
+\end{verbatim}\end{quote}
+
+%===========================================================
+\section{数式中の和文出力について}
+\label{sec:Ja-math-fonts}
+
+minimal和文ドライバは数式中の和文出力の機能を何も提供しない。
+従って、そのような機能を提供する他のパッケージを併用するので
+ない限り、数式中に和文を書いたときの挙動は未定義である。
+
+standard和文ドライバ(およびそれを継承する和文ドライバ)に
+おける数式中の和文出力の扱いは、エンジンと |enablejfam| オプション
+の値の組合せにより異なり、表\ref{tbl:ja-math}に示すようになる。
+以下でこの表に関する補足説明を行う。
+\begin{itemize}
+\item この表にある以外のエンジンと |enablejfam| 値の組合せは
+ 許容されない。
+ この場合、警告が出て、|enablejfam| が可能な値に自動的に変更される。
+\item 「直書き」が「可」の場合、数式フォント命令(|\mathXX{}|)の外に
+ 書いた和文文字は明朝体で出力される。
+ 「不可」の場合、そのような和文文字の扱いは未定義である。
+\item 「|\mathmc|/|gt|」が「サポート有り」の場合、これらの命令は
+ “本物”の数式フォント命令として働く。
+ 「フォールバック」の場合は、これらの命令は内部で一旦テキストモードに
+ 切り替えて非数式として出力される。
+ このフォールバック機能を実用したい場合は、
+ \Pkg{amstext}(または\Pkg{amsmath})パッケージの併用が望ましい。%
+ \footnote{\Pkg{amstext}を読み込まない場合、
+ 添字中で |\mathmc|/|gt| を用いたときに
+ 文字サイズが非添字のものに戻ってしまうという不具合が出る。}
+\end{itemize}
+
+\DeleteShortVerb{\|}
+\MakeShortVerb{\+}
+\begin{table}[t]
+ \caption{standard和文ドライバにおける数式中の和文出力のサポート}
+ \label{tbl:ja-math}
+ \small\centering
+ \begin{tabular}{ll|ccc}
+ \hline
+ エンジン & +enablejfam+ & 直書き & +\mathmc+/+gt+ & 和欧文連動 \\
+ \hline
+ +(u)platex+ & +true+(既定) & 可 & サポート有り & 有り \\
+ & +false+ & 不可 & フォールバック & --- \\
+ +lualatex+ & +true+ & 可 & サポート有り & 有り \\
+ +xelatex+ & +true+ & 可 & フォールバック & 無し \\
+ & +false+(既定)& 不可 & フォールバック & --- \\
+ +pdflatex+ & +false+ & 不可 & フォールバック & --- \\
+ \hline
+ \end{tabular}
+\end{table}
+\DeleteShortVerb{\+}
+\MakeShortVerb{\|}
+
+%===========================================================
+\section{“二文字フォント命令”に対する警告}
+\label{sec:Old-font-commands}
+
+ここでいう“二文字フォント命令”というのは、|\bf| や |\it| 等の
+{\LaTeX}~2.09で標準であったフォント選択命令のことである。
+\footnote{なお、|\em| は「二文字の名前のフォント命令」であるが、
+ これは{\LaTeXe}でも標準命令であり、“二文字フォント命令”には
+ 含まれない。}\
+{\LaTeXe}においては、これらに代わって、|\bfseries| 等の
+NFSS方式の新しい命令群が標準となり、
+古い二文字フォント命令はカーネルではもはサポートされなくなった。
+しかし同時に、二文字フォント命令を利用したパッケージを
+動作させるための“当面の”
+\footnote{ちなみに、
+ {\LaTeXe}が最初にリリースされたのは1994年のことである。}%
+互換性対策として、
+「標準の文書クラス(\Pkg{article}、\Pkg{book}等)で二文字フォント命令の
+サポートを行う」という方針がとられた。
+これに倣って、他の文書クラスの多くもクラスのレベルで
+二文字フォント命令をサポートしていて、
+BXJSクラスもその例に含まれる。
+
+ところが最近になって、一部の文書クラス
+(\Pkg{KOMA-Script}クラス群や\Pkg{memoir}クラス等)
+において、二文字フォント命令を明示的に非推奨の扱いにした上で、
+その使用に制限を設ける
+(警告を出す、オプションを指定しないと使えない、等)
+という措置が取られるようになっている。
+
+これに合わせて、BXJSクラスでは1.2版より
+二文字フォント命令を非推奨とし、また、
+既定でその使用に対して警告を出すようにした。
+
+%-------------------
+\subsection{警告の内容}
+
+文書中で |\bf| などの二文字フォント命令が呼び出された場合、
+コンパイルの最後に(一度だけ)以下の警告メッセージが表示される。
+
+\begin{quote}\small\begin{verbatim}
+Class bxjsarticle Warning: Some old font commands were used in text:
+(bxjsarticle) \bf \it
+(bxjsarticle) You should note, that since 1994 LaTeX2e provides a
+(bxjsarticle) new font selection scheme called NFSS2 with several
+(bxjsarticle) new, combinable font commands. The class provides
+(bxjsarticle) the old font commands only for compatibility.
+\end{verbatim}
+\end{quote}
+
+なお、この警告は、パッケージの機能の実装として用いられたものも含めて
+全ての二文字フォント命令の呼出が対象になる。
+ただし例外として、thebibliography環境の内部で呼び出されたものだけは
+対象から除外される。
+{\BibTeX}の文献スタイルファイル(|.bst|)や文献データベース(|.bib|)
+のファイルは(パッケージと比較しても)極めて古いものが
+割と普通に使い続けられることが多い。
+そういった極めて古いファイルに由来する二文字フォント命令を
+警告したとしても、多くの場合、ユーザ側には対処する方法が存在しない。
+これが文献リスト環境中で警告を抑止する理由である。
+
+%-------------------
+\subsection{警告の制御}
+
+二文字フォント命令に対する警告の有無はクラスオプションで制御できる。
+
+\begin{itemize}
+\item |oldfontcommands|\Means
+ 二文字フォント命令を警告の対象にしない。
+\item |nooldfontcommands|(既定)\Means
+ 二文字フォント命令を警告の対象にする。
+\end{itemize}
+
+また、以下の命令により、文書中で一時的に警告の設定を変えられる。
+\footnote{これらの命令の効果はグルーピングの影響を受ける。}
+
+\begin{itemize}
+\item |\allowoldfontcommands|\Means
+ これ以降に実行される二文字フォント命令を警告の対象にしない。
+\item |\disallowoldfontcommands|\Means
+ これ以降に実行される二文字フォント命令を警告の対象にする。
+\end{itemize}
+
+%-------------------
+\subsection{将来的な二文字フォント命令の扱い}
+
+\jemph{現在の版で存在する}和文ドライバを使用する場合には、
+将来的に以下の方針が維持される。
+
+\begin{itemize}
+\item 二文字フォント命令に対する警告の様式は、
+ 今後変更される可能性がある。
+\item しかし、将来に二文字フォント命令のサポートが廃止されることはない。
+\item |oldfontcommands| オプションよおび |\allowoldfontcommands| 命令
+ は継続して提供され、
+ これらの機能を用いた場合は、二文字フォント命令に関する警告が
+ 端末に表示されることは一切無い。
+\end{itemize}
+
+%===========================================================
+\end{document}
+
+%===========================================================
+\appendix
+\section{パッケージレベル公開命令の一覧}
+
+\begin{itemize}
+% \jsAtEndOfClass はBXJSの補助パッケージ専用
+\item |\jsBaseFontSize|
+\item |\jsDocClass|
+ \begin{itemize}
+ \item |\jsArticle|
+ \item |\jsBook|
+ \item |\jsReport|
+ \item |\jsSlide|
+ \end{itemize}
+\item |\ifjsDraft|
+\item |\jsEngine|
+\item |\jsFontSizeChanged|
+\item |\jsGeometryOptions|
+\item |\jsInhibitGlue|
+\item |\jsInhibitGlueAtParTop|
+\item |\jsInJaParen|
+\item |\ifjsInPdfMode|
+\item |\jsJaChar|
+\item |\jsJaFont|
+\item |\jsJaParam|
+\item |\jsKanjiSkip|
+\item |\jsLetHeadChar|
+\item |\jsParagraphMark|
+\item |\jsResetDimen|
+\item |\jsScale|
+\item |\ifjsSeireki|
+\item |\jsSimpleJaSetup|
+\item |\jsSubtitle|
+\item |\jsTextWidthLimit|
+\item |\jsUnusualPtSize|
+% \jsUseMinimalPageLayout はテスト用
+\item |\ifjsWitheTeX|
+\item |\ifjsWithupTeX|
+\item |\jsXKanjiSkip|
+% \jsZw はユーザレベル命令
+\end{itemize}
+
+%% EOF
diff --git a/language/japanese/BX/bxjscls/bxjscls.dtx b/language/japanese/BX/bxjscls/bxjscls.dtx
new file mode 100644
index 0000000000..c46d0fd9b7
--- /dev/null
+++ b/language/japanese/BX/bxjscls/bxjscls.dtx
@@ -0,0 +1,11608 @@
+% ^^A -*- japanese-latex -*-
+% \iffalse meta-comment
+%
+% BXJS ドキュメントクラス
+% (BXJS Document Classes)
+%
+% 本ソフトウェアは奥村晴彦氏および日本語TeX開発コミュニティによる
+% 「pLaTeX2ε新ドキュメントクラス」を
+% 「八登 崇之(別名 ZR)」が改変したものである。
+% (This software is a modified version of
+% "New Document CLasses for pLaTeX2e"
+% authored by Haruhiko Okumura and the Japanese TeX Development Community,
+% and the modification is by Takayuki YATO (aka."ZR").)
+%
+% 本ソフトウェアは修正 BSD ライセンスの下で配布される。
+% (This software is distributed under the BSD 2-Clause License.)
+%
+% 以下に原版についての原版著者による情報を示す:
+% (Below is shown the information on the original version,
+% provided by the original authors.)
+%---------------------------------------
+%
+% pLaTeX2ε新ドキュメントクラス(日本語 TeX 開発コミュニティ版)
+% 原作者:奥村晴彦 <okumura@okumuralab.org>
+%
+%---------------------------------------
+%
+% Copyright 1993-2016
+% The LaTeX3 Project and any individual authors listed elsewhere
+% in this file.
+%
+% Copyright 1995-1999 ASCII Corporation.
+% Copyright 1999-2016 Haruhiko Okumura
+% Copyright 2016-2019 Japanese TeX Development Community
+%
+% Copyright 2013-2019 Takayuki YATO (aka. "ZR")
+%
+% \fi
+% \CheckSum{0}
+%
+% \iffalse
+%
+% \begin{macrocode}
+%<article|report|book|slide>\NeedsTeXFormat{LaTeX2e}
+%<article>\ProvidesClass{bxjsarticle}
+%<report>\ProvidesClass{bxjsreport}
+%<book>\ProvidesClass{bxjsbook}
+%<slide>\ProvidesClass{bxjsslide}
+%<minimal>\ProvidesFile{bxjsja-minimal.def}
+%<standard>\ProvidesFile{bxjsja-standard.def}
+%<modern>\ProvidesFile{bxjsja-modern.def}
+%<pandoc>\ProvidesFile{bxjsja-pandoc.def}
+%<compat>\ProvidesPackage{bxjscompat}
+%<cjkcat>\ProvidesPackage{bxjscjkcat}
+%<ancpandoc>\ProvidesPackage{bxjspandoc}
+%<*driver>
+\ProvidesFile{bxjscls.dtx}
+%</driver>
+ [2019/07/27 v1.9h BXJS document classes]
+% based on jsclasses [2019/07/25]
+% [2019/06/23 v1.9g BXJS document classes]
+% [2019/03/10 v1.9f BXJS document classes]
+% [2019/01/13 v1.9e BXJS document classes]
+% [2018/10/03 v1.9d BXJS document classes]
+% [2018/09/04 v1.9c BXJS document classes]
+% [2018/08/20 v1.9b BXJS document classes]
+% [2018/07/20 v1.9a BXJS document classes]
+% based on jsclasses [2018/06/23]
+% [2018/04/19 v1.9 BXJS document classes]
+% [2018/04/14 v1.8b BXJS document classes]
+% [2018/03/29 v1.8a BXJS document classes]
+% based on jsclasses [2018/03/11]
+% [2018/03/03 v1.8 BXJS document classes]
+% [2018/02/04 v1.7c BXJS document classes]
+% [2018/01/28 v1.7b BXJS document classes]
+% [2017/12/09 v1.7a BXJS document classes]
+% [2017/10/21 v1.7 BXJS document classes]
+% [2017/09/28 v1.6b BXJS document classes]
+% [2017/09/24 v1.6a BXJS document classes]
+% [2017/09/09 v1.6 BXJS document classes]
+% based on jsclasses [2017/09/03]
+% [2017/07/07 v1.5d BXJS document classes]
+% [2017/06/10 v1.5c BXJS document classes]
+% [2017/04/01 v1.5b BXJS document classes]
+% [2017/03/14 v1.5a BXJS document classes]
+% [2017/03/11 v1.5 BXJS document classes]
+% based on jsclasses [2017/03/05]
+% [2017/02/03 v1.4 BXJS document classes]
+% [2017/01/28 v1.3a BXJS document classes]
+% based on jsclasses [2017/01/13]
+% [2016/11/01 v1.3 BXJS document classes]
+% based on jsclasses [2016/10/08]
+% [2016/08/16 v1.2a BXJS document classes]
+% [2016/08/01 v1.2 BXJS document classes]
+% based on jsclasses [2016/07/18]
+% [2016/07/16 v1.1f BXJS document classes]
+% based on jsclasses [2016/07/15]
+% [2016/05/28 v1.1e BXJS document classes]
+% [2016/05/21 v1.1d BXJS document classes]
+% [2016/05/01 v1.1c BXJS document classes]
+% [2016/03/27 v1.1b BXJS document classes]
+% [2016/02/20 v1.1a BXJS document classes]
+% [2016/02/14 v1.1 BXJS document classes]
+% [2015/11/21 v1.0d BXJS document classes]
+% [2015/10/18 v1.0c BXJS document classes]
+% [2015/09/07 v1.0b BXJS document classes]
+% [2015/08/23 v1.0a BXJS document classes]
+% [2015/08/05 v1.0 BXJS document classes]
+% based on jsclasses [2014/02/07]
+% [2013/10/03 v0.9pre BXJS document classes]
+% based on jsclasses [2013/05/14]
+%<*driver>
+\documentclass[a4paper]{ltjsarticle}
+\usepackage[ipaex]{luatexja-preset}
+\usepackage{metalogo}
+\usepackage{doc}
+\usepackage{color}
+\newcommand{\Pkg}[1]{\textsf{#1}}
+\newcommand{\Meta}[1]{$\langle$\mbox{}#1\mbox{}$\rangle$}
+\newcommand{\Note}{\par\noindent ※}
+\newcommand{\TODO}{\par\noindent
+ {\usefont{OT1}{cmss}{sbc}{n}\color{red}TODO:}\ }
+\newcommand{\Means}{~:\quad}
+\newcommand{\OR}{$\;|\;$}
+\newcommand{\ZRX}{☃}
+\newenvironment{ZRnote}
+ {\StartZRnote}{\EndZRnote}
+\newcommand*{\ZRnoteline}[1]{
+ \par\noindent\makebox[0pt][l]{\rule[.5ex]{\linewidth}{.4pt}}%
+ \makebox{\hspace{.05\linewidth}\rule[#1ex]{.9\linewidth}{.2pt}}\par}
+\newcommand*{\StartZRnote}{\ZRnoteline{.1}}
+\newcommand*{\EndZRnote}{\ZRnoteline{.9}}
+\providecommand*{\eTeX}{$\varepsilon$-\TeX}
+\providecommand*{\upTeX}{u\pTeX}
+\providecommand*{\XeTeX}{XeTeX}
+\newcommand*{\zrWDash}{\symbol{"301C}}% WAVE DASH
+\newcommand*{\zrNote}[1]{[#1]}
+\makeatletter
+\providecommand*\jsTocLine{\leaders\hbox{%
+ $\m@th \mkern \@dotsep mu\hbox{.}\mkern \@dotsep mu$}\hfill}
+\def\meta@font@select{\rmfamily\itshape}
+\makeatother
+\addtolength{\textwidth}{-1in}
+\addtolength{\evensidemargin}{1in}
+\addtolength{\oddsidemargin}{1in}
+\addtolength{\marginparwidth}{1in}
+\setlength\marginparpush{0pt}
+% \OnlyDescription
+\DisableCrossrefs
+\CodelineNumbered
+\setcounter{StandardModuleDepth}{1}
+\GetFileInfo{bxjscls.dtx}
+\begin{document}
+ \DocInput{bxjscls.dtx}
+\end{document}
+%</driver>
+% \end{macrocode}
+%
+% \fi
+%
+%^^A========================================================
+% \title{\Pkg{BXjscls} パッケージ\\
+% (BXJS文書クラス集)\\
+% ソースコード説明書}
+% \author{八登崇之\ (Takayuki YATO; aka.~``ZR''}
+% \date{\fileversion\quad[\filedate]}
+% \maketitle
+%
+% \MakeShortVerb{\|}
+%
+% \begin{ZRnote}
+% この文書はソースコード説明書です。
+% 一般の文書作成者向けの解説については、
+% ユーザマニュアル |bxjscls-manual.pdf| を参照してください。
+% \end{ZRnote}
+%
+% \tableofcontents
+%
+% \section{はじめに}
+%
+% \begin{ZRnote}
+% この文書は「BXJSドキュメントクラス」のDocStrip形式のソースである。
+% インストール時のモジュール指定は以下のようである。
+% \begin{quote}
+% \begin{tabular}{lll}
+% $\langle$\textsf{article}$\rangle$ & \texttt{bxjsarticle.cls}
+% & 短いレポート(章なし) \\
+% $\langle$\textsf{report}$\rangle$ & \texttt{bxjsreport.cls}
+% & 長いレポート(章あり) \\
+% $\langle$\textsf{book}$\rangle$ & \texttt{bxjsbook.cls}
+% & 書籍用 \\
+% $\langle$\textsf{slide}$\rangle$ & \texttt{bxjsslide.cls}
+% & スライド用 \\
+% \end{tabular}
+% \end{quote}
+%
+% 本ドキュメントクラスは奥村晴彦氏および日本語TeX開発コミュニティ
+% による「p\LaTeXe 新ドキュメントクラス」に改変を加えたものである。
+% 本ドキュメントクラスに関する説明は全てこの形式の枠の中に記す。
+% 枠の外にあるものは原版著者による原版に対する解説である。
+% \end{ZRnote}
+%
+% これは\LaTeX3 Projectの \texttt{classes.dtx} と
+% 株式会社アスキーの \texttt{jclasses.dtx} に基づいて
+% もともと奥村晴彦により作成されたものです。
+% 現在は日本語\TeX 開発コミュニティによりGitHubで管理されています。
+% \begin{quote}
+% |https://github.com/texjporg/jsclasses|
+% \end{quote}
+%
+% [2002-12-19] いろいろなものに収録していただく際にライセンスを明確にする
+% 必要が生じてきました。アスキーのものが最近はmodified BSDライセンスになっ
+% ていますので,私のものもそれに準じてmodified BSDとすることにします。
+%
+% [2016-07-13] 日本語\TeX 開発コミュニティによる管理に移行しました。
+%
+% [2009-02-22] 田中琢爾氏によるup\LaTeX 対応パッチを取り込みました。
+%
+% ここでは次のドキュメントクラス(スタイルファイル)を作ります。
+%
+% [2017-02-13] forum:2121の議論を機に,jsreportクラスを新設しました。
+% 従来のjsbookの |report| オプションと比べると,|abstract| 環境の使い方
+% および挙動がアスキーのjreportに近づきました。
+%
+% \begin{quote}
+% \begin{tabular}{lll}
+% $\langle$\textsf{article}$\rangle$ & \texttt{jsarticle.cls} & 論文・レポート用 \\
+% $\langle$\textsf{book}$\rangle$ & \texttt{jsbook.cls} & 書籍用 \\
+% $\langle$\textsf{report}$\rangle$ & \texttt{jsreport.cls} & レポート用 \\
+% $\langle$\textsf{jspf}$\rangle$ & \texttt{jspf.cls} & 某学会誌用 \\
+% $\langle$\textsf{kiyou}$\rangle$ & \texttt{kiyou.cls} & 某紀要用
+% \end{tabular}
+% \end{quote}
+%
+% \iffalse
+%
+% \LaTeXe あるいは\pLaTeXe 標準のドキュメントクラスとの違いを説明してお
+% きます。
+%
+% \paragraph{JISフォントメトリックの使用}
+%
+% ここでは和文TFM(\TeX フォントメトリック)として東京書籍印刷の小林肇さ
+% んの作られたJISフォントメトリック \texttt{jis.tfm},\texttt{jisg.tfm}
+% を標準で使います。従来のフォントメトリック \texttt{min10.tfm},
+% \texttt{goth10.tfm} の類を使うには
+% \begin{quote}
+% |\documentclass[mingoth]{jsarticle}|
+% \end{quote}
+% のように \texttt{mingoth} オプションを付けます。
+%
+% \paragraph{サイズオプションの扱いが違う}
+%
+% 標準のドキュメントクラスでは本文のポイント数を指定するオプションがあり
+% ましたが,ポイント数は10,11,12しかなく,それぞれ別のクラスオプション
+% ファイルを読み込むようになっていました。しかも,標準の10ポイント以外で
+% は多少フォントのバランスが崩れることがあり,あまり便利ではありませんで
+% した。ここでは文字サイズを増すとページを小さくし,\TeX の |\mag| プリ
+% ミティブで全体的に拡大するという手を使って,9ポイントや21,25,30,36,
+% 43ポイント,12Q,14Qの指定を可能にしています。
+% \fi
+%
+% \StopEventually{}
+%
+% 以下では実際のコードに即して説明します。
+% \begin{macrocode}
+%<*cls>
+%% このファイルは日本語文字を含みます.
+% \end{macrocode}
+%
+% \begin{macro}{\bxjs@clsname}
+%
+% 文書クラスの名前です。エラーメッセージ表示などで使われます。
+%
+% \begin{macrocode}
+%<article>\def\bxjs@clsname{bxjsarticle}
+%<book>\def\bxjs@clsname{bxjsbook}
+%<report>\def\bxjs@clsname{bxjsreport}
+%<slide>\def\bxjs@clsname{bxjsslide}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\ifjsc@needsp@tch}
+%
+% [2016-08-22] 従来\texttt{jsclasses}では,\pLaTeX や\LaTeX の
+% 不都合な点に対して,クラスファイル内で独自に対策を施していま
+% した。しかし,2016年以降,コミュニティ版\pLaTeX が次第に対策
+% コードをカーネル内に取り込むようになりました。そこで,新しい
+% \pLaTeX カーネルと衝突しないように,日付が古い場合だけパッチ
+% をあてる場合があります。この処理に使用するフラグを定義します。
+%
+% \begin{macrocode}
+\newif\ifjsc@needsp@tch
+\jsc@needsp@tchfalse
+% \end{macrocode}
+% \end{macro}
+%
+% \paragraph{BXJSクラス特有の設定 \ZRX}
+%
+% \mbox{}
+% \begin{ZRnote}
+% 長さ値の指定で式を利用可能にするため |calc| を読み込む。
+% \begin{macrocode}
+\RequirePackage{calc}
+% \end{macrocode}
+% クラスオプションでkey-value形式を使用するため |keyval| を読み込む。
+% \begin{macrocode}
+\RequirePackage{keyval}
+% \end{macrocode}
+% クラスの本体ではこの他に |geometry| パッケージが読み込まれる。
+% \TODO 依存パッケージの情報。
+%
+% 互換性のための補助パッケージを読み込む。
+% \begin{macrocode}
+\IfFileExists{bxjscompat.sty}{%
+ \let\jsAtEndOfClass\@gobble
+ \RequirePackage{bxjscompat}%
+}{}
+% \end{macrocode}
+%
+% \begin{macro}{\jsDocClass}
+% 〔トークン〕
+% 文書クラスの種別。
+% 以下の定値トークンの何れかと同等:
+% |\jsArticle|=bxjsarticle、
+% |\jsBook|=bxjsbook、
+% |\jsReport|=bxjsreport、
+% |\jsSlide|=bxjsslide。
+% \begin{macrocode}
+\let\jsArticle=a
+\let\jsBook=b
+\let\jsReport=r
+\let\jsSlide=s
+%<article>\let\jsDocClass\jsArticle
+%<book>\let\jsDocClass\jsBook
+%<report>\let\jsDocClass\jsReport
+%<slide>\let\jsDocClass\jsSlide
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\jsEngine}
+% 〔暗黙文字トークン〕
+% エンジン({\TeX}の種類)の種別:
+% |j|={\pTeX}系、
+% |x|={\XeTeX}、
+% |p|=pdf{\TeX}(含DVIモード)、
+% |l|=Lua{\TeX}、
+% |J|=NTT j{\TeX}、
+% |O|=Omega系、
+% |n|=以上の何れでもない。
+%
+% \begin{macrocode}
+\let\jsEngine=n
+\def\bxjs@test@engine#1#2{%
+ \edef\bxjs@tmpa{\string#1}%
+ \edef\bxjs@tmpb{\meaning#1}%
+ \ifx\bxjs@tmpa\bxjs@tmpb #2\fi}
+\bxjs@test@engine\kanjiskip{\let\jsEngine=j}
+\bxjs@test@engine\jintercharskip{\let\jsEngine=J}
+\bxjs@test@engine\Omegaversion{\let\jsEngine=O}
+\bxjs@test@engine\XeTeXversion{\let\jsEngine=x}
+\bxjs@test@engine\pdftexversion{\let\jsEngine=p}
+\bxjs@test@engine\luatexversion{\let\jsEngine=l}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\ifjsWithupTeX}
+% 〔スイッチ〕
+% エンジンが(内部漢字コードがUnicodeの){\upTeX}であるか。
+% \begin{macrocode}
+\newif\ifjsWithupTeX
+\ifx\ucs\@undefined\else \ifnum\ucs"3000="3000
+ \jsWithupTeXtrue
+\fi\fi
+\let\if@jsc@uplatex\ifjsWithupTeX
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\ifjsWithpTeXng}
+% 〔スイッチ〕
+% エンジンが{\pTeX-ng}であるか。
+% \begin{macrocode}
+\newif\ifjsWithpTeXng
+\bxjs@test@engine\ngbanner{\jsWithpTeXngtrue}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\ifjsWitheTeX}
+% 〔スイッチ〕
+% エンジンが{\eTeX}拡張をもつか。
+% \begin{macrocode}
+\newif\ifjsWitheTeX
+\bxjs@test@engine\eTeXversion{\jsWitheTeXtrue}
+% \end{macrocode}
+% \end{macro}
+%
+% 非サポートのエンジンの場合は強制終了させる。
+% \Note NTT j{\TeX}とOmega系。
+% \begin{macrocode}
+\let\bxjs@tmpa\relax
+\ifx J\jsEngine \def\bxjs@tmpa{NTT-jTeX}\fi
+\ifx O\jsEngine \def\bxjs@tmpa{Omega}\fi
+\ifx\bxjs@tmpa\relax \expandafter\@gobble
+\else
+ \ClassError\bxjs@clsname
+ {The engine in use (\bxjs@tmpa) is not supported}
+ {It's a fatal error. I'll quit right now.}
+ \expandafter\@firstofone
+\fi{\endinput\@@end}
+% \end{macrocode}
+%
+% Lua{\TeX}の場合、本クラス用のLuaモジュールを用意する。
+% \begin{macrocode}
+\ifx l\jsEngine
+ \directlua{ bxjs = {} }
+\fi
+% \end{macrocode}
+%
+% \begin{macro}{\bxjs@protected}
+% {\eTeX}拡張が有効な場合にのみ |\protected|
+% の効果をもつ。
+% \begin{macrocode}
+\ifjsWitheTeX \let\bxjs@protected\protected
+\else \let\bxjs@protected\@empty
+\fi
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\bxjs@robust@def}
+% 無引数の頑強な命令を定義する。
+% \begin{macrocode}
+\ifjsWitheTeX
+ \def\bxjs@robust@def{\protected\def}
+\else
+ \def\bxjs@robust@def{\DeclareRobustCommand*}
+\fi
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\ifjsInPdfMode}
+% 〔スイッチ〕
+% pdf{\TeX}/Lua{\TeX}がPDFモードで動作しているか。
+% \Note Lua{\TeX} 0.8x版でのプリミティブ名変更に対応。
+% \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@TUenc}
+% 〔スイッチ〕
+% {\LaTeX}の既定のフォントエンコーディングがTUであるか。
+% \Note 2017年1月以降の{\LaTeX}カーネルにおいて
+% 「Unicodeを表す{\LaTeX}公式のフォントエンコーディング」
+% である“TU”が導入され、
+% これ以降の{\LaTeX}を{\XeTeX}またはLua{\TeX}で動かしている場合は、
+% 既定のエンコーディングがTUになる。
+% それ以外の場合は、既定のエンコーディングはOT1である。
+% \begin{macrocode}
+\newif\ifbxjs@TUenc
+\def\bxjs@tmpa{TU}\edef\bxjs@tmpb{\f@encoding}
+\ifx\bxjs@tmpa\bxjs@tmpb
+ \bxjs@TUenctrue
+\fi
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\bxjs@cond}
+% |\bxjs@cond\ifXXX|……|\fi{|\Meta{真}|}{|\Meta{偽}|}|\par
+% {\TeX}のif-文(|\ifXXX|……\Meta{真}|\else|\Meta{偽}|\fi|)を
+% 末尾呼出形式に変換するためのマクロ。
+% \begin{macrocode}
+\@gobbletwo\if\if \def\bxjs@cond#1\fi{%
+ #1\expandafter\@firstoftwo
+ \else\expandafter\@secondoftwo
+ \fi}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\bxjs@cslet}
+% |\bxjs@cslet{|\Meta{名前1}|}\制御綴|\Means
+% \begin{macrocode}
+\def\bxjs@cslet#1{%
+ \expandafter\let\csname#1\endcsname}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\bxjs@csletcs}
+% |\bxjs@csletcs{|\Meta{名前1}|}{|\Meta{名前2}|}|\Means
+% \begin{macrocode}
+\def\bxjs@csletcs#1#2{%
+ \expandafter\let\csname#1\expandafter\endcsname\csname#2\endcsname}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\bxjs@catopt}
+% |\bxjs@catopt{|\Meta{文字列1}|}{|\Meta{文字列2}|}|\Means
+% 2つの文字列を |,| で繋いだ文字列。
+% ただし片方が空の場合は |,| を入れない。
+% 完全展開可能。
+% \begin{macrocode}
+\def\bxjs@catopt#1#2{%
+ #1\if\relax#1\relax\else\if\relax#2\relax\else,\fi\fi#2}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\bxjs@ifplus}
+% |\@ifstar| の |+| 版。
+% \begin{macrocode}
+\def\bxjs@ifplus#1{\@ifnextchar+{\@firstoftwo{#1}}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\bxjs@gset@tempcnta}
+% |calc| の整数式を用いて |\@tempcnta| の値を設定する。
+% \begin{macrocode}
+\let\c@bxjs@tempcnta\@tempcnta
+\def\bxjs@gset@tempcnta{\setcounter{bxjs@tempcnta}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\jsSetQHLength}
+% |\jsSetQHLength\CS{|\Meta{長さ式}|}|\Means
+% |\setlength| の変種で、通常の |calc| の長さ式の代わりに、
+% 「|Q|/|H|/|trueQ|/|trueH|/|zw|/|zh| の単位付きの実数」
+% が記述できる(この場合は式は使えない)。
+% \begin{macrocode}
+\def\jsSetQHLength#1#2{%
+ \begingroup
+ \bxjs@parse@qh{#2}%
+ \ifx\bxjs@tmpb\relax
+ \setlength\@tempdima{#2}%
+ \xdef\bxjs@g@tmpa{\the\@tempdima}%
+ \else \global\let\bxjs@g@tmpa\bxjs@tmpb
+ \fi
+ \endgroup
+ #1=\bxjs@g@tmpa\relax}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\bxjs@parse@qh}
+% |#1| が |Q|/|H|/|trueQ|/|trueH|/|zw|/|zh| で終わる場合、
+% 単位用の寸法値マクロ |\bxjs@unit@XXX| が定義済なら、
+% |\bxjs@tmpb| に |#1| に等しい寸法の表現を返し、
+% そうでないならエラーを出す。
+% それ以外では、|\bxjs@tmpb| は |\relax| になる。
+% \Note {(u)\pLaTeX}の場合はこれらの和文単位はエンジンでサポートされる。
+% しかし和文フォントの設定が完了するまでは |zw|/|zh| の値は正しくない。
+% \begin{macrocode}
+\if j\jsEngine \def\bxjs@parse@qh@units{zw,zh}
+\else \def\bxjs@parse@qh@units{trueQ,trueH,Q,H,zw,zh}
+\fi
+\def\bxjs@parse@qh#1{%
+ \let\bxjs@tmpb\relax
+ \@for\bxjs@tmpa:=\bxjs@parse@qh@units\do{%
+ \ifx\bxjs@tmpb\relax
+ \edef\bxjs@next{{\bxjs@tmpa}{#1}}%
+ \expandafter\bxjs@parse@qh@a\csname bxjs@unit@\bxjs@tmpa\expandafter
+ \endcsname\bxjs@next
+ \fi}}
+\def\bxjs@parse@qh@a#1#2#3{%
+ \def\bxjs@next##1#2\@nil##2\@nnil{\bxjs@parse@qh@b{##1}{##2}#1}%
+ \bxjs@next#3\@nil#2\@nil\@nnil}
+\def\bxjs@parse@qh@b#1#2#3{%
+ \ifx\@nnil#2\@nnil\else
+ \ifx#3\relax
+ \ClassError\bxjs@clsname
+ {You cannot use '\bxjs@tmpa' here}{\@ehc}%
+ \def\bxjs@tmpb{0pt}%
+ \else
+ \@tempdimb#3\relax \@tempdimb#1\@tempdimb
+ \edef\bxjs@tmpb{\the\@tempdimb}%
+ \fi
+ \fi}
+% \end{macrocode}
+% 今の段階では |Q|/|H| だけが使用可能。
+% \begin{macrocode}
+ \def\bxjs@unit@Q{0.25mm}\let\bxjs@unit@H\bxjs@unit@Q
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\bxjs@begin@document@hook}
+% BXJSクラス用の文書本体開始時フック。
+% \begin{macrocode}
+\@onlypreamble\bxjs@begin@document@hook
+\let\bxjs@begin@document@hook\@empty
+\AtBeginDocument{\bxjs@begin@document@hook}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\bxjs@post@option@hook}
+% |\ProcessOptions| 直後に実行されるフック。
+% \begin{macrocode}
+\@onlypreamble\bxjs@post@option@hook
+\let\bxjs@post@option@hook\@empty
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\bxjs@pre@jadriver@hook}
+% 和文ドライバ読込直前に実行されるフック。
+% \begin{macrocode}
+\@onlypreamble\bxjs@pre@jadriver@hook
+\let\bxjs@pre@jadriver@hook\@empty
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\jsAtEndOfClass}
+% このクラスの読込終了時に対するフック。
+% (補助パッケージ中で用いられる。)
+% \begin{macrocode}
+\def\jsAtEndOfClass{%
+ \expandafter\g@addto@macro\csname\bxjs@clsname.cls-h@@k\endcsname}
+% \end{macrocode}
+% \end{macro}
+%
+% 一時的な手続き用の制御綴。
+% \begin{macrocode}
+\@onlypreamble\bxjs@tmpdo
+\@onlypreamble\bxjs@tmpdo@a
+\@onlypreamble\bxjs@tmpdo@b
+\@onlypreamble\bxjs@tmpdo@c
+\@onlypreamble\bxjs@tmpdo@d
+% \end{macrocode}
+%
+% Lua\TeX の場合、原版のコード中のコントロールワード中に現れる
+% 日本語文字のカテゴリコードを一時的に11に変更する。
+% クラス読込終了時点で元に戻される。
+% \Note 現在の{Lua\LaTeX}では、漢字のカテゴリコードは最初から11に
+% なっているので、この処理は特段の意味を持たない。
+% しかし、昔は12になっていて、この場合、日本語文字の
+% コントロールワードの命令を使用するには、カテゴリコードを11に
+% 変更する必要がある。
+% \begin{macrocode}
+\if l\jsEngine
+\def\bxjs@tmpdo#1{%
+ \xdef\bxjs@pre@jadriver@hook{%
+ \bxjs@pre@jadriver@hook
+ \catcode`#1=\the\catcode`#1\relax}%
+ \catcode`#1=11\relax}
+\@tfor\bxjs@tmpa:=和西暦\do
+ {\expandafter\bxjs@tmpdo\bxjs@tmpa}
+\fi
+% \end{macrocode}
+%
+% |\jsInhibitGlue| は |\inhibitglue| が定義されていればそれを
+% 実行し、未定義ならば何もしない。
+% \begin{macrocode}
+\bxjs@robust@def\jsInhibitGlue{%
+ \ifx\inhibitglue\@undefined\else \inhibitglue \fi}
+% \end{macrocode}
+%
+% 万が一「2.09互換モード」になっていた場合は、
+% これ以上進むと危険なので強制終了させる。
+% \begin{macrocode}
+\if@compatibility
+ \ClassError\bxjs@clsname
+ {Something went chaotic!\MessageBreak
+ (How come '\string\documentstyle' is there?)\MessageBreak
+ I cannot go a single step further...}
+ {If the chant of '\string\documentstyle' was just a blunder of yours,\MessageBreak
+ then there'll still be hope....}
+ \expandafter\@firstofone
+\else \expandafter\@gobble
+\fi{\typeout{Farewell!}\endinput\@@end}
+% \end{macrocode}
+%
+% \end{ZRnote}
+%
+% \section{オプション}
+%
+% これらのクラスは |\documentclass{jsarticle}|
+% あるいは |\documentclass[オプション]{jsarticle}|
+% のように呼び出します。
+%
+% まず,オプションに関連するいくつかのコマンドやスイッチ(論理変数)を定
+% 義します。
+%
+% \begin{macro}{\if@restonecol}
+%
+% 段組のときに真になる論理変数です。
+%
+% \begin{macrocode}
+\newif\if@restonecol
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\if@titlepage}
+%
+% これを真にすると表題,概要を独立したページに出力します。
+%
+% \begin{macrocode}
+\newif\if@titlepage
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\if@openright}
+%
+% |\chapter|,|\part| を右ページ起こしにするかどうかです。
+% 横組の書籍では真が標準で,要するに片起こし,奇数ページ起こしになります。
+%
+% \begin{macrocode}
+%<book|report>\newif\if@openright
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\if@openleft}
+%
+% [2017-02-24] |\chapter|,|\part| を左ページ起こしにするかどうかです。
+%
+% \begin{macrocode}
+%<book|report>\newif\if@openleft
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\if@mainmatter}
+%
+% 真なら本文,偽なら前付け・後付けです。
+% 偽なら |\chapter| で章番号が出ません。
+%
+% \begin{ZRnote}
+% BXJSではreport系でも定義されることに注意。
+% \end{ZRnote}
+% \begin{macrocode}
+%<book|report>\newif\if@mainmatter \@mainmattertrue
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\if@enablejfam}
+%
+% 和文フォントを数式フォントとして登録するかどうかを示すスイッチです。
+%
+% \begin{ZRnote}
+% JSクラスと異なり、初期値は偽とする。
+% \end{ZRnote}
+% \begin{macrocode}
+\newif\if@enablejfam \@enablejfamfalse
+% \end{macrocode}
+% \end{macro}
+%
+% 以下で各オプションを宣言します。
+%
+% \paragraph{用紙サイズ}
+%
+% JISやISOのA0判は面積 $1\,\mathrm{m}^2$,縦横比 $1:\sqrt{2}$
+% の長方形の辺の長さを mm 単位に切り捨てたものです。
+% これを基準として順に半截しては mm 単位に切り捨てたものがA1,A2,…です。
+%
+% B判はJISとISOで定義が異なります。
+% JISではB0判の面積が $1.5\,\mathrm{m}^2$ ですが,
+% ISOではB1判の辺の長さがA0判とA1判の辺の長さの幾何平均です。
+% したがってISOのB0判は $1000\,\mathrm{mm} \times 1414\,\mathrm{mm}$ です。
+% このため,\LaTeXe の \texttt{b5paper}
+% は $250\,\mathrm{mm} \times 176\,\mathrm{mm}$ ですが,
+% \pLaTeXe の \texttt{b5paper}
+% は $257\,\mathrm{mm} \times 182\,\mathrm{mm}$ になっています。
+% ここでは\pLaTeXe にならってJISに従いました。
+%
+% デフォルトは \texttt{a4paper} です。
+%
+% \texttt{b5var}(B5変形,182mm×230mm),
+% \texttt{a4var}(A4変形,210mm×283mm)を追加しました。
+%
+% \begin{ZRnote}
+% BXJSクラスではページレイアウト設定に |geometry| パッケージを用いる。
+% 用紙サイズ設定は |geometry| に渡すオプションの指定と扱われる。
+% \begin{macrocode}
+\@onlypreamble\bxjs@setpaper
+\def\bxjs@setpaper#1{\def\bxjs@param@paper{#1}}
+\DeclareOption{a3paper}{\bxjs@setpaper{a3paper}}
+\DeclareOption{a4paper}{\bxjs@setpaper{a4paper}}
+\DeclareOption{a5paper}{\bxjs@setpaper{a5paper}}
+\DeclareOption{a6paper}{\bxjs@setpaper{a6paper}}
+\DeclareOption{b4paper}{\bxjs@setpaper{{257truemm}{364truemm}}}
+\DeclareOption{b5paper}{\bxjs@setpaper{{182truemm}{257truemm}}}
+\DeclareOption{b6paper}{\bxjs@setpaper{{128truemm}{182truemm}}}
+\DeclareOption{a4j}{\bxjs@setpaper{a4paper}}
+\DeclareOption{a5j}{\bxjs@setpaper{a5paper}}
+\DeclareOption{b4j}{\bxjs@setpaper{{257truemm}{364truemm}}}
+\DeclareOption{b5j}{\bxjs@setpaper{{182truemm}{257truemm}}}
+\DeclareOption{a4var}{\bxjs@setpaper{{210truemm}{283truemm}}}
+\DeclareOption{b5var}{\bxjs@setpaper{{182truemm}{230truemm}}}
+% \end{macrocode}
+% \Note |...var| をPandocで使えるように後ろに |paper| をつけた形を用意する。
+% \begin{macrocode}
+\DeclareOption{a4varpaper}{\bxjs@setpaper{{210truemm}{283truemm}}}
+\DeclareOption{b5varpaper}{\bxjs@setpaper{{182truemm}{230truemm}}}
+\DeclareOption{letterpaper}{\bxjs@setpaper{letterpaper}}
+\DeclareOption{legalpaper}{\bxjs@setpaper{legalpaper}}
+\DeclareOption{executivepaper}{\bxjs@setpaper{executivepaper}}
+% \end{macrocode}
+% \end{ZRnote}
+%
+% \paragraph{横置き}
+%
+% 用紙の縦と横の長さを入れ換えます。
+%
+% \begin{macrocode}
+\newif\if@landscape
+\@landscapefalse
+\DeclareOption{landscape}{\@landscapetrue}
+% \end{macrocode}
+%
+% \paragraph{slide}
+%
+% オプション \texttt{slide} を新設しました。
+%
+% [2016-10-08] \texttt{slide} オプションは article 以外では使い物にならなかったので,
+% 簡単のため article のみで使えるオプションとしました。
+%
+% \begin{macrocode}
+\newif\if@slide
+% \end{macrocode}
+%
+% \begin{ZRnote}
+% BXJSではスライド用のクラス |bxjsslide| を用意しているので、
+% 本来はこのスイッチは不要なはずである。
+% しかし、JSクラスの一部のコードをそのまま使うために保持している。
+% \Note この |\if@slide| という制御綴は、ユニークでないにも関わらず、
+% 衝突した場合に正常動作が保たれない、という問題を抱えている。
+% \begin{macrocode}
+%<!slide>\@slidefalse
+%<slide>\@slidetrue
+% \end{macrocode}
+% \end{ZRnote}
+%
+% \paragraph{サイズオプション}
+%
+% 10pt,11pt,12pt のほかに,8pt,9pt,14pt,17pt,21pt,25pt,30pt,36pt,43pt を追加しました。
+% これは等比数列になるように選んだものです(従来の 20pt も残しました)。
+% |\@ptsize| の定義が変だったのでご迷惑をおかけしましたが,
+% 標準的なドキュメントクラスと同様にポイント数から10を引いたものに直しました。
+%
+% [2003-03-22] 14Qオプションを追加しました。
+%
+% [2003-04-18] 12Qオプションを追加しました。
+%
+% [2016-07-08] |\mag| を使わずに各種寸法をスケールさせるためのオプション \texttt{nomag} を新設しました。
+% \texttt{usemag} オプションの指定で従来通りの動作となります。デフォルトは \texttt{usemag} です。
+%
+% [2016-07-24] オプティカルサイズを調整するためにNFSSへパッチを当てるオプション \texttt{nomag*} を新設しました。
+%
+% \begin{ZRnote}
+% |\@ptsize| は |10pt|, |11pt|, |12pt| が指定された時のみ従来と同じ値とし、
+% それ以外は |\jsUnusualPtSize|(= $-20$)にする。
+%
+% \begin{macrocode}
+\newcommand{\@ptsize}{0}
+\def\bxjs@param@basefontsize{10pt}
+\def\jsUnusualPtSize{-20}
+% \end{macrocode}
+%
+% \begin{macro}{\bxjs@setbasefontsize}
+% 基底フォントサイズを実際に変更する。
+% \begin{macrocode}
+\def\bxjs@setbasefontsize#1{%
+% \end{macrocode}
+% Q単位の長さ指定をサポートするため |\jsSetQHLength| を使う。
+% \Note クラスオプションのトークン列の中に展開可能なトークンが
+% ある場合、{\LaTeX}はクラスファイルの読込の前にそれを展開しようとする。
+% このため、この位置で |\jQ| をサポートすることは
+% 原理的に不可能である。
+% \begin{macrocode}
+ \jsSetQHLength\@tempdima{#1}%
+ \edef\bxjs@param@basefontsize{\the\@tempdima}%
+ \ifdim\@tempdima=10pt \long\def\@ptsize{0}%
+ \else\ifdim\@tempdima=10.95pt \long\def\@ptsize{1}%
+ \else\ifdim\@tempdima=12pt \long\def\@ptsize{2}%
+ \else \long\edef\@ptsize{\jsUnusualPtSize}\fi\fi\fi}
+% \end{macrocode}
+% \end{macro}
+%
+% |\ifjsc@mag| は「|\mag| を使うか」を表すスイッチ。
+%
+% |\ifjsc@mag@xreal| は「NFSSにパッチを当てるか」を表すスイッチ。
+% \begin{macrocode}
+\newif\ifjsc@mag
+\newif\ifjsc@mag@xreal
+%\let\jsc@magscale\@undefined
+% \end{macrocode}
+%
+% \begin{macrocode}
+\DeclareOption{8pt}{\bxjs@setbasefontsize{8pt}}
+\DeclareOption{9pt}{\bxjs@setbasefontsize{9pt}}
+\DeclareOption{10pt}{\bxjs@setbasefontsize{10pt}}
+\DeclareOption{11pt}{\bxjs@setbasefontsize{10.95pt}}
+\DeclareOption{12pt}{\bxjs@setbasefontsize{12pt}}
+\DeclareOption{14pt}{\bxjs@setbasefontsize{14.4pt}}
+\DeclareOption{17pt}{\bxjs@setbasefontsize{17.28pt}}
+\DeclareOption{20pt}{\bxjs@setbasefontsize{20pt}}
+\DeclareOption{21pt}{\bxjs@setbasefontsize{20.74pt}}
+\DeclareOption{25pt}{\bxjs@setbasefontsize{24.88pt}}
+\DeclareOption{30pt}{\bxjs@setbasefontsize{29.86pt}}
+\DeclareOption{36pt}{\bxjs@setbasefontsize{35.83pt}}
+\DeclareOption{43pt}{\bxjs@setbasefontsize{43pt}}
+\DeclareOption{12Q}{\bxjs@setjbasefontsize{3mm}}
+\DeclareOption{14Q}{\bxjs@setjbasefontsize{3.5mm}}
+\DeclareOption{10ptj}{\bxjs@setjbasefontsize{10pt}}
+\DeclareOption{10.5ptj}{\bxjs@setjbasefontsize{10.5pt}}
+\DeclareOption{11ptj}{\bxjs@setjbasefontsize{11pt}}
+\DeclareOption{12ptj}{\bxjs@setjbasefontsize{12pt}}
+% \end{macrocode}
+%
+% JSクラス互換のmagstyle設定オプション。
+% \begin{macrocode}
+\DeclareOption{usemag}{\let\bxjs@magstyle\bxjs@magstyle@usemag}
+\DeclareOption{nomag}{\let\bxjs@magstyle\bxjs@magstyle@nomag}
+\DeclareOption{nomag*}{\let\bxjs@magstyle\bxjs@magstyle@xreal}
+% \end{macrocode}
+%
+% \end{ZRnote}
+%
+% \paragraph{トンボオプション}
+%
+% トンボ(crop marks)を出力します。
+% 実際の処理は\pLaTeXe 本体で行います(\texttt{plcore.dtx} 参照)。
+% オプション \texttt{tombow} で日付付きのトンボ,
+% オプション \texttt{tombo} で日付なしのトンボを出力します。
+% これらはアスキー版のままです。
+% カウンタ |\hour|,|\minute| はp\LaTeXe 本体で宣言されています。
+%
+% \begin{ZRnote}
+% 取りあえず、{\pTeX}系の場合に限り、JSクラスのトンボ関連の
+% コードをそのまま活かしておく。
+% 正常に動作する保証はない。
+% \end{ZRnote}
+% \begin{macrocode}
+\if j\jsEngine
+\hour\time \divide\hour by 60\relax
+\@tempcnta\hour \multiply\@tempcnta 60\relax
+\minute\time \advance\minute-\@tempcnta
+\DeclareOption{tombow}{%
+ \tombowtrue \tombowdatetrue
+ \setlength{\@tombowwidth}{.1\p@}%
+ \@bannertoken{%
+ \jobname\space(\number\year-\two@digits\month-\two@digits\day
+ \space\two@digits\hour:\two@digits\minute)}%
+ \maketombowbox}
+\DeclareOption{tombo}{%
+ \tombowtrue \tombowdatefalse
+ \setlength{\@tombowwidth}{.1\p@}%
+ \maketombowbox}
+\fi
+% \end{macrocode}
+%
+% \paragraph{面付け}
+%
+% オプション \texttt{mentuke} で幅ゼロのトンボを出力します。
+% 面付けに便利です。これもアスキー版のままです。
+%
+% \begin{macrocode}
+\if j\jsEngine
+\DeclareOption{mentuke}{%
+ \tombowtrue \tombowdatefalse
+ \setlength{\@tombowwidth}{\z@}%
+ \maketombowbox}
+\fi
+% \end{macrocode}
+%
+% \paragraph{両面,片面オプション}
+%
+% \texttt{twoside} で奇数ページ・偶数ページのレイアウトが変わります。
+%
+% [2003-04-29] \texttt{vartwoside} でどちらのページも傍注が右側になります。
+%
+% \begin{macrocode}
+\DeclareOption{oneside}{\@twosidefalse \@mparswitchfalse}
+\DeclareOption{twoside}{\@twosidetrue \@mparswitchtrue}
+\DeclareOption{vartwoside}{\@twosidetrue \@mparswitchfalse}
+% \end{macrocode}
+%
+% \paragraph{二段組}
+%
+% \texttt{twocolumn} で二段組になります。
+%
+% \begin{macrocode}
+\DeclareOption{onecolumn}{\@twocolumnfalse}
+\DeclareOption{twocolumn}{\@twocolumntrue}
+% \end{macrocode}
+%
+% \paragraph{表題ページ}
+%
+% \texttt{titlepage} で表題・概要を独立したページに出力します。
+%
+% \begin{macrocode}
+\DeclareOption{titlepage}{\@titlepagetrue}
+\DeclareOption{notitlepage}{\@titlepagefalse}
+% \end{macrocode}
+%
+% \paragraph{右左起こし}
+%
+% 書籍では章は通常は奇数ページ起こしになりますが,横組ではこれを
+% \texttt{openright} と表すことにしてあります。
+% \texttt{openany} で偶数ページからでも始まるようになります。
+%
+% [2017-02-24] \texttt{openright} は横組では奇数ページ起こし,縦組では
+% 偶数ページ起こしを表します。ややこしいですが,これは\LaTeX の標準クラスが
+% 西欧の横組事情しか考慮せずに,奇数ページ起こしと右起こしを一緒にしてしまっ
+% たせいです。縦組での奇数ページ起こしと横組での偶数ページ起こしも表現したい
+% ので,jsclassesでは新たに \texttt{openleft} も追加しました。
+%
+% \begin{macrocode}
+%<book|report>\DeclareOption{openright}{\@openrighttrue\@openleftfalse}
+%<book|report>\DeclareOption{openleft}{\@openlefttrue\@openrightfalse}
+%<book|report>\DeclareOption{openany}{\@openrightfalse\@openleftfalse}
+% \end{macrocode}
+%
+% \paragraph{eqnarray環境と数式の位置}
+%
+% 森本さんのご教示にしたがって前に移動しました。
+%
+% \begin{environment}{eqnarray}
+%
+% \LaTeX の |eqnarray| 環境では |&| でできるアキが大きすぎる
+% ようですので,少し小さくします。
+% また,中央の要素も |\displaystyle| にします。
+%
+% \begin{macrocode}
+\def\eqnarray{%
+ \stepcounter{equation}%
+ \def\@currentlabel{\p@equation\theequation}%
+ \global\@eqnswtrue
+ \m@th
+ \global\@eqcnt\z@
+ \tabskip\@centering
+ \let\\\@eqncr
+ $$\everycr{}\halign to\displaywidth\bgroup
+ \hskip\@centering$\displaystyle\tabskip\z@skip{##}$\@eqnsel
+ &\global\@eqcnt\@ne \hfil$\displaystyle{{}##{}}$\hfil
+ &\global\@eqcnt\tw@ $\displaystyle{##}$\hfil\tabskip\@centering
+ &\global\@eqcnt\thr@@ \hb@xt@\z@\bgroup\hss##\egroup
+ \tabskip\z@skip
+ \cr}
+% \end{macrocode}
+% \end{environment}
+%
+% \texttt{leqno} で数式番号が左側になります。
+% \texttt{fleqn} で数式が本文左端から一定距離のところに出力されます。
+% 森本さんにしたがって訂正しました。
+%
+% \begin{macrocode}
+\DeclareOption{leqno}{\input{leqno.clo}}
+\DeclareOption{fleqn}{\input{fleqn.clo}%
+% fleqn用のeqnarray環境の再定義
+ \def\eqnarray{%
+ \stepcounter{equation}%
+ \def\@currentlabel{\p@equation\theequation}%
+ \global\@eqnswtrue\m@th
+ \global\@eqcnt\z@
+ \tabskip\mathindent
+ \let\\=\@eqncr
+ \setlength\abovedisplayskip{\topsep}%
+ \ifvmode
+ \addtolength\abovedisplayskip{\partopsep}%
+ \fi
+ \addtolength\abovedisplayskip{\parskip}%
+ \setlength\belowdisplayskip{\abovedisplayskip}%
+ \setlength\belowdisplayshortskip{\abovedisplayskip}%
+ \setlength\abovedisplayshortskip{\abovedisplayskip}%
+ $$\everycr{}\halign to\linewidth% $$
+ \bgroup
+ \hskip\@centering$\displaystyle\tabskip\z@skip{##}$\@eqnsel
+ &\global\@eqcnt\@ne \hfil$\displaystyle{{}##{}}$\hfil
+ &\global\@eqcnt\tw@
+ $\displaystyle{##}$\hfil \tabskip\@centering
+ &\global\@eqcnt\thr@@ \hb@xt@\z@\bgroup\hss##\egroup
+ \tabskip\z@skip\cr
+ }}
+% \end{macrocode}
+%
+% \paragraph{文献リスト}
+%
+% 文献リストをopen形式(著者名や書名の後に改行が入る)で出力します。
+% これは使われることはないのでコメントアウトしてあります。
+%
+% \begin{macrocode}
+% \DeclareOption{openbib}{%
+% \AtEndOfPackage{%
+% \renewcommand\@openbib@code{%
+% \advance\leftmargin\bibindent
+% \itemindent -\bibindent
+% \listparindent \itemindent
+% \parsep \z@}%
+% \renewcommand\newblock{\par}}}
+% \end{macrocode}
+%
+% \paragraph{数式フォントとして和文フォントを登録しないオプション}
+%
+% 数式中では16通りのフォントしか使えません。
+% AMSFontsや \texttt{mathptmx} パッケージを使って数式フォントを
+% たくさん使うと ``Too many math alphabets \ldots'' というエラーが
+% 起こってしまいます。\texttt{disablejfam} オプションを付ければ,
+% 明朝・ゴシックを数式用フォントとして登録するのをやめますので,
+% 数式用フォントが二つ節約できます。
+% いずれにしても |\textmc| や |\mbox| や \texttt{amsmath}
+% パッケージの |\text| を使えば数式中で和文フォントが使えますので,
+% この新ドキュメントクラスでは標準で和文フォントを数式用に登録
+% しないことにしていたのですが,従来のドキュメントクラスの仕様に
+% 合わせることにしました。
+%
+% \begin{ZRnote}
+% \begin{macro}{\bxjs@enablejfam}
+% 〔暗黙文字トークン〕
+% |enablejfam| オプションの状態:
+% \begin{macrocode}
+%\let\bxjs@enablejfam\@undefined
+% \end{macrocode}
+% \end{macro}
+%
+% |enablejfam| オプションの処理。
+% \begin{macrocode}
+\def\bxjs@kv@enablejfam@true{\let\bxjs@enablejfam=t}
+\def\bxjs@kv@enablejfam@false{\let\bxjs@enablejfam=f}
+\def\bxjs@kv@enablejfam@default{\let\bxjs@enablejfam\@undefined}
+\define@key{bxjs}{enablejfam}[true]{%
+ \bxjs@set@keyval{enablejfam}{#1}{}}
+% \end{macrocode}
+%
+% JSクラスとの互換のため |disablejfam| オプションを定義する。
+% \begin{macrocode}
+\DeclareOption{disablejfam}{\let\bxjs@enablejfam=f}
+% \end{macrocode}
+%
+% \Note 実際に何らかの設定を行うのは和文ドライバである。
+% 和文ドライバとエンジンの組合せにより、|enablejfam| が |default| である
+% 場合に「数式和文ファミリ」が有効と無効の選択は異なるし、またそもそも
+% 有効と無効の一方しか選択できない場合もある。
+%
+% \end{ZRnote}
+%
+% \paragraph{ドラフト}
+%
+% \texttt{draft} でoverfull boxの起きた行末に5ptの罫線を引きます。
+%
+% [2016-07-13] |\ifdraft| を定義するのをやめました。
+%
+% \begin{ZRnote}
+% \begin{macro}{\ifjsDraft}
+% JSクラスは |\ifdraft| という公開名のスイッチを用いているが、
+% これは |ifdraft| パッケージと衝突するので、代わりに |\ifjsDraft|
+% の名前を用い、本文開始時に |\ifdraft| が未定義の場合に限り、
+% |\ifjsDraft| を |\ifdraft| にコピーする処理にする。
+% \Note JSクラスの |\ifdraft| が廃止されたので、
+% |\ifdraft| は2.0版で廃止を予定する。
+% \begin{macrocode}
+\let\ifjsDraft\iffalse
+\@onlypreamble\bxjs@draft
+\def\bxjs@draft#1{%
+ \expandafter\let\expandafter\ifjsDraft\csname if#1\endcsname}
+\DeclareOption{draft}{\bxjs@draft{true}\setlength\overfullrule{5pt}}
+\DeclareOption{final}{\bxjs@draft{false}\setlength\overfullrule{0pt}}
+\g@addto@macro\bxjs@begin@document@hook{%
+ \expandafter\ifx\csname ifdraft\endcsname\relax
+ \expandafter\let\csname ifdraft\expandafter\endcsname
+ \csname ifjsDraft\endcsname
+ \fi}
+% \end{macrocode}
+% \end{macro}
+% \end{ZRnote}
+%
+% \paragraph{和文フォントメトリックの選択}
+%
+% このクラスファイルでは,和文TFMとして東京書籍印刷の小林肇さんの
+% 作られたJISフォントメトリック(\texttt{jis},\texttt{jisg})
+% を標準で使うことにしますが,
+% 従来の \texttt{min10},\texttt{goth10} などを使いたいときは
+% \texttt{mingoth} というオプションを指定します。
+% また,\texttt{winjis} オプションで \texttt{winjis} メトリック
+% (OTFパッケージと同じpsitauさん作;ソースに書かれたWindowsの
+% 機種依存文字がdvips, dvipdfmxなどで出力出来るようになる)が使えます。
+%
+% [2018-02-04] \texttt{winjis} オプションはコッソリ削除しました。
+% 代替として,同等なものをパッケージ化(winjis.sty)して,
+% GitHubにはコッソリ置いておきます。
+%
+% \begin{ZRnote}
+% BXJSクラスではここは和文ドライバの管轄。
+% \end{ZRnote}
+%
+% \paragraph{papersizeスペシャルの利用}
+%
+% dvipsやdvioutで用紙設定を自動化するには
+% オプション \texttt{papersize} を与えます。
+%
+% \begin{ZRnote}
+% BXJSクラスでは |geometry| パッケージがこの処理を行う。
+%
+% \begin{macro}{\ifbxjs@papersize}
+% 〔スイッチ〕 papersizeスペシャルを出力するか。
+% 既定で有効であるが、|nopapersize| オプションで無効にできる。
+% \Note JSクラスでは |\ifpapersize| という制御綴だが、これは採用しない。
+% \begin{macrocode}
+\newif\ifbxjs@papersize
+\bxjs@papersizetrue
+\DeclareOption{nopapersize}{\bxjs@papersizefalse}
+\DeclareOption{papersize}{\bxjs@papersizetrue}
+% \end{macrocode}
+% \end{macro}
+% \end{ZRnote}
+%
+% \paragraph{英語化}
+%
+% オプション \texttt{english} を新設しました。
+%
+% \begin{ZRnote}
+% \Note |\if@english| は非ユニークで衝突耐性がない。
+% \end{ZRnote}
+%
+% \begin{macrocode}
+\newif\if@english
+\@englishfalse
+\DeclareOption{english}{\@englishtrue}
+% \end{macrocode}
+%
+% \paragraph{jsbookをjsreportもどきに}
+%
+% オプション \texttt{report} を新設しました。
+%
+% [2017-02-13] 従来は「jsreport相当」をjsbookの \texttt{report} オプションで提供して
+% いましたが,新しくjsreportクラスも作りました。どちらでもお好きな方を使ってください。
+%
+% \begin{ZRnote}
+% BXJSでは当初から |bxjsreport| クラスが用意されている。
+% \end{ZRnote}
+%
+% \paragraph{\texttt{jslogo}パッケージの読み込み}
+%
+% \LaTeX 関連のロゴを再定義する\texttt{jslogo}パッケージを
+% 読み込まないオプション\texttt{nojslogo}を新設しました。
+% \texttt{jslogo}オプションの指定で従来どおりの動作となります。
+% デフォルトは\texttt{jslogo}で,すなわちパッケージを読み込みます。
+%
+% \begin{ZRnote}
+% BXJSクラスでは、|nojslogo| を既定とする。
+% \end{ZRnote}
+% \begin{macrocode}
+\newif\if@jslogo \@jslogofalse
+\DeclareOption{jslogo}{\@jslogotrue}
+\DeclareOption{nojslogo}{\@jslogofalse}
+% \end{macrocode}
+%
+% \paragraph{複合設定オプション \ZRX}
+% \mbox{}
+% \TODO |\bxjs@invscale| を書く場所を決める。
+% (JSクラスと同じにはできなそう。)
+% \begin{macro}{\bxjs@invscale}
+% |\bxjs@invscale| は{\TeX}における「長さのスケール」の逆関数を求めるもの。
+% 例えば |\bxjs@invscale\dimX{1.3}| は |\dimX=1.3\dimX| の
+% 逆の演算を行う。
+% \Note 局所化の |\begingroup|~|\endgroup| について、
+% 以前は |\group|~|\egroup| を使っていたが、これだと数式モード中では
+% 空のサブ数式を生み出してしまうため修正した。
+% \Note 元の長さが128\,pt以上の場合でも動作するように修正した。
+% \begin{macrocode}
+\mathchardef\bxjs@isc@ll=128
+\mathchardef\bxjs@isc@sl=259
+\def\bxjs@isc@sl@h{65539 }
+\def\bxjs@invscale#1#2{%
+ \begingroup \@tempdima=#1\relax \@tempdimb#2\p@\relax
+ \ifdim\@tempdima<\bxjs@isc@ll\p@
+ \@tempcnta\@tempdima \multiply\@tempcnta\@cclvi
+ \divide\@tempcnta\@tempdimb \multiply\@tempcnta\@cclvi
+ \else
+ \@tempcnta\@tempdima \divide\@tempcnta\@tempdimb
+ \multiply\@tempcnta\p@ \let\bxjs@isc@sl\bxjs@isc@sl@h
+ \fi
+ \@tempcntb\p@ \divide\@tempcntb\@tempdimb
+ \advance\@tempcnta-\@tempcntb \advance\@tempcnta-\tw@
+ \@tempdimb\@tempcnta\@ne
+ \advance\@tempcnta\@tempcntb \advance\@tempcnta\@tempcntb
+ \advance\@tempcnta\bxjs@isc@sl \@tempdimc\@tempcnta\@ne
+ \@whiledim\@tempdimb<\@tempdimc\do{%
+ \@tempcntb\@tempdimb \advance\@tempcntb\@tempdimc
+ \advance\@tempcntb\@ne \divide\@tempcntb\tw@
+ \ifdim #2\@tempcntb>\@tempdima
+ \advance\@tempcntb\m@ne \@tempdimc=\@tempcntb\@ne
+ \else \@tempdimb=\@tempcntb\@ne \fi}%
+ \xdef\bxjs@gtmpa{\the\@tempdimb}%
+ \endgroup #1=\bxjs@gtmpa\relax}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{ZRnote}
+% 複合設定オプションとは、
+% 「エンジンやドライバや和文ドライバの設定を含む、
+% 複数の設定を一度に行うオプション」
+% のことである。
+% ある特定の設定を短く書く必要性が高いと判断される場合に
+% 用意される。
+%
+% |pandoc| オプションは、Pandocで{\LaTeX}用の既定テンプレートを
+% 用いて他形式から{\LaTeX}(およびPDF)形式に変換する用途に
+% 最適化した設定を与える。
+% \begin{macrocode}
+\DeclareOption{pandoc}{%
+% \end{macrocode}
+% 和文ドライバを |pandoc| に、エンジン指定を |autodetect-engine| に
+% 変更する。
+% \Note 実際の和文ドライバ・エンジン設定より優先される。
+% \begin{macrocode}
+ \g@addto@macro\bxjs@post@option@hook{%
+ \bxjs@oldfontcommandstrue
+ \setkeys{bxjs}{ja=pandoc}%
+ \let\bxjs@engine@given=*}%
+% \end{macrocode}
+% ドライバオプションを |dvi=dvipdfmx| 相当に変更する。
+% \Note これは実際のドライバ設定で上書きできる
+% (オプション宣言順に注意)。
+% \TODO できない気がする…。
+% \begin{macrocode}
+ \def\bxjs@driver@opt{dvipdfmx}%
+ \bxjs@dvi@opttrue}
+% \end{macrocode}
+%
+% \end{ZRnote}
+%
+% \paragraph{エンジン・ドライバオプション \ZRX}
+% \mbox{}
+% \begin{ZRnote}
+% \begin{macro}{\bxjs@engine@given}
+% オプションで明示されたエンジンの種別。
+% \begin{macrocode}
+%\let\bxjs@engine@given\@undefined
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\bxjs@engine@opt}
+% 明示されたエンジンのオプション名。
+% \begin{macrocode}
+%\let\bxjs@engine@opt\@undefined
+% \end{macrocode}
+% \end{macro}
+%
+% エンジン明示指定のオプションの処理。
+% \Note 0.9pre版の暫定仕様と異なり、エンジン名は |...latex|
+% に限定する。
+% |xetex| や |pdftex| は一般的な{\LaTeX}の慣習に従って
+% 「ドライバの指定」とみなすべきだから。
+%
+% \begin{macrocode}
+\DeclareOption{autodetect-engine}{%
+ \let\bxjs@engine@given=*}
+\DeclareOption{latex}{%
+ \def\bxjs@engine@opt{latex}%
+ \let\bxjs@engine@given=n}
+\DeclareOption{platex}{%
+ \def\bxjs@engine@opt{platex}%
+ \let\bxjs@engine@given=j}
+\DeclareOption{uplatex}{%
+ \def\bxjs@engine@opt{uplatex}%
+ \let\bxjs@engine@given=u}
+\DeclareOption{xelatex}{%
+ \def\bxjs@engine@opt{xelatex}%
+ \let\bxjs@engine@given=x}
+\DeclareOption{pdflatex}{%
+ \def\bxjs@engine@opt{pdflatex}%
+ \let\bxjs@engine@given=p}
+\DeclareOption{lualatex}{%
+ \def\bxjs@engine@opt{lualatex}%
+ \let\bxjs@engine@given=l}
+\DeclareOption{platex-ng}{%
+ \def\bxjs@engine@opt{platex-ng}%
+ \let\bxjs@engine@given=g}
+\DeclareOption{platex-ng*}{%
+ \def\bxjs@engine@opt{platex-ng*}%
+ \let\bxjs@platexng@nodrv=t%
+ \let\bxjs@engine@given=g}
+% \end{macrocode}
+%
+% \begin{macro}{\bxjs@driver@given}
+% オプションで明示されたドライバの種別。
+% \begin{macrocode}
+%\let\bxjs@driver@given\@undefined
+\let\bxjs@driver@@dvimode=0
+\let\bxjs@driver@@dvipdfmx=1
+\let\bxjs@driver@@pdfmode=2
+\let\bxjs@driver@@xetex=3
+\let\bxjs@driver@@dvips=4
+\let\bxjs@driver@@none=5
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\bxjs@driver@opt}
+% 明示された「ドライバ指定」のオプション名。
+% \begin{macrocode}
+%\let\bxjs@driver@opt\@undefined
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+\DeclareOption{dvips}{%
+ \def\bxjs@driver@opt{dvips}%
+ \let\bxjs@driver@given\bxjs@driver@@dvips}
+\DeclareOption{dviout}{%
+ \def\bxjs@driver@opt{dviout}%
+ \let\bxjs@driver@given\bxjs@driver@@dvimode}
+\DeclareOption{xdvi}{%
+ \def\bxjs@driver@opt{xdvi}%
+ \let\bxjs@driver@given\bxjs@driver@@dvimode}
+\DeclareOption{dvipdfmx}{%
+ \def\bxjs@driver@opt{dvipdfmx}%
+ \let\bxjs@driver@given\bxjs@driver@@dvipdfmx}
+\DeclareOption{nodvidriver}{%
+ \def\bxjs@driver@opt{nodvidriver}%
+ \let\bxjs@driver@given\bxjs@driver@@none}
+\DeclareOption{pdftex}{%
+ \def\bxjs@driver@opt{pdftex}%
+ \let\bxjs@driver@given\bxjs@driver@@pdfmode}
+\DeclareOption{luatex}{%
+ \def\bxjs@driver@opt{luatex}%
+ \let\bxjs@driver@given\bxjs@driver@@pdfmode}
+\DeclareOption{xetex}{%
+ \def\bxjs@driver@opt{xetex}%
+ \let\bxjs@driver@given\bxjs@driver@@xetex}
+% \end{macrocode}
+%
+% 「もしDVIモードであればドライバを |dvipdfmx| にする」
+% というオプション。
+% \Note 1.2版で |dvi| オプションが新設されたが、互換性のため
+% このオプションも残す。
+% \begin{macrocode}
+\DeclareOption{dvipdfmx-if-dvi}{%
+ \setkeys{bxjs}{dvi=dvipdfmx}}
+% \end{macrocode}
+%
+% \end{ZRnote}
+%
+% \paragraph{その他のBXJS独自オプション \ZRX}
+% \mbox{}
+% \begin{ZRnote}
+% \TODO 互換用オプションを分離する(2.0版で?)。
+% \begin{macro}{\ifbxjs@bigcode}
+% {\upTeX}で有効化するToUnicode CMapとして
+% 「|UTF8-UCS2|」の代わりに「|UTF8-UTF16|」を使うか。
+% BMP外の文字に対応できる「|UTF8-UTF16|」の方が望ましいのであるが、
+% このファイルが利用可能かの確実な判定が困難であるため、
+% オプションで指定することとする。
+% \begin{macrocode}
+\newif\ifbxjs@bigcode \bxjs@bigcodefalse
+% \end{macrocode}
+% その上で、「{\TeX}環境がある程度新しければ利用可能であろう」
+% と判断し |bxjs@bigcode| の既定値を真とする。
+% 具体的な判断基準として、
+% 「{\TeX}のバージョンが3.14159265(2014年1月)以上であるか」
+% を採用する。
+% \begin{macrocode}
+\edef\bxjs@tmpa{\expandafter\noexpand\csname\endcsname}
+\def\bxjs@tmpb#1 #2#3\@nil{%
+ \ifx1#2\bxjs@bigcodetrue \fi}
+\expandafter\bxjs@tmpb\meaning\bxjs@tmpa1 0\@nil
+% \end{macrocode}
+% \end{macro}
+%
+% |nobigcode|/|bigcode| オプションの定義。
+% \begin{macrocode}
+\DeclareOption{nobigcode}{%
+ \bxjs@bigcodefalse}
+\DeclareOption{bigcode}{%
+ \bxjs@bigcodetrue}
+% \end{macrocode}
+%
+% \begin{macro}{\ifbxjs@oldfontcommands}
+% |\allowoldfontcommands| を既定で有効にするか。
+% \begin{macrocode}
+\newif\ifbxjs@oldfontcommands
+% \end{macrocode}
+% \end{macro}
+%
+% |nooldfontcommands|、|oldfontcommands| オプションの定義。
+% \Note |oldfontcommands| オプションの名前は\Pkg{memoir}クラスに倣った。
+% ちなみに\Pkg{KOMA-Script}では |enabledeprecatedfontcommands| であるが
+% これはチョットアレなので避けた。
+% \begin{macrocode}
+\DeclareOption{nooldfontcommands}{%
+ \bxjs@oldfontcommandsfalse}
+\DeclareOption{oldfontcommands}{%
+ \bxjs@oldfontcommandstrue}
+% \end{macrocode}
+%
+% \end{ZRnote}
+%
+% \paragraph{keyval型のオプション \ZRX}
+% \mbox{}
+% \begin{ZRnote}
+% その他のオプションは |keyval| の機構を用いて処理する。
+% \begin{macrocode}
+\DeclareOption*{%
+ \def\bxjs@next{\bxjs@safe@setkeys{bxjs}}%
+ \expandafter\bxjs@next\expandafter{\CurrentOption}}
+% \end{macrocode}
+%
+% \begin{macro}{\bxjs@safe@setkeys}
+% 未知のキーに対してエラー無しで無視する |\setkeys|。
+% \Note ネスト不可。
+% \begin{macrocode}
+\def\bxjs@safe@setkeys#1#2{%
+ \let\bxjs@save@KV@errx\KV@errx \let\KV@errx\@gobble
+ \setkeys{#1}{#2}%
+ \let\KV@errx\bxjs@save@KV@errx}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\bxjs@declare@enum@option}
+% |\bxjs@declare@enum@option{|\Meta{オプション名}|}{|\Meta{enum名}|}|\par
+% “\Meta{オプション名}|=|\Meta{値}”のオプション指定に対して、
+% |\|[|bxjs@|\Meta{enum名}] を |\|[|bxjs@|\Meta{enum名}|@@|\Meta{値}] に
+% 等値する(後者の制御綴が未定義の場合はエラー)、という動作を規定する。
+% \begin{macrocode}
+\@onlypreamble\bxjs@declare@enum@option
+\def\bxjs@declare@enum@option#1#2{%
+ \define@key{bxjs}{#1}{%
+ \expandafter\ifx\csname bxjs@#2@@##1\endcsname\relax
+ \bxjs@error@keyval{#1}{##1}%
+ \else \bxjs@csletcs{bxjs@#2}{bxjs@#2@@##1}%
+ \fi}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\bxjs@declare@bool@option}
+% |\bxjs@declare@bool@option{|\Meta{オプション名}|}{|\Meta{スイッチ名}|}|\par
+% “\Meta{オプション名}|=|\Meta{真偽値}”のオプション指定に対して、
+% |\if|[|bxjs@|\Meta{スイッチ名}] を設定する、という動作を規定する。
+% \begin{macrocode}
+\@onlypreamble\bxjs@declare@bool@option
+\def\bxjs@declare@bool@option#1#2{%
+ \define@key{bxjs}{#1}[true]{%
+ \expandafter\ifx\csname bxjs@#2##1\endcsname\relax
+ \bxjs@error@keyval{#1}{##1}%
+ \else \@nameuse{bxjs@#2##1}%
+ \fi}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\bxjs@set@keyval}
+% |\bxjs@set@keyval{|\meta{key}|}{|\meta{value}|}{|\meta{error}|}|\par
+% |\bxjs@kv@|\meta{key}|@|\meta{value} が定義済ならそれを実行し、
+% 未定義ならエラーを出す。
+% \begin{macrocode}
+\def\bxjs@set@keyval#1#2#3{%
+ \expandafter\let\expandafter\bxjs@next\csname bxjs@kv@#1@#2\endcsname
+ \ifx\bxjs@next\relax
+ \bxjs@error@keyval{#1}{#2}%
+ #3%
+ \else \bxjs@next
+ \fi}
+\@onlypreamble\bxjs@error@keyval
+\def\bxjs@error@keyval#1#2{%
+ \ClassError\bxjs@clsname
+ {Invalid value '#2' for option #1}\@ehc}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\jsScale}
+% 〔実数値マクロ〕
+% 和文スケール値。
+% \begin{macrocode}
+\def\jsScale{0.924715}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\bxjs@base@opt}
+% 明示された |base| オプションの値。
+% \begin{macrocode}
+%\let\bxjs@base@opt\@undefined
+% \end{macrocode}
+% \end{macro}
+%
+% |base| オプションの処理。
+% \begin{macrocode}
+\define@key{bxjs}{base}{%
+ \edef\bxjs@base@opt{#1}%
+ \bxjs@setbasefontsize{#1}}
+\define@key{bxjs}{fontsize}{\setkeys{bxjs}{base=#1}}
+% \end{macrocode}
+%
+% \begin{macro}{\bxjs@jbase@opt}
+% 明示された |jbase| オプションの値。
+% \begin{macrocode}
+%\let\bxjs@jbase@opt\@undefined
+% \end{macrocode}
+% \end{macro}
+%
+% |jbase| オプションの処理。
+% \begin{macrocode}
+\define@key{bxjs}{jbase}{\edef\bxjs@jbase@opt{#1}}
+\define@key{bxjs}{jafontsize}{\setkeys{bxjs}{jbase=#1}}
+% \end{macrocode}
+%
+% \begin{macro}{\bxjs@scale@opt}
+% 明示された |scale| オプションの値。
+% \begin{macrocode}
+%\let\bxjs@scale@opt\@undefined
+% \end{macrocode}
+% \end{macro}
+%
+% |scale| オプションの処理。
+% \begin{macrocode}
+\define@key{bxjs}{scale}{%
+ \edef\bxjs@scale@opt{#1}%
+ \let\jsScale\bxjs@scale@opt}
+\define@key{bxjs}{jafontscale}{\setkeys{bxjs}{scale=#1}}
+% \end{macrocode}
+%
+% |noscale| オプションの処理。
+% \begin{macrocode}
+\DeclareOption{noscale}{\setkeys{bxjs}{scale=1}}
+% \end{macrocode}
+%
+% \begin{macro}{\bxjs@param@mag}
+% |mag| オプションの値。
+% \begin{macrocode}
+\let\bxjs@param@mag\relax
+% \end{macrocode}
+% \end{macro}
+%
+% |mag| オプションの処理。
+% \begin{macrocode}
+\define@key{bxjs}{mag}{\edef\bxjs@param@mag{#1}}
+% \end{macrocode}
+%
+% |paper| オプションの処理。
+% \begin{macrocode}
+\define@key{bxjs}{paper}{\edef\bxjs@param@paper{#1}}
+% \end{macrocode}
+%
+% \begin{macro}{\bxjs@jadriver}
+% 和文ドライバの名前。
+% \begin{macrocode}
+\let\bxjs@jadriver\relax
+%\let\bxjs@jadriver@opt\@undefined
+% \end{macrocode}
+% \end{macro}
+%
+% |ja| オプションの処理。
+% \Note |jadriver| は0.9版で用いられた旧称。
+% \Note 単なる |ja| という指定は無視される(Pandoc 対策)。
+% \begin{macrocode}
+\define@key{bxjs}{jadriver}{\edef\bxjs@jadriver@opt{#1}}
+\define@key{bxjs}{ja}[\relax]{%
+ \ifx\relax#1\else\edef\bxjs@jadriver@opt{#1}\fi}
+% \end{macrocode}
+%
+% \begin{macro}{\jsJaFont}
+% 和文フォント設定の名前。
+% \begin{macrocode}
+\let\jsJaFont\@empty
+% \end{macrocode}
+% \end{macro}
+%
+% |jafont| オプションの処理。
+% \begin{macrocode}
+\define@key{bxjs}{jafont}{\edef\jsJaFont{#1}}
+% \end{macrocode}
+%
+% \begin{macro}{\jsJaParam}
+% 和文ドライバパラメタの文字列。
+% \begin{macrocode}
+\let\jsJaParam\@empty
+% \end{macrocode}
+% \end{macro}
+%
+% |japaram| オプションの処理。
+% \begin{macrocode}
+\define@key{bxjs}{japaram}{\edef\jsJaParam{#1}}
+% \end{macrocode}
+%
+% \begin{macro}{\bxjs@magstyle}
+% magstyle設定値。(古いイマイチな名前。)
+% \begin{macrocode}
+\let\bxjs@magstyle@mag=m
+\let\bxjs@magstyle@real=r
+\let\bxjs@magstyle@xreal=x
+% \end{macrocode}
+% (新しい素敵な名前。)
+% \Note ただし制御綴としては、|*|付の名前は扱い難いので、|\bxjs@magstyle@xreal|
+% の方を優先させる。
+% \begin{macrocode}
+\let\bxjs@magstyle@usemag\bxjs@magstyle@mag
+\let\bxjs@magstyle@nomag\bxjs@magstyle@real
+\expandafter\let\csname bxjs@magstyle@nomag*\endcsname\bxjs@magstyle@xreal
+% \end{macrocode}
+% |\bxjs@magstyle@default| は既定の値を表す。
+% \begin{macrocode}
+\let\bxjs@magstyle@default\bxjs@magstyle@usemag
+\ifx l\jsEngine \ifnum\luatexversion>86
+ \let\bxjs@magstyle@default\bxjs@magstyle@xreal
+\fi\fi
+\ifjsWithpTeXng
+ \let\bxjs@magstyle@default\bxjs@magstyle@xreal
+\fi
+\let\bxjs@magstyle\bxjs@magstyle@default
+% \end{macrocode}
+% \end{macro}
+%
+% |magstyle| オプションの処理。
+% \begin{macrocode}
+\define@key{bxjs}{magstyle}{%
+ \expandafter\let\expandafter\bxjs@magstyle\csname
+ bxjs@magstyle@#1\endcsname
+ \ifx\bxjs@magstyle\relax
+ \ClassError\bxjs@clsname
+ {Invalid value '#1' for option magstyle}\@ehc
+ \let\bxjs@magstyle\bxjs@magstyle@default
+ \fi}
+% \end{macrocode}
+%
+% \begin{macro}{\bxjs@geometry}
+% |geometry| オプションの値。
+% \begin{macrocode}
+\let\bxjs@geometry@class=c
+\let\bxjs@geometry@user=u
+\let\bxjs@geometry\bxjs@geometry@class
+% \end{macrocode}
+% \end{macro}
+%
+% |geometry| オプションの処理。
+% \begin{macrocode}
+\define@key{bxjs}{geometry}{%
+ \expandafter\let\expandafter\bxjs@geometry\csname
+ bxjs@geometry@#1\endcsname
+ \ifx\bxjs@geometry\relax
+ \ClassError\bxjs@clsname
+ {Invalid value '#1' for option geometry}\@ehc
+ \let\bxjs@geometry\bxjs@geometry@class
+ \fi}
+% \end{macrocode}
+%
+% \begin{macro}{\ifbxjs@fancyhdr}
+% 〔スイッチ〕
+% |fancyhdr| パッケージに対する調整を行うか。
+% \begin{macrocode}
+\newif\ifbxjs@fancyhdr \bxjs@fancyhdrtrue
+% \end{macrocode}
+% \end{macro}
+%
+% |fancyhdr| オプションの処理。
+% \begin{macrocode}
+\let\bxjs@kv@fancyhdr@true\bxjs@fancyhdrtrue
+\let\bxjs@kv@fancyhdr@false\bxjs@fancyhdrfalse
+\define@key{bxjs}{fancyhdr}[true]{%
+ \bxjs@set@keyval{fancyhdr}{#1}{}}
+% \end{macrocode}
+%
+% \begin{macro}{\ifbxjs@dvi@opt}
+% |dvi| オプションが指定されたか。
+% \begin{macrocode}
+\newif\ifbxjs@dvi@opt
+% \end{macrocode}
+% \end{macro}
+%
+% DVIモードのドライバとドライバ種別との対応。
+% \begin{macrocode}
+\let\bxjs@dvidriver@@dvipdfmx=\bxjs@driver@@dvipdfmx
+\let\bxjs@dvidriver@@dvips=\bxjs@driver@@dvips
+\let\bxjs@dvidriver@@dviout=\bxjs@driver@@dvimode
+\let\bxjs@dvidriver@@xdvi=\bxjs@driver@@dvimode
+\let\bxjs@dvidriver@@nodvidriver=\bxjs@driver@@none
+% \end{macrocode}
+%
+% |dvi| オプションの処理。
+% \begin{macrocode}
+\define@key{bxjs}{dvi}{%
+ \expandafter\let\expandafter\bxjs@tmpa\csname
+ bxjs@dvidriver@@#1\endcsname
+ \ifx\bxjs@tmpa\relax
+ \ClassError\bxjs@clsname
+ {Invalid value '#1' for option dvi}\@ehc
+ \else
+% \end{macrocode}
+% |\bxjs@driver@given| を未定義にしていることに注意。
+% \begin{macrocode}
+ \def\bxjs@driver@opt{#1}%
+ \let\bxjs@driver@given\@undefined
+ \bxjs@dvi@opttrue
+ \fi}
+% \end{macrocode}
+%
+% \begin{macro}{\ifbxjs@layout@buggyhmargin}
+% 〔スイッチ〕
+% |bxjsbook| の左右マージンがアレか。
+% \Note |layout| が |v1| の場合はアレになる。
+% \begin{macrocode}
+\newif\ifbxjs@layout@buggyhmargin
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\ifbxjs@force@chapterabstract}
+% 〔スイッチ〕
+% abstract環境をchapterabstractにするか。
+% \Note |bxjsbook| では常に真。
+% |bxjsreport| では |layout| が |v1| の場合に真になる。
+% \begin{macrocode}
+\newif\ifbxjs@force@chapterabstract
+%<book>\bxjs@force@chapterabstracttrue
+% \end{macrocode}
+% \end{macro}
+%
+% |layout| オプションの処理。
+% \begin{macrocode}
+\@namedef{bxjs@kv@layout@v1}{%
+%<book>\bxjs@layout@buggyhmargintrue
+%<report>\bxjs@force@chapterabstracttrue
+}
+\@namedef{bxjs@kv@layout@v2}{%
+%<book>\bxjs@layout@buggyhmarginfalse
+%<report>\bxjs@force@chapterabstractfalse
+}
+\define@key{bxjs}{layout}{%
+ \bxjs@set@keyval{layout}{#1}{}}
+% \end{macrocode}
+%
+% \begin{macro}{\bxjs@textwidth@limit}
+% |textwidth-limit| の指定値。
+% \begin{macrocode}
+%\let\bxjs@textwidth@limit@opt\@undefined
+\define@key{bxjs}{textwidth-limit}{%
+ \edef\bxjs@textwidth@limit@opt{#1}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\bxjs@textwidth@opt}
+% |textwidth| の指定値。
+% \begin{macrocode}
+%\let\bxjs@textwidth@opt\@undefined
+\define@key{bxjs}{textwidth}{\edef\bxjs@textwidth@opt{#1}}
+\define@key{bxjs}{line_length}{\setkeys{bxjs}{textwidth=#1}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\bxjs@number@of@lines@opt}
+% |number-of-lines| の指定値。
+% \begin{macrocode}
+%\let\bxjs@number@of@lines@opt\@undefined
+\define@key{bxjs}{number-of-lines}{\edef\bxjs@number@of@lines@opt{#1}}
+\define@key{bxjs}{number_of_lines}{\setkeys{bxjs}{number-of-lines=#1}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\bxjs@paragraph@mark}
+% |paragraph-mark| の指定値。
+% パラグラフのマーク。
+% \begin{macrocode}
+%\let\bxjs@paragraph@mark\@undefined
+\define@key{bxjs}{paragraph-mark}{%
+ \edef\bxjs@paragraph@mark{#1}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\ifbxjs@whole@zw@lines}
+% 〔スイッチ〕 |whole-zw-lines| の指定値。
+% \begin{macrocode}
+\newif\ifbxjs@whole@zw@lines \bxjs@whole@zw@linestrue
+\let\bxjs@kv@wholezwlines@true\bxjs@whole@zw@linestrue
+\let\bxjs@kv@wholezwlines@false\bxjs@whole@zw@linesfalse
+\define@key{bxjs}{whole-zw-lines}[true]{\bxjs@set@keyval{wholezwlines}{#1}{}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\ifbxjs@jaspace@cmd}
+% 〔スイッチ〕 |jaspace-cmd| の指定値。
+% \begin{macrocode}
+\newif\ifbxjs@jaspace@cmd \bxjs@jaspace@cmdtrue
+\let\bxjs@kv@jaspacecmd@true\bxjs@jaspace@cmdtrue
+\let\bxjs@kv@jaspacecmd@false\bxjs@jaspace@cmdfalse
+\define@key{bxjs}{jaspace-cmd}[true]{\bxjs@set@keyval{jaspacecmd}{#1}{}}
+\define@key{bxjs}{xkanjiskip-cmd}[true]{\bxjs@set@keyval{jaspacecmd}{#1}{}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\ifbxjs@fix@at@cmd}
+% 〔スイッチ〕 |fix-at-cmd| の指定値。
+% \begin{macrocode}
+\newif\ifbxjs@fix@at@cmd \bxjs@fix@at@cmdtrue
+\let\bxjs@kv@fixatcmd@true\bxjs@fix@at@cmdtrue
+\let\bxjs@kv@fixatcmd@false\bxjs@fix@at@cmdfalse
+\define@key{bxjs}{fix-at-cmd}[true]{\bxjs@set@keyval{fixatcmd}{#1}{}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\ifbxjs@hyperref@enc}
+% 〔スイッチ〕 |hyperref-enc| の指定値。
+% \begin{macrocode}
+\newif\ifbxjs@hyperref@enc \bxjs@hyperref@enctrue
+\let\bxjs@kv@hyperrefenc@true\bxjs@hyperref@enctrue
+\let\bxjs@kv@hyperrefenc@false\bxjs@hyperref@encfalse
+\define@key{bxjs}{hyperref-enc}[true]{\bxjs@set@keyval{hyperrefenc}{#1}{}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\bxjs@everyparhook}
+% |everyparhook| の指定値。
+% \begin{macrocode}
+\chardef\bxjs@everyparhook@none=0
+\chardef\bxjs@everyparhook@compat=1
+\chardef\bxjs@everyparhook@modern=2
+\if j\jsEngine
+ \let\bxjs@everyparhook\bxjs@everyparhook@compat
+\else
+ \let\bxjs@everyparhook\bxjs@everyparhook@modern
+\fi
+\def\bxjs@kv@everyparhook@none{\let\bxjs@everyparhook\bxjs@everyparhook@none}
+\def\bxjs@kv@everyparhook@compat{\let\bxjs@everyparhook\bxjs@everyparhook@compat}
+\def\bxjs@kv@everyparhook@modern{\let\bxjs@everyparhook\bxjs@everyparhook@modern}
+\define@key{bxjs}{everyparhook}{\bxjs@set@keyval{everyparhook}{#1}{}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\bxjs@label@section}
+% |label-section| の指定値。
+% \begin{macrocode}
+\chardef\bxjs@label@section@none=0
+\chardef\bxjs@label@section@compat=1
+\chardef\bxjs@label@section@modern=2
+\let\bxjs@label@section\bxjs@label@section@compat
+\def\bxjs@kv@labelsection@none{\let\bxjs@label@section\bxjs@label@section@none}
+\def\bxjs@kv@labelsection@compat{\let\bxjs@label@section\bxjs@label@section@compat}
+\def\bxjs@kv@labelsection@modern{\let\bxjs@label@section\bxjs@label@section@modern}
+\define@key{bxjs}{label-section}{\bxjs@set@keyval{labelsection}{#1}{}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\ifbxjs@usezw}
+% 〔スイッチ〕 |use-zw| の指定値。
+% \begin{macrocode}
+\newif\ifbxjs@usezw \bxjs@usezwtrue
+\bxjs@declare@bool@option{use-zw}{usezw}
+\DeclareOption{nozw}{\setkeys{bxjs}{use-zw=false}}
+\DeclareOption{zw}{\setkeys{bxjs}{use-zw=true}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\ifbxjs@disguise@js}
+% 〔スイッチ〕 |disguise-js| の指定値。
+% \begin{macrocode}
+\newif\ifbxjs@disguise@js \bxjs@disguise@jstrue
+\bxjs@declare@bool@option{disguise-js}{disguise@js}
+\DeclareOption{nojs}{\setkeys{bxjs}{disguise-js=false}}
+\DeclareOption{js}{\setkeys{bxjs}{disguise-js=true}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\ifbxjs@precisetext}
+% 〔スイッチ〕 |precise-text| の指定値。
+% \begin{macrocode}
+\newif\ifbxjs@precisetext
+\bxjs@declare@bool@option{precise-text}{precisetext}
+\DeclareOption{noprecisetext}{\setkeys{bxjs}{precise-text=false}}
+\DeclareOption{precisetext}{\setkeys{bxjs}{precise-text=true}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\ifbxjs@simplejasetup}
+% 〔スイッチ〕 |simple-ja-setup| の指定値。
+% \begin{macrocode}
+\newif\ifbxjs@simplejasetup \bxjs@simplejasetuptrue
+\bxjs@declare@bool@option{simple-ja-setup}{simplejasetup}
+\DeclareOption{nosimplejasetup}{\setkeys{bxjs}{simple-ja-setup=false}}
+\DeclareOption{simplejasetup}{\setkeys{bxjs}{simple-ja-setup=true}}
+% \end{macrocode}
+% \end{macro}
+%
+% \end{ZRnote}
+%
+% \paragraph{オプションの実行}
+% \mbox{}
+% \begin{ZRnote}
+% {\LaTeX}の実装では、クラスやパッケージのオプションのトークン列の
+% 中に |{ }| が含まれると正常に処理ができない。
+% これに対処する為 |\@removeelement| の実装に少し手を加える
+% (仕様は変わらない)。
+% \Note クラスに |\DeclareOption*| がある場合は |\@unusedoptions|
+% は常に空のままであることを利用している。
+% \begin{macrocode}
+\let\bxjs@org@removeelement\@removeelement
+\def\@removeelement#1#2#3{%
+ \def\reserved@a{#2}%
+ \ifx\reserved@a\@empty \let#3\@empty
+ \else \bxjs@org@removeelement{#1}{#2}{#3}%
+ \fi}
+% \end{macrocode}
+%
+% \end{ZRnote}
+%
+% デフォルトのオプションを実行します。
+% |multicols| や |url| を |\RequirePackage| するのはやめました。
+%
+% \begin{macrocode}
+%<article>\ExecuteOptions{a4paper,oneside,onecolumn,notitlepage,final}
+%<book>\ExecuteOptions{a4paper,twoside,onecolumn,titlepage,openright,final}
+%<report>\ExecuteOptions{a4paper,oneside,onecolumn,titlepage,openany,final}
+%<slide>\ExecuteOptions{36pt,a4paper,landscape,oneside,onecolumn,titlepage,final}
+\ProcessOptions\relax
+\bxjs@post@option@hook
+% \end{macrocode}
+%
+% 後処理
+%
+% \begin{macrocode}
+\if@slide
+ \def\maybeblue{\@ifundefined{ver@color.sty}{}{\color{blue}}}
+\fi
+\if@landscape
+ \setlength\@tempdima {\paperheight}
+ \setlength\paperheight{\paperwidth}
+ \setlength\paperwidth {\@tempdima}
+\fi
+% \end{macrocode}
+%
+% \paragraph{グローバルオプションの整理 \ZRX}
+% \mbox{}
+% \begin{ZRnote}
+%
+% グローバルオプションのトークン列に |{ }| が含まれていると、
+% やはり後のパッケージの読込処理で不具合を起こすようである
+% (|\ProcessOptions*| がエラーになる)。
+% 従って、このようなオプションは除外することにする。
+% \begin{macrocode}
+\def\bxjs@tmpdo{%
+ \def\bxjs@tmpa{\@gobble}%
+ \expandafter\bxjs@tmpdo@a\@classoptionslist,\@nil,%
+ \let\@classoptionslist\bxjs@tmpa}
+\def\bxjs@tmpdo@a#1,{%
+ \ifx\@nil#1\relax\else
+ \bxjs@tmpdo@b#1{}\@nil
+ \if@tempswa \edef\bxjs@tmpa{\bxjs@tmpa,#1}\fi
+ \expandafter\bxjs@tmpdo@a
+ \fi}
+\def\bxjs@tmpdo@b#1#{\bxjs@tmpdo@c}
+\def\bxjs@tmpdo@c#1\@nil{%
+ \ifx\@nil#1\@nil \@tempswatrue \else \@tempswafalse \fi}
+\bxjs@tmpdo
+% \end{macrocode}
+%
+% |papersize|、|10pt|、|noscale| の各オプションは他のパッケージと衝突を
+% 起こす可能性があるため、グローバルオプションから外す。
+%
+% \begin{macrocode}
+\@expandtwoargs\@removeelement
+ {papersize}\@classoptionslist\@classoptionslist
+\@expandtwoargs\@removeelement
+ {10pt}\@classoptionslist\@classoptionslist
+\@expandtwoargs\@removeelement
+ {noscale}\@classoptionslist\@classoptionslist
+% \end{macrocode}
+%
+% \end{ZRnote}
+%
+% \paragraph{使用エンジンの検査・自動判定}
+%
+% ユーザが |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| オプションが渡ってしまうのを防ぐためです。
+%
+% \begin{ZRnote}
+%
+% 正規化前の和文ドライバの値を |\bxjs@jadriver| に設定する。
+% \begin{macrocode}
+\ifx\bxjs@jadriver@opt\@undefined\else
+ \let\bxjs@jadriver\bxjs@jadriver@opt
+\fi
+% \end{macrocode}
+%
+% エンジン明示指定のオプションが与えられた場合は、
+% それが実際のエンジンと一致するかを検査する。
+% \begin{macrocode}
+\let\bxjs@tmpb\jsEngine
+\ifx j\bxjs@tmpb\ifjsWithpTeXng
+ \let\bxjs@tmpb=g
+\fi\fi
+\ifx j\bxjs@tmpb\ifjsWithupTeX
+ \let\bxjs@tmpb=u
+\fi\fi
+\ifx p\bxjs@tmpb\ifjsInPdfMode\else
+ \let\bxjs@tmpb=n
+\fi\fi
+% \end{macrocode}
+% (この時点で |\bxjs@tmpb| は |\bxjs@engine@given| と
+% 同じ規則で分類したコードをもっている。)
+% \begin{macrocode}
+\ifx *\bxjs@engine@given
+ \let\bxjs@engine@given\bxjs@tmpb
+% \end{macrocode}
+% エンジン指定が |autodetect-engine| であり、かつ実際のエンジンが
+% {(u)\pLaTeX}だった場合は、本来のエンジンオプションを
+% グローバルオプションに加える。
+% \begin{macrocode}
+ \ifx j\bxjs@engine@given
+ \g@addto@macro\@classoptionslist{,platex}
+ \else\ifx u\bxjs@engine@given
+ \g@addto@macro\@classoptionslist{,uplatex}
+ \fi\fi
+\fi
+\ifx\bxjs@engine@given\@undefined\else
+ \ifx\bxjs@engine@given\bxjs@tmpb\else
+ \ClassError\bxjs@clsname
+ {Option '\bxjs@engine@opt' used on wrong engine}\@ehc
+ \fi
+\fi
+% \end{macrocode}
+%
+% エンジンが{\pTeX-ng}の場合、グローバルオプションに |uplatex| を
+% 追加する。
+% \begin{macrocode}
+\ifjsWithpTeXng
+ \g@addto@macro\@classoptionslist{,uplatex}
+\fi
+% \end{macrocode}
+%
+% \paragraph{ドライバ指定 \ZRX}
+%
+% ドライバ指定のオプションが与えられた場合は、
+% それがエンジンと整合するかを検査する。
+% \begin{macrocode}
+\@tempswatrue
+\ifx \bxjs@driver@given\@undefined\else
+ \ifjsInPdfMode
+ \ifx\bxjs@driver@given\bxjs@driver@@pdfmode\else
+ \@tempswafalse
+ \fi
+ \else\ifx x\jsEngine
+ \ifx\bxjs@driver@given\bxjs@driver@@xetex\else
+ \@tempswafalse
+ \fi
+ \else
+ \ifx\bxjs@driver@given\bxjs@driver@@pdfmode
+ \@tempswafalse
+ \else\ifx\bxjs@driver@given\bxjs@driver@@xetex
+ \@tempswafalse
+ \fi\fi
+ \ifjsWithpTeXng\ifx\bxjs@driver@given\bxjs@driver@@dvipdfmx\else
+ \@tempswafalse
+ \fi\fi
+ \fi\fi
+\fi
+\if@tempswa\else
+ \ClassError\bxjs@clsname
+ {Option '\bxjs@driver@opt' used on wrong engine}\@ehc
+\fi
+% \end{macrocode}
+%
+% DVI出力のエンジンである場合の追加処理。
+% \begin{macrocode}
+\ifjsInPdfMode \@tempswafalse
+\else\ifx x\jsEngine \@tempswafalse
+\else\ifjsWithpTeXng \@tempswafalse
+\else \@tempswatrue
+\fi\fi\fi
+\if@tempswa
+% \end{macrocode}
+% ドライバオプションがない場合は警告を出す。
+% \Note ただし |ja| 非指定の場合はスキップする
+% (0.3 版との互換性のため)。
+% \begin{macrocode}
+ \ifx\bxjs@driver@opt\@undefined \ifx\bxjs@jadriver@opt\@undefined\else
+ \ClassWarningNoLine\bxjs@clsname
+ {No driver option is given}
+ \fi\fi
+% \end{macrocode}
+% |dvi=XXX| が指定されていた場合は、
+% |XXX| が指定された時と同じ動作にする。
+% (グローバルオプションに |XXX| を追加する。)
+% \begin{macrocode}
+ \ifbxjs@dvi@opt
+ \edef\bxjs@next{%
+ \let\noexpand\bxjs@driver@given
+ \csname bxjs@dvidriver@@\bxjs@driver@opt\endcsname
+ \noexpand\g@addto@macro\noexpand\@classoptionslist
+ {,\bxjs@driver@opt}%
+ }\bxjs@next
+ \fi
+\fi
+% \end{macrocode}
+%
+% エンジンが{\pTeX-ng}の場合、グローバルオプションに |dvipdfmx|
+% を追加する。
+% ただし、エンジンオプションが |platex-ng*|(|*|付)の場合、および
+% 既に |dvipdfmx| が指定されている場合を除く。
+% \begin{macrocode}
+\ifjsWithpTeXng
+ \ifx\bxjs@driver@given\bxjs@driver@@dvipdfmx
+ \let\bxjs@platexng@nodrv\@undefined
+ \else\ifx t\bxjs@platexng@nodrv\else
+ \g@addto@macro\@classoptionslist{,dvipdfmx}
+ \fi\fi
+\fi
+% \end{macrocode}
+%
+% ドライバが |nodvidriver| であった場合の処理。
+% DVIウェア依存の処理を全て無効化する。
+% \begin{macrocode}
+\ifx\bxjs@driver@given\bxjs@driver@@none
+ \bxjs@papersizefalse
+\fi
+% \end{macrocode}
+%
+% \paragraph{その他のBXJS特有の後処理 \ZRX}
+%
+% |\bxjs@jadriver| の正規化。
+% 値が未指定の場合は |minimal| に変える。
+% ただしエンジンが{(u)\pTeX}である場合は |standard|
+% に変える。
+% \begin{macrocode}
+\def\bxjs@@minimal{minimal}
+\ifx\bxjs@jadriver\relax
+ \ifx j\jsEngine
+ \def\bxjs@jadriver{standard}
+ \else
+ \let\bxjs@jadriver\bxjs@@minimal
+ \fi
+\fi
+% \end{macrocode}
+%
+% エンジンオプションがない場合はエラーを出す。
+% \Note ただし |ja| 非指定の場合はスキップする。
+% \begin{macrocode}
+\ifx\bxjs@jadriver@opt\@undefined\else
+ \ifx\bxjs@engine@given\@undefined
+ \ClassError\bxjs@clsname
+ {An engine option must be explicitly given}%
+ {When you use a Japanese-driver you must specify a correct\MessageBreak
+ engine option.\MessageBreak\@ehc}
+\fi\fi
+% \end{macrocode}
+%
+% 新しいLua{\TeX}(0.87版以降)ではmagがアレなので、
+% |magstyle=usemag| が指定されていた場合はエラーを出す。
+% (この場合の既定値は |nomag*| であり、
+% エラーの場合は既定値に置き換えられる。)
+% \begin{macrocode}
+\ifx\bxjs@magstyle@default\bxjs@magstyle@mag\else
+ \ifx\bxjs@magstyle\bxjs@magstyle@mag
+ \let\bxjs@magstyle\bxjs@magstyle@default
+ \ClassError\bxjs@clsname
+ {The engine does not support 'magstyle=usemag'}%
+ {LuaTeX v0.87 or later no longer supports the "mag" feature of TeX.\MessageBreak
+ The default value 'nomag*' is used instead.\MessageBreak \@ehc}
+ \fi
+\fi
+% \end{macrocode}
+%
+% |base|、|jbase|、|scale| の値を用いて和文スケール値を解決する。
+% \Note |\bxjs@param@basefontsize| と |\jsScale| へのオプション値の反映は
+% 既に実施されていることに注意。
+% |jbase| 非指定の場合はこのままでよい。
+% \begin{macrocode}
+\ifx\bxjs@jbase@opt\@undefined\else
+ \ifx\bxjs@base@opt\@undefined
+% \end{macrocode}
+% |jbase| 指定済で |base| 未指定の場合は、|\jsScale| の値を採用して
+% 和文基底サイズを決定する。
+% \begin{macrocode}
+ \jsSetQHLength\@tempdima{\bxjs@jbase@opt}%
+ \bxjs@invscale\@tempdima\jsScale
+ \bxjs@setbasefontsize{\@tempdima}%
+ \else
+% \end{macrocode}
+% |jbase| と |base| がともに指定済の場合は、それらの値から
+% 和文スケール値を決定する。
+% \begin{macrocode}
+ \ifx\bxjs@scale@opt\@undefined\else
+ \ClassWarningNoLine\bxjs@clsname
+ {Redundant 'scale' option is ignored}%
+ \fi
+ \jsSetQHLength\@tempdima{\bxjs@jbase@opt}%
+ \@tempdimb=\bxjs@param@basefontsize\relax
+ \edef\jsScale{\strip@pt\@tempdimb}%
+ \bxjs@invscale\@tempdima\jsScale
+ \edef\jsScale{\strip@pt\@tempdima}%
+ \fi
+\fi
+% \end{macrocode}
+%
+% \begin{macro}{\Cjascale}
+% 和文クラス共通仕様(※ただしZR氏提唱)における、
+% 和文スケール値の変数。
+% \begin{macrocode}
+\let\Cjascale\jsScale
+% \end{macrocode}
+% \end{macro}
+%
+% \end{ZRnote}
+% \begin{ZRnote}
+%
+% 8bit欧文{\TeX}の場合は、高位バイトをアクティブ化しておく。
+% (和文を含むマクロ定義を通用させるため。)
+% \begin{macrocode}
+\if \if p\jsEngine T\else\if n\jsEngine T\else F\fi\fi T
+ \@tempcnta="80 \loop \ifnum\@tempcnta<"100
+ \catcode\@tempcnta\active
+ \advance\@tempcnta\@ne
+ \repeat
+\fi
+% \end{macrocode}
+%
+% |js| オプション指定時は、jsarticle(または jsbook)クラスを
+% 読込済のように振舞う。
+% \Note 「2つのクラスを読み込んだ状態」は |\LoadClass| を使用した
+% 場合に出現するので、別に異常ではない。
+% \begin{macrocode}
+\ifbxjs@disguise@js
+%<book|report>\def\bxjs@js@clsname{jsbook}
+%<!book&!report>\def\bxjs@js@clsname{jsarticle}
+ \@namedef{ver@\bxjs@js@clsname.cls}{2001/01/01 (bxjs)}
+\fi
+% \end{macrocode}
+%
+% |color|/|graphics| パッケージが持つ出力用紙サイズ設定の機能は、
+% BXJSクラスでは余計なので無効にしておく。
+% このため、グローバルで |nosetpagesize| を設定しておく。
+% \begin{macrocode}
+\g@addto@macro\@classoptionslist{,nosetpagesize}
+% \end{macrocode}
+%
+% |oldfontcommands| オプション指定時は |\allowoldfontcommands|
+% 命令を実行する。
+% \begin{macrocode}
+\ifbxjs@oldfontcommands
+ \AtEndOfClass{\allowoldfontcommands}
+\fi
+% \end{macrocode}
+% \end{ZRnote}
+%
+% \paragraph{papersizeスペシャルの出力}
+%
+% |dvi| ファイルの先頭にdvipsのpapersize specialを書き込むことで,
+% 出力用紙サイズを設定します。これはdvipdfmxや最近のdvioutにも有効です。
+% どうやらpapersize specialにはtrue付の単位は許されず,かつ単位は
+% 常にtrueなものと扱われるようです。
+% そこで,後で出てくる(☆)の部分,「|\mag|にあわせてスケール」よりも
+% 手前で実行しておくことになります。
+%
+% トンボの付いたときの用紙サイズは無意味ですが,
+% いわゆる「ノビ」サイズという縦横1インチずつ長い用紙に出力することを考えて,
+% 1インチずつ加えました。
+% ところが\pLaTeXe はトンボ出力幅を両側に1インチとっていますので,
+% dvips使用時に
+% \begin{quote}
+% |-O -0.5in,-0.5in|
+% \end{quote}
+% というオプションを与えて両側0.5インチのトンボにするといいでしょう。
+%
+% [2003-05-17] トンボをプレビューに使うことを考えて1インチを2インチにしました。
+%
+% [2016-07-11] memoirクラスのマニュアルによると,トンボを含めた用紙の寸法は
+% |\stockwidth|,|\stockheight|と呼ぶようですので,これを使うことにしました。
+%
+% [2017-01-11] トンボオプションが指定されているとき「だけ」|\stockwidth|,
+% |\stockheight|を定義するようにしました。
+%
+% \begin{ZRnote}
+% BXJSでは出力用紙サイズ記録は |geometry| パッケージが行う。
+%
+% また、JSクラスと異なり、|\stockwidth|、|\stockheight| は常に定義される。
+% \end{ZRnote}
+% \begin{macrocode}
+\newdimen\stockwidth \newdimen\stockheight
+\begingroup\expandafter\expandafter\expandafter\endgroup
+\expandafter\ifx\csname iftombow\expandafter\endcsname\csname iftrue\endcsname
+% \newdimen\stockwidth \newdimen\stockheight
+ \setlength{\stockwidth}{\paperwidth}
+ \setlength{\stockheight}{\paperheight}
+ \advance \stockwidth 2in
+ \advance \stockheight 2in
+\fi
+% \end{macrocode}
+%
+% \paragraph{基準となる行送り}
+%
+% \begin{macro}{\n@baseline}
+%
+% 基準となる行送りをポイント単位で表したものです。
+%
+% \begin{macrocode}
+%<slide>\def\n@baseline{13}%
+%<!slide>\ifdim\bxjs@param@basefontsize<10pt \def\n@baseline{15}%
+%<!slide>\else \def\n@baseline{16}\fi
+% \end{macrocode}
+% \end{macro}
+%
+% \paragraph{拡大率の設定}
+% \mbox{}
+% \begin{ZRnote}
+% |\bxjs@magstyle| の値に応じてスイッチ |jsc@mag| と |jsc@mag@xreal| を
+% 設定する。
+% \begin{macrocode}
+\ifx\bxjs@magstyle\bxjs@magstyle@mag
+ \jsc@magtrue
+\else\ifx\bxjs@magstyle\bxjs@magstyle@xreal
+ \jsc@mag@xrealtrue
+\fi\fi
+% \end{macrocode}
+% \end{ZRnote}
+%
+% サイズの変更は\TeX のプリミティブ |\mag| を使って行います。
+% 9ポイントについては行送りも若干縮めました。
+% サイズについては全面的に見直しました。
+%
+% [2008-12-26] 1000 / |\mag| に相当する |\inv@mag| を定義しました。
+% |truein| を使っていたところを |\inv@mag in| に直しましたので,
+% |geometry| パッケージと共存できると思います。
+% なお,新ドキュメントクラス側で |10pt| 以外にする場合の注意:
+% \begin{itemize}
+% \item |geometry| 側でオプション |truedimen| を指定してください。
+% \item |geometry| 側でオプション |mag| は使えません。
+% \end{itemize}
+%
+% \begin{ZRnote}
+% 設定すべき |\mag| 値を (基底サイズ)/(10\,pt) $\times$ 1000 と算出。
+% BXJSクラスでは、|\mag| を直接指定したい場合は、|geometry| 側では
+% なくクラスのオプションで行うものとする。
+% \begin{macrocode}
+\ifx\bxjs@param@mag\relax
+ \@tempdima=\bxjs@param@basefontsize
+ \advance\@tempdima.001pt \multiply\@tempdima25
+ \divide\@tempdima16384\relax \@tempcnta\@tempdima\relax
+ \edef\bxjs@param@mag{\the\@tempcnta}
+\else
+% mag値が直接指定された場合
+ \bxjs@gset@tempcnta{\bxjs@param@mag}
+ \ifnum\@tempcnta<\z@ \@tempcnta=\z@ \fi
+% 有効なmag値の範囲は1--32768
+ \edef\bxjs@param@mag{\the\@tempcnta}
+ \advance\@tempcnta100000
+ \def\bxjs@tmpa#1#2#3#4#5\@nil{\@tempdima=#2#3#4.#5\p@}
+ \expandafter\bxjs@tmpa\the\@tempcnta\@nil
+ \edef\bxjs@param@basefontsize{\the\@tempdima}
+\fi
+\@tempcnta\bxjs@param@mag \advance\@tempcnta100000
+\def\bxjs@tmpa#1#2#3#4\@nil{\@tempdima=#2#3.#4\p@}
+\expandafter\bxjs@tmpa\the\@tempcnta\@nil
+\edef\jsc@magscale{\strip@pt\@tempdima}
+\let\jsBaseFontSize\bxjs@param@basefontsize
+% \end{macrocode}
+% \end{ZRnote}
+%
+% [2016-07-08] |\jsc@mpt| および |\jsc@mmm| に,それぞれ1ptおよび1mmを拡大させた値を格納します。
+% 以降のレイアウト指定ではこちらを使います。
+%
+% \begin{ZRnote}
+% |\mag| する場合(現状はこれが既定)にコードの変更を低減するために、
+% 以下では必要に応じて、|\jsc@mpt| を |\p@?| と書く。
+% その上で、|\mag| する場合は |?| を無視して |\p@| と解釈させ、
+% |\mag| しない場合は |?| を英字扱いにして |\p@?| という制御綴を
+% |\jsc@mpt| と同値にする。
+% \Note (多分2.0版あたりで)JSクラスに合わせるため |\p@?| 表記を
+% 止める予定。
+% \begin{macrocode}
+\newdimen\jsc@mpt
+\newdimen\jsc@mmm
+\ifjsc@mag
+ \jsc@mpt=1\p@
+ \jsc@mmm=1mm
+ \catcode`\?=9 % \p@? read as \p@
+\else
+ \jsc@mpt=\jsc@magscale\p@
+ \jsc@mmm=\jsc@magscale mm
+ \catcode`\?=11 \let\p@?\jsc@mpt
+\fi
+\chardef\bxjs@qmcc=\catcode`\?\relax
+\g@addto@macro\bxjs@pre@jadriver@hook{\catcode`\?=12\relax}
+% \end{macrocode}
+%
+% ここで{p\TeX}のzwに相当する単位として用いる長さ変数 |\jsZw| を作成する。
+% 約束により、これは |\jsScale| $\times$ (指定フォントサイズ) に等しい。
+%
+% |nozw| 非指定時は |\zw| を |\jsZw| と同義にする。
+% \begin{macrocode}
+\newdimen\jsZw
+\jsZw=10\jsc@mpt \jsZw=\jsScale\jsZw
+\ifbxjs@usezw
+ \providecommand*\zw{\jsZw}
+\fi
+% \end{macrocode}
+%
+% \begin{macro}{\zwspace}
+% 全角幅の水平空き。
+% \begin{macrocode}
+\def\zwspace{\hskip\jsZw\relax}
+% \end{macrocode}
+% \end{macro}
+%
+% そして、magstyle が |nomag*| の場合は、NFSSにパッチを当てる。
+% \begin{macrocode}
+\ifjsc@mag@xreal
+ \RequirePackage{type1cm}
+ \let\jsc@invscale\bxjs@invscale
+% \end{macrocode}
+% ムニャムニャムニャ……。
+% \end{ZRnote}
+% \begin{macrocode}
+ \ifbxjs@TUenc
+ \expandafter\let\csname TU/lmr/m/n/10\endcsname\relax
+ \else
+ \expandafter\let\csname OT1/cmr/m/n/10\endcsname\relax
+ \fi
+ \expandafter\let\csname OMX/cmex/m/n/10\endcsname\relax
+ \let\jsc@get@external@font\get@external@font
+ \def\get@external@font{%
+ \jsc@preadjust@extract@font
+ \jsc@get@external@font}
+ \def\jsc@fstrunc#1{%
+ \edef\jsc@tmpa{\strip@pt#1}%
+ \expandafter\jsc@fstrunc@a\jsc@tmpa.****\@nil}
+ \def\jsc@fstrunc@a#1.#2#3#4#5#6\@nil{%
+ \if#5*\else
+ \edef\jsc@tmpa{#1%
+ \ifnum#2#3>\z@ .#2\ifnum#3>\z@ #3\fi\fi}%
+ \fi}
+ \def\jsc@preadjust@extract@font{%
+ \let\jsc@req@size\f@size
+ \dimen@\f@size\p@ \jsc@invscale\dimen@\jsc@magscale
+ \advance\dimen@.005pt\relax \jsc@fstrunc\dimen@
+ \let\jsc@ref@size\jsc@tmpa
+ \let\f@size\jsc@ref@size}
+ \def\execute@size@function#1{%
+ \let\jsc@cref@size\f@size
+ \let\f@size\jsc@req@size
+ \csname s@fct@#1\endcsname}
+ \let\jsc@DeclareErrorFont\DeclareErrorFont
+ \def\DeclareErrorFont#1#2#3#4#5{%
+ \@tempdimc#5\p@ \@tempdimc\jsc@magscale\@tempdimc
+ \edef\jsc@tmpa{{#1}{#2}{#3}{#4}{\strip@pt\@tempdimc}}
+ \expandafter\jsc@DeclareErrorFont\jsc@tmpa}
+ \def\gen@sfcnt{%
+ \edef\mandatory@arg{\mandatory@arg\jsc@cref@size}%
+ \empty@sfcnt}
+ \def\genb@sfcnt{%
+ \edef\mandatory@arg{%
+ \mandatory@arg\expandafter\genb@x\jsc@cref@size..\@@}%
+ \empty@sfcnt}
+ \ifbxjs@TUenc\else
+ \DeclareErrorFont{OT1}{cmr}{m}{n}{10}
+ \fi
+\fi
+% \end{macrocode}
+%
+% [2016-11-16] latex.ltx (ltspace.dtx)で定義されている |\smallskip| の,
+% 単位 |pt| を |\jsc@mpt| に置き換えた |\jsc@smallskip| を定義します。
+% これは |\maketitle| で用いられます。
+% |\jsc@medskip| と |\jsc@bigskip| は必要ないのでコメントアウトしています。
+%
+% \begin{macro}{\jsc@smallskip}
+% \begin{macro}{\jsc@medskip}
+% \begin{macro}{\jsc@bigskip}
+% \begin{macrocode}
+\def\jsc@smallskip{\vspace\jsc@smallskipamount}
+%\def\jsc@medskip{\vspace\jsc@medskipamount}
+%\def\jsc@bigskip{\vspace\jsc@bigskipamount}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\jsc@smallskipamount}
+% \begin{macro}{\jsc@medskipamount}
+% \begin{macro}{\jsc@bigskipamount}
+% \begin{macrocode}
+\newskip\jsc@smallskipamount
+\jsc@smallskipamount=3\jsc@mpt plus 1\jsc@mpt minus 1\jsc@mpt
+%\newskip\jsc@medskipamount
+%\jsc@medskipamount =6\jsc@mpt plus 2\jsc@mpt minus 2\jsc@mpt
+%\newskip\jsc@bigskipamount
+%\jsc@bigskipamoun =12\jsc@mpt plus 4\jsc@mpt minus 4\jsc@mpt
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% |\paperwidth|,|\paperheight|を|\mag|にあわせてスケールしておきます(☆)。
+%
+% [2016-07-11] 新しく追加した|\stockwidth|,|\stockheight|も|\mag|にあわせて
+% スケールします。
+%
+% [2017-01-11] トンボオプションが指定されているとき「だけ」|\stockwidth|,
+% |\stockheight|が定義されています。
+%
+% \begin{macrocode}
+% \end{macrocode}
+%
+% \paragraph{pagesizeスペシャルの出力}
+%
+% [2003-05-17] dvipdfm(x)のpagesizeスペシャルを出力します。
+%
+% [2004-08-08] 今のdvipdfmxはdvips用スペシャルを理解するようなので外しました。
+%
+% \begin{macrocode}
+% \ifpapersize
+% \setlength{\@tempdima}{\paperwidth}
+% \setlength{\@tempdimb}{\paperheight}
+% \iftombow
+% \advance \@tempdima 2truein
+% \advance \@tempdimb 2truein
+% \fi
+% \AtBeginDvi{\special{pdf: pagesize width \the\@tempdima\space height \the\@tempdimb}}
+% \fi
+% \end{macrocode}
+%
+% \section{和文フォントの変更}
+%
+% \begin{ZRnote}
+% 和文フォントの設定は和文ドライバの管轄。
+% \end{ZRnote}
+%
+% \begin{macro}{\@}
+%
+% 欧文といえば,\LaTeX の |\def\@{\spacefactor\@m}| という定義(|\@m| は1000)
+% では |I watch TV\@.| と書くと V とピリオドのペアカーニングが効かなくなります。
+% そこで,次のような定義に直し,|I watch TV.\@| と書くことにします。
+%
+% [2016-07-14] 2015-01-01の\LaTeX で,auxiliary filesに書き出されたときに
+% スペースが食われないようにする修正が入りました。これに合わせて |{}| を補いました。
+%
+% \begin{ZRnote}
+% BXJSクラスでの変更点:
+% \begin{itemize}
+% \item |fix-at-cmd| オプションが偽の場合は再定義しない。
+% \item 固定の3000でなく実際のピリオドのsfcode値を使う。
+% \item 「防御的な |\@|」での不具合を防ぐため、大文字直後の |\@|
+% は標準と同等の動作にする。
+% \end{itemize}
+% \end{ZRnote}
+%
+% \begin{macrocode}
+\chardef\bxjs@periodchar=`\.
+\bxjs@protected\def\bxjs@SE{%
+ \ifnum\spacefactor<\@m \spacefactor\@m
+ \else \spacefactor\sfcode\bxjs@periodchar
+ \fi}
+\ifbxjs@fix@at@cmd
+ \def\@{\bxjs@SE{}}
+\fi
+% \end{macrocode}
+% \end{macro}
+%
+% \section{フォントサイズ}
+%
+% フォントサイズを変える命令(|\normalsize|,|\small| など)
+% の実際の挙動の設定は,三つの引数をとる命令 |\@setfontsize| を使って,
+% たとえば
+% \begin{quote}
+% |\@setfontsize{\normalsize}{10}{16}|
+% \end{quote}
+% のようにして行います。これは
+% \begin{quote}
+% |\normalsize| は10ポイントのフォントを使い,行送りは16ポイントである
+% \end{quote}
+% という意味です。
+% ただし,処理を速くするため,
+% 以下では10と同義の\LaTeX の内部命令 |\@xpt| を使っています。
+% この |\@xpt| の類は次のものがあり,\LaTeX 本体で定義されています。
+%\begin{verbatim}
+% \@vpt 5 \@vipt 6 \@viipt 7
+% \@viiipt 8 \@ixpt 9 \@xpt 10
+% \@xipt 10.95 \@xiipt 12 \@xivpt 14.4
+%\end{verbatim}
+%
+%^^A\begin{macro}{\@setfontsize}
+%
+% ここでは |\@setfontsize| の定義を少々変更して,
+% 段落の字下げ |\parindent|,
+% 和文文字間のスペース |\kanjiskip|,
+% 和文・欧文間のスペース |\xkanjiskip| を変更しています。
+%
+% |\kanjiskip| は\pLaTeXe で |0pt plus .4pt minus .5pt| に設定していますが,
+% これはそもそも文字サイズの変更に応じて変わるべきものです。
+% それに,プラスになったりマイナスになったりするのは,
+% 追い出しと追い込みの混在が生じ,統一性を欠きます。
+% なるべく追い出しになるようにプラスの値だけにしたいところですが,
+% ごくわずかなマイナスは許すことにしました。
+%
+% |\xkanjiskip| については,四分つまり全角の1/4を標準として,
+% 追い出すために三分あるいは二分まで延ばすのが一般的ですが,
+% ここではTimesやPalatinoのスペースがほぼ四分であることに着目して,
+% これに一致させています。これなら書くときにスペースを空けても
+% 空けなくても同じ出力になります。
+%
+% |\parindent| については,0(以下)でなければ全角幅(1zw)に直します。
+%
+% [2008-02-18] |english| オプションで |\parindent| を 1em にしました。
+%
+% \begin{ZRnote}
+% \begin{macro}{\set@fontsize}
+% |\fontsize| 命令(|\large| 等でなく)でフォントサイズ変更した場合
+% にもフックが実行されるように、|\@setfontsize| では
+% なく |\set@fontsize| に対してパッチを当てるように変更。
+% \begin{macrocode}
+\def\bxjs@tmpa{\def\set@fontsize##1##2##3}
+\expandafter\bxjs@tmpa\expandafter{%
+ \set@fontsize{#1}{#2}{#3}%
+% 末尾にコードを追加
+ \expandafter\def\expandafter\size@update\expandafter{%
+ \size@update
+ \jsFontSizeChanged}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\jsFontSizeChanged}
+% フォントサイズ変更時に呼ばれるフック。
+% |\jsZw| を再設定している。
+% その後でユーザ定義用のフック |\jsResetDimen| を実行する。
+% \begin{macrocode}
+\newcommand*\jsFontSizeChanged{%
+ \jsZw=\f@size\p@
+ \jsZw=\jsScale \jsZw
+ \ifdim\parindent>\z@
+ \if@english \parindent=1em
+ \else \parindent=1\jsZw
+ \fi
+ \fi\relax
+ \jsResetDimen}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\jsResetDimen}
+% ユーザ定義用のフック。
+% \begin{macrocode}
+\newcommand*\jsResetDimen{}
+% \end{macrocode}
+% \end{macro}
+% \end{ZRnote}
+%
+% \begin{macro}{\jsc@setfontsize}
+% クラスファイルの内部では,拡大率も考慮した |\jsc@setfontsize| を
+% |\@setfontsize| の変わりに用いることにします。
+% \begin{macrocode}
+\ifjsc@mag
+ \let\jsc@setfontsize\@setfontsize
+\else
+ \def\jsc@setfontsize#1#2#3{%
+ \@setfontsize#1{#2\jsc@mpt}{#3\jsc@mpt}}
+% microtype対策
+ \ifjsWitheTeX\if j\jsEngine\else
+ \def\jsc@setfontsize#1#2#3{%
+ \edef\bxjs@sfs@next{%
+ \unexpanded{\@setfontsize#1}%
+ {\the\dimexpr#2\jsc@mpt\relax}{\the\dimexpr#3\jsc@mpt\relax}%
+ }\bxjs@sfs@next}
+ \fi\fi
+\fi
+% \end{macrocode}
+% \end{macro}
+%
+% これらのグルーをもってしても行分割ができない場合は,
+% |\emergencystretch| に訴えます。
+%
+% \begin{ZRnote}
+% これはフォントサイズ非依存なので |\Cwd| で書くのが適当だが、
+% |\Cwd| はまだ定義されていない。
+% \end{ZRnote}
+% \begin{macrocode}
+\emergencystretch 3\jsZw
+% \end{macrocode}
+%
+% \begin{macro}{\ifnarrowbaselines}
+% \begin{macro}{\narrowbaselines}
+% \begin{macro}{\widebaselines}
+%
+% 欧文用に行間を狭くする論理変数と,それを真・偽にするためのコマンドです。
+%
+% [2003-06-30] 数式に入るところで |\narrowbaselines|
+% を実行しているので |\abovedisplayskip| 等が初期化
+% されてしまうというshintokさんのご指摘に対して,
+% しっぽ愛好家さんが次の修正を教えてくださいました。
+%
+% [2008-02-18] |english| オプションで最初の段落のインデントをしないようにしました。
+%
+% TODO: Hasumiさん [qa:54539] のご指摘は考慮中です。
+%
+% \begin{ZRnote}
+% 別行立て数式に入るときに |\narrowbaselines| が呼ばれるが、
+% このコードでは「数式中で |\normalsize| などのサイズ命令
+% (|\@currsize| の実体)が呼ばれた」ことになり警告が出る。
+% JSクラスでは、|\@setfontsize| 中の |\@nomath| 実行を消して
+% 「そもそもサイズ命令で警告が出ない」ようにしている。
+% 警告が常に出ないのも望ましくないので、BXJSクラスの実装では、
+% |\narrowbaselines| の時だけ警告が出ないようにする。
+% \end{ZRnote}
+%
+% \begin{macrocode}
+\newif\ifnarrowbaselines
+\if@english
+ \narrowbaselinestrue
+\fi
+\def\narrowbaselines{%
+ \narrowbaselinestrue
+ \skip0=\abovedisplayskip
+ \skip2=\abovedisplayshortskip
+ \skip4=\belowdisplayskip
+ \skip6=\belowdisplayshortskip
+% 一時的に警告を無効化する
+ \let\bxjs@save@nomath\@nomath
+ \let\@nomath\@gobble
+ \@currsize\selectfont
+ \let\@nomath\bxjs@save@nomath
+ \abovedisplayskip=\skip0
+ \abovedisplayshortskip=\skip2
+ \belowdisplayskip=\skip4
+ \belowdisplayshortskip=\skip6\relax}
+\def\widebaselines{\narrowbaselinesfalse\@currsize\selectfont}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{ZRnote}
+% |microtype| パッケージを読み込んだ場合、|\normalsize| 等の
+% フォントサイズ変更命令の定義の中にif文が使われていると、
+% 不可解なエラーが発生する。
+% これは |microtype| が邪悪なトリックを使用しているせいなのだが、
+% 一応こちら側で対策をとることにする。
+% \begin{macrocode}
+\def\bxjs@if@narrowbaselines{%
+ \ifnarrowbaselines\expandafter\@firstoftwo
+ \else \expandafter\@secondoftwo
+ \fi
+}
+% \end{macrocode}
+% \end{ZRnote}
+%
+% \begin{macro}{\normalsize}
+%
+% 標準のフォントサイズと行送りを選ぶコマンドです。
+%
+% 本文10ポイントのときの行送りは,
+% 欧文の標準クラスファイルでは12ポイント,
+% アスキーの和文クラスファイルでは15ポイントになっていますが,
+% ここでは16ポイントにしました。
+% ただし |\narrowbaselines| で欧文用の12ポイントになります。
+%
+% 公称10ポイントの和文フォントが約9.25ポイント
+% (アスキーのものの0.961倍)であることもあり,
+% 行送りがかなりゆったりとしたと思います。
+% 実際,$16/9.25 \approx 1.73$ であり,
+% 和文の推奨値の一つ「二分四分」(1.75)
+% に近づきました。
+%
+% \begin{ZRnote}
+% |microtype| 対策のためif文を避ける。
+% \end{ZRnote}
+% \begin{macrocode}
+\renewcommand{\normalsize}{%
+ \bxjs@if@narrowbaselines{%
+ \jsc@setfontsize\normalsize\@xpt\@xiipt
+ }{%else
+ \jsc@setfontsize\normalsize\@xpt{\n@baseline}%
+ }%
+% \end{macrocode}
+%
+% 数式の上のアキ(|\abovedisplayskip|),
+% 短い数式の上のアキ(|\abovedisplayshortskip|),
+% 数式の下のアキ(|\belowdisplayshortskip|)の設定です。
+%
+% [2003-02-16] ちょっと変えました。
+%
+% [2009-08-26] \TeX\ Q\,\&\,A 52569から始まる議論について逡巡して
+% いましたが,結局,微調節してみることにしました。
+%
+% \begin{macrocode}
+ \abovedisplayskip 11\p@? \@plus3\p@? \@minus4\p@?
+ \abovedisplayshortskip \z@ \@plus3\p@?
+ \belowdisplayskip 9\p@? \@plus3\p@? \@minus4\p@?
+ \belowdisplayshortskip \belowdisplayskip
+% \end{macrocode}
+%
+% 最後に,リスト環境のトップレベルのパラメータ |\@listI| を,
+% |\@listi| にコピーしておきます。|\@listI| の設定は後で出てきます。
+%
+% \begin{macrocode}
+ \let\@listi\@listI}
+% \end{macrocode}
+%
+% ここで実際に標準フォントサイズで初期化します。
+%
+% \begin{macrocode}
+\normalsize
+% \end{macrocode}
+%
+% \end{macro}
+%
+% \begin{macro}{\Cht}
+% \begin{macro}{\Cdp}
+% \begin{macro}{\Cwd}
+% \begin{macro}{\Cvs}
+% \begin{macro}{\Chs}
+%
+% 基準となる長さの設定をします。
+% \pLaTeXe カーネル(\texttt{plfonts.dtx})で宣言されている
+% パラメータに実際の値を設定します。
+% たとえば |\Cwd| は |\normalfont| の全角幅(1zw)です。
+%
+% [2017-08-31] 基準とする文字を「全角空白」(EUCコード\texttt{0xA1A1})から
+% 「漢」(JISコード\texttt{0x3441})へ変更しました。
+%
+% \begin{ZRnote}
+% |\Cwd| 等の変数は{\pTeX}系以外では未定義なのでここで定義する。
+% \begin{macrocode}
+\ifx\Cht\@undefined \newdimen\Cht \fi
+\ifx\Cdp\@undefined \newdimen\Cdp \fi
+\ifx\Cwd\@undefined \newdimen\Cwd \fi
+\ifx\Cvs\@undefined \newdimen\Cvs \fi
+\ifx\Chs\@undefined \newdimen\Chs \fi
+% \end{macrocode}
+%
+% 規約上、現在の |\jsZw| の値が |\Cwd| である。
+% BXJSでは |\Cht| と |\Cdp| は単純に |\Cwd| の88\%と12\%の値とする。
+% \end{ZRnote}
+% \begin{macrocode}
+\setlength\Cht{0.88\jsZw}
+\setlength\Cdp{0.12\jsZw}
+\setlength\Cwd{1\jsZw}
+\setlength\Cvs{\baselineskip}
+\setlength\Chs{1\jsZw}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\small}
+%
+% |\small| も |\normalsize| と同様に設定します。
+% 行送りは,|\normalsize| が16ポイントなら,
+% 割合からすれば$16 \times 0.9 = 14.4$ポイントになりますが,
+% |\small| の使われ方を考えて,ここでは和文13ポイント,
+% 欧文11ポイントとします。
+% また,|\topsep| と |\parsep| は,元はそれぞれ$4 \pm 2$,$2 \pm 1$
+% ポイントでしたが,ここではゼロ(|\z@|)にしました。
+%
+% \begin{ZRnote}
+% |microtype| 対策のためif文を避ける。
+% 後の |\footnotesize| も同様。
+% \end{ZRnote}
+% \begin{macrocode}
+\newcommand{\small}{%
+ \bxjs@if@narrowbaselines{%
+%<!kiyou> \jsc@setfontsize\small\@ixpt{11}%
+%<kiyou> \jsc@setfontsize\small{8.8888}{11}%
+ }{%else
+%<!kiyou> \jsc@setfontsize\small\@ixpt{13}%
+%<kiyou> \jsc@setfontsize\small{8.8888}{13.2418}%
+ }%
+ \abovedisplayskip 9\p@? \@plus3\p@? \@minus4\p@?
+ \abovedisplayshortskip \z@ \@plus3\p@?
+ \belowdisplayskip \abovedisplayskip
+ \belowdisplayshortskip \belowdisplayskip
+ \def\@listi{\leftmargin\leftmargini
+ \topsep \z@
+ \parsep \z@
+ \itemsep \parsep}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\footnotesize}
+%
+% |\footnotesize| も同様です。
+% |\topsep| と |\parsep| は,元はそれぞれ$3 \pm 1$,$2 \pm 1$
+% ポイントでしたが,ここではゼロ(|\z@|)にしました。
+%
+% \begin{macrocode}
+\newcommand{\footnotesize}{%
+ \bxjs@if@narrowbaselines{%
+%<!kiyou> \jsc@setfontsize\footnotesize\@viiipt{9.5}%
+%<kiyou> \jsc@setfontsize\footnotesize{8.8888}{11}%
+ }{%else
+%<!kiyou> \jsc@setfontsize\footnotesize\@viiipt{11}%
+%<kiyou> \jsc@setfontsize\footnotesize{8.8888}{13.2418}%
+ }%
+ \abovedisplayskip 6\p@? \@plus2\p@? \@minus3\p@?
+ \abovedisplayshortskip \z@ \@plus2\p@?
+ \belowdisplayskip \abovedisplayskip
+ \belowdisplayshortskip \belowdisplayskip
+ \def\@listi{\leftmargin\leftmargini
+ \topsep \z@
+ \parsep \z@
+ \itemsep \parsep}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\scriptsize}
+% \begin{macro}{\tiny}
+% \begin{macro}{\large}
+% \begin{macro}{\Large}
+% \begin{macro}{\LARGE}
+% \begin{macro}{\huge}
+% \begin{macro}{\Huge}
+% \begin{macro}{\HUGE}
+%
+% それ以外のサイズは,本文に使うことがないので,
+% 単にフォントサイズと行送りだけ変更します。
+% 特に注意すべきは |\large| で,
+% これは二段組のときに節見出しのフォントとして使い,
+% 行送りを |\normalsize| と同じにすることによって,
+% 節見出しが複数行にわたっても段間で行が揃うようにします。
+%
+% [2004-11-03] |\HUGE| を追加。
+%
+% \begin{macrocode}
+\newcommand{\scriptsize}{\jsc@setfontsize\scriptsize\@viipt\@viiipt}
+\newcommand{\tiny}{\jsc@setfontsize\tiny\@vpt\@vipt}
+\if@twocolumn
+%<!kiyou> \newcommand{\large}{\jsc@setfontsize\large\@xiipt{\n@baseline}}
+%<kiyou> \newcommand{\large}{\jsc@setfontsize\large{11.111}{\n@baseline}}
+\else
+%<!kiyou> \newcommand{\large}{\jsc@setfontsize\large\@xiipt{17}}
+%<kiyou> \newcommand{\large}{\jsc@setfontsize\large{11.111}{17}}
+\fi
+%<!kiyou>\newcommand{\Large}{\jsc@setfontsize\Large\@xivpt{21}}
+%<kiyou>\newcommand{\Large}{\jsc@setfontsize\Large{12.222}{21}}
+\newcommand{\LARGE}{\jsc@setfontsize\LARGE\@xviipt{25}}
+\newcommand{\huge}{\jsc@setfontsize\huge\@xxpt{28}}
+\newcommand{\Huge}{\jsc@setfontsize\Huge\@xxvpt{33}}
+\newcommand{\HUGE}{\jsc@setfontsize\HUGE{30}{40}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% 別行立て数式の中では |\narrowbaselines| にします。
+% 和文の行送りのままでは,行列や場合分けの行送り,
+% 連分数の高さなどが不釣合いに大きくなるためです。
+%
+% 本文中の数式の中では |\narrowbaselines| にしていません。
+% 本文中ではなるべく行送りが変わるような大きいものを使わず,
+% 行列は |amsmath| の |smallmatrix| 環境を使うのがいいでしょう。
+%
+% \begin{macrocode}
+\everydisplay=\expandafter{\the\everydisplay \narrowbaselines}
+% \end{macrocode}
+%
+% しかし,このおかげで別行数式の上下のスペースが少し違ってしまいました。
+% とりあえず |amsmath| の |equation| 関係は |okumacro| のほうで逃げていますが,
+% もっとうまい逃げ道があればお教えください。
+%
+% 見出し用のフォントは |\bfseries| 固定ではなく,|\headfont|
+% という命令で定めることにします。
+% これは太ゴシックが使えるときは |\sffamily| |\bfseries|
+% でいいと思いますが,通常の中ゴシックでは単に |\sffamily|
+% だけのほうがよさそうです。
+% 『p\LaTeXe 美文書作成入門』(1997年)では |\sffamily|
+% |\fontseries{sbc}| として新ゴMと合わせましたが,
+% |\fontseries{sbc}| はちょっと幅が狭いように感じました。
+%
+% \begin{macrocode}
+% \newcommand{\headfont}{\bfseries}
+\newcommand{\headfont}{\sffamily}
+% \newcommand{\headfont}{\sffamily\fontseries{sbc}\selectfont}
+% \end{macrocode}
+%
+% \section{レイアウト}
+%
+% \paragraph{二段組}
+%
+% \begin{macro}{\columnsep}
+% \begin{macro}{\columnseprule}
+%
+% |\columnsep| は二段組のときの左右の段間の幅です。
+% 元は10ptでしたが,2zwにしました。
+% このスペースの中央に |\columnseprule| の幅の罫線が引かれます。
+%
+% \begin{macrocode}
+%<!kiyou>\setlength\columnsep{2\Cwd}
+%<kiyou>\setlength\columnsep{28truebp}
+\setlength\columnseprule{\z@}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \paragraph{段落}
+%
+% \begin{macro}{\lineskip}
+% \begin{macro}{\normallineskip}
+% \begin{macro}{\lineskiplimit}
+% \begin{macro}{\normallineskiplimit}
+%
+% 上下の行の文字が |\lineskiplimit| より接近したら,
+% |\lineskip| より近づかないようにします。
+% 元は0ptでしたが1ptに変更しました。
+% \texttt{normal...} の付いた方は保存用です。
+%
+% \begin{macrocode}
+\setlength\lineskip{1\jsc@mpt}
+\setlength\normallineskip{1\jsc@mpt}
+\setlength\lineskiplimit{1\jsc@mpt}
+\setlength\normallineskiplimit{1\jsc@mpt}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\baselinestretch}
+%
+% 実際の行送りが |\baselineskip| の何倍かを表すマクロです。たとえば
+% \begin{quote}
+% |\renewcommand{\baselinestretch}{2}|
+% \end{quote}
+% とすると,行送りが通常の2倍になります。ただし,
+% これを設定すると,たとえ |\baselineskip| が伸縮するように
+% 設定しても,行送りの伸縮ができなくなります。
+% 行送りの伸縮はしないのが一般的です。
+%
+% \begin{macrocode}
+\renewcommand{\baselinestretch}{}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\parskip}
+% \begin{macro}{\parindent}
+%
+% |\parskip| は段落間の追加スペースです。
+% 元は 0pt plus 1pt になっていましたが,ここではゼロにしました。
+% |\parindent| は段落の先頭の字下げ幅です。
+%
+% \begin{macrocode}
+\setlength\parskip{\z@}
+\if@slide
+ \setlength\parindent{0\p@}
+\else
+ \setlength\parindent{1\Cwd}
+\fi
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\@lowpenalty}
+% \begin{macro}{\@medpenalty}
+% \begin{macro}{\@highpenalty}
+%
+% |\nopagebreak|,|\nolinebreak| は引数に応じて次のペナルティ値
+% のうちどれかを選ぶようになっています。
+% ここはオリジナル通りです。
+%
+% \begin{macrocode}
+\@lowpenalty 51
+\@medpenalty 151
+\@highpenalty 301
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\interlinepenalty}
+%
+% 段落中の改ページのペナルティです。デフォルトは 0 です。
+%
+% \begin{macrocode}
+% \interlinepenalty 0
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\brokenpenalty}
+%
+% ページの最後の行がハイフンで終わる際のペナルティです。
+% デフォルトは100です。
+%
+% \begin{macrocode}
+% \brokenpenalty 100
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{ページレイアウト}
+%
+% \begin{ZRnote}
+% BXJSではページレイアウトの処理は |geometry| パッケージが担当している。
+% \end{ZRnote}
+%
+% \paragraph{準備 \ZRX}
+% \mbox{}
+% \begin{ZRnote}
+%
+% \begin{macro}{\bxjs@bd@pre@geometry@hook}
+% begin-documentフックのコード内で、|geometry| パッケージが挿入する
+% コードの直前で実行されるフック。
+% \begin{macrocode}
+\@onlypreamble\bxjs@bd@pre@geometry@hook
+\let\bxjs@bd@pre@geometry@hook\@empty
+% \end{macrocode}
+% \end{macro}
+%
+% 現状ではここで |\mag| を設定している。\par
+% |\topskip| も指定する。
+% \begin{macrocode}
+\ifjsc@mag
+\mag=\bxjs@param@mag
+\fi
+\setlength{\topskip}{10\p@?}
+% \end{macrocode}
+%
+% |\jsSetQHLength| のための和文単位の定義。
+% \begin{macrocode}
+\def\bxjs@unit@trueQ{0.25truemm}\let\bxjs@unit@trueH\bxjs@unit@trueQ
+\def\bxjs@unit@zw{\jsZw}\let\bxjs@unit@zh\bxjs@unit@zw
+% \end{macrocode}
+%
+% |\bxjs@param@paper| が長さ指定(|{W}{H}|)の場合、
+% |geometry| の形式(|papersize={W,H}|)に変換する。
+% \begin{macrocode}
+\def\bxjs@tmpdo{\futurelet\bxjs@tmpa\bxjs@tmpdo@a}
+\def\bxjs@tmpdo@a{%
+ \ifx\bxjs@tmpa\bgroup \expandafter\bxjs@tmpdo@b
+ \else \expandafter\bxjs@tmpdo@c \fi}
+\def\bxjs@tmpdo@b#1#2#3\@nil{\edef\bxjs@param@paper{papersize={#1,#2}}}
+\def\bxjs@tmpdo@c#1\@nil{\bxjs@tmpdo@d#1,,\@nil}
+\def\bxjs@tmpdo@d#1,#2,#3\@nil{%
+ \ifx\@nil#3\@nil\else \edef\bxjs@param@paper{papersize={#1,#2}}\fi}
+\expandafter\bxjs@tmpdo\bxjs@param@paper\@empty\@empty\@nil
+% \end{macrocode}
+%
+% \begin{macro}{\bxjs@layout@paper}
+% |geometry| の用紙設定のオプション。
+% \begin{macrocode}
+\edef\bxjs@layout@paper{%
+ \ifjsc@mag truedimen,\fi
+ \if@landscape landscape,\fi
+ \bxjs@param@paper}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\bxjs@layout}
+% |geometry| のページレイアウトのオプション列。
+% 文書クラス毎に異なる。
+% \begin{macrocode}
+%<*article|report>
+\def\bxjs@layout@base{%
+ headheight=\topskip,footskip=0.03367\paperheight,%
+ headsep=\footskip-\topskip,includeheadfoot,%
+}
+\edef\bxjs@layout{\bxjs@layout@base
+ hscale=0.76,hmarginratio=1:1,%
+ vscale=0.83,vmarginratio=1:1,%
+}
+%</article|report>
+%<*book>
+\def\bxjs@layout@base{%
+ headheight=\topskip,headsep=6\jsc@mmm,nofoot,includeheadfoot,%
+}
+\ifbxjs@layout@buggyhmargin %---
+% アレ
+\edef\bxjs@layout{\bxjs@layout@base
+ hmargin=36\jsc@mmm,hmarginratio=1:1,%
+ vscale=0.83,vmarginratio=1:1,%
+}
+\else %---
+% 非アレ
+\edef\bxjs@layout{\bxjs@layout@base
+ hmargin=18\jsc@mmm,%
+ vscale=0.83,vmarginratio=1:1,%
+}
+\fi %---
+%</book>
+%<*slide>
+\def\bxjs@layout@base{%
+ noheadfoot,%
+}
+\edef\bxjs@layout{\bxjs@layout@base
+ hscale=0.9,hmarginratio=1:1,%
+ vscale=0.944,vmarginratio=1:1,%
+}
+%</slide>
+% \end{macrocode}
+% \end{macro}
+%
+% |textwidth| オプションの設定を反映する。
+% \begin{macrocode}
+%<*!book>
+\ifx\bxjs@textwidth@opt\@undefined\else
+ \jsSetQHLength\@tempdima{\bxjs@textwidth@opt}
+ \edef\bxjs@layout{\bxjs@layout width=\the\@tempdima,}
+\fi
+%</!book>
+\ifx\bxjs@number@of@lines@opt\@undefined\else
+ \bxjs@gset@tempcnta{\bxjs@number@of@lines@opt}
+ \edef\bxjs@layout{\bxjs@layout lines=\the\@tempcnta,}
+\fi
+% \end{macrocode}
+%
+% \begin{macro}{\fullwidth}
+% 〔寸法レジスタ〕
+% ヘッダ・フッタ領域の横幅。
+% \begin{macrocode}
+\newdimen\fullwidth
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\bxjs@textwidth@limit}
+% 〔寸法値マクロ〕
+% |bxjsbook| における、|\textwidth| 上限の値。
+%
+% \begin{macro}{\jsTextWidthLimit}
+% 〔実数値マクロ〕
+% |\bxjs@textwidth@limit| の全角(|\Cwd|)単位での値。
+% \begin{macrocode}
+%<*book>
+\newcommand\jsTextWidthLimit{40}
+\@tempdima=\jsTextWidthLimit\Cwd
+\ifx\bxjs@textwidth@limit@opt\@undefined\else
+ \bxjs@gset@tempcnta{\bxjs@textwidth@limit@opt}
+ \@tempdima=\@tempcnta\Cwd
+\fi
+\ifx\bxjs@textwidth@opt\@undefined\else
+ \jsSetQHLength\@tempdima{\bxjs@textwidth@opt}
+\fi
+\edef\bxjs@textwidth@limit{\the\@tempdima}
+\ifdim\@tempdima=\jsTextWidthLimit\Cwd\else
+ \bxjs@invscale\@tempdima{\strip@pt\Cwd}
+ \long\edef\jsTextWidthLimit{\strip@pt\@tempdima}
+\fi
+%</book>
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\bxjs@preproc@layout}
+% |geometry| の前処理。
+%
+% |geometry| は |\topskip| が標準の行高(|\ht\strutbox|)より小さくならない
+% ようにする自動調整を行うが、これをどうするかは未検討。
+% 今のところ、単純に回避(無効化)している。
+% \begin{macrocode}
+\def\bxjs@preproc@layout{%
+ \edef\bxjs@save@ht@strutbox{\the\ht\strutbox}\ht\strutbox=10\jsc@mpt}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\bxjs@postproc@layout}
+% |geometry| の後処理。
+% \begin{macrocode}
+\def\bxjs@postproc@layout{%
+% \end{macrocode}
+% |geometry| のドライバを再設定する。
+% \begin{macrocode}
+ \ifx\bxjs@geometry@driver\relax\else
+ \let\Gm@driver\bxjs@geometry@driver
+ \fi
+% \end{macrocode}
+% |\ht\strutbox| の値を元に戻す。
+% \begin{macrocode}
+ \ht\strutbox=\bxjs@save@ht@strutbox\relax
+% \end{macrocode}
+% |\textwidth| の値を補正する。
+% \begin{macrocode}
+ \ifbxjs@whole@zw@lines
+ \@tempdimb=\textwidth
+ \if@twocolumn \@tempdima=2\Cwd \else \@tempdima=1\Cwd \fi
+ \advance\textwidth.005pt\relax
+ \divide\textwidth\@tempdima \multiply\textwidth\@tempdima
+ \advance\@tempdimb-\textwidth
+ \advance\oddsidemargin 0.5\@tempdimb
+ \advance\evensidemargin 0.5\@tempdimb
+ \fi
+ \fullwidth=\textwidth
+% \end{macrocode}
+% |bxjsbook| の場合は、|geometry| が設定した |\textwidth| は |\fullwidth| と
+% して扱い、その値から実際の |\textwidth| を導出する。
+% \begin{macrocode}
+%<*book>
+ \@tempdima=\bxjs@textwidth@limit\relax
+ \ifbxjs@whole@zw@lines
+ \advance\@tempdima.005pt\relax
+ \divide\@tempdima\Cwd \multiply\@tempdima\Cwd
+ \fi
+ \ifdim\textwidth>\@tempdima
+ \textwidth=\@tempdima
+ \addtolength\evensidemargin{\fullwidth-\textwidth}
+ \fi
+%</book>
+% \end{macrocode}
+% |\textheight| 関連の調整。
+% \begin{macrocode}
+ \@tempdimb=\textheight
+ \advance\textheight-\topskip
+ \advance\textheight.005pt\relax
+ \divide\textheight\baselineskip \multiply\textheight\baselineskip
+ \advance\textheight\topskip
+ \advance\@tempdimb-\textheight
+ \advance\topmargin0.5\@tempdimb
+% \end{macrocode}
+% |\headheight| 関連の調整。
+% \begin{macrocode}
+ \@tempdima=\topskip
+ \advance\headheight\@tempdima
+ \advance\topmargin-\@tempdima
+% \end{macrocode}
+% marginpar関連の調整。
+% \begin{macrocode}
+ \setlength\marginparsep{\columnsep}
+ \setlength\marginparpush{\baselineskip}
+ \setlength\marginparwidth{\paperwidth-\oddsidemargin-1truein%
+ -\textwidth-10\jsc@mmm-\marginparsep}
+ \ifbxjs@whole@zw@lines
+ \divide\marginparwidth\Cwd \multiply\marginparwidth\Cwd
+ \fi
+% \end{macrocode}
+% 連動する変数。
+% \begin{macrocode}
+ \maxdepth=.5\topskip
+ \stockwidth=\paperwidth
+ \stockheight=\paperheight
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\jsGeometryOptions}
+% |geometry|パッケージに渡すオプションのリスト。
+% \Note |geometry=user| 指定時にユーザが利用することを想定している。
+% \begin{macrocode}
+\edef\jsGeometryOptions{%
+ \bxjs@layout@paper,\bxjs@layout}
+% \end{macrocode}
+% \end{macro}
+% \end{ZRnote}
+%
+% \paragraph{geometry パッケージを読み込む \ZRX}
+% \mbox{}
+% \begin{ZRnote}
+% |geoemtry=class| の場合に、実際に |geometry| パッケージを読みこむ。
+% \begin{macrocode}
+\ifx\bxjs@geometry\bxjs@geometry@class
+% \end{macrocode}
+%
+% |geometry| のドライバオプション指定。
+% |nopapersize| 指定時は、special命令出力を抑止するために
+% ドライバを |none| にする。
+% そうでない場合は、クラスで指定したドライバオプションが引き継がれる
+% ので何もしなくてよいが、例外として、ドライバが |dvipdfmx| の
+% 時は、現状の |geometry| は |dvipdfm| を指定する必要がある。
+% \begin{macrocode}
+\ifbxjs@papersize
+ \ifx\bxjs@driver@given\bxjs@driver@@dvipdfmx
+ \PassOptionsToPackage{dvipdfm}{geometry}
+ \else\ifx\bxjs@driver@given\bxjs@driver@@dvimode
+ \PassOptionsToPackage{dvipdfm}{geometry}
+ \fi\fi
+ \let\bxPapersizeSpecialDone=t
+\else
+ \PassOptionsToPackage{driver=none}{geometry}
+\fi
+% \end{macrocode}
+%
+% ここで |geometry| を読み込む。
+% \Note |geometry| のbegin-documentフックにおいて、Lua{\TeX}の
+% 旧版互換を有効にする。
+% \begin{macrocode}
+\AtBeginDocument{\bxjs@bd@pre@geometry@hook}
+\AtBeginDocument{\ImposeOldLuaTeXBehavior}
+\bxjs@preproc@layout
+\edef\bxjs@next{%
+ \noexpand\RequirePackage[\bxjs@layout@paper,\bxjs@layout]{geometry}%
+}\bxjs@next
+\AtBeginDocument{\RevokeOldLuaTeXBehavior}
+% \end{macrocode}
+%
+% \begin{macro}{\bxjs@geometry@driver}
+% |geometry| が用いるドライバの名前。
+% \Note この値は一度決めた後は変わってほしくないので、
+% |\bxjs@postproc@layout| において書き戻す処理を入れている。
+% \begin{macrocode}
+\let\bxjs@geometry@driver\Gm@driver
+\bxjs@postproc@layout
+% \end{macrocode}
+% \end{macro}
+%
+% |geometry| のドライバ自動判別に対する前処理。
+% \begin{macrocode}
+\g@addto@macro\bxjs@bd@pre@geometry@hook{%
+% \end{macrocode}
+% |geometry| の4.x版に関する対策。
+% \Note |geometry| の4.x版の使用はBXJS 1.2版より非推奨とし、
+% 2.0版でサポートを廃止する予定。
+% \begin{macrocode}
+ \@ifpackagelater{geometry}{2010/02/12}{}{%else
+ \PackageWarningNoLine\bxjs@clsname
+ {The 'geometry' package installed\MessageBreak
+ is too old (< v5.0)}%
+ \if x\jsEngine \ifnum\mag=\@m\else
+ \def\bxjs@Gm@driver{pdftex}
+ \ifx\pdfhorigin\@undefined \newdimen\pdfhorigin \fi
+ \ifx\pdfvorigin\@undefined \newdimen\pdfvorigin \fi
+ \fi\fi}%
+% \end{macrocode}
+% エンジンが |platex-ng| の時は |geometry| のドライバを |pdftex| にする。
+% \begin{macrocode}
+ \ifjsWithpTeXng
+ \ifx\Gm@driver\@empty
+ \def\Gm@driver{pdftex}%
+ \fi
+ \fi}
+% \end{macrocode}
+%
+% \begin{macro}{\setpagelayout}
+% ページレイアウト設定のためのユーザ命令。
+% \begin{macrocode}
+\def\setpagelayout{%
+ \bxjs@ifplus{\bxjs@setpagelayout@a\tw@}{%else
+ \@ifstar{\bxjs@setpagelayout@a\@ne}{\bxjs@setpagelayout@a\z@}}}
+\def\bxjs@setpagelayout@a#1#2{%
+ \ifcase#1% modify
+ \def\bxjs@next{\ifjsc@mag truedimen,\fi #2}%
+ \or% reset(*)
+ \def\bxjs@next{reset,\bxjs@layout@paper,#2}%
+ \or% semireset(+)
+ \def\bxjs@next{reset,\bxjs@layout@paper,\bxjs@layout@base,#2}%
+ \fi
+ \bxjs@preproc@layout
+ \edef\bxjs@next{%
+ \noexpand\geometry{\bxjs@next}%
+ }\bxjs@next
+ \bxjs@postproc@layout}
+% \end{macrocode}
+% \end{macro}
+%
+% \end{ZRnote}
+%
+% \paragraph{geometry パッケージを読み込まない \ZRX}
+% \mbox{}
+% \begin{ZRnote}
+% |geometry=user|の場合の処理。
+% \begin{macrocode}
+\else\ifx\bxjs@geometry\bxjs@geometry@user
+% \end{macrocode}
+%
+% この場合はユーザが何らかの方法(例えば |geometry| を読み込む)
+% でページレイアウトを設定する必要がある。
+% もし、本体開始時に |\textwidth| がカーネル設定の値(|.5\maxdimen|)
+% のままになっている場合はエラーを出す。
+% \Note |\jsUseMinimalPageLayout| は動作テスト用。
+% \begin{macrocode}
+\g@addto@macro\bxjs@begin@document@hook{%
+ \ifdim\textwidth=.5\maxdimen
+ \ClassError\bxjs@clsname
+ {Page layout is not properly set}%
+ {\@ehd}%
+ \fi}
+\def\jsUseMinimalPageLayout{%
+ \setlength{\textwidth}{6.5in}%
+ \setlength{\textheight}{8in}}
+% \end{macrocode}
+%
+% |\setpagelayout| はとりあえず無効にしておく。
+% \begin{macrocode}
+\let\bxjs@geometry@driver\relax
+\def\setpagelayout{%
+ \bxjs@ifplus{\bxjs@pagelayout@a}{%else
+ \@ifstar{\bxjs@pagelayout@a}{\bxjs@pagelayout@a}}}
+\def\bxjs@pagelayout@a#1{%
+ \ClassError\bxjs@clsname
+ {Command '\string\setpagelayout' is not supported,\MessageBreak
+ because 'geometry' value is not 'class'}\@eha}
+%
+\fi\fi
+% \end{macrocode}
+% \end{ZRnote}
+%
+% \paragraph{JSクラスと共通処理の開始 \ZRX}
+% \mbox{}
+% \begin{ZRnote}
+% ここからのコードは以下の点を除いて JS クラスのものを踏襲する。
+% \begin{itemize}
+% \item zw の代わりに |\jsZw| を用いる。
+% \item article/report/book/slide の切り分けの処理が異なる。
+% \end{itemize}
+% \Note diffが崩壊するのを避けるためオリジナルのコードを無効化した状態で
+% 挿入しておく。
+% \end{ZRnote}
+% \begin{macrocode}
+%<*jsclasses>
+% \end{macrocode}
+%
+% \paragraph{縦方向のスペース}
+%
+% \begin{macro}{\headheight}
+% \begin{macro}{\topskip}
+%
+% |\topskip| は本文領域上端と本文1行目のベースラインとの距離です。
+% あまりぎりぎりの値にすると,本文中に $\int$ のような高い文字が
+% 入ったときに1行目のベースラインが他のページより下がってしまいます。
+% ここでは本文の公称フォントサイズ(10pt)にします。
+%
+% [2003-06-26] |\headheight| はヘッダの高さで,
+% 元は12ptでしたが,新ドキュメントクラスでは |\topskip|
+% と等しくしていました。ところが,|fancyhdr| パッケージ
+% で |\headheight| が小さいとおかしいことになるようです
+% ので,2倍に増やしました。代わりに,版面の上下揃えの
+% 計算では |\headheight| ではなく |\topskip| を使う
+% ことにしました。
+%
+% [2016-08-17] 圏点やルビが一行目に来た場合に下がるのを防ぐた
+% め,|\topskip| を10ptから1.38zwに増やしました。
+% |\headheight| は従来と同じ20ptのままとします。
+%
+% \begin{macrocode}
+\setlength\topskip{1.38zw}%% from 10\jsc@mpt (2016-08-17)
+\if@slide
+ \setlength\headheight{0\jsc@mpt}
+\else
+ \setlength\headheight{20\jsc@mpt}%% from 2\topskip (2016-08-17); from \topskip (2003-06-26)
+\fi
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\footskip}
+%
+% |\footskip| は本文領域下端とフッタ下端との距離です。
+% 標準クラスファイルでは,book で0.35in(約8.89mm),
+% book 以外で30pt(約10.54mm)となっていましたが,
+% ここではA4判のときちょうど1cmとなるように,
+% |\paperheight| の0.03367倍(最小 |\baselineskip|)としました。
+% 書籍については,フッタは使わないことにして,ゼロにしました。
+%
+% \begin{macrocode}
+%<*article|kiyou>
+\if@slide
+ \setlength\footskip{0pt}
+\else
+ \setlength\footskip{0.03367\paperheight}
+ \ifdim\footskip<\baselineskip
+ \setlength\footskip{\baselineskip}
+ \fi
+\fi
+%</article|kiyou>
+%<jspf>\setlength\footskip{9\jsc@mmm}
+%<*book>
+\if@report
+ \setlength\footskip{0.03367\paperheight}
+ \ifdim\footskip<\baselineskip
+ \setlength\footskip{\baselineskip}
+ \fi
+\else
+ \setlength\footskip{0pt}
+\fi
+%</book>
+%<*report>
+\setlength\footskip{0.03367\paperheight}
+\ifdim\footskip<\baselineskip
+ \setlength\footskip{\baselineskip}
+\fi
+%</report>
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\headsep}
+%
+% |\headsep| はヘッダ下端と本文領域上端との距離です。
+% 元は book で18pt(約6.33mm),
+% それ以外で25pt(約8.79mm)になっていました。
+% ここでは article は |\footskip| $-$ |\topskip| としました。
+%
+% [2016-10-08] article の \texttt{slide} のとき,
+% および book の非 \texttt{report} と kiyou のときに |\headsep| を
+% 減らしそこねていたのを修正しました(2016-08-17での修正漏れ)。
+%
+% \begin{macrocode}
+%<*article>
+\if@slide
+ \setlength\headsep{0\jsc@mpt}
+ \addtolength\headsep{-\topskip}%% added (2016-10-08)
+ \addtolength\headsep{10\jsc@mpt}%% added (2016-10-08)
+\else
+ \setlength\headsep{\footskip}
+ \addtolength\headsep{-\topskip}
+\fi
+%</article>
+%<*book>
+\if@report
+ \setlength\headsep{\footskip}
+ \addtolength\headsep{-\topskip}
+\else
+ \setlength\headsep{6\jsc@mmm}
+ \addtolength\headsep{-\topskip}%% added (2016-10-08)
+ \addtolength\headsep{10\jsc@mpt}%% added (2016-10-08)
+\fi
+%</book>
+%<*report>
+\setlength\headsep{\footskip}
+\addtolength\headsep{-\topskip}
+%</report>
+%<*jspf>
+\setlength\headsep{9\jsc@mmm}
+\addtolength\headsep{-\topskip}
+%</jspf>
+%<*kiyou>
+\setlength\headheight{0\jsc@mpt}
+\setlength\headsep{0\jsc@mpt}
+\addtolength\headsep{-\topskip}%% added (2016-10-08)
+\addtolength\headsep{10\jsc@mpt}%% added (2016-10-08)
+%</kiyou>
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\maxdepth}
+%
+% |\maxdepth| は本文最下行の最大の深さで,
+% plain \TeX や\LaTeX~2.09では4ptに固定でした。
+% \LaTeX2e では |\maxdepth| $+$ |\topskip| を本文フォントサイズ
+% の1.5倍にしたいのですが,|\topskip| は本文フォントサイズ
+% (ここでは10pt)に等しいので,結局 |\maxdepth| は |\topskip|
+% の半分の値(具体的には5pt)にします。
+%
+% \begin{macrocode}
+\setlength\maxdepth{.5\topskip}
+% \end{macrocode}
+% \end{macro}
+%
+% \paragraph{本文の幅と高さ}
+%
+% \begin{macro}{\fullwidth}
+%
+% 本文の幅が全角40文字を超えると読みにくくなります。
+% そこで,書籍の場合に限って,
+% 紙の幅が広いときは外側のマージンを余分にとって全角40文字に押え,
+% ヘッダやフッタは本文領域より広く取ることにします。
+% このときヘッダやフッタの幅を表す |\fullwidth| という長さを定義します。
+%
+% \begin{macrocode}
+\newdimen\fullwidth
+% \end{macrocode}
+%
+% この |\fullwidth| は article では紙幅 |\paperwidth|の0.76倍を超えない
+% 全角幅の整数倍(二段組では全角幅の偶数倍)にします。0.76倍という数値は
+% A4縦置きの場合に紙幅から約2インチを引いた値になるように選びました。
+% book では紙幅から36ミリを引いた値にしました。
+%
+% \begin{macro}{\textwidth}
+%
+% 書籍以外では本文領域の幅 |\textwidth| は |\fullwidth| と等しくします。
+% |article| ではA4縦置きで49文字となります。
+% 某学会誌スタイルでは50zw(25文字×2段)+段間8mmとします。
+%
+% \begin{macrocode}
+%<*article>
+\if@slide
+ \setlength\fullwidth{0.9\paperwidth}
+\else
+ \setlength\fullwidth{0.76\paperwidth}
+\fi
+\if@twocolumn \@tempdima=2zw \else \@tempdima=1zw \fi
+\divide\fullwidth\@tempdima \multiply\fullwidth\@tempdima
+\setlength\textwidth{\fullwidth}
+%</article>
+%<*book>
+\if@report
+ \setlength\fullwidth{0.76\paperwidth}
+\else
+ \setlength\fullwidth{\paperwidth}
+ \addtolength\fullwidth{-36\jsc@mmm}
+\fi
+\if@twocolumn \@tempdima=2zw \else \@tempdima=1zw \fi
+\divide\fullwidth\@tempdima \multiply\fullwidth\@tempdima
+\setlength\textwidth{\fullwidth}
+\if@report \else
+ \if@twocolumn \else
+ \ifdim \fullwidth>40zw
+ \setlength\textwidth{40zw}
+ \fi
+ \fi
+\fi
+%</book>
+%<*report>
+\setlength\fullwidth{0.76\paperwidth}
+\if@twocolumn \@tempdima=2zw \else \@tempdima=1zw \fi
+\divide\fullwidth\@tempdima \multiply\fullwidth\@tempdima
+\setlength\textwidth{\fullwidth}
+%</report>
+%<*jspf>
+\setlength\fullwidth{50zw}
+\addtolength\fullwidth{8\jsc@mmm}
+\setlength\textwidth{\fullwidth}
+%</jspf>
+%<*kiyou>
+\setlength\fullwidth{48zw}
+\addtolength\fullwidth{\columnsep}
+\setlength\textwidth{\fullwidth}
+%</kiyou>
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\textheight}
+%
+% 紙の高さ |\paperheight| は,1インチと |\topmargin|
+% と |\headheight| と |\headsep| と |\textheight|
+% と |\footskip| とページ下部の余白を加えたものです。
+%
+% 本文部分の高さ |\textheight| は,
+% 紙の高さ |\paperheight| の0.83倍から,
+% ヘッダの高さ,ヘッダと本文の距離,本文とフッタ下端の距離,
+% |\topskip| を引き,
+% それを |\baselineskip| の倍数に切り捨て,
+% 最後に |\topskip| を加えます。
+% 念のため0.1ポイント余分に加えておきます。
+% 0.83倍という数値は,A4縦置きの場合に紙の高さから
+% 上下マージン各約1インチを引いた値になるように選びました。
+%
+% 某学会誌スタイルでは44行にします。
+%
+% [2003-06-26] |\headheight| を |\topskip| に直しました。
+% 以前はこの二つは値が同じであったので,変化はないはずです。
+%
+% [2016-08-26] |\topskip| を10ptから1.38zwに増やしましたので,
+% その分 |\textheight| を増やします(2016-08-17での修正漏れ)。
+%
+% [2016-10-08] article の slide のときに |\headheight| はゼロ
+% なので,さらに修正しました(2016-08-17での修正漏れ)。
+%
+% \begin{macrocode}
+%<*article|book|report>
+\if@slide
+ \setlength{\textheight}{0.95\paperheight}
+\else
+ \setlength{\textheight}{0.83\paperheight}
+\fi
+\addtolength{\textheight}{-10\jsc@mpt}%% from -\topskip (2016-10-08); from -\headheight (2003-06-26)
+\addtolength{\textheight}{-\headsep}
+\addtolength{\textheight}{-\footskip}
+\addtolength{\textheight}{-\topskip}
+\divide\textheight\baselineskip
+\multiply\textheight\baselineskip
+%</article|book|report>
+%<jspf>\setlength{\textheight}{51\baselineskip}
+%<kiyou>\setlength{\textheight}{47\baselineskip}
+\addtolength{\textheight}{\topskip}
+\addtolength{\textheight}{0.1\jsc@mpt}
+%<jspf>\setlength{\mathindent}{10\jsc@mmm}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\flushbottom}
+%
+% [2016-07-18] |\textheight| に念のため0.1ポイント余裕を持たせて
+% いるのと同様に,|\flushbottom| にも余裕を持たせます。
+% 元の\LaTeXe での完全な |\flushbottom| の定義は
+%\begin{verbatim}
+% \def\flushbottom{%
+% \let\@textbottom\relax \let\@texttop\relax}
+%\end{verbatim}
+% ですが,次のようにします。
+%
+% \begin{macrocode}
+\def\flushbottom{%
+ \def\@textbottom{\vskip \z@ \@plus.1\jsc@mpt}%
+ \let\@texttop\relax}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\marginparsep}
+% \begin{macro}{\marginparpush}
+%
+% |\marginparsep| は欄外の書き込みと本文との間隔です。
+% |\marginparpush| は欄外の書き込みどうしの最小の間隔です。
+%
+% \begin{macrocode}
+\setlength\marginparsep{\columnsep}
+\setlength\marginparpush{\baselineskip}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\oddsidemargin}
+% \begin{macro}{\evensidemargin}
+%
+% それぞれ奇数ページ,偶数ページの左マージンから1インチ引いた値です。
+% 片面印刷では |\oddsidemargin| が使われます。
+% \TeX は上・左マージンに |1truein| を挿入しますが,
+% トンボ関係のオプションが指定されるとp\LaTeXe (|plcore.ltx|)
+% はトンボの内側に |1in| のスペース(|1truein| ではなく)を挿入するので,
+% 場合分けしています。
+%
+% \begin{macrocode}
+\setlength{\oddsidemargin}{\paperwidth}
+\addtolength{\oddsidemargin}{-\fullwidth}
+\setlength{\oddsidemargin}{.5\oddsidemargin}
+\iftombow
+ \addtolength{\oddsidemargin}{-1in}
+\else
+ \addtolength{\oddsidemargin}{-\inv@mag in}
+\fi
+\setlength{\evensidemargin}{\oddsidemargin}
+\if@mparswitch
+ \addtolength{\evensidemargin}{\fullwidth}
+ \addtolength{\evensidemargin}{-\textwidth}
+\fi
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\marginparwidth}
+%
+% |\marginparwidth| は欄外の書き込みの横幅です。
+% 外側マージンの幅(|\evensidemargin| $+$ 1インチ)から1センチを引き,
+% さらに |\marginparsep|(欄外の書き込みと本文のアキ)を引いた値に
+% しました。最後に1\,zwの整数倍に切り捨てます。
+%
+% \begin{macrocode}
+\setlength\marginparwidth{\paperwidth}
+\addtolength\marginparwidth{-\oddsidemargin}
+\addtolength\marginparwidth{-\inv@mag in}
+\addtolength\marginparwidth{-\textwidth}
+\addtolength\marginparwidth{-10\jsc@mmm}
+\addtolength\marginparwidth{-\marginparsep}
+\@tempdima=1zw
+\divide\marginparwidth\@tempdima
+\multiply\marginparwidth\@tempdima
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\topmargin}
+%
+% 上マージン(紙の上端とヘッダ上端の距離)
+% から1インチ引いた値です。
+%
+% [2003-06-26] |\headheight| を |\topskip| に直しました。
+% 以前はこの二つは値が同じであったので,変化はないはずです。
+%
+% [2016-08-17] |\topskip| を10ptから1.38zwに直しましたが,
+% |\topmargin| は従来の値から変わらないように調節しました。
+% …のつもりでしたが,|\textheight| を増やし忘れていたので
+% 変わってしまっていました(2016-08-26修正済み)。
+%
+% \begin{macrocode}
+\setlength\topmargin{\paperheight}
+\addtolength\topmargin{-\textheight}
+\if@slide
+ \addtolength\topmargin{-\headheight}
+\else
+ \addtolength\topmargin{-10\jsc@mpt}%% from -\topskip (2016-10-08); from -\headheight (2003-06-26)
+\fi
+\addtolength\topmargin{-\headsep}
+\addtolength\topmargin{-\footskip}
+\setlength\topmargin{0.5\topmargin}
+%<kiyou>\setlength\topmargin{81truebp}
+\iftombow
+ \addtolength\topmargin{-1in}
+\else
+ \addtolength\topmargin{-\inv@mag in}
+\fi
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+%</jsclasses>
+% \end{macrocode}
+%
+% \paragraph{脚注}
+%
+% \begin{macro}{\footnotesep}
+%
+% 各脚注の頭に入る支柱(strut)の高さです。
+% 脚注間に余分のアキが入らないように,
+% |\footnotesize| の支柱の高さ(行送りの0.7倍)に等しくします。
+%
+% \begin{ZRnote}
+% ここは元々は
+%\begin{verbatim}
+%{\footnotesize\global\setlength\footnotesep{\baselineskip}}
+%\end{verbatim}
+% としていたが、そもそも |\global||\setlength|~ は\Pkg{calc}使用時には
+% 有意義な動作をしない。
+% |\global||\footnotesep| だと所望の値が得られるが、
+% 同時に |\footnotesize| のフォントを固定させてしまうという副作用をもつ。
+% なので、実際の設定値を直接使うことにする。
+% \end{ZRnote}
+% \begin{macrocode}
+\footnotesep=11\p@? \footnotesep=0.7\footnotesep
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\footins}
+%
+% |\skip\footins| は本文の最終行と最初の脚注との間の距離です。
+% 標準の10ポイントクラスでは 9 plus 4 minus 2 ポイントになっていますが,
+% 和文の行送りを考えてもうちょっと大きくします。
+%
+% \begin{macrocode}
+\setlength{\skip\footins}{16\p@? \@plus 5\p@? \@minus 2\p@?}
+% \end{macrocode}
+% \end{macro}
+%
+% \paragraph{フロート関連}
+%
+% フロート(図,表)関連のパラメータは\LaTeXe 本体で定義されていますが,
+% ここで設定変更します。本文ページ(本文とフロートが共存するページ)
+% とフロートだけのページで設定が異なります。
+% ちなみに,カウンタは内部では |\c@| を名前に冠したマクロになっています。
+%
+% \begin{macro}{\c@topnumber}
+%
+% |topnumber| カウンタは本文ページ上部のフロートの最大数です。
+%
+% [2003-08-23] ちょっと増やしました。
+%
+% \begin{macrocode}
+\setcounter{topnumber}{9}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\topfraction}
+%
+% 本文ページ上部のフロートが占有できる最大の割合です。
+% フロートが入りやすいように,元の値 0.7 を 0.8 [2003-08-23: 0.85] に変えてあります。
+%
+% \begin{macrocode}
+\renewcommand{\topfraction}{.85}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\c@bottomnumber}
+%
+% |bottomnumber| カウンタは本文ページ下部のフロートの最大数です。
+%
+% [2003-08-23] ちょっと増やしました。
+%
+% \begin{macrocode}
+\setcounter{bottomnumber}{9}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\bottomfraction}
+%
+% 本文ページ下部のフロートが占有できる最大の割合です。元は 0.3 でした。
+%
+% \begin{macrocode}
+\renewcommand{\bottomfraction}{.8}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\c@totalnumber}
+%
+% |totalnumber| カウンタは本文ページに入りうるフロートの最大数です。
+%
+% [2003-08-23] ちょっと増やしました。
+%
+% \begin{macrocode}
+\setcounter{totalnumber}{20}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\textfraction}
+%
+% 本文ページに最低限入らなければならない本文の割合です。
+% フロートが入りやすいように元の 0.2 を 0.1 に変えました。
+%
+% \begin{macrocode}
+\renewcommand{\textfraction}{.1}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\floatpagefraction}
+%
+% フロートだけのページでのフロートの最小割合です。
+% これも 0.5 を 0.8 に変えてあります。
+%
+% \begin{macrocode}
+\renewcommand{\floatpagefraction}{.8}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\c@dbltopnumber}
+%
+% 二段組のとき本文ページ上部に出力できる
+% 段抜きフロートの最大数です。
+%
+% [2003-08-23] ちょっと増やしました。
+%
+% \begin{macrocode}
+\setcounter{dbltopnumber}{9}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\dbltopfraction}
+%
+% 二段組のとき本文ページ上部に出力できる
+% 段抜きフロートが占めうる最大の割合です。
+% 0.7 を 0.8 に変えてあります。
+%
+% \begin{macrocode}
+\renewcommand{\dbltopfraction}{.8}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\dblfloatpagefraction}
+%
+% 二段組のときフロートだけのページに入るべき
+% 段抜きフロートの最小割合です。
+% 0.5 を 0.8 に変えてあります。
+%
+% \begin{macrocode}
+\renewcommand{\dblfloatpagefraction}{.8}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\floatsep}
+% \begin{macro}{\textfloatsep}
+% \begin{macro}{\intextsep}
+%
+% |\floatsep| はページ上部・下部のフロート間の距離です。
+% |\textfloatsep| はページ上部・下部のフロートと本文との距離です。
+% |\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@?}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\dblfloatsep}
+% \begin{macro}{\dbltextfloatsep}
+%
+% 二段組のときの段抜きのフロートについての値です。
+%
+% \begin{macrocode}
+\setlength\dblfloatsep {12\p@? \@plus 2\p@? \@minus 2\p@?}
+\setlength\dbltextfloatsep{20\p@? \@plus 2\p@? \@minus 4\p@?}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\@fptop}
+% \begin{macro}{\@fpsep}
+% \begin{macro}{\@fpbot}
+%
+% フロートだけのページに入るグルーです。
+% |\@fptop| はページ上部,
+% |\@fpbot| はページ下部,
+% |\@fpsep| はフロート間に入ります。
+%
+% \begin{macrocode}
+\setlength\@fptop{0\p@? \@plus 1fil}
+\setlength\@fpsep{8\p@? \@plus 2fil}
+\setlength\@fpbot{0\p@? \@plus 1fil}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\@dblfptop}
+% \begin{macro}{\@dblfpsep}
+% \begin{macro}{\@dblfpbot}
+%
+% 段抜きフロートについての値です。
+%
+% \begin{macrocode}
+\setlength\@dblfptop{0\p@? \@plus 1fil}
+\setlength\@dblfpsep{8\p@? \@plus 2fil}
+\setlength\@dblfpbot{0\p@? \@plus 1fil}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \section{改ページ(日本語\TeX{}開発コミュニティ版のみ)}\label{sec:cleardoublepage}
+%
+% \begin{macro}{\pltx@cleartorightpage}
+% \begin{macro}{\pltx@cleartoleftpage}
+% \begin{macro}{\pltx@cleartooddpage}
+% \begin{macro}{\pltx@cleartoevenpage}
+% [2017-02-24] コミュニティ版\pLaTeX の標準クラス2017/02/15に合わせて,
+% 同じ命令を追加しました。
+% \begin{enumerate}
+% \item|\pltx@cleartorightpage|:右ページになるまでページを繰る命令
+% \item|\pltx@cleartoleftpage|:左ページになるまでページを繰る命令
+% \item|\pltx@cleartooddpage|:奇数ページになるまでページを繰る命令
+% \item|\pltx@cleartoevenpage|:偶数ページになるまでページを繰る命令
+% \end{enumerate}
+% となっています。
+%
+% \begin{macrocode}
+%\def\pltx@cleartorightpage{\clearpage\if@twoside
+% \ifodd\c@page
+% \iftdir
+% \hbox{}\thispagestyle{empty}\newpage
+% \if@twocolumn\hbox{}\newpage\fi
+% \fi
+% \else
+% \ifydir
+% \hbox{}\thispagestyle{empty}\newpage
+% \if@twocolumn\hbox{}\newpage\fi
+% \fi
+% \fi\fi}
+%\def\pltx@cleartoleftpage{\clearpage\if@twoside
+% \ifodd\c@page
+% \ifydir
+% \hbox{}\thispagestyle{empty}\newpage
+% \if@twocolumn\hbox{}\newpage\fi
+% \fi
+% \else
+% \iftdir
+% \hbox{}\thispagestyle{empty}\newpage
+% \if@twocolumn\hbox{}\newpage\fi
+% \fi
+% \fi\fi}
+\def\pltx@cleartooddpage{\clearpage\if@twoside
+ \ifodd\c@page\else
+ \hbox{}\thispagestyle{empty}\newpage
+ \if@twocolumn\hbox{}\newpage\fi
+ \fi\fi}
+\def\pltx@cleartoevenpage{\clearpage\if@twoside
+ \ifodd\c@page
+ \hbox{}\thispagestyle{empty}\newpage
+ \if@twocolumn\hbox{}\newpage\fi
+ \fi\fi}
+% \end{macrocode}
+%
+% \begin{ZRnote}
+% BXJSクラスでは |\iftdir| 等が使えないので、
+% 横組を仮定した定義を用いる。
+% \begin{macrocode}
+\let\pltx@cleartorightpage\pltx@cleartooddpage
+\let\pltx@cleartoleftpage\pltx@cleartoevenpage
+% \end{macrocode}
+% \end{ZRnote}
+%
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\cleardoublepage}
+% [2017-02-24] コミュニティ版\pLaTeX の標準クラス2017/02/15に合わせて,
+% reportとbookクラスの場合に|\cleardoublepage|を再定義します。
+% \begin{macrocode}
+%<*book|report>
+\if@openleft
+ \let\cleardoublepage\pltx@cleartoleftpage
+\else\if@openright
+ \let\cleardoublepage\pltx@cleartorightpage
+\fi\fi
+%</book|report>
+% \end{macrocode}
+% \end{macro}
+%
+% \section{ページスタイル}\label{sec:pagestyle}
+%
+% ページスタイルとして,\LaTeXe (欧文版)の標準クラス
+% では |empty|,|plain|,|headings|,|myheadings| があります。
+% このうち |empty|,|plain| スタイルは\LaTeXe 本体
+% で定義されています。
+%
+% アスキーのクラスファイルでは |headnombre|,|footnombre|,
+% |bothstyle|,|jpl@in| が追加されていますが,
+% ここでは欧文標準のものだけにしました。
+%
+% ページスタイルは |\ps@...| の形のマクロで定義されています。
+%
+% \begin{macro}{\@evenhead}
+% \begin{macro}{\@oddhead}
+% \begin{macro}{\@evenfoot}
+% \begin{macro}{\@oddfoot}
+%
+% |\@oddhead|,|\@oddfoot|,|\@evenhead|,|\@evenfoot| は
+% 偶数・奇数ページの柱(ヘッダ,フッタ)を出力する命令です。
+% これらは |\fullwidth| 幅の |\hbox| の中で呼び出されます。
+% |\ps@...| の中で定義しておきます。
+%
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% 柱の内容は,|\chapter| が呼び出す |\chaptermark{何々}|,
+% |\section| が呼び出す |\sectionmark{何々}| で設定します。
+% 柱を扱う命令には次のものがあります。
+%
+% \begin{quote}
+% \begin{tabbing}
+% |\markboth{左}{右} | \= 両方の柱を設定します。\\
+% |\markright{右}| \> 右の柱を設定します。\\
+% |\leftmark| \> 左の柱を出力します。\\
+% |\rightmark| \> 右の柱を出力します。
+% \end{tabbing}
+% \end{quote}
+%
+% 柱を設定する命令は,右の柱が左の柱の下位にある場合は十分まともに
+% 動作します。たとえば左マークを |\chapter|,右マークを |\section|
+% で変更する場合がこれにあたります。
+% しかし,同一ページに複数の |\markboth| があると,
+% おかしな結果になることがあります。
+%
+% |\tableofcontents| のような命令で使われる |\@mkboth| は,
+% |\ps@...| コマンド中で |\markboth| か |\@gobbletwo|(何もしない)
+% に |\let| されます。
+%
+% \begin{macro}{\ps@empty}
+%
+% |empty| ページスタイルの定義です。
+% \LaTeX 本体で定義されているものをコメントアウトした形で
+% 載せておきます。
+%
+% \begin{macrocode}
+% \def\ps@empty{%
+% \let\@mkboth\@gobbletwo
+% \let\@oddhead\@empty
+% \let\@oddfoot\@empty
+% \let\@evenhead\@empty
+% \let\@evenfoot\@empty}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\ps@plainhead}
+% \begin{macro}{\ps@plainfoot}
+% \begin{macro}{\ps@plain}
+%
+% |plainhead| はシンプルなヘッダだけのページスタイルです。
+%
+% |plainfoot| はシンプルなフッタだけのページスタイルです。
+%
+% |plain| は |book| では |plainhead|,それ以外では |plainfoot| になります。
+%
+% \begin{macrocode}
+\def\ps@plainfoot{%
+ \let\@mkboth\@gobbletwo
+ \let\@oddhead\@empty
+ \def\@oddfoot{\normalfont\hfil\thepage\hfil}%
+ \let\@evenhead\@empty
+ \let\@evenfoot\@oddfoot}
+\def\ps@plainhead{%
+ \let\@mkboth\@gobbletwo
+ \let\@oddfoot\@empty
+ \let\@evenfoot\@empty
+ \def\@evenhead{%
+ \if@mparswitch \hss \fi
+ \hbox to \fullwidth{\textbf{\thepage}\hfil}%
+ \if@mparswitch\else \hss \fi}%
+ \def\@oddhead{%
+ \hbox to \fullwidth{\hfil\textbf{\thepage}}\hss}}
+%<book>\let\ps@plain\ps@plainhead
+%<!book>\let\ps@plain\ps@plainfoot
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\ps@headings}
+%
+% |headings| スタイルはヘッダに見出しとページ番号を出力します。
+% ここではヘッダにアンダーラインを引くようにしてみました。
+%
+% まず article の場合です。
+%
+% \begin{macrocode}
+%<*article|slide>
+\if@twoside
+ \def\ps@headings{%
+ \let\@oddfoot\@empty
+ \let\@evenfoot\@empty
+ \def\@evenhead{\if@mparswitch \hss \fi
+ \underline{\hbox to \fullwidth{\textbf{\thepage}\hfil\leftmark}}%
+ \if@mparswitch\else \hss \fi}%
+ \def\@oddhead{%
+ \underline{%
+ \hbox to \fullwidth{{\rightmark}\hfil\textbf{\thepage}}}\hss}%
+ \let\@mkboth\markboth
+ \def\sectionmark##1{\markboth{%
+ \ifnum \c@secnumdepth >\z@ \bxjs@label@sect{section}\hskip1\jsZw\fi
+ ##1}{}}%
+ \def\subsectionmark##1{\markright{%
+ \ifnum \c@secnumdepth >\@ne \bxjs@label@sect{subsection}\hskip1\jsZw\fi
+ ##1}}%
+ }
+\else % if not twoside
+ \def\ps@headings{%
+ \let\@oddfoot\@empty
+ \def\@oddhead{%
+ \underline{%
+ \hbox to \fullwidth{{\rightmark}\hfil\textbf{\thepage}}}\hss}%
+ \let\@mkboth\markboth
+ \def\sectionmark##1{\markright{%
+ \ifnum \c@secnumdepth >\z@ \bxjs@label@sect{section}\hskip1\jsZw\fi
+ ##1}}}
+\fi
+%</article|slide>
+% \end{macrocode}
+%
+% 次は book および report の場合です。
+% [2011-05-10] しっぽ愛好家さん [qa:6370] のパッチを取り込ませていただきました
+% (北見さん [qa:55896] のご指摘ありがとうございます)。
+%
+% \begin{ZRnote}
+% |\autoxspacing| は未定義の可能性があるため、
+% 「|\autoxspacing| が定義済なら実行する」マクロ |\bxjs@maybe@autoxspacing| を
+% 代わりに用いる。
+% \end{ZRnote}
+%
+% \begin{macrocode}
+%<*book|report>
+\def\bxjs@maybe@autoxspacing{%
+ \ifx\autoxspacing\@undefined\else \autoxspacing \fi}
+\newif\if@omit@number
+\def\ps@headings{%
+ \let\@oddfoot\@empty
+ \let\@evenfoot\@empty
+ \def\@evenhead{%
+ \if@mparswitch \hss \fi
+ \underline{\hbox to \fullwidth{\bxjs@maybe@autoxspacing
+ \textbf{\thepage}\hfil\leftmark}}%
+ \if@mparswitch\else \hss \fi}%
+ \def\@oddhead{\underline{\hbox to \fullwidth{\bxjs@maybe@autoxspacing
+ {\if@twoside\rightmark\else\leftmark\fi}\hfil\textbf{\thepage}}}\hss}%
+ \let\@mkboth\markboth
+ \def\chaptermark##1{\markboth{%
+ \ifnum \c@secnumdepth >\m@ne
+ \if@mainmatter
+ \if@omit@number\else
+ \@chapapp\thechapter\@chappos\hskip1\jsZw
+ \fi
+ \fi
+ \fi
+ ##1}{}}%
+ \def\sectionmark##1{\markright{%
+ \ifnum \c@secnumdepth >\z@ \bxjs@label@sect{section}\hskip1\jsZw\fi
+ ##1}}}%
+%</book|report>
+% \end{macrocode}
+%
+% 最後は学会誌の場合です。
+%
+% \begin{macrocode}
+%<*jspf>
+\def\ps@headings{%
+ \def\@oddfoot{\normalfont\hfil\thepage\hfil}
+ \def\@evenfoot{\normalfont\hfil\thepage\hfil}
+ \def\@oddhead{\normalfont\hfil \@title \hfil}
+ \def\@evenhead{\normalfont\hfil プラズマ・核融合学会誌\hfil}}
+%</jspf>
+% \end{macrocode}
+%
+% \end{macro}
+%
+% \begin{macro}{\ps@myheadings}
+%
+% |myheadings| ページスタイルではユーザが |\markboth| や |\markright| で
+% 柱を設定するため,ここでの定義は非常に簡単です。
+%
+% [2004-01-17] 渡辺徹さんのパッチを適用しました。
+%
+% \begin{macrocode}
+\def\ps@myheadings{%
+ \let\@oddfoot\@empty\let\@evenfoot\@empty
+ \def\@evenhead{%
+ \if@mparswitch \hss \fi%
+ \hbox to \fullwidth{\thepage\hfil\leftmark}%
+ \if@mparswitch\else \hss \fi}%
+ \def\@oddhead{%
+ \hbox to \fullwidth{\rightmark\hfil\thepage}\hss}%
+ \let\@mkboth\@gobbletwo
+%<book|report> \let\chaptermark\@gobble
+ \let\sectionmark\@gobble
+%<!book&!report> \let\subsectionmark\@gobble
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \section{文書のマークアップ}
+%
+% \subsection{表題}
+%
+% \begin{macro}{\title}
+% \begin{macro}{\author}
+% \begin{macro}{\date}
+%
+% これらは\LaTeX 本体で次のように定義されています。
+% ここではコメントアウトした形で示します。
+%
+% \begin{macrocode}
+% \newcommand*{\title}[1]{\gdef\@title{#1}}
+% \newcommand*{\author}[1]{\gdef\@author{#1}}
+% \newcommand*{\date}[1]{\gdef\@date{#1}}
+% \date{\today}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{ZRnote}
+% \begin{macro}{\subtitle}
+% \begin{macro}{\jsSubtitle}
+% 副題を設定する。
+% \Note プレアンブルにおいて |\newcommand*{\subtitle}{...}| が
+% 行われることへの対策として、
+% |\subtitle| の定義を |\title| の実行まで遅延させることにする。
+% もしどうしても主題より前に副題を設定したい場合は、
+% |\jsSubtitle| 命令を直接用いればよい。
+%
+% 本体を |\jsSubtitle| として定義する。
+% \begin{macrocode}
+\newcommand*{\jsSubtitle}[1]{\gdef\bxjs@subtitle{#1}}
+%\let\bxjs@subtitle\@undefined
+% \end{macrocode}
+%
+% |\title| にフックを入れる。
+% \begin{macrocode}
+\renewcommand*{\title}[1]{\bxjs@decl@subtitle\gdef\@title{#1}}
+\AtBeginDocument{\bxjs@decl@subtitle}
+\def\bxjs@decl@subtitle{%
+ \global\let\bxjs@decl@subtitle\relax
+ \ifx\subtitle\@undefined
+ \global\let\subtitle\jsSubtitle
+ \fi}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\bxjs@annihilate@subtitle}
+% |\subtitle| 命令を無効化する。
+% \Note 独自の |\subtitle| が使われている場合は無効化しない。
+% \begin{macrocode}
+\def\bxjs@annihilate@subtitle{%
+ \ifx\subtitle\jsSubtitle \global\let\subtitle\relax \fi
+ \global\let\jsSubtitle\relax}
+% \end{macrocode}
+% \end{macro}
+%
+% \end{ZRnote}
+%
+% \begin{macro}{\etitle}
+% \begin{macro}{\eauthor}
+% \begin{macro}{\keywords}
+%
+% 某学会誌スタイルで使う英語のタイトル,英語の著者名,キーワード,メールアドレスです。
+%
+% \begin{macrocode}
+%<*jspf>
+\newcommand*{\etitle}[1]{\gdef\@etitle{#1}}
+\newcommand*{\eauthor}[1]{\gdef\@eauthor{#1}}
+\newcommand*{\keywords}[1]{\gdef\@keywords{#1}}
+\newcommand*{\email}[1]{\gdef\authors@mail{#1}}
+\newcommand*{\AuthorsEmail}[1]{\gdef\authors@mail{author's e-mail:\ #1}}
+%</jspf>
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\plainifnotempty}
+%
+% 従来の標準クラスでは,文書全体のページスタイルを |empty| に
+% しても表題のあるページだけ |plain| になってしまうことが
+% ありました。これは |\maketitle| の定義中
+% に |\thispagestyle|\hspace{0pt}|{plain}| が入っている
+% ためです。この問題を解決するために,
+% 「全体のページスタイルが |empty| でないなら
+% このページのスタイルを |plain| にする」という次の
+% 命令を作ることにします。
+%
+% \begin{macrocode}
+\def\plainifnotempty{%
+ \ifx \@oddhead \@empty
+ \ifx \@oddfoot \@empty
+ \else
+ \thispagestyle{plainfoot}%
+ \fi
+ \else
+ \thispagestyle{plainhead}%
+ \fi}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\maketitle}
+%
+% 表題を出力します。
+% 著者名を出力する部分は,欧文の標準クラスファイルでは |\large|,
+% 和文のものでは |\Large| になっていましたが,ここでは |\large|
+% にしました。
+%
+% [2016-11-16] 新設された \texttt{nomag} および \texttt{nomag*} オプション
+% の場合をデフォルト(\texttt{usemag} 相当)に合わせるため,|\smallskip| を
+% |\jsc@smallskip| に置き換えました。|\smallskip| のままでは
+% \texttt{nomag(*)} の場合にスケールしなくなり,レイアウトが変わってしまいます。
+%
+% \begin{macrocode}
+%<*article|book|report|slide>
+\if@titlepage
+ \newcommand{\maketitle}{%
+ \begin{titlepage}%
+ \let\footnotesize\small
+ \let\footnoterule\relax
+ \let\footnote\thanks
+ \null\vfil
+ \if@slide
+ {\footnotesize \@date}%
+ \begin{center}
+ \mbox{} \\[1\jsZw]
+ \large
+ {\maybeblue\hrule height0\p@? depth2\p@?\relax}\par
+ \jsc@smallskip
+ \@title
+ \ifx\bxjs@subtitle\@undefined\else
+ \par\vskip\z@
+ {\small \bxjs@subtitle\par}
+ \fi
+ \jsc@smallskip
+ {\maybeblue\hrule height0\p@? depth2\p@?\relax}\par
+ \vfill
+ {\small \@author}%
+ \end{center}
+ \else
+ \vskip 60\p@?
+ \begin{center}%
+ {\LARGE \@title \par}%
+ \ifx\bxjs@subtitle\@undefined\else
+ \vskip5\p@?
+ {\normalsize \bxjs@subtitle\par}
+ \fi
+ \vskip 3em%
+ {\large
+ \lineskip .75em
+ \begin{tabular}[t]{c}%
+ \@author
+ \end{tabular}\par}%
+ \vskip 1.5em
+ {\large \@date \par}%
+ \end{center}%
+ \fi
+ \par
+ \@thanks\vfil\null
+ \end{titlepage}%
+ \setcounter{footnote}{0}%
+ \global\let\thanks\relax
+ \global\let\maketitle\relax
+ \global\let\@thanks\@empty
+ \global\let\@author\@empty
+ \global\let\@date\@empty
+ \global\let\@title\@empty
+ \global\let\title\relax
+ \global\let\author\relax
+ \global\let\date\relax
+ \global\let\and\relax
+ \bxjs@annihilate@subtitle
+ }%
+\else
+ \newcommand{\maketitle}{\par
+ \begingroup
+ \renewcommand\thefootnote{\@fnsymbol\c@footnote}%
+ \def\@makefnmark{\rlap{\@textsuperscript{\normalfont\@thefnmark}}}%
+ \long\def\@makefntext##1{\advance\leftskip 3\jsZw
+ \parindent 1\jsZw\noindent
+ \llap{\@textsuperscript{\normalfont\@thefnmark}\hskip0.3\jsZw}##1}%
+ \if@twocolumn
+ \ifnum \col@number=\@ne
+ \@maketitle
+ \else
+ \twocolumn[\@maketitle]%
+ \fi
+ \else
+ \newpage
+ \global\@topnum\z@ % Prevents figures from going at top of page.
+ \@maketitle
+ \fi
+ \plainifnotempty
+ \@thanks
+ \endgroup
+ \setcounter{footnote}{0}%
+ \global\let\thanks\relax
+ \global\let\maketitle\relax
+ \global\let\@thanks\@empty
+ \global\let\@author\@empty
+ \global\let\@date\@empty
+ \global\let\@title\@empty
+ \global\let\title\relax
+ \global\let\author\relax
+ \global\let\date\relax
+ \global\let\and\relax
+ \bxjs@annihilate@subtitle
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@maketitle}
+%
+% 独立した表題ページを作らない場合の表題の出力形式です。
+%
+% \begin{macrocode}
+ \def\@maketitle{%
+ \newpage\null
+ \vskip 2em
+ \begin{center}%
+ \let\footnote\thanks
+ {\LARGE \@title \par}%
+ \ifx\bxjs@subtitle\@undefined\else
+ \vskip3\p@?
+ {\normalsize \bxjs@subtitle\par}
+ \fi
+ \vskip 1.5em
+ {\large
+ \lineskip .5em
+ \begin{tabular}[t]{c}%
+ \@author
+ \end{tabular}\par}%
+ \vskip 1em
+ {\large \@date}%
+ \end{center}%
+ \par\vskip 1.5em
+%<article|slide> \ifvoid\@abstractbox\else\centerline{\box\@abstractbox}\vskip1.5em\fi
+ }
+\fi
+%</article|book|report|slide>
+%<*jspf>
+\newcommand{\maketitle}{\par
+ \begingroup
+ \renewcommand\thefootnote{\@fnsymbol\c@footnote}%
+ \def\@makefnmark{\rlap{\@textsuperscript{\normalfont\@thefnmark}}}%
+ \long\def\@makefntext##1{\advance\leftskip 3\jsZw
+ \parindent 1\jsZw\noindent
+ \llap{\@textsuperscript{\normalfont\@thefnmark}\hskip0.3\jsZw}##1}%
+ \twocolumn[\@maketitle]%
+ \plainifnotempty
+ \@thanks
+ \endgroup
+ \setcounter{footnote}{0}%
+ \global\let\thanks\relax
+ \global\let\maketitle\relax
+ \global\let\@thanks\@empty
+ \global\let\@author\@empty
+ \global\let\@date\@empty
+% \global\let\@title\@empty % \@title は柱に使う
+ \global\let\title\relax
+ \global\let\author\relax
+ \global\let\date\relax
+ \global\let\and\relax
+ \ifx\authors@mail\@undefined\else{%
+ \def\@makefntext{\advance\leftskip 3\jsZw \parindent -3\jsZw}%
+ \footnotetext[0]{\itshape\authors@mail}%
+ }\fi
+ \global\let\authors@mail\@undefined}
+\def\@maketitle{%
+ \newpage\null
+ \vskip 6em % used to be 2em
+ \begin{center}
+ \let\footnote\thanks
+ \ifx\@title\@undefined\else{\LARGE\headfont\@title\par}\fi
+ \lineskip .5em
+ \ifx\@author\@undefined\else
+ \vskip 1em
+ \begin{tabular}[t]{c}%
+ \@author
+ \end{tabular}\par
+ \fi
+ \ifx\@etitle\@undefined\else
+ \vskip 1em
+ {\large \@etitle \par}%
+ \fi
+ \ifx\@eauthor\@undefined\else
+ \vskip 1em
+ \begin{tabular}[t]{c}%
+ \@eauthor
+ \end{tabular}\par
+ \fi
+ \vskip 1em
+ \@date
+ \end{center}
+ \vskip 1.5em
+ \centerline{\box\@abstractbox}
+ \ifx\@keywords\@undefined\else
+ \vskip 1.5em
+ \centerline{\parbox{157\jsc@mmm}{\textsf{Keywords:}\\ \small\@keywords}}
+ \fi
+ \vskip 1.5em}
+%</jspf>
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{章・節}
+%
+% \begin{ZRnote}
+% ムニャムニャ……。
+% \begin{macro}{\bxjs@label@sect}
+% 節付 |#1| の番号を出力する。
+% 節付 |XXX| に対して、|\labelXXX| が定義済ならそれが出力書式を表す。
+% 未定義ならばカウンタの出力書式 |\theXXX| が使われる。
+% \begin{macrocode}
+\def\bxjs@label@sect#1{%
+ \expandafter\ifx\csname label#1\endcsname\relax
+ \csname the#1\endcsname
+ \else \csname label#1\endcsname
+ \fi}
+\def\@seccntformat#1{\bxjs@label@sect{#1}\quad}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@secapp}
+% 節番号の接頭辞。
+% \begin{macro}{\@secpos}
+% 節番号の接尾辞。
+% \begin{macrocode}
+\ifnum\bxjs@label@section=\bxjs@label@section@compat\else
+\def\@secapp{\presectionname}
+\def\@secpos{\postsectionname}
+\fi
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \begin{macro}{\labelsection}
+% 節番号の出力書式。
+% \begin{macrocode}
+\ifnum\bxjs@label@section=\bxjs@label@section@modern
+\def\labelsection{\@secapp\thesection\@secpos}
+\fi
+% \end{macrocode}
+% \end{macro}
+%
+% \end{ZRnote}
+%
+% \paragraph{構成要素}
+%
+% |\@startsection| マクロは6個の必須引数と,オプションとして |*| と
+% 1個のオプション引数と1個の必須引数をとります。
+%
+% \begin{quote}
+% |\@startsection{名}{レベル}{字下げ}{前アキ}{後アキ}{スタイル}| \\
+% | *[別見出し]{見出し}|
+% \end{quote}
+%
+% それぞれの引数の意味は次の通りです。
+%
+% \begin{description}
+% \item[名] ユーザレベルコマンドの名前です(例: section)。
+% \item[レベル] 見出しの深さを示す数値です
+% (chapter=1, section=2, \ldots )。
+% この数値が |secnumdepth| 以下のとき見出し番号を出力します。
+% \item[字下げ] 見出しの字下げ量です。
+% \item[前アキ] この値の絶対値が見出し上側の空きです。
+% 負の場合は,見出し直後の段落をインデントしません。
+% \item[後アキ] 正の場合は,見出しの下の空きです。
+% 負の場合は,絶対値が見出しの右の空きです
+% (見出しと同じ行から本文を始めます)。
+% \item[スタイル] 見出しの文字スタイルの設定です。
+% \item[\texttt{*}] この \texttt{*} 印がないと,見出し番号を付け,
+% 見出し番号のカウンタに1を加算します。
+% \item[別見出し] 目次や柱に出力する見出しです。
+% \item[見出し] 見出しです。
+% \end{description}
+%
+% 見出しの命令は通常 |\@startsection| とその最初の6個の引数として
+% 定義されます。
+%
+% 次は |\@startsection| の定義です。
+% 情報処理学会論文誌スタイルファイル(\texttt{ipsjcommon.sty})
+% を参考にさせていただきましたが,完全に行送りが |\baselineskip|
+% の整数倍にならなくてもいいから前の行と重ならないようにしました。
+%
+% \begin{macrocode}
+\def\@startsection#1#2#3#4#5#6{%
+ \if@noskipsec \leavevmode \fi
+ \par
+% 見出し上の空きを \@tempskipa にセットする
+ \@tempskipa #4\relax
+% \@afterindent は見出し直後の段落を字下げするかどうかを表すスイッチ
+ \if@english \@afterindentfalse \else \@afterindenttrue \fi
+% 見出し上の空きが負なら見出し直後の段落を字下げしない
+ \ifdim \@tempskipa <\z@
+ \@tempskipa -\@tempskipa \@afterindentfalse
+ \fi
+ \if@nobreak
+% \everypar{\everyparhook}% これは間違い
+ \everypar{}%
+ \else
+ \addpenalty\@secpenalty
+% 次の行は削除
+% \addvspace\@tempskipa
+% 次の \noindent まで追加
+ \ifdim \@tempskipa >\z@
+ \if@slide\else
+ \null
+ \vspace*{-\baselineskip}%
+ \fi
+ \vskip\@tempskipa
+ \fi
+ \fi
+ \noindent
+% 追加終わり
+ \@ifstar
+ {\@ssect{#3}{#4}{#5}{#6}}%
+ {\@dblarg{\@sect{#1}{#2}{#3}{#4}{#5}{#6}}}}
+% \end{macrocode}
+%
+% |\@sect| と |\@xsect| は,
+% 前のアキがちょうどゼロの場合にもうまくいくように,多少変えてあります。
+% |\everyparhook| も挿入しています。
+%
+% \begin{ZRnote}
+% |\everyparhook| の挿入は |everyparhook=compat| の時のみ行う。
+% \begin{macro}{\bxjs@if@ceph}
+% |everyparhook=compat| である場合にのみ直後のトークンを実行する。
+% \begin{macrocode}
+\ifnum\bxjs@everyparhook=\bxjs@everyparhook@compat
+ \let\bxjs@if@ceph\@firstofone
+\else \let\bxjs@if@ceph\@gobble
+\fi
+% \end{macrocode}
+% \end{macro}
+% \end{ZRnote}
+%
+% \begin{macrocode}
+\def\@sect#1#2#3#4#5#6[#7]#8{%
+ \ifnum #2>\c@secnumdepth
+ \let\@svsec\@empty
+ \else
+ \refstepcounter{#1}%
+ \protected@edef\@svsec{\@seccntformat{#1}\relax}%
+ \fi
+% 見出し後の空きを \@tempskipa にセット
+ \@tempskipa #5\relax
+% 条件判断の順序を入れ換えました
+ \ifdim \@tempskipa<\z@
+ \def\@svsechd{%
+ #6{\hskip #3\relax
+ \@svsec #8}%
+ \csname #1mark\endcsname{#7}%
+ \addcontentsline{toc}{#1}{%
+ \ifnum #2>\c@secnumdepth \else
+ \protect\numberline{\bxjs@label@sect{#1}}%
+ \fi
+ #7}}% 目次にフルネームを載せるなら #8
+ \else
+ \begingroup
+ \interlinepenalty \@M % 下から移動
+ #6{%
+ \@hangfrom{\hskip #3\relax\@svsec}%
+% \interlinepenalty \@M % 上に移動
+ #8\@@par}%
+ \endgroup
+ \csname #1mark\endcsname{#7}%
+ \addcontentsline{toc}{#1}{%
+ \ifnum #2>\c@secnumdepth \else
+ \protect\numberline{\bxjs@label@sect{#1}}%
+ \fi
+ #7}% 目次にフルネームを載せるならここは #8
+ \fi
+ \@xsect{#5}}
+% \end{macrocode}
+%
+% 二つ挿入した |\everyparhook| のうち後者が |\paragraph| 類の後で2回実行され,
+% それ以降は前者が実行されます。
+%
+% [2016-07-28] \texttt{slide}オプションと\texttt{twocolumn}オプションを
+% 同時に指定した場合の罫線の位置を微調整しました。
+%
+% \begin{macrocode}
+\def\@xsect#1{%
+% 見出しの後ろの空きを \@tempskipa にセット
+ \@tempskipa #1\relax
+% 条件判断の順序を変えました
+ \ifdim \@tempskipa<\z@
+ \@nobreakfalse
+ \global\@noskipsectrue
+ \everypar{%
+ \if@noskipsec
+ \global\@noskipsecfalse
+ {\setbox\z@\lastbox}%
+ \clubpenalty\@M
+ \begingroup \@svsechd \endgroup
+ \unskip
+ \@tempskipa #1\relax
+ \hskip -\@tempskipa
+ \else
+ \clubpenalty \@clubpenalty
+ \everypar\expandafter{\bxjs@if@ceph\everyparhook}%
+ \fi\bxjs@if@ceph\everyparhook}%
+ \else
+ \par \nobreak
+ \vskip \@tempskipa
+ \@afterheading
+ \fi
+ \if@slide
+ {\vskip\if@twocolumn-5\jsc@mpt\else-6\jsc@mpt\fi
+ \maybeblue\hrule height0\jsc@mpt depth1\jsc@mpt
+ \vskip\if@twocolumn 4\jsc@mpt\else 7\jsc@mpt\fi\relax}%
+ \fi
+ \par % 2000-12-18
+ \ignorespaces}
+\def\@ssect#1#2#3#4#5{%
+ \@tempskipa #3\relax
+ \ifdim \@tempskipa<\z@
+ \def\@svsechd{#4{\hskip #1\relax #5}}%
+ \else
+ \begingroup
+ #4{%
+ \@hangfrom{\hskip #1}%
+ \interlinepenalty \@M #5\@@par}%
+ \endgroup
+ \fi
+ \@xsect{#3}}
+% \end{macrocode}
+%
+% \paragraph{柱関係の命令}
+%
+% \begin{macro}{\chaptermark}
+% \begin{macro}{\sectionmark}
+% \begin{macro}{\subsectionmark}
+% \begin{macro}{\subsubsectionmark}
+% \begin{macro}{\paragraphmark}
+% \begin{macro}{\subparagraphmark}
+%
+% |\...mark| の形の命令を初期化します(第\ref{sec:pagestyle}節参照)。
+% |\chaptermark| 以外は\LaTeX 本体で定義済みです。
+%
+% \begin{macrocode}
+\newcommand*\chaptermark[1]{}
+% \newcommand*{\sectionmark}[1]{}
+% \newcommand*{\subsectionmark}[1]{}
+% \newcommand*{\subsubsectionmark}[1]{}
+% \newcommand*{\paragraphmark}[1]{}
+% \newcommand*{\subparagraphmark}[1]{}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \paragraph{カウンタの定義}
+%
+% \begin{macro}{\c@secnumdepth}
+%
+% |secnumdepth| は第何レベルの見出しまで
+% 番号を付けるかを決めるカウンタです。
+%
+% \begin{macrocode}
+%<!book&!report>\setcounter{secnumdepth}{3}
+%<book|report>\setcounter{secnumdepth}{2}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\c@chapter}
+% \begin{macro}{\c@section}
+% \begin{macro}{\c@subsection}
+% \begin{macro}{\c@subsubsection}
+% \begin{macro}{\c@paragraph}
+% \begin{macro}{\c@subparagraph}
+%
+% 見出し番号のカウンタです。
+% |\newcounter| の第1引数が新たに作るカウンタです。
+% これは第2引数が増加するたびに 0 に戻されます。
+% 第2引数は定義済みのカウンタです。
+%
+% \begin{macrocode}
+\newcounter{part}
+%<book|report>\newcounter{chapter}
+%<book|report>\newcounter{section}[chapter]
+%<!book&!report>\newcounter{section}
+\newcounter{subsection}[section]
+\newcounter{subsubsection}[subsection]
+\newcounter{paragraph}[subsubsection]
+\newcounter{subparagraph}[paragraph]
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\thepart}
+% \begin{macro}{\thechapter}
+% \begin{macro}{\thesection}
+% \begin{macro}{\thesubsection}
+% \begin{macro}{\thesubsubsection}
+% \begin{macro}{\theparagraph}
+% \begin{macro}{\thesubparagraph}
+%
+% カウンタの値を出力する命令 |\the何々| を定義します。
+%
+% カウンタを出力するコマンドには次のものがあります。
+%
+% \begin{quote}
+% |\arabic{COUNTER} | 1, 2, 3, \ldots \\
+% |\roman{COUNTER} | i, ii, iii, \ldots \\
+% |\Roman{COUNTER} | I, II, III, \ldots \\
+% |\alph{COUNTER} | a, b, c, \ldots \\
+% |\Alph{COUNTER} | A, B, C, \ldots \\
+% |\kansuji{COUNTER} | 一, 二, 三, \ldots
+% \end{quote}
+%
+% 以下ではスペース節約のため |@| の付いた内部表現を多用しています。
+%
+% \begin{macrocode}
+\renewcommand{\thepart}{\@Roman\c@part}
+%<*!book&!report>
+\ifnum\bxjs@label@section=\bxjs@label@section@compat
+\renewcommand{\thesection}{\presectionname\@arabic\c@section\postsectionname}
+\renewcommand{\thesubsection}{\@arabic\c@section.\@arabic\c@subsection}
+\else
+\renewcommand{\thesection}{\@arabic\c@section}
+\renewcommand{\thesubsection}{\thesection.\@arabic\c@subsection}
+\fi
+%</!book&!report>
+%<*book|report>
+\renewcommand{\thechapter}{\@arabic\c@chapter}
+\renewcommand{\thesection}{\thechapter.\@arabic\c@section}
+\renewcommand{\thesubsection}{\thesection.\@arabic\c@subsection}
+%</book|report>
+\renewcommand{\thesubsubsection}{%
+ \thesubsection.\@arabic\c@subsubsection}
+\renewcommand{\theparagraph}{%
+ \thesubsubsection.\@arabic\c@paragraph}
+\renewcommand{\thesubparagraph}{%
+ \theparagraph.\@arabic\c@subparagraph}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\@chapapp}
+% \begin{macro}{\@chappos}
+%
+% |\@chapapp| の初期値は |\prechaptername|(第)です。
+%
+% |\@chappos| の初期値は |\postchaptername|(章)です。
+%
+% |\appendix| は |\@chapapp| を |\appendixname| に,
+% |\@chappos| を空に再定義します。
+%
+% [2003-03-02] |\@secapp| は外しました。
+%
+% \begin{macrocode}
+%<book|report>\newcommand{\@chapapp}{\prechaptername}
+%<book|report>\newcommand{\@chappos}{\postchaptername}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \paragraph{前付,本文,後付}
+%
+% 本のうち章番号があるのが「本文」,
+% それ以外が「前付」「後付」です。
+%
+% \begin{macro}{\frontmatter}
+%
+% ページ番号をローマ数字にし,章番号を付けないようにします。
+%
+% [2017-03-05] |\frontmatter| と |\mainmatter| の2つの命令は,
+% 改丁または改ページした後で |\pagenumbering{...}| でノンブルを1に
+% リセットします。長い間 |\frontmatter| は \texttt{openany} のときに
+% 単なる改ページとしていましたが,これではノンブルをリセットする際に
+% 偶奇逆転が起こる場合がありました。\texttt{openany} かどうかに依らず
+% 奇数ページまで繰るように修正することで,問題を解消しました。
+% 実は,\LaTeX の標準クラスでは1998年に修正されていた問題です
+% (コミュニティ版\pLaTeX の標準クラス2017/03/05も参照)。
+%
+% \begin{macrocode}
+%<*book|report>
+\newcommand\frontmatter{%
+ \pltx@cleartooddpage
+ \@mainmatterfalse
+ \pagenumbering{roman}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\mainmatter}
+%
+% ページ番号を算用数字にし,章番号を付けるようにします。
+%
+% \begin{macrocode}
+\newcommand\mainmatter{%
+ \pltx@cleartooddpage
+ \@mainmattertrue
+ \pagenumbering{arabic}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\backmatter}
+%
+% 章番号を付けないようにします。ページ番号の付け方は変わりません。
+%
+% \begin{macrocode}
+\newcommand\backmatter{%
+ \if@openleft
+ \cleardoublepage
+ \else\if@openright
+ \cleardoublepage
+ \else
+ \clearpage
+ \fi\fi
+ \@mainmatterfalse}
+%</book|report>
+% \end{macrocode}
+% \end{macro}
+%
+% \paragraph{部}
+%
+% \begin{macro}{\part}
+%
+% 新しい部を始めます。
+%
+% |\secdef| を使って見出しを定義しています。
+% このマクロは二つの引数をとります。
+%
+% \begin{quote}
+% |\secdef{星なし}{星あり}|
+% \end{quote}
+%
+% \begin{description}
+% \item[星なし] \texttt{*} のない形の定義です。
+% \item[星あり] \texttt{*} のある形の定義です。
+% \end{description}
+%
+% |\secdef| は次のようにして使います。
+%
+%\begin{verbatim}
+% \def\chapter { ... \secdef \CMDA \CMDB }
+% \def\CMDA [#1]#2{....} % \chapter[...]{...} の定義
+% \def\CMDB #1{....} % \chapter*{...} の定義
+%\end{verbatim}
+%
+% まず |book| と |report| のクラス以外です。
+%
+% \begin{macrocode}
+%<*!book&!report>
+\newcommand\part{%
+ \if@noskipsec \leavevmode \fi
+ \par
+ \addvspace{4ex}%
+ \if@english \@afterindentfalse \else \@afterindenttrue \fi
+ \secdef\@part\@spart}
+%</!book&!report>
+% \end{macrocode}
+%
+% |book| および |report| クラスの場合は,少し複雑です。
+%
+% \begin{macrocode}
+%<*book|report>
+\newcommand\part{%
+ \if@openleft
+ \cleardoublepage
+ \else\if@openright
+ \cleardoublepage
+ \else
+ \clearpage
+ \fi\fi
+ \thispagestyle{empty}% 欧文用標準スタイルでは plain
+ \if@twocolumn
+ \onecolumn
+ \@restonecoltrue
+ \else
+ \@restonecolfalse
+ \fi
+ \null\vfil
+ \secdef\@part\@spart}
+%</book|report>
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@part}
+%
+% 部の見出しを出力します。
+% |\bfseries| を |\headfont| に変えました。
+%
+% |book| および |report| クラス以外では |secnumdepth| が $-1$ より大きいとき
+% 部番号を付けます。
+%
+% \begin{macrocode}
+%<*!book&!report>
+\def\@part[#1]#2{%
+ \ifnum \c@secnumdepth >\m@ne
+ \refstepcounter{part}%
+ \addcontentsline{toc}{part}{%
+ \prepartname\thepart\postpartname\hspace{1\jsZw}#1}%
+ \else
+ \addcontentsline{toc}{part}{#1}%
+ \fi
+ \markboth{}{}%
+ {\parindent\z@
+ \raggedright
+ \interlinepenalty \@M
+ \normalfont
+ \ifnum \c@secnumdepth >\m@ne
+ \Large\headfont\prepartname\thepart\postpartname
+ \par\nobreak
+ \fi
+ \huge \headfont #2%
+ \markboth{}{}\par}%
+ \nobreak
+ \vskip 3ex
+ \@afterheading}
+%</!book&!report>
+% \end{macrocode}
+%
+% |book| および |report| クラスでは |secnumdepth| が $-2$ より大きいとき部番号を付けます。
+%
+% \begin{macrocode}
+%<*book|report>
+\def\@part[#1]#2{%
+ \ifnum \c@secnumdepth >-2\relax
+ \refstepcounter{part}%
+ \addcontentsline{toc}{part}{%
+ \prepartname\thepart\postpartname\hspace{1\jsZw}#1}%
+ \else
+ \addcontentsline{toc}{part}{#1}%
+ \fi
+ \markboth{}{}%
+ {\centering
+ \interlinepenalty \@M
+ \normalfont
+ \ifnum \c@secnumdepth >-2\relax
+ \huge\headfont \prepartname\thepart\postpartname
+ \par\vskip20\p@?
+ \fi
+ \Huge \headfont #2\par}%
+ \@endpart}
+%</book|report>
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@spart}
+%
+% 番号を付けない部です。
+%
+% \begin{macrocode}
+%<*!book&!report>
+\def\@spart#1{{%
+ \parindent \z@ \raggedright
+ \interlinepenalty \@M
+ \normalfont
+ \huge \headfont #1\par}%
+ \nobreak
+ \vskip 3ex
+ \@afterheading}
+%</!book&!report>
+%<*book|report>
+\def\@spart#1{{%
+ \centering
+ \interlinepenalty \@M
+ \normalfont
+ \Huge \headfont #1\par}%
+ \@endpart}
+%</book|report>
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@endpart}
+%
+% |\@part| と |\@spart| の最後で実行されるマクロです。
+% 両面印刷のときは白ページを追加します。
+% 二段組のときには,二段組に戻します。
+%
+% [2016-12-13] \texttt{openany} のときには白ページが追加されるのは変なので,
+% その場合は追加しないようにしました。このバグは\LaTeX では
+% classes.dtx v1.4b (2000/05/19)
+% で修正されています。
+%
+% \begin{macrocode}
+%<*book|report>
+\def\@endpart{\vfil\newpage
+ \if@twoside
+ \if@openleft %% added (2017/02/24)
+ \null\thispagestyle{empty}\newpage
+ \else\if@openright %% added (2016/12/13)
+ \null\thispagestyle{empty}\newpage
+ \fi\fi %% added (2016/12/13, 2017/02/24)
+ \fi
+ \if@restonecol
+ \twocolumn
+ \fi}
+%</book|report>
+% \end{macrocode}
+% \end{macro}
+%
+% \paragraph{章}
+%
+% \begin{macro}{\chapter}
+%
+% 章の最初のページスタイルは,全体が |empty| でなければ |plain| に
+% します。
+% また,|\@topnum| を 0 にして,
+% 章見出しの上に図や表が来ないようにします。
+%
+% \begin{macrocode}
+%<*book|report>
+\newcommand{\chapter}{%
+ \if@openleft\cleardoublepage\else
+ \if@openright\cleardoublepage\else\clearpage\fi\fi
+ \plainifnotempty % 元: \thispagestyle{plain}
+ \global\@topnum\z@
+ \if@english \@afterindentfalse \else \@afterindenttrue \fi
+ \secdef
+ {\@omit@numberfalse\@chapter}%
+ {\@omit@numbertrue\@schapter}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@chapter}
+%
+% 章見出しを出力します。
+% |secnumdepth| が0以上かつ |\@mainmatter| が真のとき章番号を出力します。
+%
+% \begin{macrocode}
+\def\@chapter[#1]#2{%
+ \ifnum \c@secnumdepth >\m@ne
+ \if@mainmatter
+ \refstepcounter{chapter}%
+ \typeout{\@chapapp\thechapter\@chappos}%
+ \addcontentsline{toc}{chapter}%
+ {\protect\numberline
+% %{\if@english\thechapter\else\@chapapp\thechapter\@chappos\fi}%
+ {\@chapapp\thechapter\@chappos}%
+ #1}%
+ \else\addcontentsline{toc}{chapter}{#1}\fi
+ \else
+ \addcontentsline{toc}{chapter}{#1}%
+ \fi
+ \chaptermark{#1}%
+ \addtocontents{lof}{\protect\addvspace{10\jsc@mpt}}%
+ \addtocontents{lot}{\protect\addvspace{10\jsc@mpt}}%
+ \if@twocolumn
+ \@topnewpage[\@makechapterhead{#2}]%
+ \else
+ \@makechapterhead{#2}%
+ \@afterheading
+ \fi}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@makechapterhead}
+%
+% 実際に章見出しを組み立てます。
+% |\bfseries| を |\headfont| に変えました。
+%
+% \begin{macrocode}
+\def\@makechapterhead#1{%
+ \vspace*{2\Cvs}% 欧文は50pt
+ {\parindent \z@ \raggedright \normalfont
+ \ifnum \c@secnumdepth >\m@ne
+ \if@mainmatter
+ \huge\headfont \@chapapp\thechapter\@chappos
+ \par\nobreak
+ \vskip \Cvs % 欧文は20pt
+ \fi
+ \fi
+ \interlinepenalty\@M
+ \Huge \headfont #1\par\nobreak
+ \vskip 3\Cvs}} % 欧文は40pt
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@schapter}
+%
+% |\chapter*{...}| コマンドの本体です。
+% |\chaptermark| を補いました。
+%
+% \begin{macrocode}
+\def\@schapter#1{%
+ \chaptermark{#1}%
+ \if@twocolumn
+ \@topnewpage[\@makeschapterhead{#1}]%
+ \else
+ \@makeschapterhead{#1}\@afterheading
+ \fi}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@makeschapterhead}
+%
+% 番号なしの章見出しです。
+%
+% \begin{macrocode}
+\def\@makeschapterhead#1{%
+ \vspace*{2\Cvs}% 欧文は50pt
+ {\parindent \z@ \raggedright
+ \normalfont
+ \interlinepenalty\@M
+ \Huge \headfont #1\par\nobreak
+ \vskip 3\Cvs}} % 欧文は40pt
+%</book|report>
+% \end{macrocode}
+% \end{macro}
+%
+% \paragraph{下位レベルの見出し}
+%
+% \begin{macro}{\section}
+%
+% 欧文版では |\@startsection| の第4引数を負にして最初の段落の
+% 字下げを禁止していますが,
+% 和文版では正にして字下げするようにしています。
+%
+% 段組のときはなるべく左右の段が狂わないように工夫しています。
+%
+% \begin{macrocode}
+\if@twocolumn
+ \newcommand{\section}{%
+%<jspf>\ifx\maketitle\relax\else\maketitle\fi
+ \@startsection{section}{1}{\z@}%
+%<!kiyou> {0.6\Cvs}{0.4\Cvs}%
+%<kiyou> {\Cvs}{0.5\Cvs}%
+% {\normalfont\large\headfont\@secapp}}
+ {\normalfont\large\headfont\raggedright}}
+\else
+ \newcommand{\section}{%
+ \if@slide\clearpage\fi
+ \@startsection{section}{1}{\z@}%
+ {\Cvs \@plus.5\Cdp \@minus.2\Cdp}% 前アキ
+ {.5\Cvs \@plus.3\Cdp}% 後アキ
+% {\normalfont\Large\headfont\@secapp}}
+ {\normalfont\Large\headfont\raggedright}}
+\fi
+% \end{macrocode}
+%
+% \end{macro}
+%
+% \begin{macro}{\subsection}
+%
+% 同上です。
+%
+% \begin{macrocode}
+\if@twocolumn
+ \newcommand{\subsection}{\@startsection{subsection}{2}{\z@}%
+ {\z@}{\if@slide .4\Cvs \else \z@ \fi}%
+ {\normalfont\normalsize\headfont}}
+\else
+ \newcommand{\subsection}{\@startsection{subsection}{2}{\z@}%
+ {\Cvs \@plus.5\Cdp \@minus.2\Cdp}% 前アキ
+ {.5\Cvs \@plus.3\Cdp}% 後アキ
+ {\normalfont\large\headfont}}
+\fi
+% \end{macrocode}
+%
+% \end{macro}
+%
+% \begin{macro}{\subsubsection}
+%
+% [2016-07-22] \texttt{slide}オプション指定時に |\subsubsection| の文字列
+% と罫線が重なる問題に対処しました(forum:1982)。
+%
+% \begin{macrocode}
+\if@twocolumn
+ \newcommand{\subsubsection}{\@startsection{subsubsection}{3}{\z@}%
+ {\z@}{\if@slide .4\Cvs \else \z@ \fi}%
+ {\normalfont\normalsize\headfont}}
+\else
+ \newcommand{\subsubsection}{\@startsection{subsubsection}{3}{\z@}%
+ {\Cvs \@plus.5\Cdp \@minus.2\Cdp}%
+ {\if@slide .5\Cvs \@plus.3\Cdp \else \z@ \fi}%
+ {\normalfont\normalsize\headfont}}
+\fi
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\paragraph}
+% % \begin{macro}{\jsParagraphMark}
+%
+% 見出しの後ろで改行されません。
+%
+% [2016-11-16] 従来は |\paragraph| の最初に出るマークを「■」に固定して
+% いましたが,このマークを変更可能にするため |\jsParagraphMark| というマクロ
+% に切り出しました。これで,たとえば
+%\begin{verbatim}
+% \renewcommand{\jsParagraphMark}{★}
+%\end{verbatim}
+% とすれば「★」に変更できますし,マークを空にすることも容易です。
+% なお,某学会クラスでは従来どおりマークは付きません。
+%
+% \begin{ZRnote}
+%
+% \Note BXJSクラスでは、1.1版[2016-02-14]から |\jsParagraphMark| を
+% サポートしている。
+%
+% 段落のマーク(■)が必ず和文フォントで出力されるようにする。
+%
+% |\jsJaChar| はstandard和文ドライバが読み込まれた場合は\
+% |\jachar| と同義になるが、それ以外は何もしない。
+% \end{ZRnote}
+% \begin{macrocode}
+\newcommand\jsParagraphMark{\relax\jsJaChar{■}}
+\let\bxjs@org@paragraph@mark\jsParagraphMark
+\ifx\bxjs@paragraph@mark\@empty
+ \let\jsParagraphMark\@empty
+\else\ifx\bxjs@paragraph@mark\@undefined\else
+ \long\edef\jsParagraphMark{\noexpand\jsJaChar{\bxjs@paragraph@mark}}
+\fi\fi
+\let\jsJaChar\@empty
+\if@twocolumn
+ \newcommand{\paragraph}{\@startsection{paragraph}{4}{\z@}%
+ {\z@}{\if@slide .4\Cvs \else -1\jsZw\fi}% 改行せず 1\jsZw のアキ
+%<jspf> {\normalfont\normalsize\headfont}}
+%<!jspf> {\normalfont\normalsize\headfont\jsParagraphMark}}
+\else
+ \newcommand{\paragraph}{\@startsection{paragraph}{4}{\z@}%
+ {0.5\Cvs \@plus.5\Cdp \@minus.2\Cdp}%
+ {\if@slide .5\Cvs \@plus.3\Cdp \else -1\jsZw\fi}% 改行せず 1\jsZw のアキ
+%<jspf> {\normalfont\normalsize\headfont}}
+%<!jspf> {\normalfont\normalsize\headfont\jsParagraphMark}}
+\fi
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\subparagraph}
+%
+% 見出しの後ろで改行されません。
+%
+% \begin{macrocode}
+\if@twocolumn
+ \newcommand{\subparagraph}{\@startsection{subparagraph}{5}{\z@}%
+ {\z@}{\if@slide .4\Cvs \@plus.3\Cdp \else -1\jsZw\fi}%
+ {\normalfont\normalsize\headfont}}
+\else
+ \newcommand{\subparagraph}{\@startsection{subparagraph}{5}{\z@}%
+ {\z@}{\if@slide .5\Cvs \@plus.3\Cdp \else -1\jsZw\fi}%
+ {\normalfont\normalsize\headfont}}
+\fi
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{リスト環境}
+%
+% 第 $k$ レベルのリストの初期化をするのが |\@list|$k$ です
+% ($k = \mathtt{i}, \mathtt{ii}, \mathtt{iii}, \mathtt{iv}$)。
+% |\@list|$k$ は |\leftmargin| を |\leftmargin|$k$ に設定します。
+%
+% \begin{macro}{\leftmargini}
+%
+% 二段組であるかないかに応じてそれぞれ 2em,2.5em でしたが,
+% ここでは全角幅の2倍にしました。
+%
+% [2002-05-11] 3zw に変更しました。
+%
+% [2005-03-19] 二段組は 2zw に戻しました。
+%
+% \begin{macrocode}
+\if@slide
+ \setlength\leftmargini{1\jsZw}
+\else
+ \if@twocolumn
+ \setlength\leftmargini{2\jsZw}
+ \else
+ \setlength\leftmargini{3\jsZw}
+ \fi
+\fi
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\leftmarginii}
+% \begin{macro}{\leftmarginiii}
+% \begin{macro}{\leftmarginiv}
+% \begin{macro}{\leftmarginv}
+% \begin{macro}{\leftmarginvi}
+%
+% |ii|,|iii|,|iv| は |\labelsep| と
+% それぞれ `(m)',`vii.',`M.' の幅との和より大きくする
+% ことになっています。ここでは全角幅の整数倍に丸めました。
+%
+% \begin{macrocode}
+\if@slide
+ \setlength\leftmarginii {1\jsZw}
+ \setlength\leftmarginiii{1\jsZw}
+ \setlength\leftmarginiv {1\jsZw}
+ \setlength\leftmarginv {1\jsZw}
+ \setlength\leftmarginvi {1\jsZw}
+\else
+ \setlength\leftmarginii {2\jsZw}
+ \setlength\leftmarginiii{2\jsZw}
+ \setlength\leftmarginiv {2\jsZw}
+ \setlength\leftmarginv {1\jsZw}
+ \setlength\leftmarginvi {1\jsZw}
+\fi
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\labelsep}
+% \begin{macro}{\labelwidth}
+%
+% |\labelsep| はラベルと本文の間の距離です。
+% |\labelwidth| はラベルの幅です。
+% これは二分に変えました。
+%
+% \begin{macrocode}
+\setlength \labelsep {0.5\jsZw} % .5em
+\setlength \labelwidth{\leftmargini}
+\addtolength\labelwidth{-\labelsep}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\partopsep}
+%
+% リスト環境の前に空行がある場合,
+% |\parskip| と |\topsep| に |\partopsep| を
+% 加えた値だけ縦方向の空白ができます。
+% 0 に改変しました。
+%
+% \begin{macrocode}
+\setlength\partopsep{\z@} % {2\p@ \@plus 1\p@ \@minus 1\p@}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@beginparpenalty}
+% \begin{macro}{\@endparpenalty}
+% \begin{macro}{\@itempenalty}
+%
+% リストや段落環境の前後,リスト項目間に挿入されるペナルティです。
+%
+% \begin{macrocode}
+\@beginparpenalty -\@lowpenalty
+\@endparpenalty -\@lowpenalty
+\@itempenalty -\@lowpenalty
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\@listi}
+% \begin{macro}{\@listI}
+%
+% |\@listi| は |\leftmargin|,|\parsep|,|\topsep|,|\itemsep| などの
+% トップレベルの定義をします。
+% この定義は,フォントサイズコマンドによって変更されます
+% (たとえば |\small| の中では小さい値に設定されます)。
+% このため,|\normalsize| がすべてのパラメータを戻せるように,
+% |\@listI| で |\@listi| のコピーを保存します。
+% 元の値はかなり複雑ですが,ここでは簡素化してしまいました。
+% 特に最初と最後に行送りの半分の空きが入るようにしてあります。
+% アスキーの標準スタイルでは
+% トップレベルの |itemize|,|enumerate| 環境でだけ
+% 最初と最後に行送りの半分の空きが入るようになっていました。
+%
+% [2004-09-27] |\topsep| のグルー $_{-0.1}^{+0.2}$ |\baselineskip|
+% を思い切って外しました。
+%
+% \begin{macrocode}
+\def\@listi{\leftmargin\leftmargini
+ \parsep \z@
+ \topsep 0.5\baselineskip
+ \itemsep \z@ \relax}
+\let\@listI\@listi
+% \end{macrocode}
+%
+% 念のためパラメータを初期化します(実際には不要のようです)。
+%
+% \begin{macrocode}
+\@listi
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\@listii}
+% \begin{macro}{\@listiii}
+% \begin{macro}{\@listiv}
+% \begin{macro}{\@listv}
+% \begin{macro}{\@listvi}
+%
+% 第2\zrWDash6レベルのリスト環境のパラメータの設定です。
+%
+% \begin{macrocode}
+\def\@listii{\leftmargin\leftmarginii
+ \labelwidth\leftmarginii \advance\labelwidth-\labelsep
+ \topsep \z@
+ \parsep \z@
+ \itemsep\parsep}
+\def\@listiii{\leftmargin\leftmarginiii
+ \labelwidth\leftmarginiii \advance\labelwidth-\labelsep
+ \topsep \z@
+ \parsep \z@
+ \itemsep\parsep}
+\def\@listiv {\leftmargin\leftmarginiv
+ \labelwidth\leftmarginiv
+ \advance\labelwidth-\labelsep}
+\def\@listv {\leftmargin\leftmarginv
+ \labelwidth\leftmarginv
+ \advance\labelwidth-\labelsep}
+\def\@listvi {\leftmargin\leftmarginvi
+ \labelwidth\leftmarginvi
+ \advance\labelwidth-\labelsep}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \paragraph{enumerate環境}
+%
+% |enumerate| 環境はカウンタ |enumi|,|enumii|,|enumiii|,
+% |enumiv| を使います。|enum|$n$ は第 $n$ レベルの番号です。
+%
+% \begin{macro}{\theenumi}
+% \begin{macro}{\theenumii}
+% \begin{macro}{\theenumiii}
+% \begin{macro}{\theenumiv}
+%
+% 出力する番号の書式を設定します。
+% これらは\LaTeX 本体(\texttt{ltlists.dtx} 参照)で定義済みですが,
+% ここでは表し方を変えています。
+% |\@arabic|,|\@alph|,|\@roman|,|\@Alph| はそれぞれ
+% 算用数字,小文字アルファベット,小文字ローマ数字,大文字アルファベット
+% で番号を出力する命令です。
+%
+% \begin{macrocode}
+\renewcommand{\theenumi}{\@arabic\c@enumi}
+\renewcommand{\theenumii}{\@alph\c@enumii}
+\renewcommand{\theenumiii}{\@roman\c@enumiii}
+\renewcommand{\theenumiv}{\@Alph\c@enumiv}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\labelenumi}
+% \begin{macro}{\labelenumii}
+% \begin{macro}{\labelenumiii}
+% \begin{macro}{\labelenumiv}
+%
+% |enumerate| 環境の番号を出力する命令です。
+% 第2レベル以外は最後に欧文のピリオドが付きますが,
+% これは好みに応じて取り払ってください。
+% 第2レベルの番号のかっこは和文用に換え,
+% その両側に入る余分なグルーを |\inhibitglue| で
+% 取り除いています。
+% \begin{ZRnote}
+% 和文の括弧で囲むための補助命令 |\jsInJaParen| を
+% 定義して |\labelenumii| でそれを用いている。
+% \Note 現状の |zxjatype| の |\inhibitglue| の実装には
+% 「前後のグルーを消してしまう」という不備があって、
+% そのため |enumii| の出力が異常になるという不具合があった。
+% |zxjatype| を修正するまでの回避策として、サイズがゼロの
+% 罫(|\bxjs@dust|)でガードしておく。
+% \end{ZRnote}
+%
+% \begin{macrocode}
+\def\bxjs@dust{\vrule\@width\z@\@height\z@\@depth\z@}
+\newcommand*{\jsInJaParen}[1]{%
+ \bxjs@dust\jsInhibitGlue (#1)\jsInhibitGlue\bxjs@dust}
+\newcommand{\labelenumi}{\theenumi.}
+\newcommand{\labelenumii}{\jsInJaParen{\theenumii}}
+\newcommand{\labelenumiii}{\theenumiii.}
+\newcommand{\labelenumiv}{\theenumiv.}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\p@enumii}
+% \begin{macro}{\p@enumiii}
+% \begin{macro}{\p@enumiv}
+%
+% |\p@enum|$n$ は |\ref| コマンドで |enumerate| 環境の第 $n$ レベルの
+% 項目が参照されるときの書式です。
+% これも第2レベルは和文用かっこにしました。
+%
+% \begin{macrocode}
+\renewcommand{\p@enumii}{\theenumi}
+\renewcommand{\p@enumiii}{\theenumi\jsInhibitGlue (\theenumii )}
+\renewcommand{\p@enumiv}{\p@enumiii\theenumiii}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \paragraph{itemize環境}
+%
+% \begin{macro}{\labelitemi}
+% \begin{macro}{\labelitemii}
+% \begin{macro}{\labelitemiii}
+% \begin{macro}{\labelitemiv}
+% |itemize| 環境の第 $n$ レベルのラベルを作るコマンドです。
+% \begin{macrocode}
+\newcommand\labelitemi{\textbullet}
+\newcommand\labelitemii{\normalfont\bfseries \textendash}
+\newcommand\labelitemiii{\textasteriskcentered}
+\newcommand\labelitemiv{\textperiodcentered}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \paragraph{description環境}
+%
+% \begin{environment}{description}
+%
+% 本来の |description| 環境では,項目名が短いと,説明部分の頭が
+% それに引きずられて左に出てしまいます。
+% これを解決した新しい |description| の実装です。
+%
+% \begin{macrocode}
+\newenvironment{description}{%
+ \list{}{%
+ \labelwidth=\leftmargin
+ \labelsep=1\jsZw
+ \advance \labelwidth by -\labelsep
+ \let \makelabel=\descriptionlabel}}{\endlist}
+% \end{macrocode}
+% \end{environment}
+%
+% \begin{macro}{\descriptionlabel}
+%
+% |description| 環境のラベルを出力するコマンドです。
+% 好みに応じて |#1| の前に適当な空き
+% (たとえば |\hspace{1\jsZw}|)を入れるのもいいと思います。
+%
+% \begin{macrocode}
+\newcommand*\descriptionlabel[1]{\normalfont\headfont #1\hfil}
+% \end{macrocode}
+% \end{macro}
+%
+% \paragraph{概要}
+%
+% \begin{environment}{abstract}
+%
+% 概要(要旨,梗概)を出力する環境です。
+% |book| クラスでは各章の初めにちょっとしたことを書くのに使います。
+% |titlepage| オプション付きの |article| クラスでは,
+% 独立したページに出力されます。
+% |abstract| 環境は元は |quotation| 環境で作られていましたが,
+% |quotation| 環境の右マージンをゼロにしたので,
+% |list| 環境で作り直しました。
+%
+% JSPFスタイルでは実際の出力は |\maketitle| で行われます。
+%
+% \begin{ZRnote}
+% |bxjsreport| クラスのabstract環境は:
+% \begin{itemize}
+% \item |layout=v1| の場合は |jsbook|\,+\,|report| の動作を継承する。
+% つまり |jsbook| と同じになる。
+% \item |layout=v2| の場合は新設の |jsreport| の動作を継承する。
+% つまり |jsarticle|(+\,|titlapage|)と同じになる。
+% \end{itemize}
+%
+% \begin{environment}{chapterabstract}
+% |jsbook| のabstract環境
+% (「各章の初めにちょっとしたことを書く」ためのもの)
+% をchapterabstractと呼ぶことにする。
+% \begin{macrocode}
+%<*book|report>
+\newenvironment{chapterabstract}{%
+ \begin{list}{}{%
+ \listparindent=1\jsZw
+ \itemindent=\listparindent
+ \rightmargin=0pt
+ \leftmargin=5\jsZw}\item[]}{\end{list}\vspace{\baselineskip}}
+%</book|report>
+% \end{macrocode}
+% \end{environment}
+%
+% “普通の”abstract環境の定義。
+% \begin{macrocode}
+%<*article|report|slide>
+\newbox\@abstractbox
+\if@titlepage
+ \newenvironment{abstract}{%
+ \titlepage
+ \null\vfil
+ \@beginparpenalty\@lowpenalty
+ \begin{center}%
+ \headfont \abstractname
+ \@endparpenalty\@M
+ \end{center}%
+% \end{macrocode}
+% BXJSクラスでは、
+% 概要の最初の段落に段落下げが入るようにする。
+% \begin{macrocode}
+ \par}%
+ {\par\vfil\null\endtitlepage}
+\else
+ \newenvironment{abstract}{%
+ \if@twocolumn
+ \ifx\maketitle\relax
+ \section*{\abstractname}%
+ \else
+ \global\setbox\@abstractbox\hbox\bgroup
+ \begin{minipage}[b]{\textwidth}
+ \small\parindent1\jsZw
+ \begin{center}%
+ {\headfont \abstractname\vspace{-.5em}\vspace{\z@}}%
+ \end{center}%
+ \list{}{%
+ \listparindent\parindent
+ \itemindent \listparindent
+ \rightmargin \leftmargin}%
+ \item\relax
+ \fi
+ \else
+ \small
+ \begin{center}%
+ {\headfont \abstractname\vspace{-.5em}\vspace{\z@}}%
+ \end{center}%
+ \list{}{%
+ \listparindent\parindent
+ \itemindent \listparindent
+ \rightmargin \leftmargin}%
+ \item\relax
+ \fi}{\if@twocolumn
+ \ifx\maketitle\relax
+ \else
+ \endlist\end{minipage}\egroup
+ \fi
+ \else
+ \endlist
+ \fi}
+\fi
+%</article|report|slide>
+%<*jspf>
+\newbox\@abstractbox
+\newenvironment{abstract}{%
+ \global\setbox\@abstractbox\hbox\bgroup
+ \begin{minipage}[b]{157\jsc@mmm}{\sffamily Abstract}\par
+ \small
+ \if@english \parindent6\jsc@mmm \else \parindent1\jsZw \fi}%
+ {\end{minipage}\egroup}
+%</jspf>
+% \end{macrocode}
+%
+% |bxjs@force@chapterabstract| が真の場合は、abstract環境を
+% chapterabstract環境と等価にする。
+% \begin{macrocode}
+%<*book|report>
+\ifbxjs@force@chapterabstract
+ \let\abstract\chapterabstract
+ \let\endabstract\endchapterabstract
+\fi
+%</book|report>
+% \end{macrocode}
+% \end{ZRnote}
+%
+% \end{environment}
+%
+% \paragraph{キーワード}
+%
+% \begin{environment}{keywords}
+%
+% キーワードを準備する環境です。
+% 実際の出力は |\maketitle| で行われます。
+%
+% \begin{macrocode}
+%<*jspf>
+%\newbox\@keywordsbox
+%\newenvironment{keywords}{%
+% \global\setbox\@keywordsbox\hbox\bgroup
+% \begin{minipage}[b]{1570\jsc@mmm}{\sffamily Keywords:}\par
+% \small\parindent0\jsZw}%
+% {\end{minipage}\egroup}
+%</jspf>
+% \end{macrocode}
+% \end{environment}
+%
+% \paragraph{verse環境}
+%
+% \begin{environment}{verse}
+%
+% 詩のための |verse| 環境です。
+%
+% \begin{macrocode}
+\newenvironment{verse}{%
+ \let \\=\@centercr
+ \list{}{%
+ \itemsep \z@
+ \itemindent -2\jsZw % 元: -1.5em
+ \listparindent\itemindent
+ \rightmargin \z@
+ \advance\leftmargin 2\jsZw}% 元: 1.5em
+ \item\relax}{\endlist}
+% \end{macrocode}
+% \end{environment}
+%
+% \paragraph{quotation環境}
+%
+% \begin{environment}{quotation}
+%
+% 段落の頭の字下げ量を1.5emから |\parindent| に変えました。
+% また,右マージンを 0 にしました。
+%
+% \begin{macrocode}
+\newenvironment{quotation}{%
+ \list{}{%
+ \listparindent\parindent
+ \itemindent\listparindent
+ \rightmargin \z@}%
+ \item\relax}{\endlist}
+% \end{macrocode}
+% \end{environment}
+%
+% \paragraph{quote環境}
+%
+% \begin{environment}{quote}
+%
+% |quote| 環境は,段落がインデントされないことを除き,
+% |quotation| 環境と同じです。
+%
+% \begin{macrocode}
+\newenvironment{quote}%
+ {\list{}{\rightmargin\z@}\item\relax}{\endlist}
+% \end{macrocode}
+% \end{environment}
+%
+% \paragraph{定理など}
+%
+% |ltthm.dtx| 参照。たとえば次のように定義します。
+%\begin{verbatim}
+% \newtheorem{definition}{定義}
+% \newtheorem{axiom}{公理}
+% \newtheorem{theorem}{定理}
+%\end{verbatim}
+%
+% [2001-04-26] 定理の中はイタリック体になりましたが,
+% これでは和文がゴシック体になってしまうので,
+% |\itshape| を削除しました。
+%
+% [2009-08-23] |\bfseries| を |\headfont| に直し,
+% |\labelsep| を 1\,zw にし,括弧を全角にしました。
+%
+% \begin{macrocode}
+\def\@begintheorem#1#2{\trivlist\labelsep=1\jsZw
+ \item[\hskip \labelsep{\headfont #1\ #2}]}
+\def\@opargbegintheorem#1#2#3{\trivlist\labelsep=1\jsZw
+ \item[\hskip \labelsep{\headfont #1\ #2(#3)}]}
+% \end{macrocode}
+%
+% \begin{environment}{titlepage}
+%
+% タイトルを独立のページに出力するのに使われます。
+%
+% [2017-02-24] コミュニティ版\pLaTeX の標準クラス2017/02/15に合わせて,
+% bookクラスでタイトルを必ず奇数ページに送るようにしました。といっても,
+% 横組クラスしかありませんでしたので,従来の挙動は何も変わっていません。
+% また,book以外の場合のページ番号のリセットもコミュニティ版\pLaTeX の
+% 標準クラス2017/02/15に合わせましたが,こちらも片面印刷あるいは
+% 独立のタイトルページを作らないクラスばかりでしたので,従来の挙動は
+% 何も変わらずに済みました。
+%
+% \begin{macrocode}
+\newenvironment{titlepage}{%
+%<book> \pltx@cleartooddpage %% 2017-02-24
+ \if@twocolumn
+ \@restonecoltrue\onecolumn
+ \else
+ \@restonecolfalse\newpage
+ \fi
+ \thispagestyle{empty}%
+ \ifodd\c@page\setcounter{page}\@ne\else\setcounter{page}\z@\fi %% 2017-02-24
+ }%
+ {\if@restonecol\twocolumn \else \newpage \fi
+ \if@twoside\else
+ \setcounter{page}\@ne
+ \fi}
+% \end{macrocode}
+% \end{environment}
+%
+% \paragraph{付録}
+%
+% \begin{macro}{\appendix}
+%
+% 本文と付録を分離するコマンドです。
+%
+% \begin{macrocode}
+%<*!book&!report>
+\newcommand{\appendix}{\par
+ \setcounter{section}{0}%
+ \setcounter{subsection}{0}%
+ \ifnum\bxjs@label@section=\bxjs@label@section@compat
+ \gdef\presectionname{\appendixname}%
+ \gdef\postsectionname{}%
+% \gdef\thesection{\@Alph\c@section}% [2003-03-02]
+ \gdef\thesection{\presectionname\@Alph\c@section\postsectionname}%
+ \gdef\thesubsection{\@Alph\c@section.\@arabic\c@subsection}%
+ \else
+ \gdef\@secapp{\appendixname}%
+ \gdef\@secpos{}%
+ \gdef\thesection{\@Alph\c@section}%
+ \fi}
+%</!book&!report>
+%<*book|report>
+\newcommand{\appendix}{\par
+ \setcounter{chapter}{0}%
+ \setcounter{section}{0}%
+ \gdef\@chapapp{\appendixname}%
+ \gdef\@chappos{}%
+ \gdef\thechapter{\@Alph\c@chapter}}
+%</book|report>
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{パラメータの設定}
+%
+% \paragraph{arrayとtabular環境}
+%
+% \begin{macro}{\arraycolsep}
+%
+% |array| 環境の列間には |\arraycolsep| の2倍の幅の空きが入ります。
+%
+% \begin{macrocode}
+\setlength\arraycolsep{5\p@?}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tabcolsep}
+%
+% |tabular| 環境の列間には |\tabcolsep| の2倍の幅の空きが入ります。
+%
+% \begin{macrocode}
+\setlength\tabcolsep{6\p@?}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\arrayrulewidth}
+%
+% |array|,|tabular| 環境内の罫線の幅です。
+%
+% \begin{macrocode}
+\setlength\arrayrulewidth{.4\p@}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\doublerulesep}
+%
+% |array|,|tabular| 環境での二重罫線間のアキです。
+%
+% \begin{macrocode}
+\setlength\doublerulesep{2\p@}
+% \end{macrocode}
+% \end{macro}
+%
+% \paragraph{tabbing環境}
+%
+% \begin{macro}{\tabbingsep}
+%
+% |\'| コマンドで入るアキです。
+%
+% \begin{macrocode}
+\setlength\tabbingsep{\labelsep}
+% \end{macrocode}
+% \end{macro}
+%
+% \paragraph{minipage環境}
+%
+% \begin{macro}{\@mpfootins}
+%
+% |minipage| 環境の脚注の |\skip|\hspace{0pt}|\@mpfootins|
+% は通常のページの |\skip|\hspace{0pt}|\footins|
+% と同じ働きをします。
+%
+% \begin{macrocode}
+\skip\@mpfootins = \skip\footins
+% \end{macrocode}
+% \end{macro}
+%
+% \paragraph{framebox環境}
+%
+% \begin{macro}{\fboxsep}
+%
+% |\fbox|,|\framebox| で内側のテキストと枠との間の空きです。
+%
+% \begin{macro}{\fboxrule}
+%
+% |\fbox|,|\framebox| の罫線の幅です。
+%
+% \begin{macrocode}
+\setlength\fboxsep{3\p@?}
+\setlength\fboxrule{.4\p@}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \paragraph{equationとeqnarray環境}
+%
+% \begin{macro}{\theequation}
+%
+% 数式番号を出力するコマンドです。
+%
+% \begin{macrocode}
+%<!book&!report>\renewcommand \theequation {\@arabic\c@equation}
+%<*book|report>
+\@addtoreset{equation}{chapter}
+\renewcommand\theequation
+ {\ifnum \c@chapter>\z@ \thechapter.\fi \@arabic\c@equation}
+%</book|report>
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\jot}
+%
+% |eqnarray| の行間に余分に入るアキです。
+% デフォルトの値をコメントアウトして示しておきます。
+%
+% \begin{macrocode}
+% \setlength\jot{3pt}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@eqnnum}
+%
+% 数式番号の形式です。
+% デフォルトの値をコメントアウトして示しておきます。
+%
+% |\jsInhibitGlue (\theequation )\jsInhibitGlue| のように和文かっこ
+% を使うことも可能です。
+%
+% \begin{macrocode}
+% \def\@eqnnum{(\theequation)}
+% \end{macrocode}
+% \end{macro}
+%
+% |amsmath| パッケージを使う場合は |\tagform@| を次のように修正します。
+%
+% \begin{macrocode}
+% \def\tagform@#1{\maketag@@@{(\ignorespaces#1\unskip\@@italiccorr )}}
+% \end{macrocode}
+%
+% \subsection{フロート}
+%
+% タイプ \texttt{TYPE} のフロートオブジェクトを
+% 扱うには,次のマクロを定義します。
+% \begin{description}
+% \item[\texttt{\bslash fps@TYPE}]
+% フロートを置く位置(float placement specifier)です。
+% \item[\texttt{\bslash ftype@TYPE}]
+% フロートの番号です。2の累乗(1,2,4,\ldots )でなければなりません。
+% \item[\texttt{\bslash ext@TYPE}]
+% フロートの目次を出力するファイルの拡張子です。
+% \item[\texttt{\bslash fnum@TYPE}]
+% キャプション用の番号を生成するマクロです。
+% \item[\texttt{\bslash @makecaption}{\meta{num}}{\meta{text}}]
+% キャプションを出力するマクロです。
+% \meta{num} は |\fnum@...| の生成する番号,
+% \meta{text} はキャプションのテキストです。
+% テキストは適当な幅の |\parbox| に入ります。
+% \end{description}
+%
+% \paragraph{figure環境}
+%
+% \begin{macro}{\c@figure}
+%
+% 図番号のカウンタです。
+%
+% \begin{macro}{\thefigure}
+%
+% 図番号を出力するコマンドです。
+%
+% \begin{macrocode}
+%<*!book&!report>
+\newcounter{figure}
+\renewcommand \thefigure {\@arabic\c@figure}
+%</!book&!report>
+%<*book|report>
+\newcounter{figure}[chapter]
+\renewcommand \thefigure
+ {\ifnum \c@chapter>\z@ \thechapter.\fi \@arabic\c@figure}
+%</book|report>
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\fps@figure}
+% \begin{macro}{\ftype@figure}
+% \begin{macro}{\ext@figure}
+% \begin{macro}{\fnum@figure}
+%
+% |figure| のパラメータです。
+% |\figurename| の直後に |~| が入っていましたが,
+% ここでは外しました。
+%
+% \begin{macrocode}
+\def\fps@figure{tbp}
+\def\ftype@figure{1}
+\def\ext@figure{lof}
+\def\fnum@figure{\figurename\nobreak\thefigure}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{environment}{figure}
+% \begin{environment}{figure*}
+%
+% |*| 形式は段抜きのフロートです。
+%
+% \begin{macrocode}
+\newenvironment{figure}%
+ {\@float{figure}}%
+ {\end@float}
+\newenvironment{figure*}%
+ {\@dblfloat{figure}}%
+ {\end@dblfloat}
+% \end{macrocode}
+% \end{environment}
+% \end{environment}
+%
+% \paragraph{table環境}
+%
+% \begin{macro}{\c@table}
+% \begin{macro}{\thetable}
+%
+% 表番号カウンタと表番号を出力するコマンドです。
+% アスキー版では |\thechapter.| が |\thechapter{}・| になっていますが,
+% ここではオリジナルのままにしています。
+%
+% \begin{macrocode}
+%<*!book&!report>
+\newcounter{table}
+\renewcommand\thetable{\@arabic\c@table}
+%</!book&!report>
+%<*book|report>
+\newcounter{table}[chapter]
+\renewcommand \thetable
+ {\ifnum \c@chapter>\z@ \thechapter.\fi \@arabic\c@table}
+%</book|report>
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\fps@table}
+% \begin{macro}{\ftype@table}
+% \begin{macro}{\ext@table}
+% \begin{macro}{\fnum@table}
+%
+% |table| のパラメータです。
+% |\tablename| の直後に |~| が入っていましたが,
+% ここでは外しました。
+%
+% \begin{macrocode}
+\def\fps@table{tbp}
+\def\ftype@table{2}
+\def\ext@table{lot}
+\def\fnum@table{\tablename\nobreak\thetable}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{environment}{table}
+% \begin{environment}{table*}
+%
+% |*| は段抜きのフロートです。
+%
+% \begin{macrocode}
+\newenvironment{table}%
+ {\@float{table}}%
+ {\end@float}
+\newenvironment{table*}%
+ {\@dblfloat{table}}%
+ {\end@dblfloat}
+% \end{macrocode}
+% \end{environment}
+% \end{environment}
+%
+% \subsection{キャプション}
+%
+% \begin{macro}{\@makecaption}
+%
+% |\caption| コマンドにより呼び出され,
+% 実際にキャプションを出力するコマンドです。
+% 第1引数はフロートの番号,
+% 第2引数はテキストです。
+%
+% \begin{macro}{\abovecaptionskip}
+% \begin{macro}{\belowcaptionskip}
+%
+% それぞれキャプションの前後に挿入されるスペースです。
+% |\belowcaptionskip| が0になっていましたので,
+% キャプションを表の上につけた場合にキャプションと表が
+% くっついてしまうのを直しました。
+%
+% \begin{macrocode}
+\newlength\abovecaptionskip
+\newlength\belowcaptionskip
+\setlength\abovecaptionskip{5\p@?} % 元: 10\p@
+\setlength\belowcaptionskip{5\p@?} % 元: 0\p@
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% 実際のキャプションを出力します。
+% オリジナルと異なり,文字サイズを |\small| にし,
+% キャプションの幅を2cm狭くしました。
+%
+% [2003-11-05] ロジックを少し変えてみました。
+%
+% \begin{macrocode}
+%<*!jspf>
+% \long\def\@makecaption#1#2{{\small
+% \advance\leftskip10\jsc@mmm
+% \advance\rightskip10\jsc@mmm
+% \vskip\abovecaptionskip
+% \sbox\@tempboxa{#1\hskip1\jsZw\relax #2}%
+% \ifdim \wd\@tempboxa >\hsize
+% #1\hskip1\jsZw\relax #2\par
+% \else
+% \global \@minipagefalse
+% \hb@xt@\hsize{\hfil\box\@tempboxa\hfil}%
+% \fi
+% \vskip\belowcaptionskip}}
+\long\def\@makecaption#1#2{{\small
+ \advance\leftskip .0628\linewidth
+ \advance\rightskip .0628\linewidth
+ \vskip\abovecaptionskip
+ \sbox\@tempboxa{#1\zwspace#2}%
+ \ifdim \wd\@tempboxa <\hsize \centering \fi
+ #1\zwspace#2\par
+ \vskip\belowcaptionskip}}
+%</!jspf>
+%<*jspf>
+\long\def\@makecaption#1#2{%
+ \vskip\abovecaptionskip
+ \sbox\@tempboxa{\small\sffamily #1\quad #2}%
+ \ifdim \wd\@tempboxa >\hsize
+ {\small\sffamily
+ \list{#1}{%
+ \renewcommand{\makelabel}[1]{##1\hfil}
+ \itemsep \z@
+ \itemindent \z@
+ \labelsep \z@
+ \labelwidth 11\jsc@mmm
+ \listparindent\z@
+ \leftmargin 11\jsc@mmm}\item\relax #2\endlist}
+ \else
+ \global \@minipagefalse
+ \hb@xt@\hsize{\hfil\box\@tempboxa\hfil}%
+ \fi
+ \vskip\belowcaptionskip}
+%</jspf>
+% \end{macrocode}
+% \end{macro}
+%
+% \section{フォントコマンド}
+%
+% ここでは\LaTeX~2.09で使われていたコマンドを定義します。
+% これらはテキストモードと数式モードのどちらでも動作します。
+% これらは互換性のためのもので,
+% できるだけ |\text...| と |\math...| を使ってください。
+%
+% [2016-07-15] KOMA-Script中の |\scr@DeclareOldFontCommand| に倣い、
+% これらの命令を使うときには警告を発することにしました。
+%
+% [2016-07-16] 警告を最初の一回だけ発することにしました。また,
+% 例外的に警告を出さないようにするスイッチも付けます。
+%
+% \begin{macro}{\if@jsc@warnoldfontcmd}
+% \begin{macro}{\if@jsc@warnoldfontcmdexception}
+% \begin{ZRnote}
+% |\if@jsc@warnoldfontcmd| はBXJSクラスでは不使用。\par
+% |\if@jsc@warnoldfontcmdexception| は |\allow/disallowoldfontcommands|
+% の状態を表す。
+% \end{ZRnote}
+% \begin{macrocode}
+\newif\if@jsc@warnoldfontcmd
+\@jsc@warnoldfontcmdtrue
+\newif\if@jsc@warnoldfontcmdexception
+\@jsc@warnoldfontcmdexceptionfalse
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\jsc@DeclareOldFontCommand}
+% \begin{macrocode}
+\newcommand*{\jsc@DeclareOldFontCommand}[3]{%
+ \g@addto@macro\bxjs@oldfontcmd@list{\do#1}%
+ \DeclareOldFontCommand{#1}{%
+ \bxjs@oldfontcmd{#1}#2%
+ }{%
+ \bxjs@oldfontcmd{#1}#3%
+ }%
+}
+\DeclareRobustCommand*{\jsc@warnoldfontcmd}[1]{%
+ \ClassInfo\bxjs@clsname
+ {Old font command '\string#1' is used!!\MessageBreak
+ The first occurrence is}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{ZRnote}
+%
+% \begin{macro}{\allowoldfontcommands}
+% “二文字フォント命令”の使用を許可する(警告しない)。
+% \begin{macro}{\disallowoldfontcommands}
+% “二文字フォント命令”の使用に対して警告を出す。
+% \begin{macrocode}
+\newcommand*{\allowoldfontcommands}{%
+ \@jsc@warnoldfontcmdexceptiontrue}
+\newcommand*{\disallowoldfontcommands}{%
+ \@jsc@warnoldfontcmdexceptionfalse}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macrocode}
+\let\bxjs@oldfontcmd@list\@empty
+\def\bxjs@oldfontcmd#1{%
+ \expandafter\bxjs@oldfontcmd@a\csname bxjs@ofc/\string#1\endcsname#1}
+\def\bxjs@oldfontcmd@a#1#2{%
+ \if@jsc@warnoldfontcmdexception\else
+ \global\@jsc@warnoldfontcmdfalse
+ \ifx#1\relax
+ \global\let#1=t%
+ \jsc@warnoldfontcmd{#2}%
+ \fi
+ \fi}
+\def\bxjs@warnoldfontcmd@final{%
+% \par
+ \global\let\bxjs@warnoldfontcmd@final\@empty
+ \let\@tempa\@empty
+ \def\do##1{%
+ \expandafter\ifx\csname bxjs@ofc/\string##1\endcsname\relax\else
+ \edef\@tempa{\@tempa \space\string##1}\fi}
+ \bxjs@oldfontcmd@list
+ \ifx\@tempa\@empty\else
+ \ClassWarningNoLine\bxjs@clsname
+ {Some old font commands were used in text:\MessageBreak
+ \space\@tempa\MessageBreak
+ You should note, that since 1994 LaTeX2e provides a\MessageBreak
+ new font selection scheme called NFSS2 with several\MessageBreak
+ new, combinable font commands. The
+ class provides\MessageBreak
+ the old font commands only for compatibility}
+ \fi}
+% \end{macrocode}
+% 単純に |\AtEndDocument| のフックの中で |\bxjs@warnoldfontcmd@final| を
+% 実行した場合、最終ページのヘッダ・フッタの中にある二文字フォント命令は
+% それより後に実行されるため捕捉できない。
+% これに対処するため、|\end{document}| 中に実行される |\clearpage| の処理の
+% 直後に |\bxjs....final| が呼ばれるようにする。
+% \begin{macrocode}
+\def\bxjs@warnoldfontcmd@kick@final{%
+ \g@addto@macro\clearpage{\bxjs@warnoldfontcmd@final}}
+\AtEndDocument{\bxjs@warnoldfontcmd@kick@final}
+% \end{macrocode}
+%
+% \end{ZRnote}
+%
+% \begin{macro}{\mc}
+% \begin{macro}{\gt}
+% \begin{macro}{\rm}
+% \begin{macro}{\sf}
+% \begin{macro}{\tt}
+%
+% フォントファミリを変更します。
+%
+% \begin{macrocode}
+\jsc@DeclareOldFontCommand{\mc}{\normalfont\mcfamily}{\mathmc}
+\jsc@DeclareOldFontCommand{\gt}{\normalfont\gtfamily}{\mathgt}
+\jsc@DeclareOldFontCommand{\rm}{\normalfont\rmfamily}{\mathrm}
+\jsc@DeclareOldFontCommand{\sf}{\normalfont\sffamily}{\mathsf}
+\jsc@DeclareOldFontCommand{\tt}{\normalfont\ttfamily}{\mathtt}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\bf}
+%
+% ボールドシリーズにします。通常のミーディアムシリーズに戻す
+% コマンドは |\mdseries| です。
+%
+% \begin{macrocode}
+\jsc@DeclareOldFontCommand{\bf}{\normalfont\bfseries}{\mathbf}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\it}
+% \begin{macro}{\sl}
+% \begin{macro}{\sc}
+%
+% フォントシェイプを変えるコマンドです。
+% 斜体とスモールキャップスは数式中では何もしません
+% (警告メッセージを出力します)。
+% 通常のアップライト体に戻すコマンドは |\upshape| です。
+%
+% \begin{macrocode}
+\jsc@DeclareOldFontCommand{\it}{\normalfont\itshape}{\mathit}
+\jsc@DeclareOldFontCommand{\sl}{\normalfont\slshape}{\@nomath\sl}
+\jsc@DeclareOldFontCommand{\sc}{\normalfont\scshape}{\@nomath\sc}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\cal}
+% \begin{macro}{\mit}
+%
+% 数式モード以外では何もしません(警告を出します)。
+%
+% \begin{macrocode}
+\DeclareRobustCommand*{\cal}{\@fontswitch\relax\mathcal}
+\DeclareRobustCommand*{\mit}{\@fontswitch\relax\mathnormal}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \section{相互参照}
+%
+% \subsection{目次の類}
+%
+% |\section| コマンドは |.toc| ファイルに次のような行を出力します。
+% \begin{quote}
+% |\contentsline{section}{タイトル}{ページ}|
+% \end{quote}
+% たとえば |\section| に見出し番号が付く場合,上の「タイトル」は
+% \begin{quote}
+% |\numberline{番号}{見出し}|
+% \end{quote}
+% となります。
+% この「番号」は |\thesection| コマンドで生成された見出し番号です。
+%
+% |figure| 環境の |\caption| コマンドは |.lof| ファイルに
+% 次のような行を出力します。
+% \begin{quote}
+% |\contentsline{figure}{\numberline{番号}{キャプション}{ページ}|
+% \end{quote}
+% この「番号」は |\thefigure| コマンドで生成された図番号です。
+%
+% |table| 環境も同様です。
+%
+% |\contentsline{...}| は |\l@...| というコマンドを実行するので,
+% あらかじめ |\l@chapter|,|\l@section|,|\l@figure| などを
+% 定義しておかなければなりません。
+% これらの多くは |\@dottedtocline| コマンドを使って定義します。
+% これは
+% \begin{quote}
+% |\@dottedtocline{レベル}{インデント}{幅}{タイトル}{ページ}|
+% \end{quote}
+% という書式です。
+% \begin{description}
+% \item[レベル] この値が |tocdepth| 以下のときだけ出力されます。
+% |\chapter| はレベル0,|\section| はレベル1,等々です。
+% \item[インデント] 左側の字下げ量です。
+% \item[幅] 「タイトル」に |\numberline| コマンドが含まれる場合,
+% 節番号が入る箱の幅です。
+% \end{description}
+%
+% \begin{macro}{\@pnumwidth}
+%
+% ページ番号の入る箱の幅です。
+%
+% \begin{macro}{\@tocrmarg}
+%
+% 右マージンです。
+% |\@tocrmarg| $\ge$ |\@pnumwidth| とします。
+%
+% \begin{macro}{\@dotsep}
+%
+% 点の間隔です(単位 mu)。
+%
+% \begin{macro}{\c@tocdepth}
+%
+% 目次ページに出力する見出しレベルです。
+% 元は \texttt{article} で3,その他で2でしたが,
+% ここでは一つずつ減らしています。
+%
+% \begin{macrocode}
+\newcommand\@pnumwidth{1.55em}
+\newcommand\@tocrmarg{2.55em}
+\newcommand\@dotsep{4.5}
+%<!book&!report>\setcounter{tocdepth}{2}
+%<book|report>\setcounter{tocdepth}{1}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \paragraph{目次}
+%
+% \begin{macro}{\tableofcontents}
+%
+% 目次を生成します。
+%
+% \begin{macro}{\jsc@tocl@width}
+%
+% [2013-12-30] |\prechaptername| などから見積もった目次のラベルの長さです。(by ts)
+%
+% \begin{macrocode}
+\newdimen\jsc@tocl@width
+\newcommand{\tableofcontents}{%
+%<*book|report>
+ \settowidth\jsc@tocl@width{\headfont\prechaptername\postchaptername}%
+ \settowidth\@tempdima{\headfont\appendixname}%
+ \ifdim\jsc@tocl@width<\@tempdima \setlength\jsc@tocl@width{\@tempdima}\fi
+ \ifdim\jsc@tocl@width<2\jsZw \divide\jsc@tocl@width by 2 \advance\jsc@tocl@width 1\jsZw\fi
+ \if@twocolumn
+ \@restonecoltrue\onecolumn
+ \else
+ \@restonecolfalse
+ \fi
+ \chapter*{\contentsname}%
+ \@mkboth{\contentsname}{}%
+%</book|report>
+%<*!book&!report>
+ \settowidth\jsc@tocl@width{\headfont\presectionname\postsectionname}%
+ \settowidth\@tempdima{\headfont\appendixname}%
+ \ifdim\jsc@tocl@width<\@tempdima\relax\setlength\jsc@tocl@width{\@tempdima}\fi
+ \ifdim\jsc@tocl@width<2\jsZw \divide\jsc@tocl@width by 2 \advance\jsc@tocl@width 1\jsZw\fi
+ \section*{\contentsname}%
+ \@mkboth{\contentsname}{\contentsname}%
+%</!book&!report>
+ \@starttoc{toc}%
+%<book|report> \if@restonecol\twocolumn\fi
+}
+% \end{macrocode}
+% \end{macro}\end{macro}
+%
+% \begin{macro}{\l@part}
+%
+% 部の目次です。
+%
+% \begin{macrocode}
+\newcommand*{\l@part}[2]{%
+ \ifnum \c@tocdepth >-2\relax
+%<!book&!report> \addpenalty\@secpenalty
+%<book|report> \addpenalty{-\@highpenalty}%
+ \addvspace{2.25em \@plus\p@?}%
+ \begingroup
+ \parindent \z@
+% \@pnumwidth should be \@tocrmarg
+% \rightskip \@pnumwidth
+ \rightskip \@tocrmarg
+ \parfillskip -\rightskip
+ {\leavevmode
+ \large \headfont
+ \setlength\@lnumwidth{4\jsZw}%
+ #1\hfil \hb@xt@\@pnumwidth{\hss #2}}\par
+ \nobreak
+%<book|report> \global\@nobreaktrue
+%<book|report> \everypar{\global\@nobreakfalse\everypar{}}%
+ \endgroup
+ \fi}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\l@chapter}
+%
+% 章の目次です。|\@lnumwidth| を4.683zwに増やしました。
+%
+% [2013-12-30] |\@lnumwidth| を |\jsc@tocl@width| から
+% 決めるようにしてみました。(by ts)
+%
+% \begin{macrocode}
+%<*book|report>
+\newcommand*{\l@chapter}[2]{%
+ \ifnum \c@tocdepth >\m@ne
+ \addpenalty{-\@highpenalty}%
+ \addvspace{1.0em \@plus\p@?}
+% \vskip 1.0em \@plus\p@ % book.clsでは↑がこうなっている
+ \begingroup
+ \parindent\z@
+% \rightskip\@pnumwidth
+ \rightskip\@tocrmarg
+ \parfillskip-\rightskip
+ \leavevmode\headfont
+% % \if@english\setlength\@lnumwidth{5.5em}\else\setlength\@lnumwidth{4.683\jsZw}\fi
+ \setlength\@lnumwidth{\jsc@tocl@width}\advance\@lnumwidth 2.683\jsZw
+ \advance\leftskip\@lnumwidth \hskip-\leftskip
+ #1\nobreak\hfil\nobreak\hbox to\@pnumwidth{\hss#2}\par
+ \penalty\@highpenalty
+ \endgroup
+ \fi}
+%</book|report>
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\l@section}
+%
+% 節の目次です。
+%
+% \begin{macrocode}
+%<*!book&!report>
+\newcommand*{\l@section}[2]{%
+ \ifnum \c@tocdepth >\z@
+ \addpenalty{\@secpenalty}%
+ \addvspace{1.0em \@plus\p@?}%
+ \begingroup
+ \parindent\z@
+% \rightskip\@pnumwidth
+ \rightskip\@tocrmarg
+ \parfillskip-\rightskip
+ \leavevmode\headfont
+% % \setlength\@lnumwidth{4\jsZw}% 元1.5em [2003-03-02]
+ \setlength\@lnumwidth{\jsc@tocl@width}\advance\@lnumwidth 2\jsZw
+ \advance\leftskip\@lnumwidth \hskip-\leftskip
+ #1\nobreak\hfil\nobreak\hbox to\@pnumwidth{\hss#2}\par
+ \endgroup
+ \fi}
+%</!book&!report>
+% \end{macrocode}
+%
+% インデントと幅はそれぞれ1.5em,2.3emでしたが,
+% 1zw,3.683zwに変えました。
+% \begin{macrocode}
+%<book|report> % \newcommand*{\l@section}{\@dottedtocline{1}{1\jsZw}{3.683\jsZw}}
+% \end{macrocode}
+%
+% [2013-12-30] 上のインデントは |\jsc@tocl@width| から決めるように
+% しました。(by ts)
+%
+% \end{macro}
+%
+% \begin{macro}{\l@subsection}
+% \begin{macro}{\l@subsubsection}
+% \begin{macro}{\l@paragraph}
+% \begin{macro}{\l@subparagraph}
+%
+% さらに下位レベルの目次項目の体裁です。
+% あまり使ったことがありませんので,要修正かもしれません。
+%
+% [2013-12-30] ここも |\jsc@tocl@width| から決めるように
+% してみました。(by ts)
+%
+% \begin{macrocode}
+%<*!book&!report>
+% \newcommand*{\l@subsection} {\@dottedtocline{2}{1.5em}{2.3em}}
+% \newcommand*{\l@subsubsection}{\@dottedtocline{3}{3.8em}{3.2em}}
+% \newcommand*{\l@paragraph} {\@dottedtocline{4}{7.0em}{4.1em}}
+% \newcommand*{\l@subparagraph} {\@dottedtocline{5}{10em}{5em}}
+%
+% \newcommand*{\l@subsection} {\@dottedtocline{2}{1zw}{3zw}}
+% \newcommand*{\l@subsubsection}{\@dottedtocline{3}{2\jsZw}{3\jsZw}}
+% \newcommand*{\l@paragraph} {\@dottedtocline{4}{3\jsZw}{3\jsZw}}
+% \newcommand*{\l@subparagraph} {\@dottedtocline{5}{4\jsZw}{3\jsZw}}
+%
+\newcommand*{\l@subsection}{%
+ \@tempdima\jsc@tocl@width \advance\@tempdima -1\jsZw
+ \@dottedtocline{2}{\@tempdima}{3\jsZw}}
+\newcommand*{\l@subsubsection}{%
+ \@tempdima\jsc@tocl@width \advance\@tempdima 0\jsZw
+ \@dottedtocline{3}{\@tempdima}{4\jsZw}}
+\newcommand*{\l@paragraph}{%
+ \@tempdima\jsc@tocl@width \advance\@tempdima 1\jsZw
+ \@dottedtocline{4}{\@tempdima}{5\jsZw}}
+\newcommand*{\l@subparagraph}{%
+ \@tempdima\jsc@tocl@width \advance\@tempdima 2\jsZw
+ \@dottedtocline{5}{\@tempdima}{6\jsZw}}
+%</!book&!report>
+%<*book|report>
+% \newcommand*{\l@subsection} {\@dottedtocline{2}{3.8em}{3.2em}}
+% \newcommand*{\l@subsubsection}{\@dottedtocline{3}{7.0em}{4.1em}}
+% \newcommand*{\l@paragraph} {\@dottedtocline{4}{10em}{5em}}
+% \newcommand*{\l@subparagraph} {\@dottedtocline{5}{12em}{6em}}
+\newcommand*{\l@section}{%
+ \@tempdima\jsc@tocl@width \advance\@tempdima -1\jsZw
+ \@dottedtocline{1}{\@tempdima}{3.683\jsZw}}
+\newcommand*{\l@subsection}{%
+ \@tempdima\jsc@tocl@width \advance\@tempdima 2.683\jsZw
+ \@dottedtocline{2}{\@tempdima}{3.5\jsZw}}
+\newcommand*{\l@subsubsection}{%
+ \@tempdima\jsc@tocl@width \advance\@tempdima 6.183\jsZw
+ \@dottedtocline{3}{\@tempdima}{4.5\jsZw}}
+\newcommand*{\l@paragraph}{%
+ \@tempdima\jsc@tocl@width \advance\@tempdima 10.683\jsZw
+ \@dottedtocline{4}{\@tempdima}{5.5\jsZw}}
+\newcommand*{\l@subparagraph}{%
+ \@tempdima\jsc@tocl@width \advance\@tempdima 16.183\jsZw
+ \@dottedtocline{5}{\@tempdima}{6.5\jsZw}}
+%</book|report>
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\numberline}
+% \begin{macro}{\@lnumwidth}
+%
+% 欧文版\LaTeX では |\numberline{...}| は幅 |\@tempdima| の箱に左詰め
+% で出力する命令ですが,
+% アスキー版では |\@tempdima| の代わりに |\@lnumwidth| という変数
+% で幅を決めるように再定義しています。
+% 後続文字が全角か半角かでスペースが変わらないように |\hspace|
+% を入れておきました。
+%
+% \begin{macrocode}
+\newdimen\@lnumwidth
+\def\numberline#1{\hb@xt@\@lnumwidth{#1\hfil}\hspace{0pt}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\@dottedtocline}
+% \begin{macro}{\jsTocLine}
+%
+% \LaTeX 本体(\texttt{ltsect.dtx} 参照)での定義と同じですが,
+% |\@tempdima| を |\@lnumwidth| に変えています。
+%
+% [2018-06-23] デフォルトでは\jsTocLine のようにベースラインになります。\par
+% これを変更可能にするため,|\jsTocLine| というマクロに切り出しました。
+% 例えば,仮想ボディの中央
+% {\renewcommand{\jsTocLine}{\leaders \hbox {\hss ・\hss}\hfill}\jsTocLine}
+% に変更したい場合は
+%\begin{verbatim}
+% \renewcommand{\jsTocLine}{\leaders \hbox {\hss ・\hss}\hfill}
+%\end{verbatim}
+% とします。
+%
+% \begin{macrocode}
+\def\jsTocLine{\leaders\hbox{%
+ $\m@th \mkern \@dotsep mu\hbox{.}\mkern \@dotsep mu$}\hfill}
+\def\@dottedtocline#1#2#3#4#5{\ifnum #1>\c@tocdepth \else
+ \vskip \z@ \@plus.2\p@?
+ {\leftskip #2\relax \rightskip \@tocrmarg \parfillskip -\rightskip
+ \parindent #2\relax\@afterindenttrue
+ \interlinepenalty\@M
+ \leavevmode
+ \@lnumwidth #3\relax
+ \advance\leftskip \@lnumwidth \null\nobreak\hskip -\leftskip
+ {#4}\nobreak
+ \jsTocLine \nobreak\hb@xt@\@pnumwidth{%
+ \hfil\normalfont \normalcolor #5}\par}\fi}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \paragraph{図目次と表目次}
+%
+% \begin{macro}{\listoffigures}
+%
+% 図目次を出力します。
+%
+% \begin{macrocode}
+\newcommand{\listoffigures}{%
+%<*book|report>
+ \if@twocolumn\@restonecoltrue\onecolumn
+ \else\@restonecolfalse\fi
+ \chapter*{\listfigurename}%
+ \@mkboth{\listfigurename}{}%
+%</book|report>
+%<*!book&!report>
+ \section*{\listfigurename}%
+ \@mkboth{\listfigurename}{\listfigurename}%
+%</!book&!report>
+ \@starttoc{lof}%
+%<book|report> \if@restonecol\twocolumn\fi
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\l@figure}
+%
+% 図目次の項目を出力します。
+%
+% \begin{macrocode}
+\newcommand*{\l@figure}{\@dottedtocline{1}{1\jsZw}{3.683\jsZw}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\listoftables}
+%
+% 表目次を出力します。
+%
+% \begin{macrocode}
+\newcommand{\listoftables}{%
+%<*book|report>
+ \if@twocolumn\@restonecoltrue\onecolumn
+ \else\@restonecolfalse\fi
+ \chapter*{\listtablename}%
+ \@mkboth{\listtablename}{}%
+%</book|report>
+%<*!book&!report>
+ \section*{\listtablename}%
+ \@mkboth{\listtablename}{\listtablename}%
+%</!book&!report>
+ \@starttoc{lot}%
+%<book|report> \if@restonecol\twocolumn\fi
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\l@table}
+%
+% 表目次は図目次と同じです。
+%
+% \begin{macrocode}
+\let\l@table\l@figure
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{参考文献}
+%
+% \begin{macro}{\bibindent}
+%
+% オープンスタイルの参考文献で使うインデント幅です。
+% 元は 1.5em でした。
+%
+% \begin{macrocode}
+\newdimen\bibindent
+\setlength\bibindent{2\jsZw}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{environment}{thebibliography}
+%
+% 参考文献リストを出力します。
+%
+% [2016-07-16] \LaTeX~2.09で使われていたフォントコマンドの警告を,
+% 文献スタイル(.bst)ではよく |\bf| がいまだに用いられることが多いため,
+% |thebibliography| 環境内では例外的に出さないようにしました。
+%
+% \begin{macrocode}
+\newenvironment{thebibliography}[1]{%
+ \@jsc@warnoldfontcmdexceptiontrue
+ \global\let\presectionname\relax
+ \global\let\postsectionname\relax
+%<article|slide> \section*{\refname}\@mkboth{\refname}{\refname}%
+%<*kiyou>
+ \vspace{1.5\baselineskip}
+ \subsubsection*{\refname}\@mkboth{\refname}{\refname}%
+ \vspace{0.5\baselineskip}
+%</kiyou>
+%<book|report> \chapter*{\bibname}\@mkboth{\bibname}{}%
+%<book|report> \addcontentsline{toc}{chapter}{\bibname}%
+ \list{\@biblabel{\@arabic\c@enumiv}}%
+ {\settowidth\labelwidth{\@biblabel{#1}}%
+ \leftmargin\labelwidth
+ \advance\leftmargin\labelsep
+ \@openbib@code
+ \usecounter{enumiv}%
+ \let\p@enumiv\@empty
+ \renewcommand\theenumiv{\@arabic\c@enumiv}}%
+%<kiyou> \small
+ \sloppy
+ \clubpenalty4000
+ \@clubpenalty\clubpenalty
+ \widowpenalty4000%
+ \sfcode`\.\@m}
+ {\def\@noitemerr
+ {\@latex@warning{Empty `thebibliography' environment}}%
+ \endlist}
+% \end{macrocode}
+% \end{environment}
+%
+% \begin{macro}{\newblock}
+%
+% |\newblock| はデフォルトでは小さなスペースを生成します。
+%
+% \begin{macrocode}
+\newcommand{\newblock}{\hskip .11em\@plus.33em\@minus.07em}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@openbib@code}
+%
+% |\@openbib@code| はデフォルトでは何もしません。
+% この定義は |openbib| オプションによって変更されます。
+%
+% \begin{macrocode}
+\let\@openbib@code\@empty
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@biblabel}
+%
+% |\bibitem[...]| のラベルを作ります。
+% \texttt{ltbibl.dtx} の定義の半角 [] を全角[]に変え,
+% 余分なスペースが入らないように |\jsInhibitGlue| ではさみました。
+% とりあえずコメントアウトしておきますので,必要に応じて生かしてください。
+%
+% \begin{macrocode}
+% \def\@biblabel#1{\jsInhibitGlue [#1]\jsInhibitGlue}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\cite}
+% \begin{macro}{\@cite}
+% \begin{macro}{\@citex}
+%
+% 文献の番号を出力する部分は \texttt{ltbibl.dtx} で定義されていますが,
+% コンマとかっこを和文フォントにするには次のようにします。
+% とりあえずコメントアウトしておきましたので,必要に応じて生かしてください。
+% かっこの前後に入るグルーを |\jsInhibitGlue| で取っていますので,
+% オリジナル同様,\verb*+Knuth~\cite{knu} + のように半角空白
+% で囲んでください。
+%
+% \begin{macrocode}
+% \def\@citex[#1]#2{\leavevmode
+% \let\@citea\@empty
+% \@cite{\@for\@citeb:=#2\do
+% {\@citea\def\@citea{,\inhibitglue\penalty\@m\ }%
+% \edef\@citeb{\expandafter\@firstofone\@citeb\@empty}%
+% \if@filesw\immediate\write\@auxout{\string\citation{\@citeb}}\fi
+% \@ifundefined{b@\@citeb}{\mbox{\normalfont\bfseries ?}%
+% \G@refundefinedtrue
+% \@latex@warning
+% {Citation `\@citeb' on page \thepage \space undefined}}%
+% {\@cite@ofmt{\csname b@\@citeb\endcsname}}}}{#1}}
+% \def\@cite#1#2{\jsInhibitGlue [{#1\if@tempswa ,#2\fi}]\jsInhibitGlue}
+% \end{macrocode}
+%
+% 引用番号を上ツキの 1)のようなスタイルにするには次のようにします。
+% |\cite| の先頭に |\unskip| を付けて先行のスペース(\verb|~| も)
+% を帳消しにしています。
+%
+% \begin{macrocode}
+% \DeclareRobustCommand\cite{\unskip
+% \@ifnextchar [{\@tempswatrue\@citex}{\@tempswafalse\@citex[]}}
+% \def\@cite#1#2{$^{\hbox{\scriptsize{#1\if@tempswa
+% ,\jsInhibitGlue\ #2\fi})}}$}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \subsection{索引}
+%
+% \begin{environment}{theindex}
+%
+% 2\zrWDash3段組の索引を作成します。
+% 最後が偶数ページのときにマージンがずれる現象を直しました(Thanks: 藤村さん)。
+%
+% \begin{macrocode}
+\newenvironment{theindex}{% 索引を3段組で出力する環境
+ \if@twocolumn
+ \onecolumn\@restonecolfalse
+ \else
+ \clearpage\@restonecoltrue
+ \fi
+ \columnseprule.4pt \columnsep 2\jsZw
+ \ifx\multicols\@undefined
+%<book|report> \twocolumn[\@makeschapterhead{\indexname}%
+%<book|report> \addcontentsline{toc}{chapter}{\indexname}]%
+%<!book&!report> \def\presectionname{}\def\postsectionname{}%
+%<!book&!report> \twocolumn[\section*{\indexname}]%
+ \else
+ \ifdim\textwidth<\fullwidth
+ \setlength{\evensidemargin}{\oddsidemargin}
+ \setlength{\textwidth}{\fullwidth}
+ \setlength{\linewidth}{\fullwidth}
+%<book|report> \begin{multicols}{3}[\chapter*{\indexname}%
+%<book|report> \addcontentsline{toc}{chapter}{\indexname}]%
+%<!book&!report> \def\presectionname{}\def\postsectionname{}%
+%<!book&!report> \begin{multicols}{3}[\section*{\indexname}]%
+ \else
+%<book|report> \begin{multicols}{2}[\chapter*{\indexname}%
+%<book|report> \addcontentsline{toc}{chapter}{\indexname}]%
+%<!book&!report> \def\presectionname{}\def\postsectionname{}%
+%<!book&!report> \begin{multicols}{2}[\section*{\indexname}]%
+ \fi
+ \fi
+%<book|report> \@mkboth{\indexname}{}%
+%<!book&!report> \@mkboth{\indexname}{\indexname}%
+ \plainifnotempty % \thispagestyle{plain}
+ \parindent\z@
+ \parskip\z@ \@plus .3\p@?\relax
+ \let\item\@idxitem
+ \raggedright
+ \footnotesize\narrowbaselines
+ }{
+ \ifx\multicols\@undefined
+ \if@restonecol\onecolumn\fi
+ \else
+ \end{multicols}
+ \fi
+ \clearpage
+ }
+% \end{macrocode}
+% \end{environment}
+%
+% \begin{macro}{\@idxitem}
+% \begin{macro}{\subitem}
+% \begin{macro}{\subsubitem}
+%
+% 索引項目の字下げ幅です。|\@idxitem| は |\item| の項目の字下げ幅です。
+%
+% \begin{macrocode}
+\newcommand{\@idxitem}{\par\hangindent 4\jsZw} % 元 40pt
+\newcommand{\subitem}{\@idxitem \hspace*{2\jsZw}} % 元 20pt
+\newcommand{\subsubitem}{\@idxitem \hspace*{3\jsZw}} % 元 30pt
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\indexspace}
+%
+% 索引で先頭文字ごとのブロックの間に入るスペースです。
+%
+% \begin{macrocode}
+\newcommand{\indexspace}{\par \vskip 10\p@? \@plus5\p@? \@minus3\p@?\relax}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\seename}
+% \begin{macro}{\alsoname}
+%
+% 索引の |\see|,|\seealso| コマンドで出力されるものです。
+% デフォルトはそれぞれ \emph{see},\emph{see also} という英語ですが,
+% ここではとりあえず両方とも「→」に変えました。
+% $\Rightarrow$(|$\Rightarrow$|)などでもいいでしょう。
+%
+% \begin{macrocode}
+\newcommand\seename{\if@english see\else →\fi}
+\newcommand\alsoname{\if@english see also\else →\fi}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \subsection{脚注}
+%
+% \begin{macro}{\footnote}
+% \begin{macro}{\footnotemark}
+%
+% 和文の句読点・閉じかっこ類の直後で用いた際に
+% 余分なアキが入るのを防ぐため,
+% |\inhibitglue| を入れることにします。
+% p\LaTeX の日付が2016/09/03より新しい場合は,このパッチが不要なのであてません。
+%
+% \begin{ZRnote}
+% パッチの必要性は「|\pltx@foot@penalty| が未定義か」で行う。
+% |\inhibitglue| の代わりに |\jsInhibitGlue| を使う。
+% \end{ZRnote}
+% \begin{macrocode}
+\ifx\pltx@foot@penalty\@undefined
+ \let\footnotes@ve=\footnote
+ \def\footnote{\jsInhibitGlue\footnotes@ve}
+ \let\footnotemarks@ve=\footnotemark
+ \def\footnotemark{\jsInhibitGlue\footnotemarks@ve}
+\fi
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\@makefnmark}
+%
+% 脚注番号を付ける命令です。
+% ここでは脚注番号の前に記号 $*$ を付けています。
+% 「注1」の形式にするには |\textasteriskcentered|
+% を |注\kern0.1em| にしてください。
+% |\@xfootnotenext| と合わせて,
+% もし脚注番号が空なら記号も出力しないようにしてあります。
+%
+% [2002-04-09] インプリメントの仕方を変えたため消しました。
+%
+% [2013-04-23] 新しい\pTeX では脚注番号のまわりにスペースが入りすぎることを防ぐため,
+% 北川さんのパッチ [qa:57090] を取り込みました。
+%
+% [2013-05-14] plcore.ltx に倣った形に書き直しました(Thanks: 北川さん)。
+%
+% [2016-07-11] コミュニティ版p\LaTeX の変更に追随しました(Thanks: 角藤さん)。
+% p\LaTeX の日付が2016/04/17より新しい場合は,このパッチが不要なのであてません。
+%
+% \begin{ZRnote}
+% {\pTeX}依存のコードなので、minimal和文ドライバ実装に移動。
+% \end{ZRnote}
+% \end{macro}
+%
+% \begin{macro}{\thefootnote}
+%
+% 脚注番号に * 印が付くようにしました。
+% ただし,番号がゼロのときは * 印も脚注番号も付きません。
+%
+% [2003-08-15] |\textasteriskcentered| ではフォントによって
+% 下がりすぎるので変更しました。
+%
+% [2016-10-08] TODO: 脚注番号が |newtxtext| や |newpxtext| の使用時に
+% おかしくなってしまいます。これらのパッケージは内部で |\thefootnote| を
+% 再定義していますので,気になる場合はパッケージを読み込むときに
+% \texttt{defaultsups} オプションを付けてください(qa:57284, qa:57287)。
+%
+% \begin{macrocode}
+\def\thefootnote{\ifnum\c@footnote>\z@\leavevmode\lower.5ex\hbox{*}\@arabic\c@footnote\fi}
+% \end{macrocode}
+%
+% 「注1」の形式にするには次のようにしてください。
+%
+% \begin{macrocode}
+% \def\thefootnote{\ifnum\c@footnote>\z@ 注\kern0.1\jsZw\@arabic\c@footnote\fi}
+% \end{macrocode}
+%
+% \end{macro}
+%
+% \begin{macro}{\footnoterule}
+%
+% 本文と脚注の間の罫線です。
+%
+% \begin{macrocode}
+\renewcommand{\footnoterule}{%
+ \kern-2.6\p@? \kern-.4\p@
+ \hrule width .4\columnwidth
+ \kern 2.6\p@?}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\c@footnote}
+%
+% 脚注番号は章ごとにリセットされます。
+%
+% \begin{macrocode}
+%<book|report>\@addtoreset{footnote}{chapter}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@footnotetext}
+%
+% 脚注で |\verb| が使えるように改変してあります。
+% Jeremy Gibbons, \textit{\TeX\ and TUG NEWS},
+% Vol.~2, No.~4 (1993), p.~9)
+%
+% [2016-08-25] コミュニティ版\pLaTeX の「閉じ括弧類の直後に
+% |\footnotetext| が続く場合に改行が起きることがある問題に対処」
+% と同等のコードを追加しました。
+%
+% [2016-09-08] コミュニティ版\pLaTeX のバグ修正に追随しました。
+%
+% [2016-11-29] 古い\pLaTeX で使用された場合を考慮してコードを改良。
+% ^^A 脚注直後に改行を可能にするために|\null|を入れる場合,
+% ^^A 同時にペナルティも考慮しなければ誤った改行が起きる可能性がある。
+% ^^A このため,|\ifhmode\null\fi|は
+% ^^A |\ifx\pltx@foot@penalty\@undefined\else ... \fi|
+% ^^A 条件の内側に置いておくのが安全。
+%
+% [2018-03-11] |\next|などいくつかの内部命令を |\jsc@...| 付きの
+% ユニークな名前にしました。
+% \begin{macrocode}
+\long\def\@footnotetext{%
+ \insert\footins\bgroup
+ \normalfont\footnotesize
+ \interlinepenalty\interfootnotelinepenalty
+ \splittopskip\footnotesep
+ \splitmaxdepth \dp\strutbox \floatingpenalty \@MM
+ \hsize\columnwidth \@parboxrestore
+ \protected@edef\@currentlabel{%
+ \csname p@footnote\endcsname\@thefnmark
+ }%
+ \color@begingroup
+ \@makefntext{%
+ \rule\z@\footnotesep\ignorespaces}%
+ \futurelet\jsc@next\jsc@fo@t}
+\def\jsc@fo@t{\ifcat\bgroup\noexpand\jsc@next \let\jsc@next\jsc@f@@t
+ \else \let\jsc@next\jsc@f@t\fi \jsc@next}
+\def\jsc@f@@t{\bgroup\aftergroup\jsc@@foot\let\jsc@next}
+\def\jsc@f@t#1{#1\jsc@@foot}
+\def\jsc@@foot{\@finalstrut\strutbox\color@endgroup\egroup
+ \ifx\pltx@foot@penalty\@undefined\else
+ \ifhmode\null\fi
+ \ifnum\pltx@foot@penalty=\z@\else
+ \penalty\pltx@foot@penalty
+ \pltx@foot@penalty\z@
+ \fi
+ \fi}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@makefntext}
+%
+% 実際に脚注を出力する命令です。
+% |\@makefnmark| は脚注の番号を出力する命令です。
+% ここでは脚注が左端から一定距離に来るようにしてあります。
+%
+% \begin{macrocode}
+\newcommand\@makefntext[1]{%
+ \advance\leftskip 3\jsZw
+ \parindent 1\jsZw
+ \noindent
+ \llap{\@makefnmark\hskip0.3\jsZw}#1}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@xfootnotenext}
+%
+% 最初の |\footnotetext{...}| は番号が付きません。
+% 著者の所属などを脚注の欄に書くときに便利です。
+%
+% すでに |\footnote| を使った後なら |\footnotetext[0]{...}|
+% とすれば番号を付けない脚注になります。
+% ただし,この場合は脚注番号がリセットされてしまうので,
+% 工夫が必要です。
+%
+% [2002-04-09] インプリメントの仕方を変えたため消しました。
+%
+% \begin{macrocode}
+% \def\@xfootnotenext[#1]{%
+% \begingroup
+% \ifnum#1>\z@
+% \csname c@\@mpfn\endcsname #1\relax
+% \unrestored@protected@xdef\@thefnmark{\thempfn}%
+% \else
+% \unrestored@protected@xdef\@thefnmark{}%
+% \fi
+% \endgroup
+% \@footnotetext}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{ZRnote}
+% ここまでのコードは JS クラスを踏襲する。
+% \end{ZRnote}
+%
+% \section{段落の頭へのグルー挿入禁止}
+%
+% 段落頭のかぎかっこなどを見かけ1字半下げから全角1字下げに直します。
+%
+% \begin{ZRnote}
+% \begin{macro}{\jsInhibitGlueAtParTop}
+% 「段落頭の括弧の空き補正」の処理を |\jsInhibitGlueAtParTop|
+% という命令にして、これを再定義可能にした。
+% \begin{macrocode}
+\let\jsInhibitGlueAtParTop\@empty
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\everyparhook}
+% 全ての段落の冒頭で実行されるフック。
+% これの初期値を先述の |\jsInhibitGlueAtParTop| とする。
+% \begin{macrocode}
+\def\everyparhook{\jsInhibitGlueAtParTop}
+\ifnum\bxjs@everyparhook=\bxjs@everyparhook@compat
+\g@addto@macro\bxjs@begin@document@hook{\everypar{\everyparhook}}
+\fi
+% \end{macrocode}
+% \end{macro}
+% \end{ZRnote}
+%
+% [2016-07-18] |\inhibitglue| の発行対象を |\inhibitxspcode| が2に
+% 設定されているものすべてに拡大しました。
+%
+% [2016-12-01] すぐ上の変更で |\@tempa| を使っていたのがよくなかった
+% ので,プレフィックスを付けて |\jsc@tempa| にしました(forum:2085)。
+%
+% [2017-02-13] |\jsc@tempa| は実はテンポラリではなく「この処理専用の
+% ユニーク制御綴」である必要があります。間違って別の箇所で使う危険性が
+% 高いので,専用の命令 |\jsc@ig@temp| に置き換えました(Issue \#54)。
+%
+% \begin{ZRnote}
+% 次の |\@inhibitglue| はJSクラスでの |\jsInhibitGlueAtParTop| の
+% 実装である。
+% エンジンが |(u)platex| の場合はこれを採用する。
+% \end{ZRnote}
+% \begin{macrocode}
+\ifx j\jsEngine
+\def\@inhibitglue{%
+ \futurelet\@let@token\@@inhibitglue}
+\begingroup
+\let\GDEF=\gdef
+\let\CATCODE=\catcode
+\let\ENDGROUP=\endgroup
+\CATCODE`k=12
+\CATCODE`a=12
+\CATCODE`n=12
+\CATCODE`j=12
+\CATCODE`i=12
+\CATCODE`c=12
+\CATCODE`h=12
+\CATCODE`r=12
+\CATCODE`t=12
+\CATCODE`e=12
+\GDEF\KANJI@CHARACTER{kanji character }
+\ENDGROUP
+\def\@@inhibitglue{%
+ \expandafter\expandafter\expandafter\jsc@inhibitglue\expandafter\meaning\expandafter\@let@token\KANJI@CHARACTER\relax\jsc@end}
+\expandafter\def\expandafter\jsc@inhibitglue\expandafter#\expandafter1\KANJI@CHARACTER#2#3\jsc@end{%
+ \def\jsc@ig@temp{#1}%
+ \ifx\jsc@ig@temp\@empty
+ \ifnum\the\inhibitxspcode`#2=2\relax
+ \inhibitglue
+ \fi
+ \fi}
+\fi
+% \end{macrocode}
+%
+% \begin{ZRnote}
+% ここからしばらく
+% 「(本物の)|\everypar| に追加した |\everyparhook| を保持する」
+% ためのパッチ処理が続く。
+% これは、|everyparhook=compat| の場合にのみ実行する。
+% \end{ZRnote}
+% \begin{macrocode}
+\ifnum\bxjs@everyparhook=\bxjs@everyparhook@compat
+% \end{macrocode}
+%
+% これだけではいけないようです。あちこちに |\everypar| を初期化するコマンドが
+% 隠されていました。
+%
+% まず,環境の直後の段落です。
+%
+% [2016-11-19] ltlists.dtx 2015/05/10 v1.0tの変更に追随して |\clubpenalty| の
+% リセットを追加しました。
+%
+% \begin{macrocode}
+\def\@doendpe{%
+ \@endpetrue
+ \def\par{%
+ \@restorepar\clubpenalty\@clubpenalty\everypar{\everyparhook}\par\@endpefalse}%
+ \everypar{{\setbox\z@\lastbox}\everypar{\everyparhook}\@endpefalse\everyparhook}}
+% \end{macrocode}
+%
+% [2017-08-31] minipage環境にも対策します。
+%
+% \begin{macrocode}
+\def\@setminipage{%
+ \@minipagetrue
+ \everypar{\@minipagefalse\everypar{\everyparhook}}%
+}
+% \end{macrocode}
+%
+% |\item| 命令の直後です。
+%
+% \begin{macrocode}
+\def\@item[#1]{%
+ \if@noparitem
+ \@donoparitem
+ \else
+ \if@inlabel
+ \indent \par
+ \fi
+ \ifhmode
+ \unskip\unskip \par
+ \fi
+ \if@newlist
+ \if@nobreak
+ \@nbitem
+ \else
+ \addpenalty\@beginparpenalty
+ \addvspace\@topsep
+ \addvspace{-\parskip}%
+ \fi
+ \else
+ \addpenalty\@itempenalty
+ \addvspace\itemsep
+ \fi
+ \global\@inlabeltrue
+ \fi
+ \everypar{%
+ \@minipagefalse
+ \global\@newlistfalse
+ \if@inlabel
+ \global\@inlabelfalse
+ {\setbox\z@\lastbox
+ \ifvoid\z@
+ \kern-\itemindent
+ \fi}%
+ \box\@labels
+ \penalty\z@
+ \fi
+ \if@nobreak
+ \@nobreakfalse
+ \clubpenalty \@M
+ \else
+ \clubpenalty \@clubpenalty
+ \everypar{\everyparhook}%
+ \fi
+ \everyparhook}%
+ \if@noitemarg
+ \@noitemargfalse
+ \if@nmbrlist
+ \refstepcounter\@listctr
+ \fi
+ \fi
+ \sbox\@tempboxa{\makelabel{#1}}%
+ \global\setbox\@labels\hbox{%
+ \unhbox\@labels
+ \hskip \itemindent
+ \hskip -\labelwidth
+ \hskip -\labelsep
+ \ifdim \wd\@tempboxa >\labelwidth
+ \box\@tempboxa
+ \else
+ \hbox to\labelwidth {\unhbox\@tempboxa}%
+ \fi
+ \hskip \labelsep}%
+ \ignorespaces}
+% \end{macrocode}
+%
+% 二つ挿入した |\everyparhook| のうち後者が |\section| 類の直後に2回,
+% 前者が3回目以降に実行されます。
+%
+% \begin{macrocode}
+\def\@afterheading{%
+ \@nobreaktrue
+ \everypar{%
+ \if@nobreak
+ \@nobreakfalse
+ \clubpenalty \@M
+ \if@afterindent \else
+ {\setbox\z@\lastbox}%
+ \fi
+ \else
+ \clubpenalty \@clubpenalty
+ \everypar{\everyparhook}%
+ \fi\everyparhook}}
+% \end{macrocode}
+%
+% \begin{ZRnote}
+% 「|\everyparhook| 用のパッチ処理」はここまで。
+% \end{ZRnote}
+% \begin{macrocode}
+\fi
+% \end{macrocode}
+%
+% |\@gnewline| についてはちょっと複雑な心境です。
+% もともとのp\LaTeXe は段落の頭にグルーが入る方で統一されていました。
+% しかし |\\| の直後にはグルーが入らず,不統一でした。
+% そこで |\\| の直後にもグルーを入れるように直していただいた経緯があります。
+% しかし,ここでは逆にグルーを入れない方で統一したいので,
+% また元に戻してしまいました。
+%
+% しかし単に戻すだけでも駄目みたいなので,ここでも最後にグルーを消しておきます。
+%
+% \begin{ZRnote}
+% \Note |luatexja| を読みこんだ場合に lltjcore.sty によって上書きされる
+% のを防ぐため遅延させる。
+% \end{ZRnote}
+% \begin{macrocode}
+\ifnum\bxjs@everyparhook=\bxjs@everyparhook@none\else
+\AtEndOfPackage{%
+\def\@gnewline #1{%
+ \ifvmode
+ \@nolnerr
+ \else
+ \unskip \reserved@e {\reserved@f#1}\nobreak \hfil \break \null
+ \jsInhibitGlue \ignorespaces
+ \fi}
+}
+\fi
+% \end{macrocode}
+%
+% \section{いろいろなロゴ}
+%
+% \LaTeX 関連のロゴを作り直します。
+%
+% [2016-07-14] ロゴの定義は\texttt{jslogo}パッケージに移転しました。
+% 後方互換のため,\texttt{jsclasses}ではデフォルトでこれを読み込みます。
+% \texttt{nojslogo}オプションが指定されている場合は読み込みません。
+%
+% \begin{ZRnote}
+% BXJSクラスでも |jslogo| オプション指定の場合に jslogo パッケージを
+% 読み込むようにした。
+% ただしJSクラスと異なり、既定では読み込まない。
+% \Note |\小|、|\上小| の制御綴は定義しない。
+% \end{ZRnote}
+% \begin{macrocode}
+\if@jslogo
+ \IfFileExists{jslogo.sty}{%
+ \RequirePackage{jslogo}%
+ }{%
+ \ClassWarningNoLine\bxjs@clsname
+ {The package 'jslogo' is not installed.\MessageBreak
+ It is included in the recent release of\MessageBreak
+ the 'jsclasses' bundle}
+ }
+\fi
+% \end{macrocode}
+%
+% \section{\texttt{amsmath} との衝突の回避}
+%
+% \begin{macro}{\ltx@ifnextchar}
+% \begin{macro}{\ProvidesFile}
+%
+% \texttt{amsmath} パッケージでは行列中で |\@ifnextchar|
+% を再定義していますが,これが\LaTeX の |\ProvidesFile|
+% で悪さをする例がFTeXで報告されています。
+% これを避けるためのtDBさんのフィックスを挿入しておきます。
+% 副作用がありましたらお知らせください。
+%
+% この現象については私のTeX掲示板 4273〜,16058〜 で議論がありました。
+% なお,AMS関係のパッケージを読み込む際に psamsfonts オプションを
+% 与えても回避できます(Thanks: しっぽ愛好家さん)。
+%
+% [2016-11-19] 本家の ltclass.dtx 2004/01/28 v1.1g で修正されているので
+% コメントアウトしました。
+%
+% \begin{macrocode}
+%\let\ltx@ifnextchar\@ifnextchar
+%\def\ProvidesFile#1{%
+% \begingroup
+% \catcode`\ 10 %
+% \ifnum \endlinechar<256 %
+% \ifnum \endlinechar>\m@ne
+% \catcode\endlinechar 10 %
+% \fi
+% \fi
+% \@makeother\/%
+% \@makeother\&%
+% \ltx@ifnextchar[{\@providesfile{#1}}{\@providesfile{#1}[]}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \section{初期設定}
+%
+% \paragraph{いろいろな語}
+%
+% \begin{macro}{\prepartname}
+% \begin{macro}{\postpartname}
+% \begin{macro}{\prechaptername}
+% \begin{macro}{\postchaptername}
+% \begin{macro}{\presectionname}
+% \begin{macro}{\postsectionname}
+% \begin{macrocode}
+\newcommand{\prepartname}{\if@english Part~\else 第\fi}
+\newcommand{\postpartname}{\if@english\else 部\fi}
+%<book|report>\newcommand{\prechaptername}{\if@english Chapter~\else 第\fi}
+%<book|report>\newcommand{\postchaptername}{\if@english\else 章\fi}
+\newcommand{\presectionname}{}% 第
+\newcommand{\postsectionname}{}% 節
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\contentsname}
+% \begin{macro}{\listfigurename}
+% \begin{macro}{\listtablename}
+% \begin{macrocode}
+\newcommand{\contentsname}{\if@english Contents\else 目次\fi}
+\newcommand{\listfigurename}{\if@english List of Figures\else 図目次\fi}
+\newcommand{\listtablename}{\if@english List of Tables\else 表目次\fi}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\refname}
+% \begin{macro}{\bibname}
+% \begin{macro}{\indexname}
+% \begin{macrocode}
+\newcommand{\refname}{\if@english References\else 参考文献\fi}
+\newcommand{\bibname}{\if@english Bibliography\else 参考文献\fi}
+\newcommand{\indexname}{\if@english Index\else 索引\fi}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\figurename}
+% \begin{macro}{\tablename}
+% \begin{macrocode}
+%<!jspf>\newcommand{\figurename}{\if@english Fig.~\else 図\fi}
+%<jspf>\newcommand{\figurename}{Fig.~}
+%<!jspf>\newcommand{\tablename}{\if@english Table~\else 表\fi}
+%<jspf>\newcommand{\tablename}{Table~}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\appendixname}
+% \begin{macro}{\abstractname}
+% \begin{macrocode}
+% \newcommand{\appendixname}{\if@english Appendix~\else 付録\fi}
+\newcommand{\appendixname}{\if@english \else 付録\fi}
+%<!book>\newcommand{\abstractname}{\if@english Abstract\else 概要\fi}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \paragraph{今日の日付}
+%
+% \LaTeX で処理した日付を出力します。
+% |jarticle| などと違って,標準を西暦にし,余分な空白が入らないように改良しました。
+% 和暦にするには |\和暦| と書いてください。
+%
+% \begin{ZRnote}
+% 環境変数 |SOURCE_DATE_EPOCH|/|FORCE_SOURCE_DATE| が
+% 設定されている場合は“今日”が過去・未来の日付になる可能性がある。
+% BXJSクラスでは、和暦の扱いは |bxwareki| パッケージに任せることを
+% 原則とする。
+% ただし、|bxwareki| が使えない場合は自前で処理する。
+% \end{ZRnote}
+%
+% \begin{macrocode}
+\@onlypreamble\bxjs@decl@Seireki@cmds
+\@tempswafalse
+\if p\jsEngine \@tempswatrue \fi
+\if n\jsEngine \@tempswatrue \fi
+\if@tempswa \expandafter\@firstoftwo
+\else \expandafter\@secondoftwo
+\fi
+{%
+% 欧文8bitTeXの場合
+\newif\ifjsSeireki \jsSeirekitrue
+\def\bxjs@decl@Seireki@cmds{%
+ \def\西暦{\jsSeirekitrue}%
+ \def\和暦{\jsSeirekifalse}}
+\def\Seireki{\jsSeirekitrue}
+\def\Wareki{\jsSeirekifalse}
+\def\bxjs@if@use@seireki{%
+ \ifjsSeireki \expandafter\@firstoftwo
+ \else \expandafter\@secondoftwo \fi}
+}{%
+\newif\if西暦 \西暦true
+\def\bxjs@decl@Seireki@cmds{%
+ \def\西暦{\西暦true}%
+ \def\和暦{\西暦false}}
+\def\Seireki{\西暦true}
+\def\Wareki{\西暦false}
+\def\bxjs@if@use@seireki{%
+ \if西暦 \expandafter\@firstoftwo
+ \else \expandafter\@secondoftwo \fi}
+}
+\bxjs@decl@Seireki@cmds
+\let\bxjs@unxp\@firstofone \let\bxjs@onxp\@firstofone
+\bxjs@test@engine\unexpanded{\let\bxjs@unxp\unexpanded
+ \def\bxjs@onxp{\unexpanded\expandafter}}
+\if \if p\jsEngine T\else\if n\jsEngine T\else F\fi\fi T
+ \def\bxjs@iai{\noexpand~}
+\else \def\bxjs@iai{}
+\fi
+% \end{macrocode}
+%
+% \begin{macro}{\ifbxjs@bxwareki@avail}
+% |bxwareki| パッケージが使用できるか。
+% \begin{macrocode}
+\newif\ifbxjs@bxwareki@avail
+\IfFileExists{bxwareki.sty}{%
+ \RequirePackage{bxwareki}[]%
+ \bxjs@bxwareki@availtrue}{}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\jayear}
+% 和暦における年の表記(元号+年数)。
+% \begin{macro}{\heisei}
+% 年数を表す整数レジスタで、
+% 元号が「平成」である場合にのみ定義される。
+% \begin{macrocode}
+\ifbxjs@bxwareki@avail
+ \let\jayear\warekiyear
+ \def\bxjs@tmpa{H}\ifx\bxjs@tmpa\warekigengoinitial
+ \newcount\heisei \heisei=\value{warekiyear}
+ \fi
+% \end{macrocode}
+% |bxwareki| が使えない場合のフォールバック処理。
+% 平成のみに対応する。
+% \begin{macrocode}
+\else
+ \@tempcnta=\the\year\two@digits\month\two@digits\day\relax
+ \ifnum\@tempcnta<19890108 \else \ifnum\@tempcnta<20190501
+ \newcount\heisei \heisei\year \advance\heisei-1988\relax
+ \fi\fi
+ \ifnum \ifx\heisei\@undefined\z@\else\heisei\fi >\@ne
+ \edef\jayear{\bxjs@unxp{平成}\bxjs@iai \the\heisei \bxjs@iai}
+ \else \edef\jayear{\the\year \bxjs@iai}
+ \fi
+\fi
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\today}
+% 英語、西暦、和暦で場合分けをする。
+% \begin{macrocode}
+\let\bxjs@next\relax
+\ifbxjs@bxwareki@avail
+ \ifx\warekigengo\@empty\else
+ \def\bxjs@next{\bxjs@onxp{\warekitoday}}
+ \fi
+\else\ifnum \ifx\heisei\@undefined\z@\else\heisei\fi >\@ne
+ \def\bxjs@next{%
+ \bxjs@unxp{平成}\bxjs@iai\number\heisei\bxjs@iai\bxjs@unxp{年}%
+ \bxjs@iai\number\month\bxjs@iai\bxjs@unxp{月}%
+ \bxjs@iai\number\day\bxjs@iai\bxjs@unxp{日}}
+\fi\fi
+\edef\bxjs@today{%
+ \if@english
+ \ifcase\month\or
+ January\or February\or March\or April\or May\or June\or
+ July\or August\or September\or October\or November\or December\fi
+ \space\number\day, \number\year
+ \else
+ \ifx\bxjs@next\relax \expandafter\@firstoftwo
+ \else \noexpand\bxjs@if@use@seireki
+ \fi {%
+ \number\year\bxjs@iai\bxjs@unxp{年}%
+ \bxjs@iai\number\month\bxjs@iai\bxjs@unxp{月}%
+ \bxjs@iai\number\day\bxjs@iai\bxjs@unxp{日}%
+ }{\bxjs@next}%
+ \fi}
+\let\today\bxjs@today
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{ZRnote}
+% texjporg版の日本語用Babel定義ファイル(|japanese.ldf|)が読み込まれた
+% 場合に影響を受けないようにする。
+% \begin{macrocode}
+\g@addto@macro\bxjs@begin@document@hook{%
+ \ifx\bbl@jpn@Seirekitrue\@undefined\else
+ \bxjs@decl@Seireki@cmds
+ \g@addto@macro\datejapanese{%
+ \let\today\bxjs@today}%
+ \fi}
+% \end{macrocode}
+% \end{ZRnote}
+%
+% \paragraph{ハイフネーション例外}
+%
+% \TeX のハイフネーションルールの補足です(ペンディング:eng-lish)
+%
+% \begin{macrocode}
+\hyphenation{ado-be post-script ghost-script phe-nom-e-no-log-i-cal man-u-script}
+% \end{macrocode}
+%
+% \paragraph{ページ設定}
+%
+% ページ設定の初期化です。
+%
+% \begin{macrocode}
+%<slide>\pagestyle{empty}%
+%<article|report>\pagestyle{plain}%
+%<book>\pagestyle{headings}%
+\pagenumbering{arabic}
+\if@twocolumn
+ \twocolumn
+ \sloppy
+ \flushbottom
+\else
+ \onecolumn
+ \raggedbottom
+\fi
+%<*slide>
+ \renewcommand\familydefault{\sfdefault}
+ \raggedright
+%</slide>
+% \end{macrocode}
+%
+% \paragraph{BXJS独自の追加処理 \ZRX}
+% \mbox{}
+% \begin{ZRnote}
+%
+% フックを実行する。
+% \begin{macrocode}
+\bxjs@pre@jadriver@hook
+% \end{macrocode}
+% 和文ドライバのファイルを読み込む。
+% \begin{macrocode}
+\input{bxjsja-\bxjs@jadriver.def}
+% \end{macrocode}
+%
+% おしまい。
+% \begin{macrocode}
+%</cls>
+% \end{macrocode}
+%
+% \end{ZRnote}
+%
+% 以上です。
+%
+%^^A////////////////////////////////////////////////////////
+% \clearpage
+% \appendix
+%^^A========================================================
+% \section{和文ドライバの仕様 \ZRX}
+%
+% 次の命令がBXJSクラス本体と和文ドライバの連携のために
+% 用意されている。
+% このうち、★印を付けたものは“書込”が許されるものである。
+%
+% \begin{itemize}
+% \item |\jsDocClass| \zrNote{文字トークンの let}\quad
+% 文書クラスの種類を示し、次のいずれかと一致する
+% (|\if| で判定可能)。
+% \begin{quote}\begin{tabular}{l@{\qquad}l}
+% |\jsArticle| & |bxjsarticle| クラス\\
+% |\jsBook| & |bxjsbook| クラス\\
+% |\jsReport| & |bxjsreport| クラス\\
+% |\jsSlide| & |bxjsslide| クラス
+% \end{tabular}\end{quote}
+% \item |\jsEngine| \zrNote{文字トークンの let}\quad
+% 使用されているエンジンの種別。
+% (|\if| で判定可能)。
+% \begin{quote}\begin{tabular}{l@{\qquad}l}
+% |p| & pdf{\TeX}(DVIモードも含む)\\
+% |l| & Lua{\TeX}(〃)\\
+% |x| & {\XeTeX}\\
+% |j| & {\pTeX}または{\upTeX}\\
+% |n| & 以上の何れでもない
+% \end{tabular}\end{quote}
+% \item |\ifjsWithupTeX| \zrNote{スイッチ}\quad
+% 使用されているエンジンが{\upTeX}であるか。
+% \item |\ifjsWitheTeX| \zrNote{スイッチ}\quad
+% 使用されているエンジンが{\eTeX}拡張であるか。
+% \item |\ifjsInPdfMode| \zrNote{スイッチ}\quad
+% 使用されているエンジンが(pdf{\TeX}・Lua{\TeX}の)
+% PDFモードであるか。
+% \item |\jsUnusualPtSize| \zrNote{整数定数を表す文字列のマクロ}\quad
+% 基底フォントサイズが |10pt|、|11pt|、|12pt| のいずれでもない
+% 場合の |\@ptsize| の値。
+% (|\@ptsize| 自体があまり有用でないと思われる。)
+% \item |\jsScale| \zrNote{実数を表す文字列のマクロ}\quad
+% 和文フォントサイズの要求サイズに対するスケール。
+% クラスオプション |scale| で指定される。
+% (既定値は0.924715。)
+% \item |\jsJaFont| \zrNote{マクロ}\quad
+% 和文フォント設定を表す文字列。
+% クラスオプション |jafont| で指定された値。
+% \item |\jsJaParam| \zrNote{マクロ}\quad
+% 和文モジュールに渡すパラメタを表す文字列。
+% この値が何を表すかは決まってなくて、各々の和文モジュールが
+% 独自に解釈する。
+% クラスオプション |japaram| で指定された値。
+% \item |\jsInhibitGlue| \zrNote{マクロ}\quad
+% |\inhibitglue| という命令が定義されていればそれを実行し、
+% そうでなければ何もしない。
+% JSクラスで |\inhibitglue| を用いている箇所は
+% 全て |\jsInhibitGlue| に置き換えられている。
+% 従って、|\inhibitglue| は未定義でも動作するが、その実装が
+% ある場合はBXJSクラスはそれを活用する。
+% \item |\jsInhibitGlueAtParTop| \zrNote{マクロ}★\quad
+% 段落先頭におけるカギ括弧の位置調整を行うマクロ。
+% 全ての段落先頭で呼び出される。
+% \item |\jsZw| \zrNote{内部寸法値}\quad
+% 「現在の全角幅」を表す変数。
+% JSクラスでzw単位で設定されている長さパラメタはこの変数を単位と
+% して設定されている。
+% この変数の値は実際に用いられる「和文フォント」のメトリックに
+% 基づくのではなく、機械的に\
+% |\jsScale| $\times$(フォントサイズ)
+% であると定められている
+% (フォントサイズ変更の度に再設定される)。
+% 従って、「和文コンポーネント」はこの設定と辻褄が合うように
+% 和文フォントサイズを調整する必要がある。
+% ほとんどの場合、和文フォントをNFSSで規定する際に |\jsScale|
+% の値をスケール値として与えれば上手くいく。
+% \item |\jsFontSizeChanged| \zrNote{マクロ}\quad
+% フォントサイズが変更された時に必ず呼び出されるマクロ。
+% \item |\jsResetDimen| \zrNote{マクロ}★\quad
+% 上記 |\jsFontSizeChanged| の中で呼び出される、
+% ユーザ(和文モジュール)用のフック。
+% フォントサイズに依存するパラメタをここで設定することができる。
+% 既定の定義は空。
+% \end{itemize}
+%
+% 以下で標準で用意されている和文ドライバの実装を示す。
+% \begin{macrocode}
+%<*drv>
+% \end{macrocode}
+%
+%^^A========================================================
+% \section{和文ドライバ:minimal \ZRX}
+%
+% |jadriver| の指定が無い場合に適用されるドライバ。
+% また、standard ドライバはまずこのドライバファイルを
+% 読み込んでいる。
+%
+% このドライバでは、各エンジンについての必要最低限の処理だけを
+% 行っている。
+% 日本語処理のためのパッケージ(xeCJK や Lua{\TeX}-ja 等)
+% を自分で読み込んで適切な設定を行うという使用状況を想定している。
+%
+% ただし、(u){\pTeX}エンジンについては例外で、和文処理機構の
+% 選択の余地がないため、このドライバにおいて、
+% 「JSクラスと同等の指定」を完成させるためのコードを記述する。
+%
+%^^A----------------
+% \subsection{補助マクロ}
+%
+% \begin{macrocode}
+%<*minimal>
+%% このファイルは日本語文字を含みます
+% \end{macrocode}
+%
+% \begin{macro}{\DeclareJaTextFontCommand}
+% 和文書体のための、「余計なこと」をしない |\DeclareTextFontCommand|。
+% \begin{macrocode}
+\def\DeclareJaTextFontCommand#1#2{%
+ \DeclareRobustCommand#1[1]{%
+ \relax
+ \ifmmode \expandafter\nfss@text \fi
+ {#2##1}}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\DeclareJaMathFontCommand}
+% 和文数式フォントが無効な場合に、それをエミュレートするもの。
+% \begin{macrocode}
+\def\DeclareJaMathFontCommand#1#2{%
+ \DeclareRobustCommand#1[1]{%
+ \relax
+ \ifmmode\else \non@alpherr{#1\space}\fi
+ \nfss@text{\fontfamily\familydefault
+ \fontseries{m}\fontshape{n}\selectfont\relax
+ #2##1}%
+ }%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\bxjs@if@sf@default}
+% |\familydefault| の定義が“|\sfdefault|”である場合に
+% 引数のコードを実行する。
+% \begin{macrocode}
+\long\def\bxjs@@CSsfdefault{\sfdefault}%
+\@onlypreamble\bxjs@if@sf@default
+\def\bxjs@if@sf@default#1{%
+ \ifx\familydefault\bxjs@@CSsfdefault#1\fi
+ \g@addto@macro\bxjs@begin@document@hook{%
+ \ifx\familydefault\bxjs@@CSsfdefault#1\fi}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\jsInverseScale}
+% |\jsScale| の逆数。
+% \Note |\CS=\jsInverseScale\CS| は |\bxjs@invscale\CS\jsScale|
+% よりも精度が劣るが処理が軽い。
+% \begin{macrocode}
+\@tempdima\p@ \bxjs@invscale\@tempdima\jsScale
+\edef\jsInverseScale{\strip@pt\@tempdima}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\jsLetHeadChar}
+% |\jsLetHeadChar\CS{|\Meta{トークン列}|}|\Means
+% トークン列の先頭の文字を抽出し、|\CS| をその文字トークン
+% (に展開されるマクロ)として定義する。
+% \Note 先頭にあるのが制御綴やグループである場合は |\CS| は |\relax|
+% に等置される。
+% \Note 文字トークンは“|\the|-文字列”のカテゴリコードをもつ。
+% \Note 非Unicodeエンジンの場合は文字列がUTF-8で符号化されていると
+% 見なし、先頭が高位バイトの場合は1文字分のバイト列(のトークン列)
+% を抽出する。
+% この場合は元のカテゴリコードが保持される。
+% \begin{macrocode}
+\def\jsLetHeadChar#1#2{%
+ \begingroup
+ \escapechar=`\\ %
+ \let\bxjs@tmpa={% brace-match-hack
+ \bxjs@let@hchar@exp#2}%
+ \endgroup
+ \let#1\bxjs@g@tmpa}
+\def\bxjs@let@hchar@exp{%
+ \futurelet\@let@token\bxjs@let@hchar@exp@a}
+\def\bxjs@let@hchar@exp@a{%
+ \bxjs@cond\ifcat\noexpand\@let@token\bgroup\fi{% 波括弧
+ \bxjs@let@hchar@out\let\relax
+ }{\bxjs@cond\ifcat\noexpand\@let@token\@sptoken\fi{% 空白
+ \bxjs@let@hchar@out\let\space%
+ }{\bxjs@cond\if\noexpand\@let@token\@backslashchar\fi{% バックスラッシュ
+ \bxjs@let@hchar@out\let\@backslashchar
+ }{\bxjs@let@hchar@exp@b}}}}
+\def\bxjs@let@hchar@exp@b#1{%
+ \expandafter\bxjs@let@hchar@exp@c\string#1?\@nil#1}
+\def\bxjs@let@hchar@exp@c#1#2\@nil{%
+%\message{<#1#2>}%
+ \bxjs@cond\if#1\@backslashchar\fi{% 制御綴
+ \bxjs@cond\expandafter\ifx\noexpand\@let@token\@let@token\fi{%
+ \bxjs@let@hchar@out\let\relax
+ }{%else
+ \expandafter\bxjs@let@hchar@exp
+ }%
+ }{%else
+ \bxjs@let@hchar@chr#1%
+ }}
+\def\bxjs@let@hchar@chr#1{%
+ \bxjs@let@hchar@out\def{{#1}}}
+\def\bxjs@let@hchar@out#1#2{%
+ \global#1\bxjs@g@tmpa#2\relax
+ \toks@\bgroup}% skip to right brace
+% \end{macrocode}
+% UTF-8のバイト列を扱うコード。
+% \begin{macrocode}
+\chardef\bxjs@let@hchar@csta=128
+\chardef\bxjs@let@hchar@cstb=192
+\chardef\bxjs@let@hchar@cstc=224
+\chardef\bxjs@let@hchar@cstd=240
+\chardef\bxjs@let@hchar@cste=248
+\let\bxjs@let@hchar@chr@ue@a\bxjs@let@hchar@chr
+\def\bxjs@let@hchar@chr@ue#1{%
+ \@tempcnta=`#1\relax
+%\message{\the\@tempcnta}%
+ \bxjs@cond\ifnum\@tempcnta<\bxjs@let@hchar@csta\fi{%
+ \bxjs@let@hchar@chr@ue@a#1%
+ }{\bxjs@cond\ifnum\@tempcnta<\bxjs@let@hchar@cstb\fi{%
+ \bxjs@let@hchar@out\let\relax
+ }{\bxjs@cond\ifnum\@tempcnta<\bxjs@let@hchar@cstc\fi{%
+ \bxjs@let@hchar@chr@ue@b
+ }{\bxjs@cond\ifnum\@tempcnta<\bxjs@let@hchar@cstd\fi{%
+ \bxjs@let@hchar@chr@ue@c
+ }{\bxjs@cond\ifnum\@tempcnta<\bxjs@let@hchar@cste\fi{%
+ \bxjs@let@hchar@chr@ue@d
+ }{%else
+ \bxjs@let@hchar@out\let\relax
+ }}}}}}
+\def\bxjs@let@hchar@chr@ue@a#1{%
+ \bxjs@let@hchar@out\def{{#1}}}
+\def\bxjs@let@hchar@chr@ue@b#1#2{%
+ \bxjs@let@hchar@out\def{{#1#2}}}
+\def\bxjs@let@hchar@chr@ue@c#1#2#3{%
+ \bxjs@let@hchar@out\def{{#1#2#3}}}
+\def\bxjs@let@hchar@chr@ue@d#1#2#3#4{%
+ \bxjs@let@hchar@out\def{{#1#2#3#4}}}
+% \end{macrocode}
+% \end{macro}
+%
+%^^A----------------
+% \subsection{(u){\pTeX}用の設定}
+%
+% \begin{macrocode}
+\ifx j\jsEngine
+% \end{macrocode}
+%
+% 基本的に、JSクラスのコードの中で、「和文コンポーネントの管轄」
+% としてBXJSクラスで除外されている部分に相当するが、
+% 若干の変更が加えられている。
+%
+% \paragraph{補助マクロ}
+%
+% |\jsLetHeadChar| を和文文字トークンに対応させる。
+% \begin{macrocode}
+\def\bxjs@let@hchar@chr@pp#1#2{%
+ \expandafter\bxjs@let@hchar@chr@pp@a\meaning#2\relax#1#2}
+\def\bxjs@let@hchar@chr@pp@a#1#2\relax#3#4{%
+%\message{(\meaning#3:\meaning#4)}%
+ \bxjs@cond\if#1k\fi{%
+ \bxjs@let@hchar@out\def{{#4}}%
+ }{%else
+ \bxjs@let@hchar@chr@ue#3#4%
+ }}
+\let\bxjs@let@hchar@chr\bxjs@let@hchar@chr@pp
+% \end{macrocode}
+%
+% \paragraph{エンジン依存の定義}
+%
+% 最初にエンジン({\pTeX}かu{\pTeX}か)に依存する定義を行う。
+% |\ifjsWithupTeX| はBXJSにおいて定義されているスイッチで、
+% エンジンがu{\pTeX}であるかを表す。
+%
+% |\jsc@JYn| および |\jsc@JTn| は標準の和文横書きおよび縦書き用
+% エンコーディングを表す。
+% \begin{macrocode}
+\edef\jsc@JYn{\ifjsWithupTeX JY2\else JY1\fi}
+\edef\jsc@JTn{\ifjsWithupTeX JT2\else JT1\fi}
+\edef\jsc@pfx@{\ifjsWithupTeX u\fi}
+% \end{macrocode}
+%
+% |\bxjs@declarefontshape| は標準の和文フォント宣言である。
+% 後で |\bxjs@scale| を求めるため一旦マクロにしておく。
+% |\bxjs@sizereference| は全角幅を測定する時に参照するフォント。
+%
+% まずu{\pTeX}の場合の定義を示す。
+% JSクラスの |uplatex| オプション指定時の定義と同じである。
+% \begin{macrocode}
+\@onlypreamble\bxjs@declarefontshape
+\ifjsWithupTeX
+\def\bxjs@declarefontshape{%
+\DeclareFontShape{JY2}{mc}{m}{n}{<->s*[\bxjs@scale]upjpnrm-h}{}%
+\DeclareFontShape{JY2}{gt}{m}{n}{<->s*[\bxjs@scale]upjpngt-h}{}%
+\DeclareFontShape{JT2}{mc}{m}{n}{<->s*[\bxjs@scale]upjpnrm-v}{}%
+\DeclareFontShape{JT2}{gt}{m}{n}{<->s*[\bxjs@scale]upjpngt-v}{}%
+}
+\def\bxjs@sizereference{upjisr-h}
+% \end{macrocode}
+%
+% {\pTeX}の場合の定義を示す。
+% JSクラスのフォント種別オプション非指定時の定義と同じである。
+% \begin{macrocode}
+\else
+\def\bxjs@declarefontshape{%
+\DeclareFontShape{JY1}{mc}{m}{n}{<->s*[\bxjs@scale]jis}{}%
+\DeclareFontShape{JY1}{gt}{m}{n}{<->s*[\bxjs@scale]jisg}{}%
+\DeclareFontShape{JT1}{mc}{m}{n}{<->s*[\bxjs@scale]tmin10}{}%
+\DeclareFontShape{JT1}{gt}{m}{n}{<->s*[\bxjs@scale]tgoth10}{}%
+}
+\def\bxjs@sizereference{jis}
+\fi
+% \end{macrocode}
+%
+% 既に使用されている標準和文フォント定義がもしあれば取り消す。
+% \begin{macrocode}
+\def\bxjs@next#1/#2/#3/#4/#5\relax{%
+ \def\bxjs@tmpb{#5}}
+\ifjsWithpTeXng \def\bxjs@tmpb{10}%
+\else
+\expandafter\expandafter\expandafter\bxjs@next
+ \expandafter\string\the\jfont\relax
+\fi
+\@for\bxjs@tmpa:={\jsc@JYn/mc/m/n,\jsc@JYn/gt/m/n,%
+ \jsc@JTn/mc/m/n,\jsc@JTn/gt/m/n}\do
+ {\expandafter\let\csname\bxjs@tmpa/10\endcsname=\@undefined
+ \expandafter\let\csname\bxjs@tmpa/\bxjs@tmpb\endcsname=\@undefined}
+% \end{macrocode}
+%
+% \paragraph{和文フォントスケールの補正}
+%
+% 実は、{\pTeX}の標準的な和文フォント(JFMのこと、例えば |jis|)
+% では、指定された |\jsScale|(この値を $s$ とする)をそのまま
+% 使って定義すると期待通りの大きさにならない。
+% これらのJFMでは1\,zwの大きさが指定されたサイズではなく
+% 既にスケール(この値を $f$ とする;|jis| では0.962216倍)
+% が掛けられた値になっているからである。
+% そのため、ここでは $s/f$ を求めてその値をマクロ |\bxjs@scale|
+% に保存する。
+% \begin{macrocode}
+\begingroup
+% 参照用フォント(\bxjs@sizereference)の全角空白の幅を取得
+ \font\bxjs@tmpa=\bxjs@sizereference\space at 10pt
+ \setbox\z@\hbox{\bxjs@tmpa\char\jis"2121\relax}
+% 幅が丁度10ptなら補正は不要
+ \ifdim\wd\z@=10pt
+ \global\let\bxjs@scale\jsScale
+ \else
+% (10*s)/(10*f)として計算、\bxjs@invscaleはBXJSで定義
+ \edef\bxjs@tmpa{\strip@pt\wd\z@}
+ \@tempdima=10pt \@tempdima=\jsScale\@tempdima
+ \bxjs@invscale\@tempdima\bxjs@tmpa
+ \xdef\bxjs@scale{\strip@pt\@tempdima}
+ \fi
+\endgroup
+%\typeout{\string\bxjs@scale : \bxjs@scale}
+% \end{macrocode}
+%
+% \paragraph{和文フォント関連定義}
+%
+% |\bxjs@scale| が決まったので先に保存した標準和文フォント
+% 宣言を実行する。
+% \begin{macrocode}
+\bxjs@declarefontshape
+% \end{macrocode}
+%
+% フォント代替の明示的定義。
+% \begin{macrocode}
+\DeclareFontShape{\jsc@JYn}{mc}{m}{it}{<->ssub*mc/m/n}{}
+\DeclareFontShape{\jsc@JYn}{mc}{m}{sl}{<->ssub*mc/m/n}{}
+\DeclareFontShape{\jsc@JYn}{mc}{m}{sc}{<->ssub*mc/m/n}{}
+\DeclareFontShape{\jsc@JYn}{gt}{m}{it}{<->ssub*gt/m/n}{}
+\DeclareFontShape{\jsc@JYn}{gt}{m}{sl}{<->ssub*gt/m/n}{}
+\DeclareFontShape{\jsc@JYn}{mc}{bx}{it}{<->ssub*gt/m/n}{}
+\DeclareFontShape{\jsc@JYn}{mc}{bx}{sl}{<->ssub*gt/m/n}{}
+\DeclareFontShape{\jsc@JYn}{gt}{bx}{it}{<->ssub*gt/m/n}{}
+\DeclareFontShape{\jsc@JYn}{gt}{bx}{sl}{<->ssub*gt/m/n}{}
+\DeclareFontShape{\jsc@JYn}{mc}{b}{n}{<->ssub*mc/bx/n}{}
+\DeclareFontShape{\jsc@JYn}{mc}{b}{it}{<->ssub*mc/bx/n}{}
+\DeclareFontShape{\jsc@JYn}{mc}{b}{sl}{<->ssub*mc/bx/n}{}
+\DeclareFontShape{\jsc@JYn}{gt}{b}{n}{<->ssub*gt/bx/n}{}
+\DeclareFontShape{\jsc@JYn}{gt}{b}{it}{<->ssub*gt/bx/n}{}
+\DeclareFontShape{\jsc@JYn}{gt}{b}{sl}{<->ssub*gt/bx/n}{}
+\DeclareFontShape{\jsc@JTn}{mc}{m}{it}{<->ssub*mc/m/n}{}
+\DeclareFontShape{\jsc@JTn}{mc}{m}{sl}{<->ssub*mc/m/n}{}
+\DeclareFontShape{\jsc@JTn}{mc}{m}{sc}{<->ssub*mc/m/n}{}
+\DeclareFontShape{\jsc@JTn}{gt}{m}{it}{<->ssub*gt/m/n}{}
+\DeclareFontShape{\jsc@JTn}{gt}{m}{sl}{<->ssub*gt/m/n}{}
+\DeclareFontShape{\jsc@JTn}{mc}{bx}{it}{<->ssub*gt/m/n}{}
+\DeclareFontShape{\jsc@JTn}{mc}{bx}{sl}{<->ssub*gt/m/n}{}
+\DeclareFontShape{\jsc@JTn}{gt}{bx}{it}{<->ssub*gt/m/n}{}
+\DeclareFontShape{\jsc@JTn}{gt}{bx}{sl}{<->ssub*gt/m/n}{}
+\DeclareFontShape{\jsc@JTn}{mc}{b}{n}{<->ssub*mc/bx/n}{}
+\DeclareFontShape{\jsc@JTn}{mc}{b}{it}{<->ssub*mc/bx/n}{}
+\DeclareFontShape{\jsc@JTn}{mc}{b}{sl}{<->ssub*mc/bx/n}{}
+\DeclareFontShape{\jsc@JTn}{gt}{b}{n}{<->ssub*gt/bx/n}{}
+\DeclareFontShape{\jsc@JTn}{gt}{b}{it}{<->ssub*gt/bx/n}{}
+\DeclareFontShape{\jsc@JTn}{gt}{b}{sl}{<->ssub*gt/bx/n}{}
+% \end{macrocode}
+%
+% 欧文総称フォント命令で和文フォントが連動するように修正する。
+% その他の和文フォント関係の定義を行う。
+% \begin{macrocode}
+\DeclareRobustCommand\rmfamily
+ {\not@math@alphabet\rmfamily\mathrm
+ \romanfamily\rmdefault\kanjifamily\mcdefault\selectfont}
+\DeclareRobustCommand\sffamily
+ {\not@math@alphabet\sffamily\mathsf
+ \romanfamily\sfdefault\kanjifamily\gtdefault\selectfont}
+\DeclareRobustCommand\ttfamily
+ {\not@math@alphabet\ttfamily\mathtt
+ \romanfamily\ttdefault\kanjifamily\gtdefault\selectfont}
+\ifx\DeclareFixJFMCJKTextFontCommand\@undefined
+\DeclareJaTextFontCommand{\textmc}{\mcfamily}
+\DeclareJaTextFontCommand{\textgt}{\gtfamily}
+\fi
+\bxjs@if@sf@default{%
+ \renewcommand\kanjifamilydefault{\gtdefault}}
+% \end{macrocode}
+%
+% 念のため。
+% \begin{macrocode}
+\selectfont
+% \end{macrocode}
+%
+% |\bxjs@parse@qh| の処理は{\pTeX}系では不要になるので無効化する
+% (つまり |\jsSetQHLength| は |\setlength| と等価になる)。
+% \begin{macrocode}
+\def\bxjs@parse@qh#1{\let\bxjs@tmpb\relax}
+\let\bxjs@parse@qh@a\@undefined
+\let\bxjs@parse@qh@b\@undefined
+% \end{macrocode}
+%
+% \paragraph{パラメタの設定}
+%
+% \begin{macrocode}
+\prebreakpenalty\jis"2147=10000
+\postbreakpenalty\jis"2148=10000
+\prebreakpenalty\jis"2149=10000
+\inhibitxspcode`!=1
+\inhibitxspcode`〒=2
+\xspcode`+=3
+\xspcode`\%=3
+% \end{macrocode}
+%
+% |"80|\zrWDash|"FF| の範囲の |\spcode| を3に変更。
+% \begin{macrocode}
+\@tempcnta="80 \@whilenum\@tempcnta<"100 \do{%
+ \xspcode\@tempcnta=3\advance\@tempcnta\@ne}
+% \end{macrocode}
+%
+% |\jsInhibitGlueAtParTop| の定義。
+% 「JSクラスでの定義」を利用する。
+% \begin{macrocode}
+\let\jsInhibitGlueAtParTop\@inhibitglue
+% \end{macrocode}
+%
+% |\jsResetDimen| は空のままでよい。
+%
+% \paragraph{組方向依存の処理}
+%
+% 組方向判定のif-トークン(|\if?dir|)は{\pTeX}以外では未定義で
+% あるため、そのままif文に入れることができない。
+% これを回避するため部分的に|!|をエスケープ文字に使う。
+% \begin{macrocode}
+\begingroup
+\catcode`\!=0
+% \end{macrocode}
+%
+% \begin{macro}{\bxjs@ptex@dir}
+% 現在の組方向: |t|=縦、|y|=横、|?|=その他。
+% \begin{macrocode}
+\gdef\bxjs@ptex@dir{%
+ !iftdir t%
+ !else!ifydir y%
+ !else ?%
+ !fi!fi}
+% \end{macrocode}
+% \end{macro}
+%
+% 新版の{\pTeX}で脚注番号の周囲の空きが過大になる現象への対処。
+% \Note 現在の{p\LaTeX}カーネルでは対処が既に行われている。
+% ここでは、|\@makefnmark| の定義が古いものであった場合に、
+% 新しいものに置き換える。
+% \begin{macrocode}
+% 古い \@makefnmark の定義
+\long\def\bxjs@tmpa{\hbox{%
+ !ifydir \@textsuperscript{\normalfont\@thefnmark}%
+ !else\hbox{\yoko\@textsuperscript{\normalfont\@thefnmark}}!fi}}
+\ifx\@makefnmark\bxjs@tmpa
+\long\gdef\@makefnmark{%
+ !ifydir \hbox{}\hbox{\@textsuperscript{\normalfont\@thefnmark}}\hbox{}%
+ !else\hbox{\yoko\@textsuperscript{\normalfont\@thefnmark}}!fi}
+\fi
+% \end{macrocode}
+%
+% \begin{macrocode}
+\endgroup
+% \end{macrocode}
+%
+%^^A----------------
+% \subsection{pdf{\TeX}用の処理}
+%
+% \begin{macrocode}
+\else\ifx p\jsEngine
+% \end{macrocode}
+%
+% \begin{macrocode}
+\let\bxjs@let@hchar@chr\bxjs@let@hchar@chr@ue
+% \end{macrocode}
+%
+% \begin{macrocode}
+\@onlypreamble\bxjs@cjk@loaded
+\def\bxjs@cjk@loaded{%
+ \def\@footnotemark{%
+ \leavevmode
+ \ifhmode
+ \edef\@x@sf{\the\spacefactor}%
+ \ifdim\lastkern>\z@\ifdim\lastkern<5sp\relax
+ \unkern\unkern
+ \ifdim\lastskip>\z@ \unskip \fi
+ \fi\fi
+ \nobreak
+ \fi
+ \@makefnmark
+ \ifhmode \spacefactor\@x@sf \fi
+ \relax}%
+ \let\bxjs@cjk@loaded\relax
+}
+\g@addto@macro\bxjs@begin@document@hook{%
+ \@ifpackageloaded{CJK}{%
+ \bxjs@cjk@loaded
+ }{}%
+}
+% \end{macrocode}
+%
+%^^A----------------
+% \subsection{{\XeTeX}用の処理}
+%
+% \begin{macrocode}
+\else\ifx x\jsEngine
+% \end{macrocode}
+%
+% |\bxjs@let@hchar@chr| について、
+% 「BMP外の文字の文字トークンに対して |\string| を適用すると
+% サロゲートペアに分解される」という問題に対する応急措置を施す。
+% \begin{macrocode}
+\def\bxjs@let@hchar@chr#1{%
+ \@tempcnta`#1\relax \divide\@tempcnta"800\relax
+ \bxjs@cond\ifnum\@tempcnta=27 \fi{%
+ \bxjs@let@hchar@chr@xe
+ }{\bxjs@let@hchar@out\def{{#1}}}}
+\def\bxjs@let@hchar@chr@xe#1{%
+ \lccode`0=`#1\relax
+ \lowercase{\bxjs@let@hchar@out\def{{0}}}}
+% \end{macrocode}
+%
+% \begin{macro}{\bxjs@do@precisetext}
+% |precisetext| オプションの処理。
+% \begin{macrocode}
+\@onlypreamble\bxjs@do@precisetext
+\ifx\XeTeXgenerateactualtext\@undefined\else
+ \def\bxjs@do@precisetext{%
+ \XeTeXgenerateactualtext=\@ne}
+\fi
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\bxjs@do@simplejasetup}
+% |simplejasetup| オプションの処理。
+% \begin{macrocode}
+\@onlypreamble\bxjs@do@simplejasetup
+\def\bxjs@do@simplejasetup{%
+ \ifnum\XeTeXinterchartokenstate>\z@
+ \else\ifnum\strcmp{\the\XeTeXlinebreakskip}{\the\z@}=\z@
+ \jsSimpleJaSetup
+ \ClassInfo\bxjs@clsname
+ {'\string\jsSimpleJaSetup' is applied\@gobble}%
+ \fi\fi}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\jsSimpleJaSetup}
+% 日本語出力用の超簡易的な設定。
+% \begin{macrocode}
+\newcommand*{\jsSimpleJaSetup}{%
+ \XeTeXlinebreaklocale "ja"\relax
+ \XeTeXlinebreakskip=0pt plus 1pt minus 0.1pt\relax
+ \XeTeXlinebreakpenalty=0\relax}
+% \end{macrocode}
+% \end{macro}
+%
+%^^A----------------
+% \subsection{後処理(エンジン共通)}
+% \begin{macrocode}
+\fi\fi\fi
+% \end{macrocode}
+%
+% |simplejasetup| オプションの処理。
+% \begin{macrocode}
+\ifx\bxjs@do@simplejasetup\@undefined\else
+ \g@addto@macro\bxjs@begin@document@hook{%
+ \ifbxjs@simplejasetup
+ \bxjs@do@simplejasetup
+ \fi}
+\fi
+% \end{macrocode}
+%
+% |precisetext| オプションの処理。
+% \begin{macrocode}
+\ifbxjs@precisetext
+ \ifx\bxjs@do@precisetext\@undefined
+ \ClassWarning\bxjs@clsname
+ {The current engine does not support the\MessageBreak
+ 'precise-text' option\@gobble}
+ \else
+ \bxjs@do@precisetext
+ \fi
+\fi
+% \end{macrocode}
+%
+% \paragraph{段落頭でのグルー挿入禁止}
+%
+% 本体開始時において |\everyparhook| を検査して、
+% “結局何もしない”ことになっている場合は、
+% 副作用を完全に無くすために |\everyparhook| を空にする。
+% \begin{macrocode}
+\g@addto@macro\bxjs@begin@document@hook{%
+ \ifx\jsInhibitGlueAtParTop\@empty
+ \def\bxjs@tmpa{\jsInhibitGlueAtParTop}%
+ \ifx\everyparhook\bxjs@tmpa
+ \let\everyparhook\@empty
+ \fi
+ \fi}
+% \end{macrocode}
+%
+% |everyparhook=modern| の場合の、|\everyparhook| の有効化の実装。
+% \Note 本体開始時ではなく最初から有効化していることに注意。
+% \begin{macrocode}
+\ifnum\bxjs@everyparhook=\bxjs@everyparhook@modern
+% \end{macrocode}
+% まず |\everypar| を“乗っ取る”処理を行う。
+% \begin{macrocode}
+ \let\bxjs@everypar\everypar
+ \newtoks\everypar
+ \everypar\bxjs@everypar
+% \end{macrocode}
+% そして本物の |\everypar| では、最後で常に |\everyparhook| が実行される
+% ようにする。
+% \begin{macrocode}
+ \bxjs@everypar{\the\expandafter\everypar\everyparhook}%
+\fi
+% \end{macrocode}
+%
+% \paragraph{fancyhdr対策}
+% |fancyhdr| オプションの値が |true| であり、
+% かつ |fancyhdr| が使用された場合に以下の対策を行う。
+% \begin{itemize}
+% \item デフォルトの書式設定に含まれる“二文字フォント命令”を除去する。
+% \item bxjsbookにおいて、ヘッダ・フッタの横幅を |\fullwidth| に変える。
+% \end{itemize}
+%
+% \begin{macrocode}
+\ifbxjs@fancyhdr
+% \end{macrocode}
+%
+% \begin{macro}{\bxjs@adjust@fancyhdr}
+% |fancyhdr| の初期設定に関する改変の処理。
+% |fancyhdr| 読込完了と |\pagestyle{fancy}| 実行の間で実行されるべき。
+% \begin{macrocode}
+\@onlypreamble\bxjs@adjust@fancyhdr
+\def\bxjs@adjust@fancyhdr{%
+% \end{macrocode}
+% ヘッダ・フッタの要素の書式について、それが既定のままであれば、
+% “二文字フォント命令”を除去したものに置き換える。
+% \Note 和文なので |\sl| は無い方がよいはず。
+% \begin{macrocode}
+ \def\bxjs@tmpa{\fancyplain{}{\sl\rightmark}\strut}%
+ \def\bxjs@tmpb{\fancyplain{}{\rightmark}\strut}%
+ \ifx\f@ncyelh\bxjs@tmpa \global\let\f@ncyelh\bxjs@tmpb \fi
+ \ifx\f@ncyerh\bxjs@tmpa \global\let\f@ncyerh\bxjs@tmpb \fi
+ \ifx\f@ncyolh\bxjs@tmpa \global\let\f@ncyolh\bxjs@tmpb \fi
+ \ifx\f@ncyorh\bxjs@tmpa \global\let\f@ncyorh\bxjs@tmpb \fi
+ \def\bxjs@tmpa{\fancyplain{}{\sl\leftmark}\strut}%
+ \def\bxjs@tmpb{\fancyplain{}{\leftmark}\strut}%
+ \ifx\f@ncyelh\bxjs@tmpa \global\let\f@ncyelh\bxjs@tmpb \fi
+ \ifx\f@ncyerh\bxjs@tmpa \global\let\f@ncyerh\bxjs@tmpb \fi
+ \ifx\f@ncyolh\bxjs@tmpa \global\let\f@ncyolh\bxjs@tmpb \fi
+ \ifx\f@ncyorh\bxjs@tmpa \global\let\f@ncyorh\bxjs@tmpb \fi
+ \def\bxjs@tmpa{\rm\thepage\strut}%
+ \def\bxjs@tmpb{\thepage\strut}%
+ \ifx\f@ncyecf\bxjs@tmpa \global\let\f@ncyecf\bxjs@tmpb \fi
+ \ifx\f@ncyocf\bxjs@tmpa \global\let\f@ncyocf\bxjs@tmpb \fi
+% \end{macrocode}
+% |\fullwidth| が(定義済で)|\textwidth| よりも大きい場合、
+% ヘッダ・フッタの横幅を |\fullwidth| に合わせる。
+% \begin{macrocode}
+ \ifx\fullwidth\@undefined\else \ifdim\textwidth<\fullwidth
+ \setlength{\@tempdima}{\fullwidth-\textwidth}%
+ \edef\bxjs@tmpa{\noexpand\fancyhfoffset[EL,OR]{\the\@tempdima}%
+ }\bxjs@tmpa
+ \fi\fi
+ \PackageInfo\bxjs@clsname
+ {Patch to fancyhdr is applied\@gobble}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\bxjs@pagestyle@hook}
+% |\pagestyle| へのフックの本体。
+% \begin{macrocode}
+\def\bxjs@pagestyle@hook{%
+ \@ifpackageloaded{fancyhdr}{%
+ \bxjs@adjust@fancyhdr
+ \global\let\bxjs@adjust@fancyhdr\relax
+ }{}}
+% \end{macrocode}
+% \end{macro}
+%
+% |\pagestyle| にフックを入れ込む。
+% \begin{macrocode}
+\let\bxjs@org@pagestyle\pagestyle
+\def\pagestyle{%
+ \bxjs@pagestyle@hook \bxjs@org@pagestyle}
+% \end{macrocode}
+%
+% begin-document フック。
+% \Note これ以降に |fancyhdr| が読み込まれることはあり得ない。
+% \begin{macrocode}
+\g@addto@macro\bxjs@begin@document@hook{%
+ \bxjs@pagestyle@hook
+ \global\let\bxjs@pagestyle@hook\relax}
+% \end{macrocode}
+%
+% \paragraph{和文空白命令}
+% \begin{macrocode}
+\ifbxjs@jaspace@cmd
+% \end{macrocode}
+%
+% \begin{macro}{\jaenspace}
+% 半角幅の水平空き。
+% \begin{macrocode}
+ \def\jaenspace{\hskip.5\jsZw\relax}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\jathinspace}
+% 和欧文間空白を入れるユーザ命令。
+% \Note minimalではダミー定義。
+% \begin{macrocode}
+ \def\jathinspace{\hskip\z@skip}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\_}
+% 全角空白文字1つからなる名前の制御綴。
+% |\zwspace| と等価になる。
+% \begin{macrocode}
+ \def\ {\zwspace}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\jaspace}
+% |jlreq| クラスと互換の命令。
+% \begin{macrocode}
+ \DeclareRobustCommand*{\jaspace}[1]{%
+ \expandafter\ifx\csname bxjs@jaspace@@#1\endcsname\relax
+ \ClassError\bxjs@clsname
+ {Unknown jaspace: #1}{\@eha}%
+ \else
+ \csname bxjs@jaspace@@#1\endcsname
+ \fi}
+ \def\bxjs@jaspace@@zenkaku{\hskip 1\jsZw\relax}
+ \def\bxjs@jaspace@@nibu{\hskip .5\jsZw\relax}
+ \def\bxjs@jaspace@@shibu{\hskip .25\jsZw\relax}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+\fi
+% \end{macrocode}
+%
+% 終わり。
+% \begin{macrocode}
+\fi
+% \end{macrocode}
+%
+% 以上で終わり。
+% \begin{macrocode}
+%</minimal>
+% \end{macrocode}
+%
+%^^A========================================================
+% \section{和文ドライバ:standard \ZRX}
+%
+% 標準のドライバ。
+%
+% \begin{itemize}
+% \item |\rmfamily|/|\sffamily|/|\ttfamily| での
+% 和文ファミリ連動
+% \item |\mcfamily|/|\gtfamily|
+% \item |\textmc|/|\textgt|
+% \item |\zw|
+% \item |\jQ|/|\jH|
+% \item |\trueQ|/|\trueH|/|\ascQ|
+% \item |\setkanjiskip|/|\getkanjiskip|
+% \item |\setxkanjiskip|/|\getxkanjiskip|
+% \item |\autospacing|/|\noautospacing|
+% \item |\autoxspacing|/|\noautoxspacing|
+% \end{itemize}
+%
+% \paragraph{和文フォント指定の扱い}
+%
+% |standard| 和文ドライバでは |\jsJaFont| の値を和文フォントの
+% “プリセット”の指定として用いる。
+% プリセットの値は、{\TeX} Liveの |kanji-config-updmap| コマンドで
+% 使う“ファミリ”と同じにすることを想定する。
+% 特別な値として、|auto| は |kanji-config-updmap| で現在指定
+% されているファミリを表す。
+%
+%^^A----------------
+% \subsection{共通処理(1)}
+%
+% まず minimal ドライバを読み込む。
+% \begin{macrocode}
+%<*standard>
+%% このファイルは日本語文字を含みます
+\input{bxjsja-minimal.def}
+% \end{macrocode}
+%
+% |simplejasetup| はstandardでは無効になる。
+% \begin{macrocode}
+\bxjs@simplejasetupfalse
+% \end{macrocode}
+%
+% \paragraph{japaramオプションの処理}
+%
+% |japaram| の値をkey-valueリストとして解釈する。
+% keyvalのファミリは |bxjsStd| とする。
+%
+% \begin{macro}{\ifbxjs@jp@jismmiv}
+% 2004JIS字形を優先させるか。
+% \begin{macrocode}
+\newif\ifbxjs@jp@jismmiv
+% \end{macrocode}
+% \end{macro}
+%
+% |jis2004| オプションの処理。
+% \begin{macrocode}
+\bxjs@cslet{bxjs@kv@jis2004@true}\bxjs@jp@jismmivtrue
+\bxjs@cslet{bxjs@kv@jis2004@false}\bxjs@jp@jismmivfalse
+\define@key{bxjsStd}{jis2004}[true]{%
+ \bxjs@set@keyval{jis2004}{#1}{}}
+% \end{macrocode}
+%
+% \begin{macro}{\ifbxjs@jp@units}
+% 和文用単位(|zw|、|zh|、|(true)Q|、|(true)H|)を
+% 使えるようにするか。
+% \begin{macrocode}
+\newif\ifbxjs@jp@units
+% \end{macrocode}
+% \end{macro}
+%
+% |units| オプションの処理。
+% \begin{macrocode}
+\let\bxjs@kv@units@true\bxjs@jp@unitstrue
+\let\bxjs@kv@units@false\bxjs@jp@unitsfalse
+\define@key{bxjsStd}{units}[true]{%
+ \bxjs@set@keyval{units}{#1}{}}
+% \end{macrocode}
+%
+% \begin{macro}{\bxjs@jp@font}
+% フォントパッケージの追加オプション。
+% \begin{macrocode}
+\let\bxjs@jp@font\@empty
+% \end{macrocode}
+% \end{macro}
+%
+% |font| オプションの処理。
+% \begin{macrocode}
+\define@key{bxjsStd}{font}{%
+ \edef\bxjs@jp@font{#1}}
+% \end{macrocode}
+%
+% 実際の |japaram| の値を適用する。
+% \begin{macrocode}
+\def\bxjs@next#1{\bxjs@safe@setkeys{bxjsStd}{#1}}
+\expandafter\bxjs@next\expandafter{\jsJaParam}
+% \end{macrocode}
+%
+% \paragraph{jis2004パラメタ}
+%
+% |jis2004| パラメタが有効の場合は、グローバルオプションに |jis2004|
+% を追加する。
+% \Note |otf| や |luatexja-preset| 等のパッケージがこのオプションを
+% 利用する。
+% \begin{macrocode}
+\ifbxjs@jp@jismmiv
+ \g@addto@macro\@classoptionslist{,jis2004}
+% \@ifpackagewith 判定への対策
+ \PassOptionsToPackage{jis2004}{otf}
+\fi
+% \end{macrocode}
+%
+% \paragraph{和文用単位のサポート}
+%
+% エンジンが{(u)\pTeX}の場合は |units| を無効にする。
+% \begin{macrocode}
+\if j\jsEngine
+ \bxjs@jp@unitsfalse
+\fi
+% \end{macrocode}
+%
+% |units| パラメタが有効の場合は、|bxcalc| パッケージの |\usepTeXunits| 命令
+% を実行して和文用単位を有効化する。
+% \begin{macrocode}
+\ifbxjs@jp@units
+ \IfFileExists{bxcalc.sty}{%
+ \RequirePackage{bxcalc}[2018/01/28]%v1.0a
+ \ifx\usepTeXunits\@undefined
+ \PackageWarningNoLine\bxjs@clsname
+ {Cannot support pTeX units (zw etc.), since\MessageBreak
+ the package 'bxcalc' is too old}%
+ \bxjs@jp@unitsfalse
+ \else \usepTeXunits
+ \fi
+ }{%else
+ \PackageWarningNoLine\bxjs@clsname
+ {Cannot support pTeX units (zw etc.), since\MessageBreak
+ the package 'bxcalc' is unavailable}%
+ \bxjs@jp@unitsfalse
+ }
+\fi
+% \end{macrocode}
+%
+% |bxcalc| で和文用単位をサポートした場合は、|\bxjs@parse@qh| の処理は不要に
+% なるので無効化する。
+% \begin{macrocode}
+\ifbxjs@jp@units
+\def\bxjs@parse@qh#1{\let\bxjs@tmpb\relax}
+\let\bxjs@parse@qh@a\@undefined
+\let\bxjs@parse@qh@b\@undefined
+\fi
+% \end{macrocode}
+%
+% \begin{macro}{\bxjs@let@lenexpr}
+% |\bxjs@let@lenexpr\CS{|\Meta{長さ式}|}|\Means
+% 長さ式に |bxcalc| の展開を適用した結果のトークン列を |\CS| に代入する。
+% \begin{macrocode}
+\ifbxjs@jp@units
+ \def\bxjs@let@lenexpr#1#2{%
+ \edef#1{#2}%
+ \expandafter\CUXParseExpr\expandafter#1\expandafter{#1}}
+\else
+ \def\bxjs@let@lenexpr{\edef}
+\fi
+% \end{macrocode}
+% \end{macro}
+%
+% \paragraph{共通命令の実装}
+%
+% |\jQ| 等の「単位」系の共通命令を実装する。
+% まず{$\varepsilon$-\TeX}拡張が使えるか検査する。
+% \begin{macrocode}
+\ifjsWitheTeX
+% \end{macrocode}
+% 使える場合は、「|\dimexpr|外部寸法表記|\relax|」の形式
+% (これは内部値なので単位として使える)で各命令定義する。
+%
+% \begin{macro}{\jQ}
+% \begin{macro}{\jH}
+% |\jQ| と |\jH| はともに0.25\,mmに等しい。
+% \begin{macrocode}
+ \@tempdima=0.25mm
+ \protected\edef\jQ{\dimexpr\the\@tempdima\relax}
+ \let\jH\jQ
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\trueQ}
+% \begin{macro}{\trueH}
+% |\trueQ| と |\trueH| はともに0.25\,true\,mmに等しい。
+% \begin{macrocode}
+ \ifjsc@mag
+ \@tempdimb=\jsBaseFontSize\relax
+ \edef\bxjs@tmpa{\strip@pt\@tempdimb}%
+ \@tempdima=2.5mm
+ \bxjs@invscale\@tempdima\bxjs@tmpa
+ \protected\edef\trueQ{\dimexpr\the\@tempdima\relax}
+ \@tempdima=10pt
+ \bxjs@invscale\@tempdima\bxjs@tmpa
+ \protected\edef\bxjs@truept{\dimexpr\the\@tempdima\relax}
+ \else \let\trueQ\jQ \let\bxjs@truept\p@
+ \fi
+ \let\trueH\trueQ
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\ascQ}
+% \begin{macro}{\ascpt}
+% |\ascQ| は |\trueQ| を和文スケール値で割った値。
+% 例えば、|\fontsize{12\ascQ}{16\trueH}| とすると、
+% 和文が12Qになる。
+%
+% 同様に、|\ascpt| は |truept| を和文スケールで割った値。
+% \begin{macrocode}
+ \@tempdima\trueQ \bxjs@invscale\@tempdima\jsScale
+ \protected\edef\ascQ{\dimexpr\the\@tempdima\relax}
+ \@tempdima\bxjs@truept \bxjs@invscale\@tempdima\jsScale
+ \protected\edef\ascpt{\dimexpr\the\@tempdima\relax}
+\fi
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\jafontsize}
+% |\jafontsize{|\Meta{フォントサイズ}|}{|\Meta{行送り}|}|\Means
+% 和文フォント規準で、すなわち、1\,zwが\Meta{フォントサイズ}に
+% 等しくなるようにフォントサイズを指定する。
+% この命令の引数では、|Q|/|H| の単位が使用できる。
+% \begin{macrocode}
+\def\jafontsize#1#2{%
+ \begingroup
+ \bxjs@jafontsize@a{#1}%
+ \@tempdimb\jsInverseScale\@tempdima
+ \bxjs@jafontsize@a{#2}%
+ \xdef\bxjs@g@tmpa{%
+ \noexpand\fontsize{\the\@tempdimb}{\the\@tempdima}}%
+ \endgroup\bxjs@g@tmpa}
+\def\bxjs@jafontsize@a#1{%
+ \bxjs@parse@qh{#1}%
+ \ifx\bxjs@tmpb\relax \def\bxjs@tmpb{#1}\fi
+ \@defaultunits\@tempdima\bxjs@tmpb pt\relax\@nnil}
+% \end{macrocode}
+% \end{macro}
+%
+% 続いて、和文間空白・和欧文間空白関連の命令を実装する。
+% (エンジン依存のコード。)
+%
+% \begin{macro}{\bxjs@kanjiskip}
+% 和文間空白の量を表すテキスト。
+% \begin{macrocode}
+\def\bxjs@kanjiskip{0pt}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\setkanjiskip}
+% 和文間空白の量を設定する。
+% \begin{macrocode}
+\newcommand*\setkanjiskip[1]{%
+ \bxjs@let@lenexpr\bxjs@kanjiskip{#1}%
+ \bxjs@reset@kanjiskip}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\getkanjiskip}
+% 和文間空白の量を表すテキストに展開する。
+% \begin{macrocode}
+\newcommand*\getkanjiskip{%
+ \bxjs@kanjiskip}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\ifbxjs@kanjiskip@enabled}
+% 和文間空白の挿入が有効か。
+% ただし{\pTeX}では自身の |\(no)autospacing| での制御を
+% 用いるのでこの変数は常に真とする。
+% \begin{macrocode}
+\newif\ifbxjs@kanjiskip@enabled \bxjs@kanjiskip@enabledtrue
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\bxjs@enable@kanjiskip}
+% \begin{macro}{\bxjs@disable@kanjiskip}
+% 和文間空白の挿入を有効/無効にする。({\pTeX}以外)
+% \begin{macrocode}
+\bxjs@robust@def\bxjs@enable@kanjiskip{%
+ \bxjs@kanjiskip@enabledtrue
+ \bxjs@reset@kanjiskip}
+\bxjs@robust@def\bxjs@disable@kanjiskip{%
+ \bxjs@kanjiskip@enabledfalse
+ \bxjs@reset@kanjiskip}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\bxjs@reset@kanjiskip}
+% 現在の和文間空白の設定を実際にエンジンに反映させる。
+% \begin{macrocode}
+\bxjs@robust@def\bxjs@reset@kanjiskip{%
+ \ifbxjs@kanjiskip@enabled
+ \setlength{\@tempskipa}{\bxjs@kanjiskip}%
+ \else \@tempskipa\z@
+ \fi
+ \bxjs@apply@kanjiskip}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\bxjs@xkanjiskip}
+% \begin{macro}{\setxkanjiskip}
+% \begin{macro}{\getxkanjiskip}
+% \begin{macro}{\ifbxjs@xkanjiskip@enabled}
+% \begin{macro}{\bxjs@enable@xkanjiskip}
+% \begin{macro}{\bxjs@disable@xkanjiskip}
+% \begin{macro}{\bxjs@reset@xkanjiskip}
+% 和欧文間空白について同様のものを用意する。
+% \begin{macrocode}
+\def\bxjs@xkanjiskip{0pt}
+\newcommand*\setxkanjiskip[1]{%
+ \bxjs@let@lenexpr\bxjs@xkanjiskip{#1}%
+ \bxjs@reset@xkanjiskip}
+\newcommand*\getxkanjiskip{%
+ \bxjs@xkanjiskip}
+\newif\ifbxjs@xkanjiskip@enabled \bxjs@xkanjiskip@enabledtrue
+\bxjs@robust@def\bxjs@enable@xkanjiskip{%
+ \bxjs@xkanjiskip@enabledtrue
+ \bxjs@reset@xkanjiskip}
+\bxjs@robust@def\bxjs@disable@xkanjiskip{%
+ \bxjs@xkanjiskip@enabledfalse
+ \bxjs@reset@xkanjiskip}
+\bxjs@robust@def\bxjs@reset@xkanjiskip{%
+ \ifbxjs@xkanjiskip@enabled
+ \setlength{\@tempskipa}{\bxjs@xkanjiskip}%
+ \else \@tempskipa\z@
+ \fi
+ \bxjs@apply@xkanjiskip}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% |\jsResetDimen| を用いて、フォントサイズが変更された時に
+% 空白の量が追随するようにする。
+% \begin{macrocode}
+\g@addto@macro\jsResetDimen{%
+ \bxjs@reset@kanjiskip
+ \bxjs@reset@xkanjiskip}
+\let\bxjs@apply@kanjiskip\relax
+\let\bxjs@apply@xkanjiskip\relax
+% \end{macrocode}
+%
+% \paragraph{和文フォント指定の扱い}
+%
+% \begin{macro}{\bxjs@adjust@jafont}
+% |\jsJaFont| に入っている和文フォント設定の値を“調整”して、
+% その結果を |\bxjs@tmpa| に返す。
+% |#1| が |f| の場合は“非埋込(|noEmbed|)”の設定が禁止される。
+% この禁止の場合も含め、何か異常がある場合は |\bxjs@tmpa| は空になる。
+% \begin{macrocode}
+\@onlypreamble\bxjs@adjust@jafont
+\def\bxjs@adjust@jafont#1{%
+ \ifx\jsJaFont\bxjs@@auto
+ \bxjs@get@kanjiEmbed
+ \ifx\bxjs@kanjiEmbed\relax
+ \let\bxjs@tmpa\@empty
+ \else
+ \let\bxjs@tmpa\bxjs@kanjiEmbed
+ \fi
+ \else
+ \let\bxjs@tmpa\jsJaFont
+ \fi
+ \if f#1\ifx\bxjs@tmpa\bxjs@@noEmbed
+ \ClassWarningNoLine\bxjs@clsname
+ {Option 'jafont=noEmbed' is ignored, because it is\MessageBreak
+ not available on the current situation}%
+ \let\bxjs@tmpa\@empty
+ \fi\fi
+}
+\def\bxjs@@auto{auto}
+\def\bxjs@@noEmbed{noEmbed}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\bxjs@kanjiEmbed}
+% 現在の |updmap| の |kanjiEmbed| パラメタの値。
+% |\bxjs@get@kanjiEmbed| により実際の設定値が取得されてここに設定される。
+% \begin{macrocode}
+\let\bxjs@kanjiEmbed\relax
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\bxjs@get@kanjiEmbed}
+% 現在の |updmap| の |kanjiEmbed| パラメタの値を取得する。
+% \begin{macrocode}
+\@onlypreamble\bxjs@get@kanjiEmbed
+\def\bxjs@get@kanjiEmbed{%
+ \begingroup\setbox\z@=\hbox{%
+ \global\let\bxjs@g@tmpa\relax
+ \endlinechar\m@ne
+ \let\do\@makeother\dospecials
+ \catcode32=10 \catcode12=10 %form-feed
+ \let\bxjs@tmpa\@empty
+ \openin\@inputcheck="|kpsewhich updmap.cfg"\relax
+ \ifeof\@inputcheck\else
+ \read\@inputcheck to\bxjs@tmpa
+ \closein\@inputcheck
+ \fi
+ \ifx\bxjs@tmpa\@empty\else
+ \openin\@inputcheck="\bxjs@tmpa"\relax
+ \@tempswatrue
+ \loop\if@tempswa
+ \read\@inputcheck to\bxjs@tmpa
+ \expandafter\bxjs@get@ke@a\bxjs@tmpa\@nil kanjiEmbed \@nil\@nnil
+ \ifx\bxjs@tmpb\relax\else
+ \global\let\bxjs@g@tmpa\bxjs@tmpb
+ \@tempswafalse
+ \fi
+ \expandafter\bxjs@get@ke@b\bxjs@tmpa\@nil jaEmbed \@nil\@nnil
+ \ifx\bxjs@tmpb\relax\else
+ \global\let\bxjs@g@tmpa\bxjs@tmpb
+ \@tempswafalse
+ \fi
+ \ifeof\@inputcheck \@tempswafalse \fi
+ \repeat
+ \fi
+ }\endgroup
+ \let\bxjs@kanjiEmbed\bxjs@g@tmpa
+}
+\@onlypreamble\bxjs@get@ke@a
+\def\bxjs@get@ke@a#1kanjiEmbed #2\@nil#3\@nnil{%
+ \ifx$#1$\def\bxjs@tmpb{#2}%
+ \else \let\bxjs@tmpb\relax
+ \fi}
+\@onlypreamble\bxjs@get@ke@b
+\def\bxjs@get@ke@b#1jaEmbed #2\@nil#3\@nnil{%
+ \ifx$#1$\def\bxjs@tmpb{#2}%
+ \else \let\bxjs@tmpb\relax
+ \fi}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\jachar}
+% |\jachar{|\meta{文字}|}|\Means
+% 和文文字として出力する。
+% \begin{macrocode}
+\newcommand*\jachar[1]{%
+ \begingroup
+% \end{macrocode}
+% |\jsLetHeadChar| で先頭の“文字”を拾って
+% それを |\bxjs@jachar| に渡す。
+% \begin{macrocode}
+ \jsLetHeadChar\bxjs@tmpa{#1}%
+ \ifx\bxjs@tmpa\relax
+ \ClassWarningNoLine\bxjs@clsname
+ {Illegal argument given to \string\jachar}%
+ \else
+ \expandafter\bxjs@jachar\expandafter{\bxjs@tmpa}%
+ \fi
+ \endgroup}
+% \end{macrocode}
+% |\jsJaChar| を |\jachar| と等価にする。
+% \begin{macrocode}
+\let\jsJaChar\jachar
+% \end{macrocode}
+% 下請けの |\bxjs@jachar| の実装はエンジンにより異なる。
+% \begin{macrocode}
+\let\bxjs@jachar\@firstofone
+% \end{macrocode}
+% \end{macro}
+%
+% \paragraph{hyperref対策}
+%
+% 出力ページサイズに館する処理は |geometry| パッケージが行うので、
+% |hyperref| 側の処理は無効にしておく。
+% \begin{macrocode}
+\PassOptionsToPackage{setpagesize=false}{hyperref}
+% \end{macrocode}
+%
+% \begin{macro}{\bxjs@fix@hyperref@unicode}
+% |hyperref| の |unicode| オプションの値を固定する。
+% \begin{macrocode}
+\@onlypreamble\bxjs@fix@hyperref@unicode
+\def\bxjs@fix@hyperref@unicode#1{%
+ \PassOptionsToPackage{bxjs/hook=#1}{hyperref}%
+ \@namedef{KV@Hyp@bxjs/hook}##1{%
+ \KV@Hyp@unicode{##1}%
+ \def\KV@Hyp@unicode####1{%
+ \expandafter\ifx\csname if##1\expandafter\endcsname
+ \csname if####1\endcsname\else
+ \ClassWarningNoLine\bxjs@clsname
+ {Blcoked hyperref option 'unicode=####1'}%
+ \fi
+ }%
+ }%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\jsCheckHyperrefUnicode}
+% 「|hyperref| の |unicode| オプションの値を検証する」ための
+% 本体開始時のフック。
+% \begin{macrocode}
+\@onlypreamble\jsCheckHyperrefUnicode
+\let\jsCheckHyperrefUnicode\@empty
+\g@addto@macro\bxjs@begin@document@hook{\jsCheckHyperrefUnicode}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\bxjs@check@hyperref@unicode}
+% |hyperref| の |unicode| オプションの値を本体開始時に検証する。
+% \begin{macrocode}
+\@onlypreamble\bxjs@check@hyperref@unicode
+\def\bxjs@check@hyperref@unicode#1{%
+ \g@addto@macro\jsCheckHyperrefUnicode{%
+ \@tempswafalse
+ \begingroup
+ \expandafter\ifx\csname ifHy@unicode\endcsname\relax
+ \aftergroup\@tempswatrue \fi
+ \expandafter\ifx\csname ifHy@unicode\expandafter\endcsname
+ \csname if#1\endcsname
+ \aftergroup\@tempswatrue \fi
+ \endgroup
+ \if@tempswa\else
+ \ClassError\bxjs@clsname
+ {The value of hyperref 'unicode' key is not suitable\MessageBreak
+ for the present engine (must be #1)}%
+ {\@ehc}%
+ \fi}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\bxjs@urgent@special}
+% DVIのなるべく早い位置にspecialを出力する。
+% \begin{macrocode}
+\@onlypreamble\bxjs@urgent@special
+\def\bxjs@urgent@special#1{%
+ \AtBeginDvi{\special{#1}}%
+ \g@addto@macro\bxjs@begin@document@hook{%
+ \@ifpackageloaded{atbegshi}{%
+ \begingroup
+ \toks\z@{\special{#1}}%
+ \toks\tw@\expandafter{\AtBegShi@HookFirst}%
+ \xdef\AtBegShi@HookFirst{\the\toks@\the\toks\tw@}%
+ \endgroup
+ }{}%
+ }%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\bxjs@resolve@jafont@paren}
+% |jafont|パラメタ値内の|()|を解決する。
+% |\bxjs@resolve@jafont@paren\CS| で、|\CS| の内容中の |(...)|
+% を |\bxjs@jafont@paren{...}| に置き換える。
+% \begin{macrocode}
+\@onlypreamble\bxjs@resolve@jafont@paren
+\def\bxjs@resolve@jafont@paren#1{%
+ \def\bxjs@tmpb{\let#1}%
+ \expandafter\bxjs@resolve@jafont@paren@a#1\@nil()\@nil\relax}
+\@onlypreamble\bxjs@resolve@jafont@paren@a
+\def\bxjs@resolve@jafont@paren@a#1(#2)#3\@nil#4\relax{%
+ \ifx\relax#4\relax \bxjs@tmpb\jsJaFont
+ \else
+ \edef\bxjs@tmpa{#1\bxjs@jafont@paren{#2}#3}%
+ \bxjs@tmpb\bxjs@tmpa
+ \fi}
+% \end{macrocode}
+% \end{macro}
+%
+%^^A----------------
+% \subsection{{\pTeX}用設定}
+%
+% \begin{macrocode}
+\if j\jsEngine
+% \end{macrocode}
+%
+% \paragraph{共通命令の実装}
+%
+% \begin{macrocode}
+\def\bxjs@apply@kanjiskip{%
+ \kanjiskip\@tempskipa}
+\def\bxjs@apply@xkanjiskip{%
+ \xkanjiskip\@tempskipa}
+% \end{macrocode}
+%
+% |\jaJaChar| のサブマクロ。
+% \begin{macrocode}
+\def\bxjs@jachar#1{%
+ \bxjs@jachar@a#1....\@nil}
+\def\bxjs@jachar@a#1#2#3#4#5\@nil{%
+% \end{macrocode}
+% 引数が単一トークンなら和文文字トークンが得られたと
+% 見なしてそれをそのまま出力する。
+% \begin{macrocode}
+ \ifx.#2#1%
+% \end{macrocode}
+% 引数が複数トークンの場合は、UTF-8のバイト列であると見なし、
+% そのスカラー値を |\@tempcnta| に代入する。
+% \begin{macrocode}
+ \else\ifx.#3%
+ \@tempcnta`#1 \multiply\@tempcnta64
+ \advance\@tempcnta`#2 \advance\@tempcnta-"3080
+ \bxjs@jachar@b
+ \else\ifx.#4%
+ \@tempcnta`#1 \multiply\@tempcnta64
+ \advance\@tempcnta`#2 \multiply\@tempcnta64
+ \advance\@tempcnta`#3 \advance\@tempcnta-"E2080
+ \bxjs@jachar@b
+ \else
+ \@tempcnta`#1 \multiply\@tempcnta64
+ \advance\@tempcnta`#2 \multiply\@tempcnta64
+ \advance\@tempcnta`#3 \multiply\@tempcnta64
+ \advance\@tempcnta`#4 \advance\@tempcnta-"3C82080
+ \bxjs@jachar@b
+ \fi\fi\fi}
+% \end{macrocode}
+% 符号値が |\@tempcnta| の和文文字を出力する処理。
+% \begin{macrocode}
+\ifjsWithupTeX
+ \def\bxjs@jachar@b{\kchar\@tempcnta}
+\else
+ \def\bxjs@jachar@b{%
+ \ifx\bxUInt\@undefined\else
+ \bxUInt{\@tempcnta}%
+ \fi}
+\fi
+% \end{macrocode}
+%
+% 和欧文間空白の命令 |\jathinspace| の実装。
+% \begin{macrocode}
+\ifbxjs@jaspace@cmd
+ \def\jathinspace{\hskip\xkanjiskip}
+\fi
+% \end{macrocode}
+%
+% \paragraph{jis2004パラメタ}
+%
+% |pxchfon| と |pxbabel| では2004JISを指定するオプションの
+% 名が |prefer2004jis| である。
+% \begin{macrocode}
+\ifbxjs@jp@jismmiv
+ \PassOptionsToPackage{prefer2004jis}{pxchfon}
+ \PassOptionsToPackage{prefer2004jis}{pxbabel}
+\fi
+% \end{macrocode}
+%
+% \paragraph{和文フォント指定の扱い}
+%
+% {\pTeX}は既定で |kanji-config-updmap| の設定に従うため、
+% |\jsJaFont| が |auto| の場合は何もする必要がない。
+% 無指定でも |auto| でもない場合は、|\jsJaFont| をオプションに
+% して |pxchfon| パッケージを読み込む。
+% ここで、和文ドライバパラメタ |font| が指定されいる場合は、
+% その値を |pxchfon| のオプションに追加する。
+% \begin{macrocode}
+\let\bxjs@jafont@paren\@firstofone
+\let\bxjs@tmpa\jsJaFont
+\ifx\bxjs@tmpa\bxjs@@auto
+ \let\bxjs@tmpa\@empty
+\else\ifx\bxjs@tmpa\bxjs@@noEmbed
+ \def\bxjs@tmpa{noembed}
+\fi\fi
+\bxjs@resolve@jafont@paren\bxjs@tmpa
+\edef\bxjs@tmpa{\bxjs@catopt\bxjs@tmpa\bxjs@jp@font}
+\ifx\bxjs@tmpa\@empty\else
+ \edef\bxjs@next{%
+ \noexpand\RequirePackage[\bxjs@tmpa]{pxchfon}[2010/05/12]% v0.5
+ }\bxjs@next
+\fi
+% \end{macrocode}
+%
+% \paragraph{otfパッケージ対策}
+%
+% インストールされている |otf| パッケージが |scale| オプションに
+% 対応している場合は |scale=(\jsScaleの値)| を事前に |otf| に渡す。
+% \Note |scale| 対応は1.7b6版 [2013/11/17] から。
+% \Note otf.sty の中に「|\RequirePackage{keyval}|」の行が存在する
+% かにより判定している。
+% (もっといい方法はないのか……。)
+%
+% \begin{macrocode}
+\begingroup
+ \global\let\bxjs@g@tmpa\relax
+ \catcode`\|=0 \catcode`\\=12
+ |def|bxjs@tmpdo#1|@nil{%
+ |bxjs@tmpdo@a#1|@nil\RequirePackage|@nnil}%
+ |def|bxjs@tmpdo@a#1\RequirePackage#2|@nnil{%
+ |ifx$#1$|bxjs@tmpdo@b#2|@nil keyval|@nnil |fi}%
+ |catcode`|\=0 \catcode`\|=12
+ \def\bxjs@tmpdo@b#1keyval#2\@nnil{%
+ \ifx$#2$\else
+ \xdef\bxjs@g@tmpa{%
+ \noexpand\PassOptionsToPackage{scale=\jsScale}{otf}}%
+ \fi}
+\@firstofone{%
+ \catcode10=12 \endlinechar\m@ne
+ \let\do\@makeother \dospecials \catcode32=10
+ \openin\@inputcheck=otf.sty\relax
+ \@tempswatrue
+ \loop\if@tempswa
+ \ifeof\@inputcheck \@tempswafalse \fi
+ \if@tempswa
+ \read\@inputcheck to\bxjs@next
+ \expandafter\bxjs@tmpdo\bxjs@next\@nil
+ \fi
+ \repeat
+ \closein\@inputcheck
+\endgroup}
+\bxjs@g@tmpa
+% \end{macrocode}
+%
+% \paragraph{hyperref対策}
+%
+% |unicode| にしてはいけない。
+% \begin{macrocode}
+\ifbxjs@hyperref@enc
+ \bxjs@check@hyperref@unicode{false}
+\fi
+% \end{macrocode}
+%
+% |tounicode| special命令を出力する。
+% \begin{macrocode}
+\if \ifx\bxjs@driver@given\bxjs@driver@@dvipdfmx T%
+ \else\ifjsWithpTeXng T\else F\fi\fi T%
+ \ifnum\jis"2121="A1A1 %euc
+ \bxjs@urgent@special{pdf:tounicode EUC-UCS2}
+ \else\ifnum\jis"2121="8140 %sjis
+ \bxjs@urgent@special{pdf:tounicode 90ms-RKSJ-UCS2}
+ \else\ifnum\jis"2121="3000 %uptex
+ \ifbxjs@bigcode
+ \bxjs@urgent@special{pdf:tounicode UTF8-UTF16}
+ \PassOptionsToPackage{bigcode}{pxjahyper}
+ \else
+ \bxjs@urgent@special{pdf:tounicode UTF8-UCS2}
+ \fi
+ \fi\fi\fi
+ \let\bxToUnicodeSpecialDone=t
+\fi
+% \end{macrocode}
+%
+% \paragraph{和文数式ファミリ}
+%
+% 和文数式ファミリは既定で有効とする。
+% すなわち |enablejfam=false| 以外の場合は |@enablejfam| を真にする。
+% \begin{macrocode}
+\ifx f\bxjs@enablejfam\else
+ \@enablejfamtrue
+\fi
+% \end{macrocode}
+%
+% 実際に和文用の数式ファミリの設定を行う。
+% \begin{macrocode}
+\if@enablejfam
+ \DeclareSymbolFont{mincho}{\jsc@JYn}{mc}{m}{n}
+ \DeclareSymbolFontAlphabet{\mathmc}{mincho}
+ \SetSymbolFont{mincho}{bold}{\jsc@JYn}{gt}{m}{n}
+ \jfam\symmincho
+ \DeclareMathAlphabet{\mathgt}{\jsc@JYn}{gt}{m}{n}
+ \g@addto@macro\bxjs@begin@document@hook{%
+ \ifx\reDeclareMathAlphabet\@undefined\else
+ \reDeclareMathAlphabet{\mathrm}{\@mathrm}{\@mathmc}%
+ \reDeclareMathAlphabet{\mathbf}{\@mathbf}{\@mathgt}%
+ \reDeclareMathAlphabet{\mathsf}{\@mathsf}{\@mathgt}%
+ \fi}
+\fi
+% \end{macrocode}
+%
+%^^A----------------
+% \subsection{pdf{\TeX}用設定: CJK + bxcjkjatype}
+%
+% \begin{macrocode}
+\else\if p\jsEngine
+% \end{macrocode}
+%
+% \paragraph{bxcjkjatypeパッケージの読込}
+%
+% |\jsJaFont| が指定されている場合は、その値を |bxcjkjatype| の
+% オプション(プリセット指定)に渡す。
+% (|auto| ならば |\bxjs@get@kanjiEmbed| を実行する。)
+% スケール値(|\jsScale|)の反映は bxcjkjatype の側で行われる。
+% \Note Pandocモードでは |autotilde| を指定しない。
+% \begin{macrocode}
+\bxjs@adjust@jafont{f}
+\let\bxjs@jafont@paren\@firstofone
+\bxjs@resolve@jafont@paren\bxjs@tmpa
+\edef\bxjs@tmpa{\bxjs@catopt\bxjs@tmpa\bxjs@jp@font}
+\edef\bxjs@tmpa{\bxjs@catopt\bxjs@tmpa{whole}}
+\def\bxjs@tmpb{pandoc}\ifx\bxjs@tmpb\bxjs@jadriver\else
+ \edef\bxjs@tmpa{\bxjs@catopt\bxjs@tmpa{autotilde}}
+\fi
+\edef\bxjs@next{%
+ \noexpand\RequirePackage[\bxjs@tmpa]{bxcjkjatype}[2013/10/15]% v0.2c
+}\bxjs@next
+\bxjs@cjk@loaded
+% \end{macrocode}
+%
+% \paragraph{hyperref対策}
+%
+% |bxcjkjatype| 使用時は |unicode| にするべき。
+% \Note 取りあえず固定はしない。
+% \begin{macrocode}
+\ifbxjs@hyperref@enc
+ \PassOptionsToPackage{unicode}{hyperref}
+\fi
+% \end{macrocode}
+%
+% |\hypersetup| 命令で(|CJK*| 環境に入れなくても)日本語文字を
+% 含む文書情報を設定できるようにするための細工。
+% \Note bxcjkjatype を |whole| 付きで使っていることが前提。
+% \Note パッケージオプションでの指定に対応するのは、
+% 「アクティブな高位バイトトークンがその場で展開されてしまう」
+% ため困難である。
+% \begin{macrocode}
+\ifx\bxcjkjatypeHyperrefPatchDone\@undefined
+\begingroup
+ \CJK@input{UTF8.bdg}
+\endgroup
+\g@addto@macro\pdfstringdefPreHook{%
+ \@nameuse{CJK@UTF8Binding}%
+}
+\fi
+% \end{macrocode}
+%
+% |~| が和欧文間空白である場合はPDF文字列中で空白文字で
+% なく空に展開させる。
+% \begin{macrocode}
+\ifx\bxcjkjatypeHyperrefPatchDone\@undefined
+\g@addto@macro\pdfstringdefPreHook{%
+ \ifx~\bxjs@@CJKtilde
+ \let\bxjs@org@LetUnexpandableSpace\HyPsd@LetUnexpandableSpace
+ \let\HyPsd@LetUnexpandableSpace\bxjs@LetUnexpandableSpace
+ \let~\@empty
+ \fi
+}
+\def\bxjs@@CJKtilde{\CJKecglue\ignorespaces}
+\def\bxjs@@tildecmd{~}
+\def\bxjs@LetUnexpandableSpace#1{%
+ \def\bxjs@tmpa{#1}\ifx\bxjs@tmpa\bxjs@@tildecmd\else
+ \bxjs@org@LetUnexpandableSpace#1%
+ \fi}
+\fi
+% \end{macrocode}
+%
+% \paragraph{共通命令の実装}
+%
+% \begin{macrocode}
+\newskip\jsKanjiSkip
+\newskip\jsXKanjiSkip
+\ifx\CJKecglue\@undefined
+ \def\CJKtilde{\CJK@global\def~{\CJKecglue\ignorespaces}}
+\fi
+\let\autospacing\bxjs@enable@kanjiskip
+\let\noautospacing\bxjs@disable@kanjiskip
+\protected\def\bxjs@CJKglue{\hskip\jsKanjiSkip}
+\def\bxjs@apply@kanjiskip{%
+ \jsKanjiSkip\@tempskipa
+ \let\CJKglue\bxjs@CJKglue}
+\let\autoxspacing\bxjs@enable@xkanjiskip
+\let\noautoxspacing\bxjs@disable@xkanjiskip
+\protected\def\bxjs@CJKecglue{\hskip\jsXKanjiSkip}
+\def\bxjs@apply@xkanjiskip{%
+ \jsXKanjiSkip\@tempskipa
+ \let\CJKecglue\bxjs@CJKecglue}
+% \end{macrocode}
+%
+% |\jachar| のサブマクロの実装。
+% \begin{macrocode}
+\def\bxjs@jachar#1{%
+ \CJKforced{#1}}
+% \end{macrocode}
+%
+% 和欧文間空白の命令 |\jathinspace| の実装。
+% \begin{macrocode}
+\ifbxjs@jaspace@cmd
+ \protected\def\jathinspace{\CJKecglue}
+\fi
+% \end{macrocode}
+%
+% \paragraph{和文数式ファミリ}
+%
+% CJKパッケージは(恐らく)数式文字としてCJK文字をサポートしていない。
+% 従って |@enablejfam| は常に偽になる。
+% \begin{macrocode}
+\ifx t\bxjs@enablejfam
+ \ClassWarningNoLine\bxjs@clsname
+ {You cannot use 'enablejfam=true', since the\MessageBreak
+ CJK package does not support Japanese math}
+\fi
+% \end{macrocode}
+%
+%^^A----------------
+% \subsection{{\XeTeX}用設定: xeCJK + zxjatype}
+%
+% \begin{macrocode}
+\else\if x\jsEngine
+% \end{macrocode}
+%
+% \paragraph{zxjatypeパッケージの読込}
+%
+% スケール値(|\jsScale|)の反映は zxjatype の側で行われる。
+% \begin{macrocode}
+\RequirePackage{zxjatype}
+\PassOptionsToPackage{no-math}{fontspec}%!
+\PassOptionsToPackage{xetex}{graphicx}%!
+\PassOptionsToPackage{xetex}{graphics}%!
+\ifx\zxJaFamilyName\@undefined
+ \ClassError\bxjs@clsname
+ {xeCJK or zxjatype is too old}\@ehc
+\fi
+% \end{macrocode}
+%
+% \paragraph{和文フォント定義}
+%
+% |\jsJaFont| が指定された場合は、その値をオプションと
+% して |zxjafont| を読み込む。
+% 非指定の場合はIPAexフォントを使用する。
+% \begin{macrocode}
+\bxjs@adjust@jafont{f}
+\let\bxjs@jafont@paren\@gobble
+\bxjs@resolve@jafont@paren\bxjs@tmpa
+\edef\bxjs@tmpa{\bxjs@catopt\bxjs@tmpa\bxjs@jp@font}
+\ifx\bxjs@tmpa\@empty
+ \setCJKmainfont[BoldFont=ipaexg.ttf]{ipaexm.ttf}
+ \setCJKsansfont[BoldFont=ipaexg.ttf]{ipaexg.ttf}
+\else
+ \edef\bxjs@next{%
+ \noexpand\RequirePackage[\bxjs@tmpa]{zxjafont}[2013/01/28]% v0.2a
+ }\bxjs@next
+\fi
+% \end{macrocode}
+%
+% \paragraph{hyperref対策}
+%
+% |unicode| オプションの指定に関する話。
+%
+% {\XeTeX}の場合は、xdvipdfmxがUTF-8→UTF-16の変換を行う機能を
+% 持っているため、本来はspecial命令の文字列の文字コード変換は不要である。
+% ところが、|hyperref| での方針としては、{\XeTeX}の場合にも
+% パッケージ側で文字コード変換を行う方が望ましいと考えている。
+% 実際、|unicode| を無効にしていると警告が出て強制的に有効化される。
+% 一方で、過去(r35125まで)^^A2014/09/20
+% のxdvipdfmxでは、文字列をUTF-16に変換した状態で与えるのは不正と
+% 見なしていて警告が発生する。
+%
+% これを踏まえて、ここでは、
+% 「{\XeTeX}のバージョンが0.99992以上の場合に |unicode| を既定で
+% 有効にする」
+% ことにする。
+% \Note 取りあえず固定はしない。
+% \begin{macrocode}
+\ifnum\strcmp{\the\XeTeXversion\XeTeXrevision}{0.99992}>\m@ne
+ \ifbxjs@hyperref@enc
+ \PassOptionsToPackage{unicode}{hyperref}
+ \fi
+\fi
+% \end{macrocode}
+%
+% \paragraph{段落頭でのグルー挿入禁止}
+%
+% どうやら、\Pkg{zxjatype}の |\inhibitglue| の実装が極めて杜撰なため、
+% 1.0版での実装では全く期待通りの動作をしていないし、
+% そもそも(少なくとも現状の)\Pkg{xeCJK}では、
+% 段落頭での |\inhibitglue| は実行しないほうがJSクラスの出力に
+% 近いものが得られるらしい。
+%
+% 従って、|\jsInhibitGlueAtParTop| は結局何もしないことにする。
+%
+% 強制改行直後のグルー禁止処理、のような怪しげな何か。
+%
+% \begin{macrocode}
+\AtEndOfPackage{%
+\def\@gnewline #1{%
+ \ifvmode \@nolnerr
+ \else
+ \unskip \reserved@e {\reserved@f#1}\nobreak \hfil \break \null
+ \nobreak \hskip-1sp\hskip1sp\relax
+ \ignorespaces
+ \fi}
+}
+% \end{macrocode}
+%
+% \paragraph{共通命令の実装}
+%
+% \begin{macrocode}
+\newskip\jsKanjiSkip
+\newskip\jsXKanjiSkip
+\ifx\CJKecglue\@undefined
+ \def\CJKtilde{\CJK@global\def~{\CJKecglue\ignorespaces}}
+\fi
+\let\autospacing\bxjs@enable@kanjiskip
+\let\noautospacing\bxjs@disable@kanjiskip
+\protected\def\bxjs@CJKglue{\hskip\jsKanjiSkip}
+\def\bxjs@apply@kanjiskip{%
+ \jsKanjiSkip\@tempskipa
+ \xeCJKsetup{CJKglue={\bxjs@CJKglue}}}
+\let\autoxspacing\bxjs@enable@xkanjiskip
+\let\noautoxspacing\bxjs@disable@xkanjiskip
+\protected\def\bxjs@CJKecglue{\hskip\jsXKanjiSkip}
+\def\bxjs@apply@xkanjiskip{%
+ \jsXKanjiSkip\@tempskipa
+ \xeCJKsetup{CJKecglue={\bxjs@CJKecglue}}}
+% \end{macrocode}
+%
+% |\mcfamily|、|\gtfamily| は本来は zxjatype の方で定義すべき
+% であろうが、現状は暫定的にここで定義する。
+% \begin{macrocode}
+\ifx\mcfamily\@undefined
+ \protected\def\mcfamily{\CJKfamily{\CJKrmdefault}}
+ \protected\def\gtfamily{\CJKfamily{\CJKsfdefault}}
+\fi
+% \end{macrocode}
+%
+% |\jachar| のサブマクロの実装。
+% \begin{macrocode}
+\def\bxjs@jachar#1{%
+ \xeCJKDeclareCharClass{CJK}{`#1}\relax
+ #1}
+% \end{macrocode}
+%
+% |\jathinspace| の実装。
+% \begin{macrocode}
+\ifbxjs@jaspace@cmd
+ \protected\def\jathinspace{\CJKecglue}
+\fi
+% \end{macrocode}
+%
+% \paragraph{和文数式ファミリ}
+%
+% 和文数式ファミリは既定で無効とする。
+% すなわち |enablejfam=true| の場合にのみ |@enablejfam| を真にする。
+% \begin{macrocode}
+\ifx t\bxjs@enablejfam
+ \@enablejfamtrue
+\fi
+% \end{macrocode}
+%
+% 実際に和文用の数式ファミリの設定を行う。
+% \Note FIXME: 要検討。
+% \begin{macrocode}
+\if@enablejfam
+ \xeCJKsetup{CJKmath=true}
+\fi
+% \end{macrocode}
+%
+%^^A----------------
+% \subsection{Lua{\TeX}用設定: Lua{\TeX}-ja}
+%
+% \begin{macrocode}
+\else\if l\jsEngine
+% \end{macrocode}
+%
+% \paragraph{Lua{\TeX}-jaパッケージの読込}
+%
+% |luatexja| とともに |luatexja-fontspec| パッケージを読み込む。
+%
+% |luatexja| は自前の |\zw|(これは実際の現在和文フォントに
+% 基づく値を返す)を定義するので、|\zw| の定義を消しておく。
+% なお、レイアウト定義の「全角幅」は「規定」に基づく |\jsZw| で
+% あることに注意が必要。
+%
+% \Note 1.0b版から
+% 「graphicsパッケージに |pdftex| オプションを渡す」
+% 処理を行っていたが、1.4版で廃止された。
+%
+% \begin{macrocode}
+\let\zw\@undefined
+\RequirePackage{luatexja}
+\edef\bxjs@next{%
+ \noexpand\RequirePackage[scale=\jsScale]{luatexja-fontspec}[2015/08/26]%
+}\bxjs@next
+% \end{macrocode}
+%
+% フォント代替の明示的定義。
+% \begin{macrocode}
+\DeclareFontShape{JY3}{mc}{m}{it}{<->ssub*mc/m/n}{}
+\DeclareFontShape{JY3}{mc}{m}{sl}{<->ssub*mc/m/n}{}
+\DeclareFontShape{JY3}{mc}{m}{sc}{<->ssub*mc/m/n}{}
+\DeclareFontShape{JY3}{gt}{m}{it}{<->ssub*gt/m/n}{}
+\DeclareFontShape{JY3}{gt}{m}{sl}{<->ssub*gt/m/n}{}
+\DeclareFontShape{JY3}{mc}{bx}{it}{<->ssub*gt/m/n}{}
+\DeclareFontShape{JY3}{mc}{bx}{sl}{<->ssub*gt/m/n}{}
+\DeclareFontShape{JY3}{gt}{bx}{it}{<->ssub*gt/m/n}{}
+\DeclareFontShape{JY3}{gt}{bx}{sl}{<->ssub*gt/m/n}{}
+\DeclareFontShape{JY3}{mc}{b}{n}{<->ssub*mc/bx/n}{}
+\DeclareFontShape{JY3}{mc}{b}{it}{<->ssub*mc/bx/n}{}
+\DeclareFontShape{JY3}{mc}{b}{sl}{<->ssub*mc/bx/n}{}
+\DeclareFontShape{JY3}{gt}{b}{n}{<->ssub*gt/bx/n}{}
+\DeclareFontShape{JY3}{gt}{b}{it}{<->ssub*gt/bx/n}{}
+\DeclareFontShape{JY3}{gt}{b}{sl}{<->ssub*gt/bx/n}{}
+\DeclareFontShape{JT3}{mc}{m}{it}{<->ssub*mc/m/n}{}
+\DeclareFontShape{JT3}{mc}{m}{sl}{<->ssub*mc/m/n}{}
+\DeclareFontShape{JT3}{mc}{m}{sc}{<->ssub*mc/m/n}{}
+\DeclareFontShape{JT3}{gt}{m}{it}{<->ssub*gt/m/n}{}
+\DeclareFontShape{JT3}{gt}{m}{sl}{<->ssub*gt/m/n}{}
+\DeclareFontShape{JT3}{mc}{bx}{it}{<->ssub*gt/m/n}{}
+\DeclareFontShape{JT3}{mc}{bx}{sl}{<->ssub*gt/m/n}{}
+\DeclareFontShape{JT3}{gt}{bx}{it}{<->ssub*gt/m/n}{}
+\DeclareFontShape{JT3}{gt}{bx}{sl}{<->ssub*gt/m/n}{}
+\DeclareFontShape{JT3}{mc}{b}{n}{<->ssub*mc/bx/n}{}
+\DeclareFontShape{JT3}{mc}{b}{it}{<->ssub*mc/bx/n}{}
+\DeclareFontShape{JT3}{mc}{b}{sl}{<->ssub*mc/bx/n}{}
+\DeclareFontShape{JT3}{gt}{b}{n}{<->ssub*gt/bx/n}{}
+\DeclareFontShape{JT3}{gt}{b}{it}{<->ssub*gt/bx/n}{}
+\DeclareFontShape{JT3}{gt}{b}{sl}{<->ssub*gt/bx/n}{}
+% \end{macrocode}
+%
+% \paragraph{和文フォント定義}
+%
+% |\jsJaFont| が指定された場合は、その値をオプションと
+% して |luatexja-preset| を読み込む。
+% 非指定の場合は、|luatexja-preset| パッケージの |ipaex|
+% オプション(IPAexフォント使用)と等価な設定を用いる
+% (|luatexja-preset| は読み込まない)。
+% \begin{macrocode}
+\bxjs@adjust@jafont{t}
+\ifx\bxjs@tmpa\bxjs@@noEmbed
+ \def\bxjs@tmpa{noembed}
+\fi
+\let\bxjs@jafont@paren\@gobble
+\bxjs@resolve@jafont@paren\bxjs@tmpa
+\edef\bxjs@tmpa{\bxjs@catopt\bxjs@tmpa\bxjs@jp@font}
+\ifx\bxjs@tmpa\@empty
+ \defaultjfontfeatures{ Kerning=Off }
+ \setmainjfont[BoldFont=IPAexGothic,JFM=ujis]{IPAexMincho}
+ \setsansjfont[BoldFont=IPAexGothic,JFM=ujis]{IPAexGothic}
+\else
+ \edef\bxjs@next{%
+ \noexpand\RequirePackage[\bxjs@tmpa]{luatexja-preset}%
+ }\bxjs@next
+\fi
+% \end{macrocode}
+%
+% 欧文総称フォント命令で和文フォントが連動するように修正する。
+% その他の和文フォント関係の定義を行う。
+% \begin{macrocode}
+\DeclareRobustCommand\rmfamily
+ {\not@math@alphabet\rmfamily\mathrm
+ \romanfamily\rmdefault\kanjifamily\mcdefault\selectfont}
+\DeclareRobustCommand\sffamily
+ {\not@math@alphabet\sffamily\mathsf
+ \romanfamily\sfdefault\kanjifamily\gtdefault\selectfont}
+\DeclareRobustCommand\ttfamily
+ {\not@math@alphabet\ttfamily\mathtt
+ \romanfamily\ttdefault\kanjifamily\gtdefault\selectfont}
+\g@addto@macro\bxjs@begin@document@hook{%
+ \reDeclareMathAlphabet{\mathrm}{\mathrm}{\mathmc}
+ \reDeclareMathAlphabet{\mathbf}{\mathbf}{\mathgt}%
+ \reDeclareMathAlphabet{\mathsf}{\mathsf}{\mathgt}}%
+\bxjs@if@sf@default{%
+ \renewcommand\kanjifamilydefault{\gtdefault}}
+% \end{macrocode}
+%
+% \paragraph{和文パラメタの設定}
+%
+% \begin{macrocode}
+% 次の3つは既定値の通り
+%\ltjsetparameter{prebreakpenalty={`’,10000}}
+%\ltjsetparameter{postbreakpenalty={`“,10000}}
+%\ltjsetparameter{prebreakpenalty={`”,10000}}
+\ltjsetparameter{jaxspmode={`!,1}}
+\ltjsetparameter{jaxspmode={`〒,2}}
+\ltjsetparameter{alxspmode={`+,3}}
+\ltjsetparameter{alxspmode={`\%,3}}
+% \end{macrocode}
+%
+% \paragraph{段落頭でのグルー挿入禁止}
+%
+% 基本的に現状の |ltjs*| クラスの処理に合わせる。
+% \Note |\jsInhibitGlueAtParTop| は使わない。
+%
+% \begin{macro}{\ltjfakeparbegin}
+% 現在の{\LuaTeX-ja}で定義されているマクロで、
+% 段落中で段落冒頭用の処理を発動する。
+% 未定義である場合にに備えて同等のものを用意する。
+% \begin{macrocode}
+\ifx\ltjfakeparbegin\@undefined
+ \protected\def\ltjfakeparbegin{%
+ \ifhmode
+ \relax\directlua{%
+ luatexja.jfmglue.create_beginpar_node()}}
+ \fi}
+\fi
+% \end{macrocode}
+% \end{macro}
+%
+% |ltjs*| クラスの定義と同等になるようにパッチを当てる。
+% \begin{macrocode}
+\unless\ifnum\bxjs@everyparhook=\bxjs@everyparhook@none
+\begingroup
+ \let\%\@percentchar \def\@#1{[[\detokenize{#1}]]}
+ \@gobble\if\def\bxjs@tmpa{\@{\everypar{}\fi}}
+ \ifnum\bxjs@everyparhook=\bxjs@everyparhook@compat
+ \@gobble\if\def\bxjs@tmpa{\@{\everypar{\everyparhook}\fi}}\fi
+ \directlua{
+ local function patchcmd(cs, code, from, to)
+ tex.sprint(code:gsub(from:gsub("\%W", "\%\%\%0"), "\%0"..to)
+ :gsub("macro:", \@\gdef..cs, 1):gsub("->", "{", 1).."}")
+ end
+ patchcmd(\@\@xsect, [[\meaning\@xsect]],
+ \@{\hskip-\@tempskipa}, \@\ltjfakeparbegin)
+ patchcmd(\@\@item, [[\meaning\@item]],
+ \bxjs@tmpa, \@\ltjfakeparbegin)}
+\endgroup
+\fi
+% \end{macrocode}
+%
+% \paragraph{hyperref対策}
+%
+% |unicode| にするべき。
+% \Note 1.6c版より、固定ではなく既定設定+検証に切り替えた。
+% \begin{macrocode}
+\ifbxjs@hyperref@enc
+ \PassOptionsToPackage{unicode}{hyperref}
+ \bxjs@check@hyperref@unicode{true}
+\fi
+% \end{macrocode}
+%
+% \paragraph{共通命令の実装}
+%
+% \begin{macrocode}
+\protected\def\autospacing{%
+ \ltjsetparameter{autospacing=true}}
+\protected\def\noautospacing{%
+ \ltjsetparameter{autospacing=false}}
+\protected\def\autoxspacing{%
+ \ltjsetparameter{autoxspacing=true}}
+\protected\def\noautoxspacing{%
+ \ltjsetparameter{autoxspacing=false}}
+\def\bxjs@apply@kanjiskip{%
+ \ltjsetparameter{kanjiskip={\@tempskipa}}}
+\def\bxjs@apply@xkanjiskip{%
+ \ltjsetparameter{xkanjiskip={\@tempskipa}}}
+% \end{macrocode}
+%
+% |\jachar| のサブマクロの実装。
+% \begin{macrocode}
+\def\bxjs@jachar#1{%
+ \ltjjachar`#1\relax}
+% \end{macrocode}
+%
+% |\jathinspace| の実装。
+% \begin{macrocode}
+\ifbxjs@jaspace@cmd
+ \protected\def\jathinspace{%
+ \hskip\ltjgetparameter{xkanjiskip}\relax}
+\fi
+% \end{macrocode}
+%
+% \paragraph{和文数式ファミリ}
+%
+% Lua{\TeX}-jaでは和文数式ファミリは常に有効で、既にこの時点で必要な
+% 設定は済んでいる。
+% 従って |@enablejfam| は常に真になる。
+% \begin{macrocode}
+\ifx f\bxjs@enablejfam
+ \ClassWarningNoLine\bxjs@clsname
+ {You cannot use 'enablejfam=false', since the\MessageBreak
+ LuaTeX-ja always provides Japanese math families}
+\fi
+% \end{macrocode}
+%
+%^^A----------------
+% \subsection{共通処理(2)}
+%
+% \begin{macrocode}
+\fi\fi\fi\fi
+% \end{macrocode}
+%
+% \paragraph{共通命令の実装}
+% \begin{macro}{\textmc}
+% \begin{macro}{\textgt}
+% minimal ドライバ実装中で定義した |\DeclareJaTextFontCommand|
+% を利用する。
+% \begin{macrocode}
+\ifx\DeclareFixJFMCJKTextFontCommand\@undefined
+\DeclareJaTextFontCommand{\textmc}{\mcfamily}
+\DeclareJaTextFontCommand{\textgt}{\gtfamily}
+\fi
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\mathmc}
+% \begin{macro}{\mathgt}
+% この時点で未定義である場合に限り、
+% |\DeclareJaMathFontCommand| を利用したフォールバックの定義を行う。
+% \begin{macrocode}
+\ifx\mathmc\@undefined
+ \DeclareJaMathFontCommand{\mathmc}{\mcfamily}
+ \DeclareJaMathFontCommand{\mathgt}{\gtfamily}
+\fi
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \paragraph{和文空白命令}
+% \begin{macro}{\>}
+% 非数式中では |\jathinspace| と等価になるように再定義する。
+% \Note 数式中では従来通り(|\:| と等価)。
+% \begin{macrocode}
+\ifbxjs@jaspace@cmd
+ \bxjs@protected\def\bxjs@choice@jathinspace{%
+ \relax\ifmmode \mskip\medmuskip
+ \else \jathinspace\ignorespaces
+ \fi}
+ \jsAtEndOfClass{%
+ \ifjsWitheTeX \let\>\bxjs@choice@jathinspace
+ \else \def\>{\protect\bxjs@choice@jathinspace}%
+ \fi}
+\fi
+% \end{macrocode}
+% \end{macro}
+%
+% \paragraph{和文・和欧文間空白の初期値}
+%
+% \begin{macrocode}
+\setkanjiskip{0pt plus.1\jsZw minus.01\jsZw}
+\ifx\jsDocClass\jsSlide \setxkanjiskip{0.1em}
+\else \setxkanjiskip{0.25em plus 0.15em minus 0.06em}
+\fi
+% \end{macrocode}
+%
+% 以上で終わり。
+%
+% \begin{macrocode}
+%</standard>
+% \end{macrocode}
+%
+%^^A========================================================
+% \section{和文ドライバ:modern \ZRX}
+%
+% モダーンな設定。
+%
+% standardドライバの設定を引き継ぐ。
+% \begin{macrocode}
+%<*modern>
+\input{bxjsja-standard.def}
+% \end{macrocode}
+%
+%^^A----------------
+%\subsection{フォント設定}
+%
+% T1エンコーディングに変更する。
+% \Note 以下のコードは |\usepackage[T1]{fontenc}| と同等。
+% \begin{macrocode}
+\ifnum0\if x\jsEngine1\fi\if l\jsEngine1\fi=\z@
+\def\encodingdefault{T1}%
+\input{t1enc.def}%
+\fontencoding\encodingdefault\selectfont
+\fi
+% \end{macrocode}
+%
+% 基本フォントをLatin Modernフォントファミリに変更する。
+% \Note 以下は |\usepackage[noamth]{lmodern}| と同じ。
+% ユーザは後で |lmodern| を好きなオプションを付けて読み込む
+% ことができる。
+% \begin{macrocode}
+\ifnum0\if x\jsEngine1\fi\if l\jsEngine1\fi=\z@
+\renewcommand{\rmdefault}{lmr}
+\renewcommand{\sfdefault}{lmss}
+\renewcommand{\ttdefault}{lmtt}
+\fi
+% \end{macrocode}
+%
+% 大型演算子用の数式フォントの設定。
+% \Note |amsfonts| パッケージと同等にする。
+% \begin{macrocode}
+\DeclareFontShape{OMX}{cmex}{m}{n}{%
+ <-7.5>cmex7<7.5-8.5>cmex8%
+ <8.5-9.5>cmex9<9.5->cmex10}{}%
+\expandafter\let\csname OMX/cmex/m/n/10\endcsname\relax
+% \end{macrocode}
+% |amsmath| 読込時に上書きされるのを防ぐ。
+% \begin{macrocode}
+\def\cmex@opt{10}
+% \end{macrocode}
+%
+%^^A----------------
+% \subsection{fixltx2e読込}
+%
+% \Note |fixltx2e| 廃止前の{\LaTeX}カーネルの場合。
+% \begin{macrocode}
+\ifx\@IncludeInRelease\@undefined
+\RequirePackage{fixltx2e}
+\fi
+% \end{macrocode}
+%
+%^^A----------------
+% \subsection{和文カテゴリコード}
+%
+% 和文カテゴリコード設定のための補助パッケージを読みこむ。
+% \begin{macrocode}
+\RequirePackage{bxjscjkcat}
+% \end{macrocode}
+%
+%^^A----------------
+% \subsection{完了}
+% おしまい。
+% \begin{macrocode}
+%</modern>
+% \end{macrocode}
+%
+%^^A========================================================
+% \section{和文ドライバ:pandoc \ZRX}
+%
+% Pandoc用の何か。
+%
+% standardドライバの設定を引き継ぐ。
+% \begin{macrocode}
+%<*pandoc>
+\input{bxjsja-standard.def}
+% \end{macrocode}
+%
+% |bxjspandoc| パッケージを読み込む。
+% \begin{macrocode}
+\RequirePackage{bxjspandoc}
+% \end{macrocode}
+%
+% \begin{macro}{\bxjs@endpreamble@hook}
+% |etoolbox| の |\AtEndPreamble| で実行されるBXJSクラス用のフック。
+% \Note {\eTeX}以外では無効になる。
+% (将来pandocの外に出す可能性あり。)
+% \begin{macrocode}
+\@onlypreamble\bxjs@endpreamble@hook
+\let\bxjs@endpreamble@hook\@empty
+\ifjsWitheTeX
+ \RequirePackage{etoolbox}[2010/08/21]% v2.0
+ \AtEndPreamble{\bxjs@endpreamble@hook}
+\fi
+% \end{macrocode}
+% \end{macro}
+%
+%^^A----------------
+%\subsection{duploadシステム}
+%
+% パッケージが重複して読み込まれたときに“option clash”の
+% 検査をスキップする。
+% この時に何らかのコードを実行させることができる。
+%
+% \begin{macro}{\bxjs@set@dupload@proc}
+% |\bxjs@set@dupload@proc{|\Meta{ファイル名}|}{|\Meta{定義本体}|}|
+% 特定のファイルの読込が |\@filewithoptions| で指示されて、しかも
+% そのファイルが読込済である場合に、オプション重複検査をスキップして、
+% 代わりに\Meta{定義本体}のコードを実行する。
+% このコード中で |#1| は渡されたオプション列のテキストに置換される。
+% \begin{macrocode}
+\@onlypreamble\bxjs@set@dupload@proc
+\def\bxjs@set@dupload@proc#1{%
+ \expandafter\bxjs@set@dupload@proc@a\csname bxjs@dlp/#1\endcsname}
+\@onlypreamble\bxjs@set@dupload@proc@a
+\def\bxjs@set@dupload@proc@a#1{%
+ \@onlypreamble#1\def#1##1}
+\def\bxjs@unset@dupload@proc#1{%
+ \expandafter\let\csname bxjs@dlp/#1\endcsname\@undefined}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@if@ptions}
+% |\@if@ptions| の再定義。
+% \begin{macrocode}
+\@onlypreamble\bxjs@org@if@ptions
+\let\bxjs@org@if@ptions\@if@ptions
+\@onlypreamble\bxjs@org@reset@ptions
+\let\bxjs@org@reset@ptions\relax
+\def\@if@ptions#1#2#3{%
+ \let\bxjs@next\@secondoftwo
+ \def\bxjs@tmpa{#1}\def\bxjs@tmpb{\@currext}%
+ \ifx\bxjs@tmpa\bxjs@tmpb
+ \expandafter\ifx\csname bxjs@dlp/#2.#1\endcsname\relax\else
+ \let\bxjs@next\@firstoftwo \fi
+ \fi
+ \bxjs@next\bxjs@do@dupload@proc\bxjs@org@if@ptions{#1}{#2}{#3}}
+\g@addto@macro\bxjs@begin@document@hook{%
+ \let\@if@ptions\bxjs@org@if@ptions}
+\@onlypreamble\bxjs@do@dupload@proc
+\def\bxjs@do@dupload@proc#1#2#3{%
+ \ifx\bxjs@org@reset@ptions\relax
+ \let\bxjs@org@reset@ptions\@reset@ptions
+ \fi
+ \bxjs@csletcs{bxjs@next}{bxjs@dlp/#2.#1}%
+ \def\@reset@ptions{%
+ \let\@reset@ptions\bxjs@org@reset@ptions
+ \@reset@ptions
+ \bxjs@next{#3}}%
+ \@firstoftwo}
+% \end{macrocode}
+% \end{macro}
+%
+%^^A----------------
+%\subsection{lang変数}
+% |lang=ja| という言語指定が行われると、
+% Pandocはこれに対応していないため
+% 不完全なBabelやPolyglossiaの設定を出力してしまう。
+% これを防ぐための対策を行う。
+%
+% \begin{macro}{\bxjs@polyglossia@options}
+% Polyglossiaのオプション列のテキスト。
+% “実際には読み込まれていない”場合は |\relax| になる。
+% \begin{macrocode}
+\let\bxjs@polyglossia@options\relax
+% \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}・{Lua\TeX}の場合。
+% \Note この場合 |etoolbox| が使用可能になっている。
+% \begin{macrocode}
+\ifnum0\if x\jsEngine1\fi\if l\jsEngine1\fi>0
+% \end{macrocode}
+%
+% パッケージの読込を検知するため読込済のマークを付けて
+% duploadの処理を仕込む。
+% \begin{macrocode}
+\pandocSkipLoadPackage{polyglossia}
+\bxjs@set@dupload@proc{polyglossia.sty}{%
+ \bxjs@unset@dupload@proc{polyglossia.sty}%
+ \ClassWarning\bxjs@clsname
+ {Package polyglossia is required}%
+ \def\bxjs@polyglossia@options{#1}%
+% \end{macrocode}
+%
+% |polyglossia| の読込が指示された場合、
+% 直後に |\setmainlanguage| が実行されることを想定して、
+% フック用の |\setmainlanguage| を定義する。
+% \Note 先に |\setmainlanguage| 以外が実行された場合はエラーになる。
+% \begin{macrocode}
+ \newcommand*\setmainlanguage[2][]{%
+% \end{macrocode}
+% もし、言語名が空の |\setmainlanguage{}| が実行された場合は、
+% |lang=ja| が指定されたと見なす。
+% \begin{macrocode}
+ \ifblank{##2}{%
+ \ClassWarning\bxjs@clsname
+ {Main language is invalid, thus the fallback\MessageBreak
+ definitions will be employed}%
+ \bxjs@pandoc@lang@ja
+% \end{macrocode}
+% 言語名が非空ならば、本来の |polyglossia| の処理を実行する。
+% \begin{macrocode}
+ }{%else
+ \ClassWarning\bxjs@clsname
+ {Main language is valid (##2),\MessageBreak
+ thus polyglossia will be loaded}%
+ \csundef{ver@polyglossia.sty}%
+ \edef\bxjs@next{%
+ \noexpand\RequirePackage[\bxjs@polyglossia@options]{polyglossia}[]%
+ }\bxjs@next
+ \setmainlanguage[##1]{##2}%
+ }}}
+% \end{macrocode}
+%
+% プレアンブルで |polyglossia| の読込が指示されなかった場合、
+% Polyglossiaと連携するパッケージの誤動作を防ぐため、
+% 読込済マークを外す。
+% \begin{macrocode}
+\g@addto@macro\bxjs@endpreamble@hook{%
+ \ifx\bxjs@polyglossia@options\relax
+ \csundef{ver@polyglossia.sty}%
+ \fi}
+% \end{macrocode}
+%
+% \begin{macro}{\bxjs@pandoc@lang@ja}
+% Pandoc側で |lang=ja| が指定されていた場合の処理。
+% この場合はPolyglossiaの処理を無効化するためにダミーの定義を行う。
+% その時点でダミーの |\setotherlanguage(s)| を定義する。
+% \begin{macrocode}
+\@onlypreamble\bxjs@pandoc@lang@ja
+\def\bxjs@pandoc@lang@ja{%
+ \renewcommand*\setmainlanguage[2][]{}%
+ \newcommand*\setotherlanguage[2][]{%
+ \ifblank{##2}{}{%else
+ \cslet{##2}\@empty \cslet{end##2}\@empty
+ \cslet{text##2}\@firstofone}}%
+ \newcommand*\setotherlanguages[2][]{%
+ \@for\bxjs@tmpa:={##2}\do{%
+ \setotherlangauge{\bxjs@tmpa}}}%
+% \end{macrocode}
+% Polyglossiaの読込済マークは外れるようにしておく。
+% \begin{macrocode}
+ \let\bxjs@polyglossia@options\relax}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+\fi
+% \end{macrocode}
+%
+% \paragraph{Babelについて}
+% {\XeTeX}以外の場合。
+% \Note Pandoc 2.6版において、Lua{\TeX}で用いられる多言語パッケージが
+% PolyglossiaからBabelに変更された。
+% \begin{macrocode}
+\if x\jsEngine\else
+% \end{macrocode}
+%
+% パッケージの読込を検知するため読込済のマークを付けて
+% duploadの処理を仕込む。
+% \begin{macrocode}
+\pandocSkipLoadPackage{babel}
+\bxjs@set@dupload@proc{babel.sty}{%
+ \bxjs@unset@dupload@proc{babel.sty}%
+ \ClassWarning\bxjs@clsname
+ {Package babel is required}%
+% \end{macrocode}
+% パッケージオプションに言語名が空の |main=| があるかを調べる。
+% ある場合は |lang=ja| 対策を実行する。
+% \Note |\bxjs@babel@options| には |main=| を除いたオプション列を
+% 格納する。
+% \begin{macrocode}
+ \@tempswafalse \let\bxjs@babel@options\@empty
+ \def\bxjs@tmpb{main=}%
+ \@for\bxjs@tmpa:=#1\do{%
+ \ifx\bxjs@tmpa\bxjs@tmpb \@tempswatrue
+ \else \edef\bxjs@babel@options{\bxjs@babel@options,\bxjs@tmpa}%
+ \fi}%
+ \if@tempswa
+ \ClassWarning\bxjs@clsname
+ {Main language is invalid, so fallback\MessageBreak
+ definitions will be employed}%
+ \bxjs@pandoc@lang@ja
+% \end{macrocode}
+% ない場合は、本来の |babel| の処理を実行する。
+% \begin{macrocode}
+ \else
+ \ClassWarning\bxjs@clsname
+ {Main language is valid,\MessageBreak
+ thus babel will be loaded}%
+ \expandafter\let\csname ver@babel.sty\endcsname\@undefined
+ \RequirePackage[#1]{babel}[]%
+ \fi}
+% \end{macrocode}
+%
+% プレアンブルで |babel| の読込が指示されなかった場合、
+% 読込済マークを外す。
+% \begin{macrocode}
+\g@addto@macro\bxjs@endpreamble@hook{%
+ \ifx\bxjs@babel@options\relax
+ \expandafter\let\csname ver@babel.sty\endcsname\@undefined
+ \fi}
+% \end{macrocode}
+%
+% \begin{macro}{\bxjs@pandoc@lang@ja}
+% Pandoc側で |lang=ja| が指定されていた場合の処理。
+% \begin{macrocode}
+\@onlypreamble\bxjs@pandoc@lang@ja
+\def\bxjs@pandoc@lang@ja{%
+ \expandafter\let\csname ver@babel.sty\endcsname\@undefined
+ \edef\bxjs@next{%
+ \noexpand\RequirePackage[\bxjs@babel@options,english]{babel}[]%
+ }\bxjs@next
+ \if j\jsEngine
+ \RequirePackage[main=japanese]{pxbabel}[]%
+ \else
+ \RequirePackage{bxorigcapt}[]%
+ \fi}
+% \end{macrocode}
+% \end{macro}
+%
+% lang対策はこれで終わり。
+% \begin{macrocode}
+\fi
+% \end{macrocode}
+%
+%^^A----------------
+%\subsection{geometry変数}
+% |geometry| を“再度読み込んだ”場合に、
+% そのパラメタで |\setpagelayout*| が呼ばれるようにする。
+%
+% \begin{macrocode}
+\bxjs@set@dupload@proc{geometry.sty}{%
+ \setpagelayout*{#1}}
+% \end{macrocode}
+%
+%^^A----------------
+%\subsection{CJKmainfont変数}
+% Lua{\TeX}(+ Lua{TeX}-ja)の場合に CJKmainfont 変数が
+% 指定された場合は |\setmainjfont| の指定にまわす。
+% \begin{macrocode}
+\if l\jsEngine
+ \pandocSkipLoadPackage{xeCJK}
+ \providecommand*{\setCJKmainfont}{\setmainjfont}
+\fi
+% \end{macrocode}
+%
+%^^A----------------
+%\subsection{paragraphのマーク}
+%
+% BXJSクラスでは |\paragraph| の見出しの前に |\jsParagraphMark|
+% で指定したマークが付加され、既定ではこれは“■”である。
+% しかし、この規定は |\paragraph| が本来のレイアウトを保っている、
+% すなわち「行内見出しである」「節番号が付かない」ことが前提になって
+% いると考えられる。
+% Pandocはこの規定を変更することがある
+% (特に既定で |\paragraph| を別行見出しに再定義する)
+% ため、変更された場合は |\jsParagraphMark| の既定値を空にする。
+%
+% Pandocがプレアンブルで行う再定義の結果を調べるため、
+% begin-documentフックを利用する。
+% \begin{macrocode}
+\g@addto@macro\bxjs@begin@document@hook{%
+ \@tempswafalse
+% \end{macrocode}
+% まず、マーク変更が必要かを調べる。
+% |\oldparagraph| という制御綴が定義済の場合、Pandocが |\paragraph|
+% の様式を変更したということなので、マーク変更が必要である。
+% \begin{macrocode}
+ \ifx\oldparagraph\@undefined\else
+ \@tempswatrue
+ \fi
+% \end{macrocode}
+% |\paragraph| が番号付きの場合は、マーク変更が必要である。
+% \begin{macrocode}
+ \ifnum\c@secnumdepth>3
+ \@tempswatrue
+ \fi
+% \end{macrocode}
+% 「マーク変更が必要」である場合、|\jsParagraphMark| が既定値のままで
+% あれば空に変更する。
+% \begin{macrocode}
+ \if@tempswa\ifx\jsParagraphMark\bxjs@org@paragraph@mark
+ \let\jsParagraphMark\@empty
+ \fi\fi}
+% \end{macrocode}
+%
+%^^A----------------
+%\subsection{全角空白文字}
+%
+% \begin{macrocode}
+\ifnum0\if x\jsEngine1\fi\if l\jsEngine1\fi>\z@
+ \catcode"3000=\active
+ \begingroup \catcode`\!=7
+ \protected\gdef!!!!3000{\zwspace}
+ \endgroup
+\else\ifx\DeclareUnicodeCharacter\@undefined\else
+ \DeclareUnicodeCharacter{3000}{\bxjs@zsp@char}
+ \bxjs@protected\def\bxjs@zsp@char{\zwspace}
+\fi\fi
+% \end{macrocode}
+%
+%^^A----------------
+% \paragraph{hyperref対策}
+%
+% |hyperref| の |unicode| オプションの固定を行う。
+% \begin{macrocode}
+\if j\jsEngine
+ \bxjs@fix@hyperref@unicode{false}
+\else
+ \bxjs@fix@hyperref@unicode{true}
+\fi
+% \end{macrocode}
+%
+%^^A----------------
+% \subsection{完了}
+% おしまい。
+% \begin{macrocode}
+%</pandoc>
+% \end{macrocode}
+%
+% 和文ドライバ実装はここまで。
+% \begin{macrocode}
+%</drv>
+% \end{macrocode}
+%
+%^^A========================================================
+% \section{補助パッケージ一覧 \ZRX}
+%
+% BXJSクラスの機能を実現するために用意されたものだが、
+% 他のクラスの文書で読み込んで利用することもできる。
+%
+% \begin{itemize}
+% \item bxjscompat : ムニャムニャムニャ。
+% \item bxjscjkcat: modernドライバ用の和文カテゴリを適用する。
+% \item bxjspandoc : Pandoc用のナニカ。
+% \end{itemize}
+%
+% \begin{macrocode}
+%<*anc>
+% \end{macrocode}
+%
+%^^A========================================================
+% \section{補助パッケージ:bxjscompat \ZRX}
+%
+% ムニャムニャムニャ……。
+%
+%^^A----------------
+% \subsection{準備}
+%
+% \begin{macrocode}
+%<*compat>
+\def\bxac@pkgname{bxjscompat}
+% \end{macrocode}
+%
+% \begin{macro}{\bxjx@engine}
+% エンジンの種別。
+% \begin{macrocode}
+\let\bxac@engine=n
+\def\bxac@do#1#2{%
+ \edef\bxac@tmpa{\string#1}%
+ \edef\bxac@tmpb{\meaning#1}%
+ \ifx\bxac@tmpa\bxac@tmpb #2\fi}
+\bxac@do\XeTeXversion{\let\bxac@engine=x}
+\bxac@do\luatexversion{\let\bxac@engine=l}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\bxac@delayed@if@bxjs}
+% もしBXJSクラスの読込中でこのパッケージが読み込まれているならば、
+% BXJSのクラスの終わりまで実行を遅延する。
+% \begin{macrocode}
+\ifx\jsAtEndOfClass\@undefined
+ \let\bxac@delayed@if@bxjs\@firstofone
+\else \let\bxac@delayed@if@bxjs\jsAtEndOfClass
+\fi
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\ImposeOldLuaTeXBehavior}
+% \begin{macro}{\RevokeOldLuaTeXBehavior}
+% ムニャムニャ。
+% \begin{macrocode}
+\newif\ifbxac@in@old@behavior
+\let\ImposeOldLuaTeXBehavior\relax
+\let\RevokeOldLuaTeXBehavior\relax
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+%^^A----------------
+% \subsection{{\XeTeX}部分}
+% \begin{macrocode}
+\ifx x\bxac@engine
+% \end{macrocode}
+%
+% {\XeTeX}文字クラスのムニャムニャ。
+% \begin{macrocode}
+\@onlypreamble\bxac@adjust@charclass
+\bxac@delayed@if@bxjs{%
+ \@ifpackageloaded{xeCJK}{}{%else
+ \ifx\xe@alloc@intercharclass\@undefined\else
+ \ifnum\xe@alloc@intercharclass=\z@
+ \PackageInfo\bxac@pkgname
+ {Setting up interchar class for CJK...\@gobble}%
+ \InputIfFileExists{load-unicode-xetex-classes.tex}{%
+ \xe@alloc@intercharclass=3
+ }{%else
+ \PackageWarning\bxac@pkgname
+ {Cannot find file 'load-unicode-xetex-classes.tex'%
+ \@gobble}%
+ }%
+ \fi\fi
+ \ifnum\XeTeXcharclass"3041=\z@
+ \PackageInfo\bxac@pkgname
+ {Adjusting interchar class for CJK...\@gobble}%
+ \@for\bxac@x:={%
+ 3041,3043,3045,3047,3049,3063,3083,3085,3087,308E,%
+ 3095,3096,30A1,30A3,30A5,30A7,30A9,30C3,30E3,30E5,%
+ 30E7,30EE,30F5,30F6,30FC,31F0,31F1,31F2,31F3,31F4,%
+ 31F5,31F6,31F7,31F8,31F9,31FA,31FB,31FC,31FD,31FE,%
+ 31FF%
+ }\do{\XeTeXcharclass"\bxac@x=\@ne}%
+ \fi
+ }%
+}
+% \end{macrocode}
+% 以上。
+% \begin{macrocode}
+\fi
+% \end{macrocode}
+%
+%^^A----------------
+% \subsection{Lua{\TeX}部分}
+% \begin{macrocode}
+\ifx l\bxac@engine
+% \end{macrocode}
+%
+% ムニャムニャ。
+% \begin{macrocode}
+\unless\ifnum\luatexversion<80 \ifnum\luatexversion<85
+ \chardef\pdftexversion=200
+ \def\pdftexrevision{0}
+ \let\pdftexbanner\luatexbanner
+\fi\fi
+% \end{macrocode}
+%
+% \begin{macro}{\ImposeOldLuaTeXBehavior}
+% \begin{macro}{\RevokeOldLuaTeXBehavior}
+% ムニャムニャ。
+% \begin{macrocode}
+\begingroup\expandafter\expandafter\expandafter\endgroup
+\expandafter\ifx\csname outputmode\endcsname\relax\else
+\def\bxac@ob@list{%
+ \do{\let}\pdfoutput{\outputmode}%
+ \do{\let}\pdfpagewidth{\pagewidth}%
+ \do{\let}\pdfpageheight{\pageheight}%
+ \do{\protected\edef}\pdfhorigin{{\pdfvariable horigin}}%
+ \do{\protected\edef}\pdfvorigin{{\pdfvariable vorigin}}}
+\def\bxac@ob@do#1#2{\begingroup
+ \expandafter\bxac@ob@do@a\csname bxac@\string#2\endcsname{#1}#2}
+\def\bxac@ob@do@a#1#2#3#4{\endgroup
+ \ifbxac@in@old@behavior \let#1#3\relax #2#3#4\relax
+ \else \let#3#1\relax \let#1\@undefined
+ \fi}
+\protected\def\ImposeOldLuaTeXBehavior{%
+ \unless\ifbxac@in@old@behavior
+ \bxac@in@old@behaviortrue
+ \let\do\bxac@ob@do \bxac@ob@list
+ \fi}
+\protected\def\RevokeOldLuaTeXBehavior{%
+ \ifbxac@in@old@behavior
+ \bxac@in@old@behaviorfalse
+ \let\do\bxac@ob@do \bxac@ob@list
+ \fi}
+\fi
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% 漢字および完成形ハングルのカテゴリコードのムニャムニャ。
+% \begin{macrocode}
+ \ifnum\luatexversion>64 \directlua{
+ local function range(cs, ce, cc, ff)
+ if ff or not tex.getcatcode(cs) == cc then
+ local setcc = tex.setcatcode
+ for c = cs, ce do setcc(c, cc) end
+ end
+ end
+ range(0x3400, 0x4DB5, 11, false)
+ range(0x4DB5, 0x4DBF, 11, true)
+ range(0x4E00, 0x9FCC, 11, false)
+ range(0x9FCD, 0x9FFF, 11, true)
+ range(0xAC00, 0xD7A3, 11, false)
+ range(0x20000, 0x2A6D6, 11, false)
+ range(0x2A6D7, 0x2A6FF, 11, true)
+ range(0x2A700, 0x2B734, 11, false)
+ range(0x2B735, 0x2B73F, 11, true)
+ range(0x2B740, 0x2B81D, 11, false)
+ range(0x2B81E, 0x2B81F, 11, true)
+ range(0x2B820, 0x2CEA1, 11, false)
+ range(0x2CEA2, 0x2FFFD, 11, true)
+ }\fi
+% \end{macrocode}
+%
+% 以上。
+% \begin{macrocode}
+\fi
+% \end{macrocode}
+%
+%^^A----------------
+% \subsection{完了}
+% おしまい。
+% \begin{macrocode}
+%</compat>
+% \end{macrocode}
+%
+%^^A========================================================
+% \section{補助パッケージ:bxjscjkcat \ZRX}
+%
+% modernドライバ用の和文カテゴリを適用する。
+%
+%^^A----------------
+% \subsection{準備}
+%
+% \begin{macrocode}
+%<*cjkcat>
+\def\bxjx@pkgname{bxjscjkcat}
+\newcount\bxjx@cnta
+\@onlypreamble\bxjx@tmpdo
+\@onlypreamble\bxjx@tmpdo@a
+\@onlypreamble\bxjx@tmpdo@b
+% \end{macrocode}
+%
+% \begin{macro}{\bxjx@engine}
+% エンジンの種別。
+% \begin{macrocode}
+\let\bxjx@engine=n
+\def\bxjx@tmpdo#1#2{%
+ \edef\bxjx@tmpa{\string#1}%
+ \edef\bxjx@tmpb{\meaning#1}%
+ \ifx\bxjx@tmpa\bxjx@tmpb #2\fi}
+\bxjx@tmpdo\kanjiskip{\let\bxjx@engine=j}
+\bxjx@tmpdo\enablecjktoken{\let\bxjx@engine=u}
+\bxjx@tmpdo\XeTeXversion{\let\bxjx@engine=x}
+\bxjx@tmpdo\pdftexversion{\let\bxjx@engine=p}
+\bxjx@tmpdo\luatexversion{\let\bxjx@engine=l}
+% \end{macrocode}
+% \end{macro}
+%
+% それぞれのエンジンで、前提となる日本語処理パッケージが実際に
+% 読み込まれているかを検査する。
+% \begin{macrocode}
+\def\bxjx@tmpdo#1#2{%
+ \if#1\bxjx@engine
+ \@ifpackageloaded{#2}{}{%else
+ \PackageError\bxjx@pkgname
+ {Package '#2' must be loaded}%
+ {Package loading is aborted.\MessageBreak\@ehc}%
+ \endinput}
+ \fi}
+\bxjx@tmpdo{p}{bxcjkjatype}
+\bxjx@tmpdo{x}{xeCJK}
+\bxjx@tmpdo{l}{luatexja}
+% \end{macrocode}
+%
+% 古い{\LaTeX}の場合、|\TextOrMath| は |fixltx2e| パッケージで
+% 提供される。
+% \begin{macrocode}
+\ifx\TextOrMath\@undefined
+ \RequirePackage{fixltx2e}
+\fi
+% \end{macrocode}
+%
+%^^A----------------
+% \subsection{和文カテゴリコードの設定}
+%
+% up{\LaTeX}の場合、和文カテゴリコードの設定を
+% Lua{\TeX}-jaと(ほぼ)等価なものに変更する。
+%
+% \Note Lua{\TeX}-jaとの相違点:
+% |A830|、|A960|、|1B000|。
+% \begin{macrocode}
+\if u\bxjx@engine
+\@for\bxjx@tmpa:={%
+0080,0100,0180,0250,02B0,0300,0500,0530,0590,0600,%
+0700,0750,0780,07C0,0800,0840,0860,08A0,0900,0980,%
+0A00,0A80,0B00,0B80,0C00,0C80,0D00,0D80,0E00,0E80,%
+0F00,1000,10A0,1200,1380,13A0,1400,1680,16A0,1700,%
+1720,1740,1760,1780,1800,18B0,1900,1950,1980,19E0,%
+1A00,1A20,1AB0,1B00,1B80,1BC0,1C00,1C50,1C80,1CC0,%
+1CD0,1D00,1D80,1DC0,1E00,1F00,2440,27C0,27F0,2800,%
+2A00,2C00,2C60,2C80,2D00,2D30,2D80,2DE0,2E00,4DC0,%
+A4D0,A500,A640,A6A0,A700,A720,A800,A830,A840,A880,%
+A8E0,A900,A930,A980,A9E0,AA00,AA60,AA80,AAE0,AB00,%
+AB30,AB70,ABC0,D800,DB80,DC00,E000,FB00,FB50,FE00,%
+FE70,FFF0,%
+10000,10080,10100,10140,10190,101D0,10280,102A0,%
+102E0,10300,10330,10350,10380,103A0,10400,10450,%
+10480,104B0,10500,10530,10600,10800,10840,10860,%
+10880,108E0,10900,10920,10980,109A0,10A00,10A60,%
+10A80,10AC0,10B00,10B40,10B60,10B80,10C00,10C80,%
+10E60,11000,11080,110D0,11100,11150,11180,111E0,%
+11200,11280,112B0,11300,11400,11480,11580,11600,%
+11660,11680,11700,118A0,11A00,11A50,11AC0,11C00,%
+11C70,11D00,12000,12400,12480,13000,14400,16800,%
+16A40,16AD0,16B00,16F00,1BC00,1BCA0,1D000,1D100,%
+1D200,1D300,1D360,1D400,1D800,1E000,1E800,1E900,%
+1EE00,1F000,1F030,1F0A0,1F300,1F600,1F650,1F680,%
+1F700,1F780,1F800,1F900,E0000,E0100,F0000,100000,%
+00C0%
+}\do{%
+\@tempcnta="\bxjx@tmpa\relax
+\@tempcntb\@tempcnta \advance\@tempcntb\m@ne
+\chardef\bxjx@tmpb\kcatcode\@tempcntb
+\kcatcode\@tempcnta=15 \kcatcode\@tempcntb\bxjx@tmpb}
+\fi
+% \end{macrocode}
+%
+%^^A----------------
+% \subsection{ギリシャ・キリル文字の扱い}
+%
+% 「特定CJK曖昧文字」について、和文・欧文扱いを制御できるようにする。
+% ここで\textbf{「特定CJK曖昧文字」}とは以下に該当する文字の集合を指す:
+% \begin{itemize}
+% \item UnicodeとJIS X~0213に共通して含まれるギリシャ文字・キリル文字。
+% \item Latin-1の上位部分とJIS X~0208に共通して含まれる文字
+% (Lua{\TeX}-jaの定める“範囲8”)。
+% \end{itemize}
+%
+% \begin{macro}{\bxjx@grkcyr@list}
+% 「特定CJK曖昧文字」に関する情報をもつ\,|\do|-リスト。
+% 各項目の形式は以下の通り:\\
+% |\do{|\Meta{Unicode符号値}|}{|\Meta{対象fontenc}|}{|^^A
+% \Meta{テキストLICR}|}{|\Meta{数式LICR}|}|
+% \Note 数式で使わない文字は \Meta{数式LICR} を空にする。
+% \begin{macrocode}
+\@onlypreamble\bxjx@grkcyr@list
+\def\bxjx@grkcyr@list{%
+\do{0391}{LGR}{\textAlpha}{A}% % GR. C. L. ALPHA
+\do{0392}{LGR}{\textBeta}{B}% % GR. C. L. BETA
+\do{0393}{LGR}{\textGamma}{\Gamma}% % GR. C. L. GAMMA
+\do{0394}{LGR}{\textDelta}{\Delta}% % GR. C. L. DELTA
+\do{0395}{LGR}{\textEpsilon}{E}% % GR. C. L. EPSILON
+\do{0396}{LGR}{\textZeta}{Z}% % GR. C. L. ZETA
+\do{0397}{LGR}{\textEta}{H}% % GR. C. L. ETA
+\do{0398}{LGR}{\textTheta}{\Theta}% % GR. C. L. THETA
+\do{0399}{LGR}{\textIota}{I}% % GR. C. L. IOTA
+\do{039A}{LGR}{\textKappa}{K}% % GR. C. L. KAPPA
+\do{039B}{LGR}{\textLambda}{\Lambda}% % GR. C. L. LAMDA
+\do{039C}{LGR}{\textMu}{M}% % GR. C. L. MU
+\do{039D}{LGR}{\textNu}{N}% % GR. C. L. NU
+\do{039E}{LGR}{\textXi}{\Xi}% % GR. C. L. XI
+\do{039F}{LGR}{\textOmicron}{O}% % GR. C. L. OMICRON
+\do{03A0}{LGR}{\textPi}{\Pi}% % GR. C. L. PI
+\do{03A1}{LGR}{\textRho}{P}% % GR. C. L. RHO
+\do{03A3}{LGR}{\textSigma}{\Sigma}% % GR. C. L. SIGMA
+\do{03A4}{LGR}{\textTau}{T}% % GR. C. L. TAU
+\do{03A5}{LGR}{\textUpsilon}{\Upsilon}% % GR. C. L. UPSILON
+\do{03A6}{LGR}{\textPhi}{\Phi}% % GR. C. L. PHI
+\do{03A7}{LGR}{\textChi}{X}% % GR. C. L. CHI
+\do{03A8}{LGR}{\textPsi}{\Psi}% % GR. C. L. PSI
+\do{03A9}{LGR}{\textOmega}{\Omega}% % GR. C. L. OMEGA
+\do{03B1}{LGR}{\textalpha}{\alpha}% % GR. S. L. ALPHA
+\do{03B2}{LGR}{\textbeta}{\beta}% % GR. S. L. BETA
+\do{03B3}{LGR}{\textgamma}{\gamma}% % GR. S. L. GAMMA
+\do{03B4}{LGR}{\textdelta}{\delta}% % GR. S. L. DELTA
+\do{03B5}{LGR}{\textepsilon}{\epsilon}% % GR. S. L. EPSILON
+\do{03B6}{LGR}{\textzeta}{\zeta}% % GR. S. L. ZETA
+\do{03B7}{LGR}{\texteta}{\eta}% % GR. S. L. ETA
+\do{03B8}{LGR}{\texttheta}{\theta}% % GR. S. L. THETA
+\do{03B9}{LGR}{\textiota}{\iota}% % GR. S. L. IOTA
+\do{03BA}{LGR}{\textkappa}{\kappa}% % GR. S. L. KAPPA
+\do{03BB}{LGR}{\textlambda}{\lambda}% % GR. S. L. LAMDA
+\do{03BC}{LGR}{\textmu}{\mu}% % GR. S. L. MU
+\do{03BD}{LGR}{\textnu}{\nu}% % GR. S. L. NU
+\do{03BE}{LGR}{\textxi}{\xi}% % GR. S. L. XI
+\do{03BF}{LGR}{\textomicron}{o}% % GR. S. L. OMICRON
+\do{03C0}{LGR}{\textpi}{\pi}% % GR. S. L. PI
+\do{03C1}{LGR}{\textrho}{\rho}% % GR. S. L. RHO
+\do{03C2}{LGR}{\textvarsigma}{\varsigma}% % GR. S. L. FINAL SIGMA
+\do{03C3}{LGR}{\textsigma}{\sigma}% % GR. S. L. SIGMA
+\do{03C4}{LGR}{\texttau}{\tau}% % GR. S. L. TAU
+\do{03C5}{LGR}{\textupsilon}{\upsilon}% % GR. S. L. UPSILON
+\do{03C6}{LGR}{\textphi}{\phi}% % GR. S. L. PHI
+\do{03C7}{LGR}{\textchi}{\chi}% % GR. S. L. CHI
+\do{03C8}{LGR}{\textpsi}{\psi}% % GR. S. L. PSI
+\do{03C9}{LGR}{\textomega}{\omega}% % GR. S. L. OMEGA
+\do{0401}{T2A}{\CYRYO}{}% % CY. C. L. IO
+\do{0410}{T2A}{\CYRA}{}% % CY. C. L. A
+\do{0411}{T2A}{\CYRB}{}% % CY. C. L. BE
+\do{0412}{T2A}{\CYRV}{}% % CY. C. L. VE
+\do{0413}{T2A}{\CYRG}{}% % CY. C. L. GHE
+\do{0414}{T2A}{\CYRD}{}% % CY. C. L. DE
+\do{0415}{T2A}{\CYRE}{}% % CY. C. L. IE
+\do{0416}{T2A}{\CYRZH}{}% % CY. C. L. ZHE
+\do{0417}{T2A}{\CYRZ}{}% % CY. C. L. ZE
+\do{0418}{T2A}{\CYRI}{}% % CY. C. L. I
+\do{0419}{T2A}{\CYRISHRT}{}% % CY. C. L. SHORT I
+\do{041A}{T2A}{\CYRK}{}% % CY. C. L. KA
+\do{041B}{T2A}{\CYRL}{}% % CY. C. L. EL
+\do{041C}{T2A}{\CYRM}{}% % CY. C. L. EM
+\do{041D}{T2A}{\CYRN}{}% % CY. C. L. EN
+\do{041E}{T2A}{\CYRO}{}% % CY. C. L. O
+\do{041F}{T2A}{\CYRP}{}% % CY. C. L. PE
+\do{0420}{T2A}{\CYRR}{}% % CY. C. L. ER
+\do{0421}{T2A}{\CYRS}{}% % CY. C. L. ES
+\do{0422}{T2A}{\CYRT}{}% % CY. C. L. TE
+\do{0423}{T2A}{\CYRU}{}% % CY. C. L. U
+\do{0424}{T2A}{\CYRF}{}% % CY. C. L. EF
+\do{0425}{T2A}{\CYRH}{}% % CY. C. L. HA
+\do{0426}{T2A}{\CYRC}{}% % CY. C. L. TSE
+\do{0427}{T2A}{\CYRCH}{}% % CY. C. L. CHE
+\do{0428}{T2A}{\CYRSH}{}% % CY. C. L. SHA
+\do{0429}{T2A}{\CYRSHCH}{}% % CY. C. L. SHCHA
+\do{042A}{T2A}{\CYRHRDSN}{}% % CY. C. L. HARD SIGN
+\do{042B}{T2A}{\CYRERY}{}% % CY. C. L. YERU
+\do{042C}{T2A}{\CYRSFTSN}{}% % CY. C. L. SOFT SIGN
+\do{042D}{T2A}{\CYREREV}{}% % CY. C. L. E
+\do{042E}{T2A}{\CYRYU}{}% % CY. C. L. YU
+\do{042F}{T2A}{\CYRYA}{}% % CY. C. L. YA
+\do{0430}{T2A}{\cyra}{}% % CY. S. L. A
+\do{0431}{T2A}{\cyrb}{}% % CY. S. L. BE
+\do{0432}{T2A}{\cyrv}{}% % CY. S. L. VE
+\do{0433}{T2A}{\cyrg}{}% % CY. S. L. GHE
+\do{0434}{T2A}{\cyrd}{}% % CY. S. L. DE
+\do{0435}{T2A}{\cyre}{}% % CY. S. L. IE
+\do{0436}{T2A}{\cyrzh}{}% % CY. S. L. ZHE
+\do{0437}{T2A}{\cyrz}{}% % CY. S. L. ZE
+\do{0438}{T2A}{\cyri}{}% % CY. S. L. I
+\do{0439}{T2A}{\cyrishrt}{}% % CY. S. L. SHORT I
+\do{043A}{T2A}{\cyrk}{}% % CY. S. L. KA
+\do{043B}{T2A}{\cyrl}{}% % CY. S. L. EL
+\do{043C}{T2A}{\cyrm}{}% % CY. S. L. EM
+\do{043D}{T2A}{\cyrn}{}% % CY. S. L. EN
+\do{043E}{T2A}{\cyro}{}% % CY. S. L. O
+\do{043F}{T2A}{\cyrp}{}% % CY. S. L. PE
+\do{0440}{T2A}{\cyrr}{}% % CY. S. L. ER
+\do{0441}{T2A}{\cyrs}{}% % CY. S. L. ES
+\do{0442}{T2A}{\cyrt}{}% % CY. S. L. TE
+\do{0443}{T2A}{\cyru}{}% % CY. S. L. U
+\do{0444}{T2A}{\cyrf}{}% % CY. S. L. EF
+\do{0445}{T2A}{\cyrh}{}% % CY. S. L. HA
+\do{0446}{T2A}{\cyrc}{}% % CY. S. L. TSE
+\do{0447}{T2A}{\cyrch}{}% % CY. S. L. CHE
+\do{0448}{T2A}{\cyrsh}{}% % CY. S. L. SHA
+\do{0449}{T2A}{\cyrshch}{}% % CY. S. L. SHCHA
+\do{044A}{T2A}{\cyrhrdsn}{}% % CY. S. L. HARD SIGN
+\do{044B}{T2A}{\cyrery}{}% % CY. S. L. YERU
+\do{044C}{T2A}{\cyrsftsn}{}% % CY. S. L. SOFT SIGN
+\do{044D}{T2A}{\cyrerev}{}% % CY. S. L. E
+\do{044E}{T2A}{\cyryu}{}% % CY. S. L. YU
+\do{044F}{T2A}{\cyrya}{}% % CY. S. L. YA
+\do{0451}{T2A}{\cyryo}{}% % CY. S. L. IO
+\do{00A7}{TS1}{\textsection}{\mathsection}% SECTION SYMBOL
+\do{00A8}{TS1}{\textasciidieresis}{}% % DIAERESIS
+\do{00B0}{TS1}{\textdegree}{\mathdegree}% % DEGREE SIGN
+\do{00B1}{TS1}{\textpm}{\pm}% % PLUS-MINUS SIGN
+\do{00B4}{TS1}{\textasciiacute}{}% % ACUTE ACCENT
+\do{00B6}{TS1}{\textparagraph}{\mathparagraph}% PILCROW SIGN
+\do{00D7}{TS1}{\texttimes}{\times}% % MULTIPLICATION SIGN
+\do{00F7}{TS1}{\textdiv}{\div}% % DIVISION SIGN
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\mathdegree}
+% 面倒なので補っておく。
+% \begin{macrocode}
+\providecommand*{\mathdegree}{{}^{\circ}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\ifbxjx@gcc@cjk}
+% 〔スイッチ〕
+% 「特定CJK曖昧文字」を和文扱いにするか。
+% \begin{macrocode}
+\newif\ifbxjx@gcc@cjk
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\greekasCJK}
+% 〔公開命令〕
+% 「特定CJK曖昧文字」を和文扱いにする。
+% \begin{macrocode}
+\newcommand*\greekasCJK{%
+ \bxjx@gcc@cjktrue}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\nogreekasCJK}
+% 〔公開命令〕
+% 「特定CJK曖昧文字」を欧文扱いにする。
+% \begin{macrocode}
+\newcommand*\nogreekasCJK{%
+ \bxjx@gcc@cjkfalse}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\bxjx@fake@grk}
+% |\bxjx@fake@grk{|\Meta{出力文字}|}{|\Meta{基準文字}|}|\Means
+% ラテン文字で代用される数式ギリシャ文字の出力を行う。
+% \Meta{基準文字}(mathchardefの制御綴)の数式クラスと数式ファミリを
+% 引き継いで、\Meta{出力文字}(ASCII文字トークン)の文字コードの
+% 数式文字を出力する。
+% 例えば、|\Pi| の意味が |\mathchar"7005| である場合、
+% |\bxjx@fake@grk{B}{\Pi}| は |\mathchar"7042| を実行する。
+% \Note フォントパッケージ使用時の再定義を考慮して、\Meta{基準文字}が
+% mathchardefであるかを検査し、そうでない場合はフォールバックとして
+% 単に\Meta{出力文字}を実行する。
+% \begin{macrocode}
+\def\bxjx@tmpdo#1\relax{%
+ \def\bxjx@fake@grk##1##2{%
+ \expandafter\bxjx@fake@grk@a\meaning##2#1\@nil{##1}{##2}}%
+ \def\bxjx@fake@grk@a##1#1##2\@nil##3##4{%
+ \ifx\\##1\\%
+ \bxjx@cnta##4\divide\bxjx@cnta\@cclvi
+ \multiply\bxjx@cnta\@cclvi \advance\bxjx@cnta`##3\relax
+ \mathchar\bxjx@cnta
+ \else ##3\fi}
+}\expandafter\bxjx@tmpdo\string\mathchar\relax
+% \end{macrocode}
+% \end{macro}
+%
+% \paragraph{pdf{\TeX}・{\upTeX}の場合}
+% \begin{macrocode}
+\ifnum0\if p\bxjx@engine1\fi\if u\bxjx@engine1\fi>0
+% \end{macrocode}
+% \begin{itemize}
+% \item |\|[|bxjx@KC/|\Meta{符号値}]\Means
+% その文字が「特定曖昧CJK文字」に該当する場合に定義済になる。
+% \end{itemize}
+%
+% まず |inputenc| を読み込んで入力エンコーディングを |utf8|
+% に変更する。
+% \Note 「既定UTF-8化」後の{\LaTeX}においても、必ず
+% 「|inputenc| が明示的に読み込まれた」状態になる。
+% \begin{macrocode}
+\@ifpackageloaded{inputenc}{}{%else
+ \RequirePackage[utf8]{inputenc}}
+\def\bxjx@tmpa{utf8}
+\ifx\bxjx@tmpa\inputencdoingname
+ \PackageWarningNoLine\bxjx@pkgname
+ {Input encoding changed to utf8}%
+ \inputencoding{utf8}%
+\fi
+% \end{macrocode}
+%
+% {\upTeX}の場合に、「特定曖昧CJK文字」を含む
+% ブロックの和文カテゴリコードを変更する。
+% \begin{macrocode}
+\if u\bxjx@engine
+\kcatcode"0370=15
+\kcatcode"0400=15
+\kcatcode"0500=15
+\fi
+% \end{macrocode}
+% 各文字について |\DeclareUnicodeCharacter| を実行する。
+% \begin{macrocode}
+\def\bxjx@tmpdo#1{%
+ \@tempcnta="#1\relax
+ \expandafter\bxjx@tmpdo@a\csname bxjx@KC/\the\@tempcnta\endcsname{#1}}
+\def\bxjx@tmpdo@a#1#2#3#4#5{%
+% \end{macrocode}
+% 引数\,=\,|\|[|bxjx@KC/|\Meta{符号値}]|{|\Meta{符号値}|}{|^^A
+% \Meta{fontenc}|}{|\Meta{LICR}|}{|\Meta{数式LICR}|}|
+%
+% “数式中の動作”を決定する。
+% \Meta{数式LICR}が空(数式非対応)なら警告を出す。
+% \begin{macrocode}
+ \ifx\\#5\\%
+ \def\bxjx@tmpa{\@inmathwarn#4}%
+% \end{macrocode}
+% \Meta{数式LICR}が英字である場合は |\bxjx@fake@grk| で出力する。
+% 大文字なら |\Pi|、小文字なら |\pi| を基準文字にする。
+% \begin{macrocode}
+ \else\ifcat A\noexpand#5%
+ \edef\bxjx@tmpa{\noexpand\bxjx@fake@grk{#5}%
+ {\ifnum\uccode`#5=`#5\noexpand\Pi\else\noexpand\pi\fi}}%
+% \end{macrocode}
+% それ以外は\Meta{数式LICR}をそのまま実行する。
+% \begin{macrocode}
+ \else \def\bxjx@tmpa{#5}%
+ \fi\fi
+ \def\bxjx@tmpb{\bxjx@tmpdo@b{#1}{#2}{#3}{#4}}%
+ \expandafter\bxjx@tmpb\expandafter{\bxjx@tmpa}}
+% \end{macrocode}
+% 以降はエンジン種別で分岐する。
+% {\upTeX}の場合。
+% \begin{macrocode}
+\if u\bxjx@engine
+\def\bxjx@tmpdo@b#1#2#3#4#5{%
+% \end{macrocode}
+% 引数\,=\,|\|[|bxjx@KC/|\Meta{符号値}]|{|\Meta{符号値}|}{|^^A
+% \Meta{fontenc}|}{|\Meta{LICR}|}{|\Meta{数式中の動作}|}|
+%
+% 当該のUnicode文字の動作は「テキストでは\Meta{LICR}、数式では
+% \Meta{数式中の動作}」となる。
+% LICRは現在エンコーディングで有効な定義がある場合はそれが実行
+% されるはずである。
+% (つまり、現在がLGRである場合はギリシャ文字は常に欧文扱いになる。)
+% それ以外の場合はLICRを |\bxjx@ja@or@not| に帰着させる。
+% この際に、和文用の定義として当該のkchardefを使用し、その制御綴と
+% して |\|[|bxjx@KC/...|] を流用している。
+% \begin{macrocode}
+ \kchardef#1=\@tempcnta
+ \DeclareTextCommandDefault{#4}{\bxjx@ja@or@not{#1}{#3}{#4}}%
+ \DeclareUnicodeCharacter{#2}{\TextOrMath{#4}{#5}}}
+% \end{macrocode}
+% {pdf\TeX}の場合も処理はほとんど同じ。
+% ただし、和文用の定義として |\UTF{|\Meta{符号値}|}| を使う
+% (|\UTF| は |bxcjkjatype| の命令)。
+% |\|[|bxjx@KC/...|] は使わないが定義済にする必要がある。
+% \begin{macrocode}
+\else\if p\bxjx@engine
+\def\bxjx@tmpdo@b#1#2#3#4#5{%
+ \mathchardef#1=\@tempcnta
+ \DeclareTextCommandDefault{#4}{\bxjx@ja@or@not{\UTF{#2}}{#3}{#4}}%
+ \DeclareUnicodeCharacter{#2}{\TextOrMath{#4}{#5}}}
+\fi\fi
+% \end{macrocode}
+% 以上の処理を「特定CJK曖昧文字」の各々に適用する。
+% \begin{macrocode}
+\let\do\bxjx@tmpdo \bxjx@grkcyr@list
+% \end{macrocode}
+%
+% \begin{macro}{\bxjx@DeclareUnicodeCharacter}
+% |\bxjx@DeclareUnicodeCharacter| を改変して、
+% 「特定CJK曖昧文字」の場合に再定義を抑止したもの。
+% \begin{macrocode}
+\@onlypreamble\bxjx@org@DeclareUnicodeCharacter
+\let\bxjx@org@DeclareUnicodeCharacter\DeclareUnicodeCharacter
+\@onlypreamble\bxjx@DeclareUnicodeCharacter
+\def\bxjx@DeclareUnicodeCharacter#1#2{%
+ \count@="#1\relax
+ \expandafter\ifx\csname bxjx@KC/\the\count@\endcsname\relax
+ \bxjx@org@DeclareUnicodeCharacter{#1}{#2}%
+ \else
+ \wlog{ \space\space skipped defining Unicode char U+#1}%
+ \fi}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\bxjx@ja@or@not}
+% |\bxjx@ja@or@not{|\Meta{和文用定義}|}{|\Meta{対象fontenc}|}{|^^A
+% \Meta{LICR}|}|\Means
+% |\|[|no|]|greekasCJK| の状態に応じて和文または欧文で文字を出力する。
+% \begin{macrocode}
+\def\bxjx@ja@or@not#1#2#3{%
+% \end{macrocode}
+% |\greekasCJK| の場合は、無条件に\Meta{和文用定義}を実行する。
+% \begin{macrocode}
+ \ifbxjx@gcc@cjk #1%
+% \end{macrocode}
+% |\nogreekasCJK| の場合は、対象のエンコーディングに変更してLICRを
+% 実行するが、そのエンコーディングが未定義の場合は
+% (フォールバックとして)和文用定義を使う。
+% \begin{macrocode}
+ \else\expandafter\ifx\csname T@#2\endcsname\relax #1%
+ \else \UseTextSymbol{#2}{#3}%
+ \fi\fi}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\DeclareFontEncoding@}
+% |\DeclareFontEncoding@| にパッチを当てて、
+% |\DeclareFontEncoding| の実行中だけ
+% 改変後の |\DeclareUnicodeCharacter| が使われるようにする。
+% \begin{macrocode}
+\begingroup
+\toks@\expandafter{\DeclareFontEncoding@{#1}{#2}{#3}}
+\xdef\next{\def\noexpand\DeclareFontEncoding@##1##2##3{%
+ \noexpand\bxjx@swap@DUC@cmd
+ \the\toks@
+ \noexpand\bxjx@swap@DUC@cmd}}
+\endgroup\next
+\def\bxjx@swap@DUC@cmd{%
+ \let\bxjx@tmpa\DeclareUnicodeCharacter
+ \let\DeclareUnicodeCharacter\bxjx@DeclareUnicodeCharacter
+ \let\bxjx@DeclareUnicodeCharacter\bxjx@tmpa
+ \let\bxjx@tmpa\relax}
+% \end{macrocode}
+% \end{macro}
+%
+% 以上。
+%
+% \paragraph{{\XeTeX}・Lua{\TeX}の場合}
+% \begin{macrocode}
+\else\ifnum0\if x\bxjx@engine1\fi\if l\bxjx@engine1\fi>0
+% \end{macrocode}
+%
+% 各文字について、数式中の動作を定義する。
+% \begin{macrocode}
+\def\bxjx@tmpdo#1{%
+ \bxjx@cnta="#1\relax
+ \begingroup
+ \lccode`~=\bxjx@cnta
+ \lowercase{\endgroup
+ \bxjx@tmpdo@a{~}}{#1}}
+\def\bxjx@tmpdo@a#1#2#3#4#5{%
+% \end{macrocode}
+% \Meta{数式LICR}が空なら何もしない。
+% 空でない場合、{up\LaTeX}の場合と同じ方法で“数式中の動作”を決定し、
+% 当該の文字をmath activeにしてその動作を設定する。
+% \begin{macrocode}
+ \ifx\\#5\\\let\bxjx@tmpa\relax
+ \else\ifcat A\noexpand#5%
+ \edef\bxjx@tmpa{\noexpand\bxjx@fake@grk{#5}%
+ {\ifnum\uccode`#5=`#5\noexpand\Pi\else\noexpand\pi\fi}}%
+ \else \def\bxjx@tmpa{#5}%
+ \fi\fi
+ \ifx\bxjx@tmpa\relax\else
+ \mathcode\bxjx@cnta"8000 \let#1\bxjx@tmpa
+ \fi}
+% \end{macrocode}
+% 「Unicodeな数式」の設定が行われているかを(簡易的に)検査して、
+% そうでない場合にのみ、以上の処理を「特定CJK曖昧文字」の各々に適用する。
+% \begin{macrocode}
+\mathchardef\bxjx@tmpa="119
+\ifx\bxjx@tmpa\pi \let\do\bxjx@tmpdo \bxjx@grkcyr@list \fi
+% \end{macrocode}
+%
+% 次に、テキストにおいて「特定CJK曖昧文字」の扱いが |\|[|no|]|greekasCJK|
+% で切り替わるようにする。
+%
+% Lua{\TeX}の場合は、Lua{\TeX}-jaの |jacharrange| の設定を変更する。
+% \Note “範囲2”がギリシャ・キリル文字、“範囲8”がLatin-1の記号。
+% \begin{macrocode}
+\if l\bxjx@engine
+ \protected\def\greekasCJK{%
+ \bxjx@gcc@cjktrue
+ \ltjsetparameter{jacharrange={+2, +8}}}
+ \protected\def\nogreekasCJK{%
+ \bxjx@gcc@cjkfalse
+ \ltjsetparameter{jacharrange={-2, -8}}}
+\fi
+% \end{macrocode}
+%
+% {\XeTeX}の場合、|xeCJK| は{\XeTeX}の文字クラス定義を参照して
+% いるので、対象文字の文字クラスを変更する。
+% \begin{macrocode}
+\if x\bxjx@engine
+ \let\bxjx@gcc@cjk@list\@empty
+ \def\do#1#2#3#4{%
+ \edef\bxjx@gcc@cjk@list{\bxjx@gcc@cjk@list
+ \noexpand\XeTeXcharclass"#1\bxjx@cnta}}
+ \bxjx@grkcyr@list
+ \protected\def\greekasCJK{%
+ \bxjx@gcc@cjktrue
+ \bxjx@cnta=\@ne \bxjx@gcc@cjk@list}
+ \protected\def\nogreekasCJK{%
+ \bxjx@gcc@cjkfalse
+ \bxjx@cnta=\z@ \bxjx@gcc@cjk@list}
+\fi
+% \end{macrocode}
+%
+% 以上。
+% \begin{macrocode}
+\fi\fi
+% \end{macrocode}
+%
+%^^A----------------
+% \subsection{初期設定}
+% 「特定CJK曖昧文字」を欧文扱いにする。
+% \begin{macrocode}
+\nogreekasCJK
+% \end{macrocode}
+%
+%^^A----------------
+% \subsection{完了}
+% おしまい。
+% \begin{macrocode}
+%</cjkcat>
+% \end{macrocode}
+%
+%^^A========================================================
+% \section{補助パッケージ:bxjspandoc \ZRX}
+%
+% Pandocの{\LaTeX}用標準テンプレートをより幸せに使うための設定。
+% BXJSクラスのpandocドライバのコードの中の、“汎用的”に使える
+% 部分を切り出したもの。
+% つまり現在のpandocドライバはこのパッケージを読みこむ。
+% \Note テンプレートの{\TeX}コードより前に読み込む必要があるため、
+% 専ら文書クラス内での読込に限られる。
+%
+%^^A----------------
+% \subsection{準備}
+%
+% \begin{macrocode}
+%<*ancpandoc>
+%% このファイルは日本語文字を含みます.
+\def\bxjsp@pkgname{bxjscjkcat}
+% \end{macrocode}
+%
+% \begin{macro}{\bxjsp@engine}
+% エンジンの種別。
+% \begin{macrocode}
+\let\bxjsp@engine=n
+\@onlypreamble\bxjsp@do
+\def\bxjsp@do#1#2{%
+ \edef\bxjsp@tmpa{\string#1}%
+ \edef\bxjsp@tmpb{\meaning#1}%
+ \ifx\bxjsp@tmpa\bxjsp@tmpb #2\fi}
+\bxjsp@do\kanjiskip{\let\bxjsp@engine=j}
+\bxjsp@do\XeTeXversion{\let\bxjsp@engine=x}
+\bxjsp@do\pdftexversion{\let\bxjsp@engine=p}
+\bxjsp@do\luatexversion{\let\bxjsp@engine=l}
+% \end{macrocode}
+% \end{macro}
+%
+%^^A----------------
+%\subsection{パッケージオプション}
+%
+% |english| オプションが指定されている場合、|\ldots| の調整を抑止する。
+% \Note つまり、「グローバルの |english| オプション」が指定されている
+% 場合も抑止の対象になる。
+% BXJSクラスの英語モードを想定しているが、それ以外の場合でも、
+% 一般的な{\LaTeX}の習慣として、グローバルの |english| は
+% 「その文書の基底言語が英語である」ことを示す。
+% \begin{macrocode}
+\newif\ifbxjsp@english
+\DeclareOption{english}{\bxjsp@englishtrue}
+% \end{macrocode}
+%
+% オプション定義はおしまい。
+% \begin{macrocode}
+\ProcessOptions*
+% \end{macrocode}
+%
+%^^A----------------
+%\subsection{パッケージ読込の阻止}
+%
+% \begin{macro}{\pandocSkipLoadFile}
+% |\pandocSkipLoadFile{|\Meta{ファイル名}|}|\Means
+% 特定のファイルを(|\@filewithoptions| の処理に関して)
+% 読込済であるとマークする。
+% \begin{macrocode}
+\@onlypreamble\pandocSkipLoadFile
+\newcommand*\pandocSkipLoadFile[1]{%
+ \expandafter\bxjsp@skip@load@file@a\csname ver@#1\endcsname{#1}}
+\def\bxjsp@skip@load@file@a#1#2{%
+ \ifx#1\relax
+ \def#1{2001/01/01}%
+ \PackageInfo\bxjsp@pkgname
+ {File '#2' marked as loaded\@gobble}%
+ \fi}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\pandocSkipLoadPackage}
+% |\pandocSkipLoadPackage{|\Meta{パッケージ名}|}|\Means
+% |\pandocSkipLoadFile| の機能を用いてパッケージの読込を阻止する。
+% \begin{macrocode}
+\@onlypreamble\pandocSkipLoadPackage
+\newcommand*\pandocSkipLoadPackage[1]{%
+ \pandocSkipLoadFile{#1.sty}}
+% \end{macrocode}
+% \end{macro}
+%
+%^^A----------------
+%\subsection{fixltx2eパッケージ}
+% テンプレートでは |fixltx2e| パッケージを読み込むが、
+% 最近(2015年版以降)の{\LaTeX}ではこれで警告が出る。
+% これを抑止する。
+%
+% {\LaTeX}カーネルが新しい場合は |fixltx2e| を
+% 読込済にする。
+% \begin{macrocode}
+\ifx\@IncludeInRelease\@undefined\else
+ \pandocSkipLoadPackage{fixltx2e}
+\fi
+% \end{macrocode}
+%
+%^^A----------------
+%\subsection{cmapパッケージ}
+% エンジンが{(u)\pLaTeX}のときに |cmap| パッケージが
+% 読み込まれるのを阻止する。
+% (実際は警告が出るだけで無害であるが。)
+%
+% \begin{macrocode}
+\if j\bxjsp@engine
+ \pandocSkipLoadPackage{cmap}
+\fi
+% \end{macrocode}
+%
+%^^A----------------
+%\subsection{microtypeパッケージ}
+% 警告が多すぎなので消す。
+%
+% \begin{macrocode}
+\if j\bxjsp@engine \else
+ \PassOptionsToPackage{verbose=silent}{microtype}
+\fi
+% \end{macrocode}
+%
+% エンジンが{(u)\pLaTeX}のときに |microtype| パッケージが
+% 読み込まれるのを阻止し、さらにテンプレートで使われている命令を
+% 通すためにダミーの定義を行う。
+% \Note 昔はstandardドライバでこの処理を行っていたが、
+% 元来はPandoc用の処理なので、1.5版でpandocに移動。
+% \begin{macrocode}
+\if j\bxjsp@engine
+ \pandocSkipLoadPackage{microtype}
+ \newcommand*\UseMicrotypeSet[2][]{}
+\fi
+% \end{macrocode}
+%
+%^^A----------------
+%\subsection{Unicode文字変換対策}
+%
+% Pandocで{\LaTeX}形式に書き出す場合は、元データ中の一部のUnicode文字を
+% 「{\LaTeX}の表記」に置き換える。
+% その中には日本語文書で問題になるものが含まれる。
+% \begin{quote}
+% \mbox{…}→|\ldots{}|\quad
+% \mbox{‘}→|`|\quad
+% \mbox{’}→|'|\quad
+% \mbox{“}→|``|\quad
+% \mbox{”}→|''|\quad
+% \end{quote}
+% 日本語{\LaTeX}では「{\LaTeX}の表記」は欧文扱い、
+% Unicode文字は和文扱いとして使い分ける習慣があるので、
+% このような置換が行われるのは好ましくない。
+%
+% これらの置換のうち、後の4つはPandocの |--no-tex-ligatures| オプションを
+% 指定すれば抑止できるが、「…」の置換を抑止する機能はないようである。
+% そこで、「|\ldots| を『…』に戻す」という処置を行う。
+%
+% \begin{macro}{\pandocLdots}
+% Pandoc用の |\ldots| の実装。
+% 非数式である場合は代わりに |…| を実行する。
+% \Note 以前は「Pandocが必ず |\ldots{}| の形で書き出す」ことを利用して
+% 後続に |{}| があるかで「元が |…| であるか」を判断していた。
+% ところが、Pandoc 2.7版で |{}| を必ずしも付けなくなったため、
+% 1.9f版で非数式の |\ldots| を全て |…| に戻す動作に変更した。
+% \begin{macrocode}
+\DeclareRobustCommand{\pandocLdots}{%
+ \relax\ifmmode \expandafter\bxjsp@org@ldots
+ \else \expandafter\bxjsp@ja@ellipsis
+ \fi}
+\def\bxjsp@ja@ellipsis{…}
+\let\bxjsp@org@ldots\ldots
+% \end{macrocode}
+% \end{macro}
+%
+% |\ldots| の実装を置き換える。
+% \Note B|english| オプション指定時は置き換えない。
+% \begin{macrocode}
+\AtBeginDocument{%
+ \let\bxjsp@org@ldots\ldots
+ \ifbxjsp@english\else \let\ldots\pandocLdots \fi}
+% \end{macrocode}
+%
+% |\ldots| の直後の文字が非英字の場合、Pandocは「|\ldots。|」の
+% ように空白を入れずに並べて出力する。
+% 「Pandocは非英字と見なすが{\XeTeX}・{Lua\TeX}は英字と見なす
+% (または将来その可能性がある)」文字で、特に日本語文書に現れる
+% ものについて、非英字扱いにしておく。
+% \Note Pandocは「Unicode 7.0でGCがLetter」な文字を英字と判定している。
+% \begin{macrocode}
+\chardef\bxjsp@cc@other=12
+\@onlypreamble\bxjsp@makeother@range
+\def\bxjsp@makeother@range#1#2{%
+ \@tempcnta"#1\relax \@tempcntb"#2\relax
+ \loop\ifnum\@tempcnta<\@tempcntb
+ \catcode\@tempcnta\bxjsp@cc@other
+ \advance\@tempcnta\@ne
+ \repeat}
+\ifnum0\if x\bxjsp@engine1\fi\if l\bxjsp@engine1\fi>0
+ \catcode"1F23B=\bxjsp@cc@other
+ \bxjsp@makeother@range{9FCD}{A000}
+ \bxjsp@makeother@range{1B002}{1B170}
+ \bxjsp@makeother@range{2B820}{2EBF0}
+\fi
+% \end{macrocode}
+%
+%^^A----------------
+% \subsection{PandoLaモジュール}
+% インストール済であれば読み込む。
+% \begin{macrocode}
+\IfFileExists{bxpandola.sty}{%
+ \RequirePackage{bxpandola}\relax
+ \PackageInfo\bxjsp@pkgname
+ {PandoLa module is loaded\@gobble}
+}{}
+% \end{macrocode}
+%
+%^^A----------------
+% \subsection{完了}
+% おしまい。
+% \begin{macrocode}
+%</ancpandoc>
+% \end{macrocode}
+%
+% 補助パッケージ実装はここまで。
+% \begin{macrocode}
+%</anc>
+% \end{macrocode}
+%
+% \Finale
+%
+\endinput
diff --git a/language/japanese/BX/bxjscls/bxjscls.ins b/language/japanese/BX/bxjscls/bxjscls.ins
new file mode 100644
index 0000000000..0e533ebe34
--- /dev/null
+++ b/language/japanese/BX/bxjscls/bxjscls.ins
@@ -0,0 +1,16 @@
+%% bxjscls.ins : installer file for bxjscls.dtx
+\def\batchfile{bxjscls.ins}
+\input docstrip.tex
+\keepsilent
+\generateFile{bxjsarticle.cls}{f}{\from{bxjscls.dtx}{cls,article}}
+\generateFile{bxjsreport.cls}{f}{\from{bxjscls.dtx}{cls,report}}
+\generateFile{bxjsbook.cls}{f}{\from{bxjscls.dtx}{cls,book}}
+\generateFile{bxjsslide.cls}{f}{\from{bxjscls.dtx}{cls,slide}}
+\generateFile{bxjsja-minimal.def}{f}{\from{bxjscls.dtx}{drv,minimal}}
+\generateFile{bxjsja-standard.def}{f}{\from{bxjscls.dtx}{drv,standard}}
+\generateFile{bxjsja-modern.def}{f}{\from{bxjscls.dtx}{drv,modern}}
+\generateFile{bxjsja-pandoc.def}{f}{\from{bxjscls.dtx}{drv,pandoc}}
+\generateFile{bxjscompat.sty}{f}{\from{bxjscls.dtx}{anc,compat}}
+\generateFile{bxjscjkcat.sty}{f}{\from{bxjscls.dtx}{anc,cjkcat}}
+\generateFile{bxjspandoc.sty}{f}{\from{bxjscls.dtx}{anc,ancpandoc}}
+%% EOF
diff --git a/language/japanese/BX/bxjscls/bxjscls.pdf b/language/japanese/BX/bxjscls/bxjscls.pdf
new file mode 100644
index 0000000000..bc7df6ed8d
--- /dev/null
+++ b/language/japanese/BX/bxjscls/bxjscls.pdf
Binary files differ
diff --git a/language/japanese/BX/bxwareki/LICENSE b/language/japanese/BX/bxwareki/LICENSE
new file mode 100644
index 0000000000..c4443b644c
--- /dev/null
+++ b/language/japanese/BX/bxwareki/LICENSE
@@ -0,0 +1,21 @@
+The MIT License
+
+Copyright (c) 2018,2019 Takayuki YATO (aka. "ZR")
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/language/japanese/BX/bxwareki/README.md b/language/japanese/BX/bxwareki/README.md
new file mode 100644
index 0000000000..b02a5bc205
--- /dev/null
+++ b/language/japanese/BX/bxwareki/README.md
@@ -0,0 +1,53 @@
+BXwareki Package
+================
+
+LaTeX: Support for Japanese calendar
+
+This package provides commands to convert from the Gregorian calendar
+(2018/8/28) to the Japanese rendering of the Japanese calendar (Heisei
+30 nen 8 gatsu 28 nichi; actually with kanji characters). You can choose
+whether the numbers are written in Western numerals or kanji numerals.
+
+Note that the package only deals with dates in the year 1873 or later,
+where the Japanese calendar is really a Gregorian calendar with the
+different notation of years.
+
+### System requirement
+
+ * TeX format: LaTeX.
+ * TeX engine: pdfTeX, LuaTeX, XeTeX, pTeX, upTeX, ApTeX (pTeX-ng),
+ and NTT-jTeX. (The e-TeX extension is not needed.)
+
+### Installation
+
+ - `*.sty`, `*.def` → $TEXMF/tex/latex/BXwareki
+
+### License
+
+This package is distributed under the MIT License.
+
+
+The bxwareki Package ― main
+----------------------------
+
+See the manual `bxwareki.pdf` for detail.
+
+
+Revision History
+----------------
+
+ * Version 0.6 ‹2019/06/01›
+ - The file `bxwareki2019.def` is no longer required.
+ * Version 0.5 ‹2019/04/01›
+ - Support for the new gengo “令和”.
+ * Version 0.4 ‹2018/10/01›
+ - Add `\warekigengoinitial`.
+ - Add option `download2019`.
+ * Version 0.3 ‹2018/09/24›
+ - The total rewrite.
+ * Version 0.2 ‹2018/04/08›
+ - The first public version.
+
+--------------------
+Takayuki YATO (aka. "ZR")
+https://github.com/zr-tex8r
diff --git a/language/japanese/BX/bxwareki/bxwareki-cd.def b/language/japanese/BX/bxwareki/bxwareki-cd.def
new file mode 100644
index 0000000000..695a4c2460
--- /dev/null
+++ b/language/japanese/BX/bxwareki/bxwareki-cd.def
@@ -0,0 +1,126 @@
+%%
+%% This is file 'bxwareki-cd.def'.
+%%
+%% Copyright (c) 2018,2019 Takayuki YATO (aka. "ZR")
+%% GitHub: https://github.com/zr-tex8r
+%% Twitter: @zr_tex8r
+%%
+%% This package is distributed under the MIT License.
+%%
+
+% Note: This file must be encoded in UTF-8.
+
+%% file declaration
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesFile{bxwareki-cd.def}[2019/06/01 v0.6]
+
+\ifbxwy@epTeXinputencoding@ok
+ \epTeXinputencoding utf8
+\fi
+
+%--------------------------------------- helpers
+
+%% \bxwy@burst-`>...
+\let\bxwy@burst\romannumeral
+
+%% \bxwy@cond\ifXXX...\fi{<true>}{<false>}
+\@gobbletwo\if\if \def\bxwy@cond#1\fi{%
+ #1\expandafter\@firstoftwo \else \expandafter\@secondoftwo \fi}
+
+%% \bxwy@catch@mk...\bxwy@mk
+\def\bxwy@catch@mk#1\bxwy@mk{#1}
+
+%--------------------------------------- kanji numerals
+
+%% \bxwy@Jkansuji{<number>}
+% The kansuji-by-reading with use of ten-composites (廿, 卅).
+% NB. Only valid in range 0..99; otherwise fallback to \bxwy@jkansuji.
+\def\bxwy@Jkansuji#1{%
+ \expandafter\bxwy@Jkansuji@a\number#1\bxwy@mk}
+\def\bxwy@Jkansuji@a#1\bxwy@mk{%
+ \ifnum#1<\bxwy@jk@x
+ \bxwy@jkansuji@a#1\bxwy@mk
+ \else\ifnum#1<\bxwy@jk@c
+ \bxwy@Jkansuji@b#1%
+ \else
+ \bxwy@jkansuji@a#1\bxwy@mk
+ \fi\fi}
+\def\bxwy@Jkansuji@b#1#2{%
+ \ifcase#1\relax \or 十\or 廿\or 卅%
+ \else \csname bxwy@jcd/#1\endcsname 十%
+ \fi
+ \ifnum#2>\z@ \csname bxwy@jcd/#2\endcsname \fi}
+
+%--------------------------------------- custom date format
+
+%% \warekicustomdate{<options>}
+% Renders the date in the form specified by the options.
+% [calendar] def. seireki; w = wareki;
+% [numerals] def. western numerals; k = kansuji; j = kansuji-by-reading;
+% J = kansuji-by-reading, with ten-composites (廿, 卅);
+% [month names] def. by numbers; o = 異名 (old month names);
+% O = Izumo-style 異名 (use 神在月 instead of 神無月);
+\def\warekicustomdate#1{%
+ \bxwy@custom@date@parse@opt{#1}\bxwy@custom@date@a}
+\def\bxwy@custom@date@a#1{%
+ \expandafter\bxwy@custom@date@b\bxwy@date#1}
+\def\bxwy@custom@date@b#1#2#3#4#5#6{%
+ % y,m,d,calendar,numerals,monthname
+ \if \ifx\warekigengo\@empty-\else#4\fi w% wareki
+ \warekigengo
+ \ifnum\c@warekiyear=\@ne 元%
+ \else \bxwy@custom@date@number#5\c@warekiyear
+ \fi
+ \else % seireki
+ \if#5-#1\bxwy@S% western
+ \else \bxwy@kansuji{#1}% kansuji/-j/-J
+ \fi
+ \fi
+ 年%
+ \if#6-\bxwy@custom@date@number#5{#2}月% month by number
+ \else \bxwy@custom@date@month#6{#2}% month name
+ \fi
+ \bxwy@custom@date@number#5{#3}日}
+\def\bxwy@custom@date@number#1#2{%
+ \if#1k\bxwy@kansuji{#2}% kansuji
+ \else\if#1j\bxwy@jkansuji{#2}% kansuji-j
+ \else\if#1J\bxwy@Jkansuji{#2}% kansuji-J
+ \else % western
+ \bxwy@S \expandafter\bxwy@catch@mk\number#2\bxwy@mk \bxwy@S
+ \fi\fi\fi}
+\def\bxwy@custom@date@month#1#2{%
+ \ifnum#2=\z@\else\ifcase#2\relax
+ \or 睦月\or 如月\or 弥生\or 卯月\or 皐月\or 水無月%
+ \or 文月\or 葉月\or 長月%
+ \or \if#1O神在月\else 神無月\fi
+ \or 霜月\or 師走%
+ \fi\fi}
+
+%% \bxwy@custom@date@parse@opt{<options>}\CScont
+\def\bxwy@custom@date@parse@opt#1{%
+ \bxwy@cd@parse@opt@a#1\bxwy@mk---}
+\def\bxwy@cd@parse@opt@a{%
+ \expandafter\bxwy@cd@parse@opt@b\bxwy@burst-`>}
+\def\bxwy@cd@parse@opt@b#1{%
+ \bxwy@cond\ifx#1\bxwy@mk\fi{\bxwy@cd@parse@opt@f}{%
+ \expandafter\bxwy@cd@parse@opt@c\csname bxwy@cdpo@@#1\endcsname}}
+\def\bxwy@cd@parse@opt@c#1{%
+ \bxwy@cond\ifx#1\relax\fi{\bxwy@cd@parse@opt@a}{%
+ \bxwy@cd@parse@opt@d#1}}
+\def\bxwy@cd@parse@opt@d#1#2\bxwy@mk#3#4#5{%
+ \expandafter\bxwy@cd@parse@opt@e\bxwy@burst-`>#1#3#4#5{#2}}
+\def\bxwy@cd@parse@opt@e#1#2#3#4{%
+ \bxwy@cd@parse@opt@a#4\bxwy@mk#1#2#3}
+\def\bxwy@cd@parse@opt@f#1#2#3#4{%
+ #4{#1#2#3}}
+%
+\def\bxwy@cdpo@@w#1#2#3{w#2#3}
+\def\bxwy@cdpo@@k#1#2#3{#1k#3}
+\def\bxwy@cdpo@@j#1#2#3{#1j#3}
+\def\bxwy@cdpo@@J#1#2#3{#1J#3}
+\def\bxwy@cdpo@@o#1#2#3{#1#2o}
+\def\bxwy@cdpo@@O#1#2#3{#1#2O}
+
+%--------------------------------------- all done
+\endinput
+%% EOF
diff --git a/language/japanese/BX/bxwareki/bxwareki.pdf b/language/japanese/BX/bxwareki/bxwareki.pdf
new file mode 100644
index 0000000000..5bfcc6272d
--- /dev/null
+++ b/language/japanese/BX/bxwareki/bxwareki.pdf
Binary files differ
diff --git a/language/japanese/BX/bxwareki/bxwareki.sty b/language/japanese/BX/bxwareki/bxwareki.sty
new file mode 100644
index 0000000000..d3dab98aca
--- /dev/null
+++ b/language/japanese/BX/bxwareki/bxwareki.sty
@@ -0,0 +1,513 @@
+%%
+%% This is file 'bxwareki.sty'.
+%%
+%% Copyright (c) 2018,2019 Takayuki YATO (aka. "ZR")
+%% GitHub: https://github.com/zr-tex8r
+%% Twitter: @zr_tex8r
+%%
+%% This package is distributed under the MIT License.
+%%
+
+% Note: This file is encoded entirely in us-ascii.
+
+%% package declaration
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{bxwareki}[2019/06/01 v0.6]
+
+%% preparation
+\def\bxwy@pkgname{bxwareki}
+\providecommand\bxDebug[1]{}
+
+%--------------------------------------- general
+
+%% unique tokens
+\def\bxwy@end{\noexpand\bxwy@end@}
+\def\bxwy@mt{\noexpand\bxwy@mt@}
+\let\bxwy@mk\indent
+
+%% \bxwy@engine : engine type
+%% \ifbxwy@eTeX@ok : have e-TeX extension?
+%% \ifbxwy@epTeXinputencoding@ok : have \epTeXinputencoding?
+\def\bxwy@next#1#2{%
+ \edef\bxwy@tmpa{\string#1}\edef\bxwy@tmpb{\meaning#1}%
+ \ifx\bxwy@tmpa\bxwy@tmpb #2\fi}
+\chardef\bxwy@engine=0 % 8-bit TeX
+\bxwy@next\kanjiskip {\chardef\bxwy@engine=1 }% pTeX (or upTeX)
+\bxwy@next\jintercharskip{\chardef\bxwy@engine=2 }% NTT-jTeX
+\bxwy@next\Omegaversion {\chardef\bxwy@engine=3 }% Aleph
+\bxwy@next\XeTeXversion {\chardef\bxwy@engine=4 }% XeTeX
+\bxwy@next\luatexversion {\chardef\bxwy@engine=5 }% LuaTeX
+\newif\ifbxwy@eTeX@ok
+\bxwy@next\eTeXversion{\bxwy@eTeX@oktrue}
+\newif\ifbxwy@upTeX@ok
+\bxwy@next\forcecjktoken{\bxwy@upTeX@oktrue}
+\newif\ifbxwy@epTeXinputencoding@ok
+\bxwy@next\epTeXinputencoding{\bxwy@epTeXinputencoding@oktrue}
+
+%% switch 'bxwy@customdate@ok'
+% NB. It is "whether or not UTF-8 files can be safely loaded".
+\newif\ifbxwy@customdate@ok
+\ifcase\bxwy@engine \bxwy@customdate@oktrue % 8-bit
+\or % pTeX
+ \ifbxwy@epTeXinputencoding@ok \bxwy@customdate@oktrue
+ \else\ifbxwy@upTeX@ok \bxwy@customdate@oktrue
+ \fi\fi
+\or % jTeX
+\else \bxwy@customdate@oktrue
+\fi
+
+%% \bxwy@oncex{...}
+% The once-expander, used in \edef.
+%% \bxwy@twicex{...}
+% The twice-expander, used in \edef.
+\ifbxwy@eTeX@ok
+ \def\bxwy@oncex#1{\unexpanded\expandafter{#1}}
+ \def\bxwy@twicex#1{\unexpanded\expandafter\expandafter\expandafter{#1}}
+\else
+ % Here it is assumed that the engine is (u)pTeX or JTeX.
+ \def\bxwy@oncex#1{#1}
+ \def\bxwy@twicex#1{#1}
+\fi
+
+%% \bxwy@newcounter{<name>}
+%% \bxwy@setcounter{<name>}{<value>}
+% Declares a pseudo-counter (if not on e-TeX).
+\@onlypreamble\bxwy@newcounter
+\ifbxwy@eTeX@ok
+ \let\bxwy@newcounter\newcounter
+ \def\bxwy@setcounter#1#2{% assign locally
+ \csname c@#1\endcsname#2\relax}
+\else
+ \def\bxwy@newcounter#1{%
+ \expandafter\@ifdefinable\csname c@#1\endcsname{%
+ \expandafter\mathchardef\csname c@#1\endcsname\z@
+ \expandafter\gdef\csname the#1\expandafter\endcsname\expandafter{%
+ \expandafter\@arabic\csname c@#1\endcsname}}}
+ \def\bxwy@setcounter#1#2{% assign locally
+ \expandafter\mathchardef\csname c@#1\endcsname#2\relax}
+\fi
+
+%--------------------------------------- options
+
+%% 'download'
+\DeclareOption{download2019}{}% now no-op
+% dispatch
+\ProcessOptions\relax
+
+%--------------------------------------- Japanese string maker
+
+% The "combo-code" represents a single Japanese character and has
+% the form such like:
+% E698AD:662D:3E3C:f3F
+% where
+% - E698AD is hex dump of UTF-8 bytes;
+% - 662D is hex of Unicode point;
+% - 3E3C is hex dump of JIS-encoding bytes;
+% - f3F is something for jTeX.
+
+%% \bxwy@S : inter-ascii-kanji skip
+\let\bxwy@S\@empty
+%% \bxwy@normal@S : the normal definition of \bxwy@S
+\let\bxwy@normal@S\relax
+%% \bxwy@C : Japanese character printer for JTeX
+\let\bxwy@C\relax
+
+%% \bxwy@freeze@fragile : make fragile cs unexpandable
+\let\bxwy@freeze@fragile\relax
+%% \bxwy@restore@fragile : revoke \bxwy@freeze@fragile
+\let\bxwy@restore@fragile\relax
+
+%% \bxwy@add@jchar\CS{<combo-code>}
+% Adds a character with given combo-code to the macro \CS.
+\@onlypreamble\bxwy@add@jchar
+\def\bxwy@add@jchar#1#2{%
+ \begingroup
+ \bxwy@freeze@fragile
+ \def\bxwy@next##1{\xdef#1{\bxwy@oncex#1\bxwy@oncex{##1}}}%
+ \edef\bxwy@tmpa{#2}%
+ \expandafter\bxwy@add@jchar@dec\bxwy@tmpa::::\bxwy@end
+ \endgroup}
+\@onlypreamble\bxwy@add@jchar@dec
+\@onlypreamble\bxwy@add@jchar@dec@a
+\@onlypreamble\bxwy@add@jchar@dec@b
+% engine-dependent parts
+\ifcase\bxwy@engine %8-bit
+ \def\bxwy@add@jchar@dec#1:#2:#3:#4:#5\bxwy@end{%
+ \bxwy@add@jchar@dec@a#1000000\bxwy@end}
+ \def\bxwy@add@jchar@dec@a#1#2#3#4#5#6#7\bxwy@end{%
+ \let\do\bxwy@add@jchar@dec@b
+ \do{#1#2}\do{#3#4}\do{#5#6}}
+ \def\bxwy@add@jchar@dec@b#1{%
+ \lccode`\~="#1\relax\lowercase{\bxwy@next{\noexpand~}}}
+ \def\bxwy@S{~}% \bxwy@S expands to ~, and ~ is protected.
+ \let\bxwy@org@tie\relax
+ \def\bxwy@freeze@fragile{\let\bxwy@org@tie=~\let~=\relax}
+ \def\bxwy@restore@fragile{\let~=\bxwy@org@tie}
+\or %pTeX
+ \def\bxwy@add@jchar@dec#1:#2:#3:#4:#5\bxwy@end{%
+ \kansujichar\@ne=\jis"#3\relax \bxwy@next{\kansuji\@ne}}
+\or %jTeX
+ \def\bxwy@add@jchar@dec#1:#2:#3:#4:#5\bxwy@end{%
+ \bxwy@next{\bxwy@C#4}}
+ \def\bxwy@C#1#2#3{%
+ \mbox{\csname j#1\endcsname\char"#2#3}}
+ \def\bxwy@@S{% standard inter-ascii-kanji skip
+ \hskip \ifdim\jasciikanjiskip=\z@ \fontdimen7\ja\@minus\fontdimen9\ja
+ \else \jasciikanjiskip \fi
+ \relax}
+ \def\bxwy@S{\bxwy@@S}% \bxwy@S expands to \bxwy@@S, which is protected.
+ \let\bxwy@org@@S\relax \let\bxwy@org@C\relax
+ \def\bxwy@freeze@fragile{%
+ \let\bxwy@org@@S\bxwy@@S \let\bxwy@@S\relax
+ \let\bxwy@org@C\bxwy@C \let\bxwy@C\relax}
+ \def\bxwy@restore@fragile{%
+ \let\bxwy@@S\bxwy@org@@S \let\bxwy@C\bxwy@org@C}
+\else %Aleph/XeTeX/LuaTeX
+ \def\bxwy@add@jchar@dec#1:#2:#3:#4:#5\bxwy@end{%
+ \lccode`\Z="#2\relax \lowercase{\bxwy@next{\noexpand Z}}}
+\fi
+% set \bxwy@normal@S
+\let\bxwy@normal@S\bxwy@S
+
+\ifbxwy@eTeX@ok %<*eTeX>
+%%<+> \WarekiUseNormalInterGlue
+% Uses the normal definition of inter-ascii-kanji skip.
+\newcommand*\WarekiUseNormalInterGlue{%
+ \let\bxwy@S\bxwy@normal@S
+ \bxwy@render@all}
+%%<+> \WarekiUseCustomInterGlue{<text>}
+% Uses the custom definition of inter-ascii-kanji skip.
+\@ifdefinable\WarekiUseCustomInterGlue{%
+ \def\WarekiUseCustomInterGlue#{%
+ \afterassignment\bxwy@render@all
+ \protected\def\bxwy@S}}
+\fi %</eTeX>
+
+%--------------------------------------- Japanese words
+
+%% \bxwy@@meiji : kanji string 'Meiji'
+\let\bxwy@@meiji\@empty
+\bxwy@add@jchar\bxwy@@meiji{E6988E:660E:4C40:k67}
+\bxwy@add@jchar\bxwy@@meiji{E6B2BB:6CBB:3C23:e6A}
+%% \bxwy@@taisho : kanji string 'Taisho'
+\let\bxwy@@taisho\@empty
+\bxwy@add@jchar\bxwy@@taisho{E5A4A7:5927:4267:gE2}
+\bxwy@add@jchar\bxwy@@taisho{E6ADA3:6B63:4035:fF4}
+%% \bxwy@@showa : kanji string 'Showa'
+\let\bxwy@@showa\@empty
+\bxwy@add@jchar\bxwy@@showa{E698AD:662D:3E3C:f3F}
+\bxwy@add@jchar\bxwy@@showa{E5928C:548C:4F42:l83}
+%% \bxwy@@heisei : kanji string 'Heisei'
+\let\bxwy@@heisei\@empty
+\bxwy@add@jchar\bxwy@@heisei{E5B9B3:5E73:4A3F:jAA}
+\bxwy@add@jchar\bxwy@@heisei{E68890:6210:402E:fED}
+%% \bxwy@@reiwa : kanji string 'Reiwa'
+\let\bxwy@@reiwa\@empty
+\bxwy@add@jchar\bxwy@@reiwa{E4BBA4:4EE4:4E61:l44}
+\bxwy@add@jchar\bxwy@@reiwa{E5928C:548C:4F42:l83}
+%% \bxwy@@nen : kanji for 'year'
+\let\bxwy@@nen\@empty
+\bxwy@add@jchar\bxwy@@nen{E5B9B4:5E74:472F:i80}
+%% \bxwy@@gatsu : kanji for 'month'
+\let\bxwy@@gatsu\@empty
+\bxwy@add@jchar\bxwy@@gatsu{E69C88:6708:376E:cDF}
+%% \bxwy@@nichi : kanji for 'day'
+\let\bxwy@@nichi\@empty
+\bxwy@add@jchar\bxwy@@nichi{E697A5:65E5:467C:i6F}
+%% \bxwy@@gan : kanji for 'origin'
+\let\bxwy@@gan\@empty
+\bxwy@add@jchar\bxwy@@gan{E58583:5143:3835:d04}
+
+%--------------------------------------- kanji numerals
+
+%% \bxwy@set@jchar@digit{<n>}{<combo-code>}
+\@onlypreamble\bxwy@set@jchar@digit
+\def\bxwy@set@jchar@digit#1{%
+ \expandafter\bxwy@set@jchar@digit@a\csname bxwy@jcd/#1\endcsname}
+\@onlypreamble\bxwy@set@jchar@digit@a
+\def\bxwy@set@jchar@digit@a#1#2{%
+ \let#1\@empty \bxwy@add@jchar#1{#2}}
+
+%% \[bxwr@jcd/<n>] : kanji digit for n
+\bxwy@set@jchar@digit{0}{E38087:3007:213B:{sy}1B}
+\bxwy@set@jchar@digit{1}{E4B880:4E00:306C:a4B}
+\bxwy@set@jchar@digit{2}{E4BA8C:4E8C:4673:i66}
+\bxwy@set@jchar@digit{3}{E4B889:4E09:3B30:e19}
+\bxwy@set@jchar@digit{4}{E59B9B:56DB:3B4D:e36}
+\bxwy@set@jchar@digit{5}{E4BA94:4E94:385E:d2D}
+\bxwy@set@jchar@digit{6}{E585AD:516D:4F3B:l7C}
+\bxwy@set@jchar@digit{7}{E4B883:4E03:3C37:e7E}
+\bxwy@set@jchar@digit{8}{E585AB:516B:482C:iDB}
+\bxwy@set@jchar@digit{9}{E4B99D:4E5D:3665:c78}
+\bxwy@set@jchar@digit{X}{E58D81:5341:3D3D:eE2}% ten
+\bxwy@set@jchar@digit{C}{E799BE:767E:4934:j41}% hundred
+
+%%<+> \WarekiKansuji{<counter>}
+%% \bxwy@kansuji{<number>}
+% The kansuji representation of the number.
+\newcommand*\WarekiKansuji[1]{%
+ \expandafter\bxwy@kansuji\csname c@#1\endcsname}
+\def\bxwy@kansuji#1{%
+ \ifnum#1<\z@\else
+ \expandafter\bxwy@kansuji@a\number#1\bxwy@mk
+ \fi}
+\def\bxwy@kansuji@a#1{%
+ \ifx#1\bxwy@mk\else
+ \bxwy@twicex{\csname bxwy@jcd/#1\endcsname}%
+ \expandafter\bxwy@kansuji@a
+ \fi}
+
+%% \bxwy@jkansuji{<number>}
+% The kansuji-by-reading representation of the number.
+% NB. Only valid in range 0..999; otherwise fallback to \bxwy@kansuji.
+\def\bxwy@jkansuji#1{%
+ \expandafter\bxwy@jkansuji@a\number#1\bxwy@mk}
+\chardef\bxwy@jk@x=10
+\chardef\bxwy@jk@c=100
+\def\bxwy@jkansuji@a#1\bxwy@mk{%
+ \ifnum#1<\z@
+ \bxwy@kansuji{#1}%
+ \else\ifnum#1<\bxwy@jk@x
+ \bxwy@twicex{\csname bxwy@jcd/#1\endcsname}%
+ \else\ifnum#1<\bxwy@jk@c
+ \bxwy@jkansuji@b0#1%
+ \else\ifnum#1<\@m
+ \bxwy@jkansuji@b#1%
+ \else
+ \bxwy@kansuji@a#1\bxwy@mk
+ \fi\fi\fi\fi}
+\def\bxwy@jkansuji@b#1#2#3{%
+ \ifnum#1>\@ne \bxwy@twicex{\csname bxwy@jcd/#1\endcsname}\fi
+ \ifnum#1>\z@ \bxwy@twicex{\csname bxwy@jcd/C\endcsname}\fi
+ \ifnum#2>\@ne \bxwy@twicex{\csname bxwy@jcd/#2\endcsname}\fi
+ \ifnum#2>\z@ \bxwy@twicex{\csname bxwy@jcd/X\endcsname}\fi
+ \ifnum#3>\z@ \bxwy@twicex{\csname bxwy@jcd/#3\endcsname}\fi}
+
+%--------------------------------------- calculate wareki year
+
+%% errors
+\def\bxwy@err@ivnum#1{%
+ \PackageError\bxwy@pkgname
+ {Bad number form: #1}{\@ehc}}
+\def\bxwy@err@ivrng#1#2#3#4{%
+ \PackageError\bxwy@pkgname
+ {The #4 value #1 is out of range (#2..#3)}{\@ehc}}
+
+%% variables
+\let\bxwy@g@gengo\relax
+\let\bxwy@g@year\relax
+\let\bxwy@g@date\relax
+
+%% \bxwy@assign@date{<year>}{<month>}{<day>}
+\def\bxwy@assign@date#1#2#3{%
+ \bxwy@assign@date@a\year {#1}{0}{9999}{year}%
+ \bxwy@assign@date@a\month{#2}{1}{99}{}%
+ \bxwy@assign@date@a\day {#3}{1}{99}{}}
+\def\bxwy@assign@date@a#1#2#3#4#5{%
+ \afterassignment\bxwy@assign@date@b\@tempcnta=#2\bxwy@mk{#2}%
+ \@tempswatrue
+ \edef\bxwy@tmpb{\the\@tempcnta}%
+ \ifnum#3>\@tempcnta \@tempswafalse \@tempcnta#3\relax \fi
+ \ifnum#4<\@tempcnta \@tempswafalse \@tempcnta#4\relax \fi
+ \if@tempswa\else \ifx\bxwy@mt#5\bxwy@mt\else
+ \bxwy@err@ivrng\bxwy@tmpb{#3}{#4}{#5}%
+ \fi\fi
+ #1=\ifnum\@tempcnta=\z@ \@ne \else \@tempcnta \fi}
+\def\bxwy@assign@date@b#1\bxwy@mk#2{%
+ \ifx\bxwy@mk#1\bxwy@mk\else
+ \@tempcnta\z@
+ \bxwy@err@ivnum{#2}%
+ \fi}
+
+%% \bxwy@calc@wareki@year
+% Sets \bxwy@g@gengo and \bxwy@g@year.
+\def\bxwy@calc@wareki@year{%
+ \@tempcnta=\the\year\two@digits\month\two@digits\day\relax
+ \let\bxwy@tmpa\@empty \let\bxwy@tmpb\@empty \@tempcntb\year
+ \ifnum\@tempcnta<18730101 % ancient times (non-Gregorian)
+ \else\ifnum\@tempcnta<19120730 % meiji era
+ \let\bxwy@tmpb\bxwy@@meiji
+ \advance\@tempcntb-1867\relax
+ \else\ifnum\@tempcnta<19261225 % taisho era
+ \let\bxwy@tmpb\bxwy@@taisho
+ \advance\@tempcntb-1911\relax
+ \else\ifnum\@tempcnta<19890108 % showa era
+ \let\bxwy@tmpb\bxwy@@showa
+ \advance\@tempcntb-1925\relax
+ \else\ifnum\@tempcnta<20190501 % heisei era
+ \let\bxwy@tmpb\bxwy@@heisei
+ \advance\@tempcntb-1988\relax
+ \else % the new era
+ \let\bxwy@tmpb\bxwy@@reiwa
+ \advance\@tempcntb-2018\relax
+ \fi\fi\fi\fi\fi
+ %
+ \global\let\bxwy@g@gengo\bxwy@tmpb
+ \xdef\bxwy@g@year{\the\@tempcntb}%
+ \xdef\bxwy@g@date{{\the\year}{\the\month}{\the\day}}}
+
+%% \bxwy@gengo@initial@of\CS
+\def\bxwy@gengo@initial@of#1{%
+ \ifx#1\@empty \@empty
+ \else\ifx#1\bxwy@@meiji M%
+ \else\ifx#1\bxwy@@taisho T%
+ \else\ifx#1\bxwy@@showa S%
+ \else\ifx#1\bxwy@@heisei H%
+ \else\ifx#1\bxwy@@reiwa R%
+ \fi\fi\fi\fi\fi\fi}
+
+%--------------------------------------- render wareki date
+
+%% \bxwy@render@for\CSIdate\CSIgengo\CSIyear
+% \CSOyear\CSOdate\CSOkanjidate\CSOjkanjidate
+\def\bxwy@render@for{%
+ \expandafter\bxwy@render@for@a}
+\def\bxwy@render@for@a#1#2#3#4#5#6#7#8#9{%
+ %y,m,d,Igengo,Iyear,Oyaer,Odate,Okanjidate,Ojkanjidate
+ \bxwy@freeze@fragile
+ % \CSOyear
+ \edef#6{%
+ \ifx#4\@empty \number#1%(y)
+ \else
+ \bxwy@oncex{#4}%(\CSIgengo)
+ \ifnum#5=\@ne \bxwy@oncex{\bxwy@@gan}%
+ \else \bxwy@S\number#5%(\CSIyear)
+ \fi
+ \fi}%
+ % \CSOdate
+ \edef#7{%
+ \bxwy@oncex{#6}%(\CSOyear)
+ \ifx#4\@empty \bxwy@S
+ \else\ifnum#5=\@ne %nix
+ \else \bxwy@S
+ \fi\fi
+ \bxwy@oncex{\bxwy@@nen}%
+ \bxwy@S#2\bxwy@S \bxwy@oncex{\bxwy@@gatsu}%(m)
+ \bxwy@S#3\bxwy@S \bxwy@oncex{\bxwy@@nichi}}%(d)
+ % \CSOkanjidate
+ \edef#8{%
+ \ifx#4\@empty \bxwy@kansuji{#1}%(y)
+ \else
+ \bxwy@oncex{#4}%(\CSIgengo)
+ \ifnum#5=\@ne \bxwy@oncex{\bxwy@@gan}%
+ \else \bxwy@kansuji{#5}%
+ \fi
+ \fi
+ \bxwy@oncex{\bxwy@@nen}%
+ \bxwy@kansuji{#2}\bxwy@oncex{\bxwy@@gatsu}%(m)
+ \bxwy@kansuji{#3}\bxwy@oncex{\bxwy@@nichi}}%(d)
+ % \CSOjkanjidate
+ \edef#9{%
+ \ifx#4\@empty \bxwy@jkansuji{#1}%(y)
+ \else
+ \bxwy@oncex{#4}%(\CSIgengo)
+ \ifnum#5=\@ne \bxwy@oncex{\bxwy@@gan}%
+ \else \bxwy@jkansuji{#5}%
+ \fi
+ \fi
+ \bxwy@oncex{\bxwy@@nen}%
+ \bxwy@jkansuji{#2}\bxwy@oncex{\bxwy@@gatsu}%(m)
+ \bxwy@jkansuji{#3}\bxwy@oncex{\bxwy@@nichi}}%(d)
+ % done
+ \bxwy@restore@fragile}
+
+%% \bxwy@render@date
+\def\bxwy@render@date{%
+ \bxwy@render@for\bxwy@date\warekigengo\c@warekiyear
+ \warekiyear\warekidate\warekikanjidate\warekijkanjidate
+ \edef\warekigengoinitial{\bxwy@gengo@initial@of\warekigengo}}
+%% \bxwy@render@today
+\def\bxwy@render@today{%
+ \bxwy@render@for\bxwy@today@date\bxwy@today@gengo\bxwy@today@year
+ \bxwy@today@yearstr\warekitoday\warekikanjitoday\warekijkanjitoday}
+%% \bxwy@render@all
+\def\bxwy@render@all{%
+ \bxwy@render@date
+ \bxwy@render@today}
+
+%--------------------------------------- user interface
+
+%% variables
+\let\bxwy@date\relax
+\let\bxwy@today@date\relax
+\let\bxwy@today@gengo\relax
+\let\bxwy@today@year\relax
+\let\bxwy@today@yearstr\relax
+
+%%<*> counter 'warekiyear' : number of wareki year
+\bxwy@newcounter{warekiyear}
+%%<*> \warekigengo : kanji string of the current gengo
+\newcommand*\warekigengo{}
+%%<*> \warekigengoinitial : initial Latin letter of the current gengo
+\newcommand*\warekigengoinitial{}
+%%<*> \warekiyear : string of the wareki year
+\newcommand*\warekiyear{}
+%%<*> \warekidate : string of the wareki date
+\newcommand*\warekidate{}
+%%<*> \warekikanjidate : string of the wareki date (kansuji)
+\newcommand*\warekikanjidate{}
+%%<*> \warekijkanjidate : string of the wareki date (kansuji-by-reading)
+\newcommand*\warekijkanjidate{}
+%%<*> \warekitoday : \warekidate string of today
+\newcommand*\warekitoday{}
+%%<*> \warekikanjitoday : \warekikanjidate string of today
+\newcommand*\warekikanjitoday{}
+%%<*> \warekijkanjitoday : \warekijkanjidate string of today
+\newcommand*\warekijkanjitoday{}
+
+%%<*> \warekisetdate{<year>}{<month>}{<day>}
+\newcommand*\warekisetdate[3]{%
+ \begingroup
+ \bxwy@assign@date{#1}{#2}{#3}%
+ \bxwy@calc@wareki@year
+ \endgroup
+ \let\warekigengo\bxwy@g@gengo
+ \bxwy@setcounter{warekiyear}{\bxwy@g@year}%
+ \let\bxwy@date\bxwy@g@date
+ \bxwy@render@date}
+
+%%<*> \warekisettoday
+\newcommand*\warekisettoday{%
+ \warekisetdate\year\month\day}
+
+%%<+> \WarekiSetToday
+\newcommand*\WarekiSetToday{%
+ \begingroup
+ \bxwy@assign@date\year\month\day
+ \bxwy@calc@wareki@year
+ \endgroup
+ \let\bxwy@today@gengo\bxwy@g@gengo
+ \let\bxwy@today@year\bxwy@g@year
+ \let\bxwy@today@date\bxwy@g@date
+ \bxwy@render@today}
+
+%%<+> WarekiIfCustomDateAvailable{<true>}{<false>}
+\newcommand*\WarekiIfCustomDateAvailable{%
+ \ifbxwy@customdate@ok \expandafter\@firstoftwo
+ \else \expandafter\@secondoftwo
+ \fi}
+
+%%<*> \warekicustomdate
+\newcommand*\warekicustomdate[1]{%
+ \warekidate}% fallback
+
+%--------------------------------------- start up
+
+%% load submodules
+\ifbxwy@customdate@ok
+ \input{bxwareki-cd.def}
+\fi
+
+%% set 'date' to today
+\warekisettoday
+% copy 'date' to 'today'
+\let\bxwy@today@gengo\warekigengo
+\edef\bxwy@today@year{\the\c@warekiyear}
+\let\bxwy@today@date\bxwy@date
+\let\warekitoday\warekidate
+\let\warekikanjitoday\warekikanjidate
+\let\warekijkanjitoday\warekijkanjidate
+
+%--------------------------------------- all done
+\endinput
+%% EOF
diff --git a/language/japanese/BX/bxwareki/bxwareki.tex b/language/japanese/BX/bxwareki/bxwareki.tex
new file mode 100644
index 0000000000..ac00bc9be7
--- /dev/null
+++ b/language/japanese/BX/bxwareki/bxwareki.tex
@@ -0,0 +1,240 @@
+% LuaLaTeX document; UTF-8
+\documentclass[a4paper]{article}
+\usepackage[scale=0.75]{geometry}
+\usepackage{shortvrb}
+\MakeShortVerb{\|}
+\newcommand{\PkgVersion}{0.6}
+\newcommand{\PkgDate}{2019/06/01}
+\newcommand{\Pkg}[1]{\textsf{#1}}
+\newcommand{\Meta}[1]{$\langle$\textit{#1}$\rangle$}
+\newcommand{\Note}{\par\noindent\emph{Note:}\quad}
+\newcommand{\Ie}{i.\,e.}
+\newcommand{\Eg}{e.\,g.}
+\newcommand{\Means}{~:\quad}
+\usepackage{bxtexlogo}
+\bxtexlogoimport{*,ApTeX,JTeX}
+% Japanese something
+\usepackage{fontspec}
+\newfontfamily{\fIpaex}{IPAexMincho}[Scale=0.95]
+\newcommand*{\Ja}[1]{{\fIpaex#1}}
+\newcommand*{\+}{\hspace{0.25em minus 0.25em}}
+%-----------------------------------------------------------
+\begin{document}
+\title{The \Pkg{bxwareki} package}
+\author{Takayuki YATO\quad (aka.~``ZR'')}
+\date{v\PkgVersion \quad[\PkgDate]}
+\maketitle
+
+%===========================================================
+\section{Overview}
+\label{sec:Overview}
+
+This package provides commands to convert from the Gregorian calendar
+(2018/8/28) to the Japanese rendering of the Japanese calendar
+(\Ja{平成\+30\+年\+8\+月\+28\+日}).
+You can choose whether the numbers are written
+in Western numerals (28) or kanji numerals (\Ja{二八}).
+The package is aware of the current era name,
+\emph{Reiwa}~(\Ja{令和}).
+
+Note that the package only deals with dates in the year 1873 or later,
+where the Japanese calendar is really a Gregorian calendar
+with the different notation of years.
+
+\paragraph{System requirement}
+
+\begin{itemize}
+\item \TeX{} format: \LaTeX.
+\item \TeX{} engine: {\pdfTeX}, {\LuaTeX}, {\XeTeX},
+ {\pTeX}, {\upTeX}, {\ApTeX} ({\pTeX}-ng), NTT-{\JTeX}.
+\end{itemize}
+
+\Note The modern (post-1873) Japanese calendar (\emph{wareki}; \Ja{和暦})
+can be regarded as a variant of Gregorian calendar
+where only the notation of years differs from the original.
+To avoid confusion, this document refers to the original Gregorian
+calendar as the \emph{Western calendar},
+which corresponds to the Japanese term \emph{seireki} (\Ja{西暦}).
+
+%===========================================================
+\section{Package Loading}
+\label{sec:Loading}
+
+No options are available.
+
+\begin{quote}\small\begin{verbatim}
+\usepackage{bxwareki}
+\end{verbatim}\end{quote}
+
+%===========================================================
+\section{Usage}
+\label{sec:Usage}
+
+%-------------------
+\subsection{Conversion from the given date}
+
+\begin{itemize}
+\item |\warekisetdate{|\Meta{year}|}{|\Meta{month}|}{|\Meta{day}|}|\Means
+ Converts from the specified Western date.
+ The result will be rendered by the commands described
+ at the following items, where the result for the invocation
+ |\warekisetdate{2018}{8}{28}|
+ will be shown as example.
+
+ \Note Although the Japanese calendar differs from the Western calendar
+ only in the notation of years,
+ the value of months and days are still required,
+ since the notation of the year in which
+ \emph{kaigen} (\Ja{改元}; change of gengo)
+ occurs depends on months and days.
+
+\item |\warekisettoday|\Means
+ Does |\warekisetdate| with the current date.
+
+\item Counter |warekiyear|\Means
+ The year number (within the gengo); \Eg~``\Ja{30}''.
+
+ \Note Unlike ordinary counters,
+ the assignment to |warekiyear| by |\warekisetdate| is \emph{local}.
+ Moreover, manual assignment to this counter is not supported.
+
+\item |\warekigengo|\Means
+ The gengo in kanji, \Eg~``\Ja{平成}''.
+
+\item |\warekigengoinitial|\Means
+ The initial Latin letter of the gengo, \Eg~``\Ja{H}''.
+
+\item |\warekiyear|\Means
+ The full notation of the year (without `\Ja{年}'),
+ \Eg~``\Ja{平成\+30}''.
+
+ \Note When the year number is one,
+ the kanji `\Ja{元}' is used instead of the numeral `\Ja{1}'.
+
+\item |\warekidate|\Means
+ The date string, \Eg~``\Ja{平成\+30\+年\+8\+月\+28\+日}''.
+
+\item |\warekikanjidate|\Means
+ The date string using kansuji (kanji numerals),
+ \Eg~``\Ja{平成三〇年八月二八日}''.
+
+\item |\warekijkanjidate|\Means
+ The date string using ``kansuji-by-reading''
+ (that is, kanji rendering of numbers in the Japanese language),
+ \Eg.``\Ja{平成三十年八月二十八日}''.
+
+\item |\warekicustomdate{|\Meta{option}|}|\Means
+ The date string in the form specified with the option.
+ The option is a string of letters such as |wk|
+ and each letter means a specific setting.
+ When the option is empty, the date is rendered in the form
+ ``\Ja{2018\+年\+8\+月\+28\+日}'' (using the Western calendar).
+ The available option letters are:
+ \begin{itemize}
+ \item |w|\Means
+ uses Japanese calendar (\Ja{2018\+年} $\to$ \Ja{平成\+30\+年});
+ \item |k|\Means
+ uses kansuji (\Ja{28} $\to$ \Ja{二八});
+ \item |j|\Means
+ uses kansuji-by-reading (\Ja{28} $\to$ \Ja{二十八});
+ \par\smallskip
+ \Note Western years does not support kansuji-by-reading
+ and thus |k| will be applied instead
+ (\Ja{二〇一八}, not \Ja{二千十八}).
+ \item |J|\Means
+ variant of |j| where ``ten's multiple'' kanji characters
+ (\Ja{廿} and \Ja{卅}) are employed (\Ja{28} $\to$ \Ja{廿八});
+ \item |o|\Means
+ uses \emph{imyo} (\Ja{異名}) for months%
+ \footnote{Don't ask me if this form is ever used in {\LaTeX} document!}
+ (\Ja{8\+月} $\to$ \Ja{葉月}).
+ \end{itemize}
+
+ \Note This command is supported only on {\pdfLaTeX}, {\XeLaTeX},
+ {\LuaLaTeX}, {\upLaTeX}, {Ap\LaTeX} and recent versions of {\pLaTeX}.
+ On other engines it simply falls back to |\warekidate|.
+
+\item |\WarekiIfCustomDateAvailable{|\Meta{true}|}{|\Meta{false}|}|\Means
+ Tests if the command |\warekicustomdate| is
+ supported on the engine in use.
+\end{itemize}
+
+%-------------------
+\subsection{Current date}
+
+These commands always represent the current date,
+and are not affected by |\warekisetdate| (or |\warekisettoday|).
+
+\begin{itemize}
+\item |\warekitoday|\Means
+ The |\warekidate| form of the current date.
+\item |\warekikanjitoday|\Means
+ The |\warekikanjidate| form.
+\item |\warekijkanjitoday|\Means
+ The |\warekijkanjidate| form.
+\end{itemize}
+
+%-------------------
+\subsection{Inter-alphabet-kanji glues}
+
+In quality Japanese typesetting, a thin space
+(\emph{shibuaki}; \Ja{四分空き}) must be inserted
+between an alphabet letter and a kanji letter.
+This package by default inserts a command
+suitable for the most prevalent Japanese-typesetting environment
+for the engine in use.
+
+\begin{itemize}
+\item On {\pLaTeX}, {\upLaTeX} and {Ap\LaTeX}:
+ Nothing is inserted,
+ since the engine can automatically insert shibuaki spaces.
+\item On {\LuaLaTeX} and {\XeLaTeX}:
+ Nothing is inserted,
+ on the assumption that the package for Japanese typesetting
+ (such as \Pkg{\LuaTeX-ja} and \Pkg{xeCJK})
+ will automatically insert shibuaki spaces.
+\item On {\LaTeX} and {\pdfLaTeX}:
+ |~| is inserted,
+ on the assumption that the \Pkg{CJK} package is employed
+ and |\CJKtilde| is in effect.
+\end{itemize}
+
+On the engines with {\eTeX} extension,
+the command for shibuaki can be changed with the following commands:
+\begin{itemize}
+\item |\WarekiUseCustomInterGlue{|\Meta{text}|}|\Means
+ Uses \Meta{text} for making shibuaki spaces.
+\item |\WarekiUseNormalInterGlue|\Means
+ Reverts |\WarekiUseCustomInterGlue|
+ and uses the normal setting.
+\end{itemize}
+
+%===========================================================
+\section{Notices for {\TeX} programmers}
+\label{sec:Allez}
+
+\begin{itemize}
+\item On the engines with native kanji/Unicode support
+ (\Ie~{\LuaLaTeX}, {\XeLaTeX}, {\pLaTeX}, {\upLaTeX}, and {Ap\LaTeX}),
+ the content (one-level expansion) of |\wareki...date|
+ (except |\warekicustomdate|) and |\wareki...today|
+ is a simple string of character tokens,
+ unless |\WarekiUseCustomInterGlue| is in effect.
+ The same holds for {\LaTeX} and {\pdfLaTeX},
+ except that each kanji character is
+ represented by the sequence of activated byte tokens
+ and |~| is inserted as shibuaki spaces.
+\item On the engines with native kanji/Unicode support,
+ |\warekicustomdate| fully expands to a simple string
+ of character tokens
+ (again without |\WarekiUseCustomInterGlue|),
+ and the situation on {\LaTeX} and {\pdfLaTeX}
+ is parallel to that described at the previous item.
+\item The use of |\WarekiUseCustomInterGlue|
+ does not break the full expandability
+ of |\wareki...date| and |\wareki...today|
+ on the engines with native kanji/Unicode support.
+\end{itemize}
+
+%===========================================================
+\end{document}
diff --git a/language/japanese/BX/bxwareki/bxwareki2019.def b/language/japanese/BX/bxwareki/bxwareki2019.def
new file mode 100644
index 0000000000..438a5bdba1
--- /dev/null
+++ b/language/japanese/BX/bxwareki/bxwareki2019.def
@@ -0,0 +1,3 @@
+E4BBA4:4EE4:4E61:l44
+E5928C:548C:4F42:l83
+R