summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/source/latex/bxjscls
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2018-04-30 22:40:21 +0000
committerKarl Berry <karl@freefriends.org>2018-04-30 22:40:21 +0000
commitd310a5884150cb8753e7fbea759cc579c2a305b4 (patch)
treecc70a768d9a00bc231c70af94d69a72a93e866fb /Master/texmf-dist/source/latex/bxjscls
parenta28e1bfccd6fe522fcd296426e4d89c7fb4f19b6 (diff)
bxjscls (30apr18)
git-svn-id: svn://tug.org/texlive/trunk@47517 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/source/latex/bxjscls')
-rw-r--r--Master/texmf-dist/source/latex/bxjscls/bxjscls.dtx911
1 files changed, 527 insertions, 384 deletions
diff --git a/Master/texmf-dist/source/latex/bxjscls/bxjscls.dtx b/Master/texmf-dist/source/latex/bxjscls/bxjscls.dtx
index 91972cfbeb0..32bfd84c3f4 100644
--- a/Master/texmf-dist/source/latex/bxjscls/bxjscls.dtx
+++ b/Master/texmf-dist/source/latex/bxjscls/bxjscls.dtx
@@ -56,7 +56,9 @@
%<*driver>
\ProvidesFile{bxjscls.dtx}
%</driver>
- [2018/03/29 v1.8a BXJS document classes]
+ [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]
@@ -292,6 +294,7 @@
\RequirePackage{keyval}
% \end{macrocode}
% クラスの本体ではこの他に |geometry| パッケージが読み込まれる。
+% \TODO 依存パッケージの情報。
%
% 互換性のための補助パッケージを読み込む。
% \begin{macrocode}
@@ -392,6 +395,13 @@
\fi{\endinput\@@end}
% \end{macrocode}
%
+% Lua{\TeX}の場合、本クラス用のLuaモジュールを用意する。
+% \begin{macrocode}
+\ifx l\jsEngine
+ \directlua{ bxjs = {} }
+\fi
+% \end{macrocode}
+%
% \begin{macro}{\bxjs@protected}
% {\eTeX}拡張が有効な場合にのみ |\protected|
% の効果をもつ。
@@ -511,12 +521,12 @@
% \Note {(u)\pLaTeX}の場合はこれらの和文単位はエンジンでサポートされる。
% しかし和文フォントの設定が完了するまでは |zw|/|zh| の値は正しくない。
% \begin{macrocode}
-\if j\jsEngine \def\bxjs@parse@qh@all{zw,zh}
-\else \def\bxjs@parse@qh@all{trueQ,trueH,Q,H,zw,zh}
+\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@all\do{%
+ \@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
@@ -543,6 +553,31 @@
% \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}
% このクラスの読込終了時に対するフック。
% (補助パッケージ中で用いられる。)
@@ -552,6 +587,15 @@
% \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に変更する。
% クラス読込終了時点で元に戻される。
@@ -561,16 +605,14 @@
% コントロールワードの命令を使用するには、カテゴリコードを11に
% 変更する必要がある。
% \begin{macrocode}
-\@onlypreamble\bxjs@restore@jltrcc
-\let\bxjs@restore@jltrcc\@empty
\if l\jsEngine
-\def\bxjs@change@jltrcc#1{%
- \xdef\bxjs@restore@jltrcc{%
- \bxjs@restore@jltrcc
+\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@x:=西暦\do
- {\expandafter\bxjs@change@jltrcc\bxjs@x}
+\@tfor\bxjs@tmpa:=和西暦\do
+ {\expandafter\bxjs@tmpdo\bxjs@tmpa}
\fi
% \end{macrocode}
%
@@ -696,6 +738,7 @@
% 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}}
@@ -1079,7 +1122,7 @@
\expandafter\let\expandafter\ifjsDraft\csname if#1\endcsname}
\DeclareOption{draft}{\bxjs@draft{true}\setlength\overfullrule{5pt}}
\DeclareOption{final}{\bxjs@draft{false}\setlength\overfullrule{0pt}}
-\AtBeginDocument{%
+\g@addto@macro\bxjs@begin@document@hook{%
\expandafter\ifx\csname ifdraft\endcsname\relax
\expandafter\let\csname ifdraft\expandafter\endcsname
\csname ifjsDraft\endcsname
@@ -1132,6 +1175,10 @@
%
% オプション \texttt{english} を新設しました。
%
+% \begin{ZRnote}
+% \Note |\if@english| は非ユニークで衝突耐性がない。
+% \end{ZRnote}
+%
% \begin{macrocode}
\newif\if@english
\@englishfalse
@@ -1165,53 +1212,10 @@
\DeclareOption{nojslogo}{\@jslogofalse}
% \end{macrocode}
%
-% \paragraph{BXJS特有のオプションの一覧 \ZRX}
+% \paragraph{複合設定オプション \ZRX}
% \mbox{}
-% \begin{ZRnote}
-% \begin{itemize}
-% \item エンジンオプション: |xelatex| 等。
-% \item ドライバオプション: |dvipdfmx| 等。
-% \item 複合設定オプション: |pandoc| 等。
-% \item |nopapersize| : |papersize|(既定で有効)の否定。
-% \item |zw|/|nozw| : |\jsZw| と等価な命令として |\zw| を
-% 定義する/しない。
-% \item |js|/|nojs| : JSクラスを読込済として扱う/扱わない。
-% \item |precisetext|/|noprecisetext| : {\XeTeX}の``generateactualtext''を
-% 有効/無効にする。
-% \item |simplejasetup|/|nosimplejasetup| : {\XeTeX}の``linebreaklocale''を
-% 有効/無効にする。
-% \item |bigcode|/|nobigcode| : {\upTeX}でCMapとして |UTF8-UCS2| の
-% 代わりに |UTF8-UTF16| を使う/使わない。
-% \item |oldfontcommands|/|nooldfontcommands| : 古い“二文字フォント命令”
-% に対する警告を抑止する/しない。
-% \item |base=|\meta{dimen} : 基底フォントサイズを直接指定する。
-% (|xxpt| オプションの代用なので、既定値は10\,ptである。)
-% \item |jbase=|\meta{dimen} : 基底フォントサイズを“和文規準で”
-% 直接指定する。
-% \item |scale=|\meta{real} : 和文フォントのスケールを表すマクロ |\jsScale|
-% の値を設定する。
-% もちろんこの値を何らかの方法で和文処理モジュールに渡さないと意味を成さない。
-% 既定値は 0.924715(= 13\,Q/10\,pt)。
-% \item |noscale| : |scale=1| と等価。
-% \item |mag=|\meta{int} : |\mag| 値の直接設定。既定は |base| から算出する。
-% \item |paper={|\meta{dimen:width}|}{|\meta{dimen:height}|}| : 用紙サイズ設定。
-% 用紙サイズオプションの代用で、既定値は |a4paper| 相当。
-% \item |ja=|\meta{name} : 使用する和文ドライバの指定。
-% \item |jafont=|\meta{name} : 和文フォントプリセットの指定。
-% \item |japaram=|\meta{name} : 和文フォントパラメタの指定。
-% \item |magstyle=|\meta{name} : “版面拡大”の実現方法の選択。
-% \item |dvi=|\meta{name} : DVIモードの時のみに参照されるドライバ指定。
-% \item |geometry=|\{|class|\OR|user|\} : |geometry| パッケージの読込を自動的に
-% 行うかユーザに任せるか。
-% \item |fancyhdr=|\meta{bool} : |fancyhdr| パッケージ用の調整を行うか。
-% \item |layout=|\meta{name} : レイアウト変種の指定。
-% \item |textwidth-limit=|\meta{number} : |bxjsbook| における、
-% |\textwidth| の上限の全角単位での値。
-% \item |paragraph-mark=|\meta{char} : パラグラフのマーク。
-% \item |whole-zw-lines=|\meta{bool} : 行長を全角単位に丸めるか。
-% \item |hyperref-enc=|\meta{bool} : |hyperref| の文字コード指定補正を行うか。
-% \end{itemize}
-%
+% \TODO |\bxjs@invscale| を書く場所を決める。
+% (JSクラスと同じにはできなそう。)
% \begin{macro}{\bxjs@invscale}
% |\bxjs@invscale| は{\TeX}における「長さのスケール」の逆関数を求めるもの。
% 例えば |\bxjs@invscale\dimX{1.3}| は |\dimX=1.3\dimX| の
@@ -1249,10 +1253,6 @@
% \end{macrocode}
% \end{macro}
%
-% \end{ZRnote}
-%
-% \paragraph{複合設定オプション \ZRX}
-% \mbox{}
% \begin{ZRnote}
% 複合設定オプションとは、
% 「エンジンやドライバや和文ドライバの設定を含む、
@@ -1261,13 +1261,6 @@
% ある特定の設定を短く書く必要性が高いと判断される場合に
% 用意される。
%
-% \begin{macro}{\bxjs@composite@proc}
-% 複合設定オプションのための遅延処理マクロ。
-% \begin{macrocode}
-\let\bxjs@composite@proc\relax
-% \end{macrocode}
-% \end{macro}
-%
% |pandoc| オプションは、Pandocで{\LaTeX}用の既定テンプレートを
% 用いて他形式から{\LaTeX}(およびPDF)形式に変換する用途に
% 最適化した設定を与える。
@@ -1278,7 +1271,7 @@
% 変更する。
% \Note 実際の和文ドライバ・エンジン設定より優先される。
% \begin{macrocode}
- \def\bxjs@composite@proc{%
+ \g@addto@macro\bxjs@post@option@hook{%
\bxjs@oldfontcommandstrue
\setkeys{bxjs}{ja=pandoc}%
\let\bxjs@engine@given=*}%
@@ -1408,70 +1401,7 @@
% \paragraph{その他のBXJS独自オプション \ZRX}
% \mbox{}
% \begin{ZRnote}
-% \begin{macro}{\ifbxjs@usezw}
-% |\jsZw| の同義語として |\zw| を使えるようにするか。
-% 既定は真。
-% \begin{macrocode}
-\newif\ifbxjs@usezw \bxjs@usezwtrue
-% \end{macrocode}
-% \end{macro}
-%
-% |zw|、|nozw| オプションの定義。
-% \begin{macrocode}
-\DeclareOption{nozw}{%
- \bxjs@usezwfalse}
-\DeclareOption{zw}{%
- \bxjs@usezwtrue}
-% \end{macrocode}
-%
-% \begin{macro}{\ifbxjs@disguise@js}
-% JSクラスの派生クラスのふりをするか。
-% 既定は真。
-% \begin{macrocode}
-\newif\ifbxjs@disguise@js \bxjs@disguise@jstrue
-% \end{macrocode}
-% \end{macro}
-%
-% |nojs|、|js| オプションの定義。
-% \begin{macrocode}
-\DeclareOption{nojs}{%
- \bxjs@disguise@jsfalse}
-\DeclareOption{js}{%
- \bxjs@disguise@jstrue}
-% \end{macrocode}
-%
-% \begin{macro}{\ifbxjs@precisetext}
-% {\XeTeX}の``generateactualtext''を有効にするか。
-% 既定は偽。
-% \begin{macrocode}
-\newif\ifbxjs@precisetext
-% \end{macrocode}
-% \end{macro}
-%
-% |noprecisetext|/|precisetext| オプションの定義。
-% \begin{macrocode}
-\DeclareOption{noprecisetext}{%
- \bxjs@precisetextfalse}
-\DeclareOption{precisetext}{%
- \bxjs@precisetexttrue}
-% \end{macrocode}
-%
-% \begin{macro}{\ifbxjs@simplejasetup}
-% {\XeTeX}の``linebreaklocale''を有効にするか。
-% 既定は真(であるが多くの場合は後に無効化される)。
-% \begin{macrocode}
-\newif\ifbxjs@simplejasetup \bxjs@simplejasetuptrue
-% \end{macrocode}
-% \end{macro}
-%
-% |nosimplejasetup|/|simplejasetup| オプションの定義。
-% \begin{macrocode}
-\DeclareOption{nosimplejasetup}{%
- \bxjs@simplejasetupfalse}
-\DeclareOption{simplejasetup}{%
- \bxjs@simplejasetuptrue}
-% \end{macrocode}
-%
+% \TODO 互換用オプションを分離する(2.0版で?)。
% \begin{macro}{\ifbxjs@bigcode}
% {\upTeX}で有効化するToUnicode CMapとして
% 「|UTF8-UCS2|」の代わりに「|UTF8-UTF16|」を使うか。
@@ -1525,22 +1455,52 @@
% \paragraph{keyval型のオプション \ZRX}
% \mbox{}
% \begin{ZRnote}
+% その他のオプションは |keyval| の機構を用いて処理する。
% \begin{macrocode}
-\def\bxjs@setkey{%
- \expandafter\bxjs@setkey@a\expandafter{\CurrentOption}}
-\def\bxjs@setkey@a{\bxjs@safe@setkeys{bxjs}}
-\DeclareOption*{\bxjs@setkey}
+\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@KV@errx\KV@errx
- \let\KV@errx\bxjs@safe@setkeys@a
+ \let\bxjs@save@KV@errx\KV@errx \let\KV@errx\@gobble
\setkeys{#1}{#2}%
- \let\KV@errx\bxjs@KV@errx}
-\def\bxjs@safe@setkeys@a#1{}
+ \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}
%
@@ -1572,7 +1532,7 @@
% \end{macro}
%
% \begin{macro}{\bxjs@base@opt}
-% |base| オプションの値(そのもの)。
+% 明示された |base| オプションの値。
% \begin{macrocode}
%\let\bxjs@base@opt\@undefined
% \end{macrocode}
@@ -1587,7 +1547,7 @@
% \end{macrocode}
%
% \begin{macro}{\bxjs@jbase@opt}
-% |jbase| オプションの値。
+% 明示された |jbase| オプションの値。
% \begin{macrocode}
%\let\bxjs@jbase@opt\@undefined
% \end{macrocode}
@@ -1600,9 +1560,9 @@
% \end{macrocode}
%
% \begin{macro}{\bxjs@scale@opt}
-% |scale| オプションの値。
+% 明示された |scale| オプションの値。
% \begin{macrocode}
-%\let\bxjs@jbase@opt\@undefined
+%\let\bxjs@scale@opt\@undefined
% \end{macrocode}
% \end{macro}
%
@@ -1640,7 +1600,7 @@
% 和文ドライバの名前。
% \begin{macrocode}
\let\bxjs@jadriver\relax
-%\let\bxjs@jadriver@given\@undefined
+%\let\bxjs@jadriver@opt\@undefined
% \end{macrocode}
% \end{macro}
%
@@ -1648,9 +1608,9 @@
% \Note |jadriver| は0.9版で用いられた旧称。
% \Note 単なる |ja| という指定は無視される(Pandoc 対策)。
% \begin{macrocode}
-\define@key{bxjs}{jadriver}{\edef\bxjs@jadriver{#1}}
+\define@key{bxjs}{jadriver}{\edef\bxjs@jadriver@opt{#1}}
\define@key{bxjs}{ja}[\relax]{%
- \ifx\relax#1\else\edef\bxjs@jadriver{#1}\fi}
+ \ifx\relax#1\else\edef\bxjs@jadriver@opt{#1}\fi}
% \end{macrocode}
%
% \begin{macro}{\jsJaFont}
@@ -1824,11 +1784,10 @@
%
% \begin{macro}{\bxjs@textwidth@limit}
% |textwidth-limit| の指定値。
-% |\textwidth| の上限。
% \begin{macrocode}
-%\let\bxjs@textwidth@limit\@undefined
+%\let\bxjs@textwidth@limit@opt\@undefined
\define@key{bxjs}{textwidth-limit}{%
- \edef\bxjs@textwidth@limit{#1}}
+ \edef\bxjs@textwidth@limit@opt{#1}}
% \end{macrocode}
% \end{macro}
%
@@ -1933,6 +1892,46 @@
% \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{オプションの実行}
@@ -1945,11 +1944,11 @@
% \Note クラスに |\DeclareOption*| がある場合は |\@unusedoptions|
% は常に空のままであることを利用している。
% \begin{macrocode}
-\let\bxjs@ltx@removeelement\@removeelement
+\let\bxjs@org@removeelement\@removeelement
\def\@removeelement#1#2#3{%
\def\reserved@a{#2}%
\ifx\reserved@a\@empty \let#3\@empty
- \else \bxjs@ltx@removeelement{#1}{#2}{#3}%
+ \else \bxjs@org@removeelement{#1}{#2}{#3}%
\fi}
% \end{macrocode}
%
@@ -1964,7 +1963,7 @@
%<report>\ExecuteOptions{a4paper,oneside,onecolumn,titlepage,openany,final}
%<slide>\ExecuteOptions{36pt,a4paper,landscape,oneside,onecolumn,titlepage,final}
\ProcessOptions\relax
-\bxjs@composite@proc
+\bxjs@post@option@hook
% \end{macrocode}
%
% 後処理
@@ -1989,24 +1988,20 @@
% (|\ProcessOptions*| がエラーになる)。
% 従って、このようなオプションは除外することにする。
% \begin{macrocode}
-\@onlypreamble\bxjs@purge@brace@elts
-\def\bxjs@purge@brace@elts{%
+\def\bxjs@tmpdo{%
\def\bxjs@tmpa{\@gobble}%
- \expandafter\bxjs@purge@be@a\@classoptionslist,\@nil,%
+ \expandafter\bxjs@tmpdo@a\@classoptionslist,\@nil,%
\let\@classoptionslist\bxjs@tmpa}
-\@onlypreamble\bxjs@purge@be@a
-\def\bxjs@purge@be@a#1,{%
+\def\bxjs@tmpdo@a#1,{%
\ifx\@nil#1\relax\else
- \bxjs@purge@be@b#1{}\@nil
+ \bxjs@tmpdo@b#1{}\@nil
\if@tempswa \edef\bxjs@tmpa{\bxjs@tmpa,#1}\fi
- \expandafter\bxjs@purge@be@a
+ \expandafter\bxjs@tmpdo@a
\fi}
-\@onlypreamble\bxjs@purge@be@b
-\def\bxjs@purge@be@b#1#{\bxjs@purge@be@c}
-\@onlypreamble\bxjs@purge@be@c
-\def\bxjs@purge@be@c#1\@nil{%
+\def\bxjs@tmpdo@b#1#{\bxjs@tmpdo@c}
+\def\bxjs@tmpdo@c#1\@nil{%
\ifx\@nil#1\@nil \@tempswatrue \else \@tempswafalse \fi}
-\bxjs@purge@brace@elts
+\bxjs@tmpdo
% \end{macrocode}
%
% |papersize|、|10pt|、|noscale| の各オプションは他のパッケージと衝突を
@@ -2043,11 +2038,10 @@
%
% \begin{ZRnote}
%
-% 現在の(正規化前の)和文ドライバの値を\
-% |\bxjs@jadriver@given| に保存する。
+% 正規化前の和文ドライバの値を |\bxjs@jadriver| に設定する。
% \begin{macrocode}
-\ifx\bxjs@jadriver\relax\else
- \let\bxjs@jadriver@given\bxjs@jadriver
+\ifx\bxjs@jadriver@opt\@undefined\else
+ \let\bxjs@jadriver\bxjs@jadriver@opt
\fi
% \end{macrocode}
%
@@ -2142,7 +2136,7 @@
% \Note ただし |ja| 非指定の場合はスキップする
% (0.3 版との互換性のため)。
% \begin{macrocode}
- \ifx\bxjs@driver@opt\@undefined \ifx\bxjs@jadriver@given\@undefined\else
+ \ifx\bxjs@driver@opt\@undefined \ifx\bxjs@jadriver@opt\@undefined\else
\ClassWarningNoLine\bxjs@clsname
{No driver option is given}
\fi\fi
@@ -2152,12 +2146,12 @@
% (グローバルオプションに |XXX| を追加する。)
% \begin{macrocode}
\ifbxjs@dvi@opt
- \edef\bxjs@nxt{%
+ \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@nxt
+ }\bxjs@next
\fi
\fi
% \end{macrocode}
@@ -2204,7 +2198,7 @@
% エンジンオプションがない場合はエラーを出す。
% \Note ただし |ja| 非指定の場合はスキップする。
% \begin{macrocode}
-\ifx\bxjs@jadriver@given\@undefined\else
+\ifx\bxjs@jadriver@opt\@undefined\else
\ifx\bxjs@engine@given\@undefined
\ClassError\bxjs@clsname
{An engine option must be explicitly given}%
@@ -2421,13 +2415,6 @@
\expandafter\bxjs@tmpa\the\@tempcnta\@nil
\edef\jsc@magscale{\strip@pt\@tempdima}
\let\jsBaseFontSize\bxjs@param@basefontsize
-%\typeout{\string\jsDocClass: \meaning\jsDocClass}
-%\typeout{\string\jsEngine: \meaning\jsEngine}
-%\typeout{\string\jsBaseFontSize: \jsBaseFontSize}
-%\typeout{\string\bxjs@param@mag: \bxjs@param@mag}
-%\typeout{\string\jsc@magscale: \jsc@magscale}
-%\typeout{\string\ifjsc@mag: \meaning\ifjsc@mag}
-%\typeout{\string\ifjsc@mag@xreal: \meaning\ifjsc@mag@xreal}
% \end{macrocode}
% \end{ZRnote}
%
@@ -2455,6 +2442,7 @@
\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| を作成する。
@@ -2780,10 +2768,10 @@
\skip4=\belowdisplayskip
\skip6=\belowdisplayshortskip
% 一時的に警告を無効化する
- \let\bxjs@ltx@nomath\@nomath
+ \let\bxjs@save@nomath\@nomath
\let\@nomath\@gobble
\@currsize\selectfont
- \let\@nomath\bxjs@ltx@nomath
+ \let\@nomath\bxjs@save@nomath
\abovedisplayskip=\skip0
\abovedisplayshortskip=\skip2
\belowdisplayskip=\skip4
@@ -3165,6 +3153,16 @@
% \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}
@@ -3183,15 +3181,15 @@
% |\bxjs@param@paper| が長さ指定(|{W}{H}|)の場合、
% |geometry| の形式(|papersize={W,H}|)に変換する。
% \begin{macrocode}
-\def\bxjs@read@a{\futurelet\bxjs@tmpa\bxjs@read@b}
-\def\bxjs@read@b{%
- \ifx\bxjs@tmpa\bgroup \expandafter\bxjs@read@c
- \else \expandafter\bxjs@read@d \fi}
-\def\bxjs@read@c#1#2#3\@nil{\edef\bxjs@param@paper{papersize={#1,#2}}}
-\def\bxjs@read@d#1\@nil{\bxjs@read@e#1,,\@nil}
-\def\bxjs@read@e#1,#2,#3\@nil{%
+\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@read@a\bxjs@param@paper\@empty\@empty\@nil
+\expandafter\bxjs@tmpdo\bxjs@param@paper\@empty\@empty\@nil
% \end{macrocode}
%
% \begin{macro}{\bxjs@layout@paper}
@@ -3269,20 +3267,46 @@
\newdimen\fullwidth
% \end{macrocode}
% \end{macro}
-%
+%
+% \begin{macro}{\bxjs@textwidth@limit}
+% 〔寸法値マクロ〕
+% |bxjsbook| における、|\textwidth| 上限の値。
+%
% \begin{macro}{\jsTextWidthLimit}
% 〔実数値マクロ〕
-% |bxjsbook| における、|\textwidth| の上限の全角単位での値。
+% |\bxjs@textwidth@limit| の全角(|\Cwd|)単位での値。
% \begin{macrocode}
%<*book>
\newcommand\jsTextWidthLimit{40}
-\ifx\bxjs@textwidth@limit\@undefined\else
- \bxjs@gset@tempcnta{\bxjs@textwidth@limit}
- \long\edef\jsTextWidthLimit{\the\@tempcnta}
+\@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| の後処理。
@@ -3295,6 +3319,10 @@
\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
@@ -3312,13 +3340,10 @@
% して扱い、その値から実際の |\textwidth| を導出する。
% \begin{macrocode}
%<*book>
- \@tempdima=\jsTextWidthLimit\Cwd
- \ifx\bxjs@textwidth@opt\@undefined\else
- \jsSetQHLength\@tempdima{\bxjs@textwidth@opt}
- \ifbxjs@whole@zw@lines
- \advance\@tempdima.005pt\relax
- \divide\@tempdima\Cwd \multiply\@tempdima\Cwd
- \fi
+ \@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
@@ -3371,26 +3396,14 @@
% \end{macro}
% \end{ZRnote}
%
-% \paragraph{geometry パッケージ読込 \ZRX}
+% \paragraph{geometry パッケージを読み込む \ZRX}
% \mbox{}
% \begin{ZRnote}
-% |geoemtry| オプションの値に応じて分岐する。
-%
-% まずは|geometry=class|の場合。
+% |geoemtry=class| の場合に、実際に |geometry| パッケージを読みこむ。
% \begin{macrocode}
\ifx\bxjs@geometry\bxjs@geometry@class
% \end{macrocode}
%
-% |geometry| は |\topskip| が標準の行高(|\ht\strutbox|)より小さくならない
-% ようにする自動調整を行うが、これをどうするかは未検討。
-% 今のところ、単純に回避(無効化)している。
-% \begin{macrocode}
-\def\bxjs@geometry@guard@on{%
- \edef\bxjs@gg@tmp{\the\ht\strutbox}\ht\strutbox=10\jsc@mpt}
-\def\bxjs@geometry@guard@off{%
- \ht\strutbox=\bxjs@gg@tmp\relax}
-% \end{macrocode}
-%
% |geometry| のドライバオプション指定。
% |nopapersize| 指定時は、special命令出力を抑止するために
% ドライバを |none| にする。
@@ -3414,13 +3427,12 @@
% \Note |geometry| のbegin-documentフックにおいて、Lua{\TeX}の
% 旧版互換を有効にする。
% \begin{macrocode}
-\AtBeginDocument{\bxjs@pre@geometry@hook}
+\AtBeginDocument{\bxjs@bd@pre@geometry@hook}
\AtBeginDocument{\ImposeOldLuaTeXBehavior}
-\bxjs@geometry@guard@on
+\bxjs@preproc@layout
\edef\bxjs@next{%
\noexpand\RequirePackage[\bxjs@layout@paper,\bxjs@layout]{geometry}%
}\bxjs@next
-\bxjs@geometry@guard@off
\AtBeginDocument{\RevokeOldLuaTeXBehavior}
% \end{macrocode}
%
@@ -3434,13 +3446,14 @@
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}{\bxjs@pre@geometry@hook}
-% 1.2版より、|geometry| の4.x版の使用は非推奨とする。
-% \Note 将来サポートを廃止する予定。
+% |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}
-\@onlypreamble\bxjs@pre@geometry@hook
-\def\bxjs@pre@geometry@hook{%
- \@ifpackageloaded{geometry}{%
\@ifpackagelater{geometry}{2010/02/12}{}{%else
\PackageWarningNoLine\bxjs@clsname
{The 'geometry' package installed\MessageBreak
@@ -3449,26 +3462,19 @@
\def\bxjs@Gm@driver{pdftex}
\ifx\pdfhorigin\@undefined \newdimen\pdfhorigin \fi
\ifx\pdfvorigin\@undefined \newdimen\pdfvorigin \fi
- \fi\fi
- }%
+ \fi\fi}%
+% \end{macrocode}
+% エンジンが |platex-ng| の時は |geometry| のドライバを |pdftex| にする。
+% \begin{macrocode}
\ifjsWithpTeXng
\ifx\Gm@driver\@empty
\def\Gm@driver{pdftex}%
\fi
- \fi
- }{}}
+ \fi}
% \end{macrocode}
-% \end{macro}
%
% \begin{macro}{\setpagelayout}
% ページレイアウト設定のためのユーザ命令。
-% \begin{itemize}
-% \item |\setpagelayout{|\meta{text}|}| : 現在の geometry の設定の
-% 一部を修正する。
-% \item |\setpagelayout*{|\meta{text}|}| : 用紙以外の設定をリセットして、
-% 改めて設定を行う。
-% \end{itemize}
-% どちらも設定の後で後処理 |\bxjs@postproc@layout| を実行する。
% \begin{macrocode}
\def\setpagelayout{%
\bxjs@ifplus{\bxjs@setpagelayout@a\tw@}{%else
@@ -3481,18 +3487,20 @@
\or% semireset(+)
\def\bxjs@next{reset,\bxjs@layout@paper,\bxjs@layout@base,#2}%
\fi
- \bxjs@geometry@guard@on
+ \bxjs@preproc@layout
\edef\bxjs@next{%
\noexpand\geometry{\bxjs@next}%
}\bxjs@next
- \bxjs@geometry@guard@off
\bxjs@postproc@layout}
% \end{macrocode}
% \end{macro}
%
-% |geometry=class|の場合の処理はここで終わり。
+% \end{ZRnote}
%
-% 次に、|geometry=user|の場合の処理。
+% \paragraph{geometry パッケージを読み込まない \ZRX}
+% \mbox{}
+% \begin{ZRnote}
+% |geometry=user|の場合の処理。
% \begin{macrocode}
\else\ifx\bxjs@geometry\bxjs@geometry@user
% \end{macrocode}
@@ -3503,13 +3511,11 @@
% のままになっている場合はエラーを出す。
% \Note |\jsUseMinimalPageLayout| は動作テスト用。
% \begin{macrocode}
-\AtBeginDocument{\bxjs@check@page@layout}
-\@onlypreamble\bxjs@check@page@layout
-\def\bxjs@check@page@layout{%
+\g@addto@macro\bxjs@begin@document@hook{%
\ifdim\textwidth=.5\maxdimen
\ClassError\bxjs@clsname
{Page layout is not properly set}%
- {\@ehd}
+ {\@ehd}%
\fi}
\def\jsUseMinimalPageLayout{%
\setlength{\textwidth}{6.5in}%
@@ -3526,21 +3532,19 @@
\ClassError\bxjs@clsname
{Command '\string\setpagelayout' is not supported,\MessageBreak
because 'geometry' value is not 'class'}\@eha}
-% \end{macrocode}
%
-% |geometry=user|の場合の処理はここで終わり。
-% \begin{macrocode}
\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}
-% \end{ZRnote}
-%
-% \begin{ZRnote}
% \Note diffが崩壊するのを避けるためオリジナルのコードを無効化した状態で
% 挿入しておく。
% \end{ZRnote}
@@ -7471,7 +7475,7 @@
% \begin{macrocode}
\def\everyparhook{\jsInhibitGlueAtParTop}
\ifnum\bxjs@everyparhook=\bxjs@everyparhook@compat
-\AtBeginDocument{\everypar{\everyparhook}}
+\g@addto@macro\bxjs@begin@document@hook{\everypar{\everyparhook}}
\fi
% \end{macrocode}
% \end{macro}
@@ -7826,6 +7830,7 @@
% \end{ZRnote}
%
% \begin{macrocode}
+\@onlypreamble\bxjs@decl@Seireki@cmds
\@tempswafalse
\if p\jsEngine \@tempswatrue \fi
\if n\jsEngine \@tempswatrue \fi
@@ -7883,8 +7888,25 @@
\def\bxjs@gengo{平成}\advance\bxjs@jayear-1988\relax
\let\heisei\bxjs@jayear
\else
-% 新元号対応
-% \def\bxjs@gengo{新元号}\advance\bxjs@jayear-2018\relax
+% \end{macrocode}
+% 現在が新元号である場合。
+% |bxwareki| とかムニャムニャとかを試してみる。
+% \begin{macrocode}
+ \IfFileExists{bxwareki.sty}{\IfFileExists{bxwareki2019.def}{%
+ \RequirePackage{bxwareki}[]%
+ \let\bxjs@gengo\WarekiGengo
+ }{}}{}%
+ \if l\jsEngine \ifx\bxjs@gengo\@empty
+ \toks@{}
+ \directlua{pcall(function()
+ tex.toks[0] = bxjs.get_new_gengo()
+ end)}
+ \edef\bxjs@gengo{\the\toks@}
+ \fi\fi
+% \end{macrocode}
+% 新元号が既知の場合にのみ、和暦の年を求める。
+% \begin{macrocode}
+ \ifx\bxjs@gengo\@empty\else \advance\bxjs@jayear-2018\relax \fi
\fi\fi\fi
\edef\jayear{%
\ifx\bxjs@gengo\@empty \the\bxjs@jayear\bxjs@iai
@@ -7925,7 +7947,7 @@
% texjporg版の日本語用Babel定義ファイル(|japanese.ldf|)が読み込まれた
% 場合に影響を受けないようにする。
% \begin{macrocode}
-\AtBeginDocument{%
+\g@addto@macro\bxjs@begin@document@hook{%
\ifx\bbl@jpn@Seirekitrue\@undefined\else
\bxjs@decl@Seireki@cmds
\g@addto@macro\datejapanese{%
@@ -7969,17 +7991,17 @@
% \mbox{}
% \begin{ZRnote}
%
+% フックを実行する。
+% \begin{macrocode}
+\bxjs@pre@jadriver@hook
+% \end{macrocode}
% 和文ドライバのファイルを読み込む。
% \begin{macrocode}
-\catcode`\?=12
-\ifx\bxjs@jadriver\relax\else
\input{bxjsja-\bxjs@jadriver.def}
-\fi
% \end{macrocode}
%
-% 最後に日本語文字のカテゴリコードを元に戻す。
+% おしまい。
% \begin{macrocode}
-\bxjs@restore@jltrcc
%</cls>
% \end{macrocode}
%
@@ -8136,7 +8158,7 @@
\@onlypreamble\bxjs@if@sf@default
\def\bxjs@if@sf@default#1{%
\ifx\familydefault\bxjs@@CSsfdefault#1\fi
- \AtBeginDocument{%
+ \g@addto@macro\bxjs@begin@document@hook{%
\ifx\familydefault\bxjs@@CSsfdefault#1\fi}%
}
% \end{macrocode}
@@ -8310,17 +8332,17 @@
%
% 既に使用されている標準和文フォント定義がもしあれば取り消す。
% \begin{macrocode}
-\def\bxjs@tmpa#1/#2/#3/#4/#5\relax{%
- \def\bxjs@y{#5}}
-\ifjsWithpTeXng \def\bxjs@y{10}%
+\def\bxjs@next#1/#2/#3/#4/#5\relax{%
+ \def\bxjs@tmpb{#5}}
+\ifjsWithpTeXng \def\bxjs@tmpb{10}%
\else
-\expandafter\expandafter\expandafter\bxjs@tmpa
+\expandafter\expandafter\expandafter\bxjs@next
\expandafter\string\the\jfont\relax
\fi
-\@for\bxjs@x:={\jsc@JYn/mc/m/n,\jsc@JYn/gt/m/n,%
+\@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@x/10\endcsname=\@undefined
- \expandafter\let\csname\bxjs@x/\bxjs@y\endcsname=\@undefined}
+ {\expandafter\let\csname\bxjs@tmpa/10\endcsname=\@undefined
+ \expandafter\let\csname\bxjs@tmpa/\bxjs@tmpb\endcsname=\@undefined}
% \end{macrocode}
%
% \paragraph{和文フォントスケールの補正}
@@ -8403,7 +8425,8 @@
\selectfont
% \end{macrocode}
%
-% |\bxjs@parse@qh| の処理は不要になるので無効化する。
+% |\bxjs@parse@qh| の処理は{\pTeX}系では不要になるので無効化する
+% (つまり |\jsSetQHLength| は |\setlength| と等価になる)。
% \begin{macrocode}
\def\bxjs@parse@qh#1{\let\bxjs@tmpb\relax}
\let\bxjs@parse@qh@a\@undefined
@@ -8506,7 +8529,7 @@
\relax}%
\let\bxjs@cjk@loaded\relax
}
-\AtBeginDocument{%
+\g@addto@macro\bxjs@begin@document@hook{%
\@ifpackageloaded{CJK}{%
\bxjs@cjk@loaded
}{}%
@@ -8537,6 +8560,7 @@
% \begin{macro}{\bxjs@do@precisetext}
% |precisetext| オプションの処理。
% \begin{macrocode}
+\@onlypreamble\bxjs@do@precisetext
\ifx\XeTeXgenerateactualtext\@undefined\else
\def\bxjs@do@precisetext{%
\XeTeXgenerateactualtext=\@ne}
@@ -8576,7 +8600,7 @@
% |simplejasetup| オプションの処理。
% \begin{macrocode}
\ifx\bxjs@do@simplejasetup\@undefined\else
- \AtBeginDocument{%
+ \g@addto@macro\bxjs@begin@document@hook{%
\ifbxjs@simplejasetup
\bxjs@do@simplejasetup
\fi}
@@ -8588,8 +8612,8 @@
\ifbxjs@precisetext
\ifx\bxjs@do@precisetext\@undefined
\ClassWarning\bxjs@clsname
- {The current engine does not supprt the\MessageBreak
- 'precisetext' option\@gobble}
+ {The current engine does not support the\MessageBreak
+ 'precise-text' option\@gobble}
\else
\bxjs@do@precisetext
\fi
@@ -8598,22 +8622,18 @@
%
% \paragraph{段落頭でのグルー挿入禁止}
%
-% \begin{macro}{\bxjs@check@everyparhook}
% 本体開始時において |\everyparhook| を検査して、
% “結局何もしない”ことになっている場合は、
% 副作用を完全に無くすために |\everyparhook| を空にする。
% \begin{macrocode}
-\@onlypreamble\bxjs@check@everyparhook
-\def\bxjs@check@everyparhook{%
+\g@addto@macro\bxjs@begin@document@hook{%
\ifx\jsInhibitGlueAtParTop\@empty
\def\bxjs@tmpa{\jsInhibitGlueAtParTop}%
\ifx\everyparhook\bxjs@tmpa
\let\everyparhook\@empty
\fi
\fi}
-\AtBeginDocument{\bxjs@check@everyparhook}
% \end{macrocode}
-% \end{macro}
%
% |everyparhook=modern| の場合の、|\everyparhook| の有効化の実装。
% \Note 本体開始時ではなく最初から有効化していることに注意。
@@ -8707,7 +8727,7 @@
% begin-document フック。
% \Note これ以降に |fancyhdr| が読み込まれることはあり得ない。
% \begin{macrocode}
-\AtBeginDocument{%
+\g@addto@macro\bxjs@begin@document@hook{%
\bxjs@pagestyle@hook
\global\let\bxjs@pagestyle@hook\relax}
% \end{macrocode}
@@ -9278,7 +9298,7 @@
% \begin{macrocode}
\@onlypreamble\jsCheckHyperrefUnicode
\let\jsCheckHyperrefUnicode\@empty
-\AtBeginDocument{\jsCheckHyperrefUnicode}
+\g@addto@macro\bxjs@begin@document@hook{\jsCheckHyperrefUnicode}
% \end{macrocode}
% \end{macro}
%
@@ -9311,7 +9331,7 @@
\@onlypreamble\bxjs@urgent@special
\def\bxjs@urgent@special#1{%
\AtBeginDvi{\special{#1}}%
- \AtBeginDocument{%
+ \g@addto@macro\bxjs@begin@document@hook{%
\@ifpackageloaded{atbegshi}{%
\begingroup
\toks\z@{\special{#1}}%
@@ -9326,10 +9346,14 @@
%
% \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
@@ -9452,16 +9476,16 @@
%
% \begin{macrocode}
\begingroup
- \global\let\@gtempa\relax
+ \global\let\bxjs@g@tmpa\relax
\catcode`\|=0 \catcode`\\=12
- |def|bxjs@check#1|@nil{%
- |bxjs@check@a#1|@nil\RequirePackage|@nnil}%
- |def|bxjs@check@a#1\RequirePackage#2|@nnil{%
- |ifx$#1$|bxjs@check@b#2|@nil keyval|@nnil |fi}%
+ |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@check@b#1keyval#2\@nnil{%
+ \def\bxjs@tmpdo@b#1keyval#2\@nnil{%
\ifx$#2$\else
- \xdef\@gtempa{%
+ \xdef\bxjs@g@tmpa{%
\noexpand\PassOptionsToPackage{scale=\jsScale}{otf}}%
\fi}
\@firstofone{%
@@ -9472,13 +9496,13 @@
\loop\if@tempswa
\ifeof\@inputcheck \@tempswafalse \fi
\if@tempswa
- \read\@inputcheck to\bxjs@line
- \expandafter\bxjs@check\bxjs@line\@nil
+ \read\@inputcheck to\bxjs@next
+ \expandafter\bxjs@tmpdo\bxjs@next\@nil
\fi
\repeat
\closein\@inputcheck
\endgroup}
-\@gtempa
+\bxjs@g@tmpa
% \end{macrocode}
%
% \paragraph{hyperref対策}
@@ -9528,7 +9552,7 @@
\SetSymbolFont{mincho}{bold}{\jsc@JYn}{gt}{m}{n}
\jfam\symmincho
\DeclareMathAlphabet{\mathgt}{\jsc@JYn}{gt}{m}{n}
- \AtBeginDocument{%
+ \g@addto@macro\bxjs@begin@document@hook{%
\ifx\reDeclareMathAlphabet\@undefined\else
\reDeclareMathAlphabet{\mathrm}{\@mathrm}{\@mathmc}%
\reDeclareMathAlphabet{\mathbf}{\@mathbf}{\@mathgt}%
@@ -9880,7 +9904,7 @@
\DeclareRobustCommand\ttfamily
{\not@math@alphabet\ttfamily\mathtt
\romanfamily\ttdefault\kanjifamily\gtdefault\selectfont}
-\AtBeginDocument{%
+\g@addto@macro\bxjs@begin@document@hook{%
\reDeclareMathAlphabet{\mathrm}{\mathrm}{\mathmc}
\reDeclareMathAlphabet{\mathbf}{\mathbf}{\mathgt}%
\reDeclareMathAlphabet{\mathsf}{\mathsf}{\mathgt}}%
@@ -10189,7 +10213,7 @@
\ifbxjs@dlp \expandafter\bxjs@do@dupload@proc
\else \expandafter\bxjs@org@if@ptions
\fi {#1}{#2}{#3}}
-\AtBeginDocument{%
+\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{%
@@ -10276,7 +10300,7 @@
% Pandocがプレアンブルで行う再定義の結果を調べるため、
% begin-documentフックを利用する。
% \begin{macrocode}
-\AtBeginDocument{%
+\g@addto@macro\bxjs@begin@document@hook{%
\@tempswafalse
% \end{macrocode}
% まず、マーク変更が必要かを調べる。
@@ -10518,6 +10542,33 @@
range(0x2CEA2, 0x2FFFD, 11, true)
}\fi
% \end{macrocode}
+%
+% 新元号のムニャムニャ。
+% \begin{macrocode}
+\begingroup
+ \catcode`\~=12 \let\0\relax \let\1\relax \let\2\relax
+ \directlua{
+ if not bxjs then bxjs = {} end
+ function bxjs.get_new_gengo()
+ local lc_time = nil
+ local ok, ret = pcall(function()
+ assert(os.type == "unix")
+ lc_time = os.setlocale(nil, "time")
+ assert(os.setlocale("ja_JP.utf8", "time") or
+ os.setlocale("ja_JP.UTF-8", "time"))
+ local heisei = "\229\185\179\230\136\144"
+ local kanji = "[\228-\233][\128-\191][\128-\191]"
+ local gh = os.date("\037EC", 1500000000)
+ local gn = os.date("\037EC", 1600000000)
+ assert(gh == heisei and gn ~= heisei and
+ gn:match("^"..kanji..kanji.."$"))
+ return gn
+ end)
+ os.setlocale(lc_time, "time")
+ return ok and ret or ""
+ end}
+\endgroup
+% \end{macrocode}
% 以上。
% \begin{macrocode}
\fi
@@ -10542,28 +10593,31 @@
%<*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@do#1#2{%
+\def\bxjx@tmpdo#1#2{%
\edef\bxjx@tmpa{\string#1}%
\edef\bxjx@tmpb{\meaning#1}%
\ifx\bxjx@tmpa\bxjx@tmpb #2\fi}
-\bxjx@do\kanjiskip{\let\bxjx@engine=j}
-\bxjx@do\enablecjktoken{\let\bxjx@engine=u}
-\bxjx@do\XeTeXversion{\let\bxjx@engine=x}
-\bxjx@do\pdftexversion{\let\bxjx@engine=p}
-\bxjx@do\luatexversion{\let\bxjx@engine=l}
+\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@do#1#2{%
+\def\bxjx@tmpdo#1#2{%
\if#1\bxjx@engine
\@ifpackageloaded{#2}{}{%else
\PackageError\bxjx@pkgname
@@ -10571,9 +10625,9 @@
{Package loading is aborted.\MessageBreak\@ehc}%
\endinput}
\fi}
-\bxjx@do{p}{bxcjkjatype}
-\bxjx@do{x}{xeCJK}
-\bxjx@do{l}{luatexja}
+\bxjx@tmpdo{p}{bxcjkjatype}
+\bxjx@tmpdo{x}{xeCJK}
+\bxjx@tmpdo{l}{luatexja}
% \end{macrocode}
%
% 古い{\LaTeX}の場合、|\TextOrMath| は |fixltx2e| パッケージで
@@ -10594,43 +10648,60 @@
% |A830|、|A960|、|1B000|。
% \begin{macrocode}
\if u\bxjx@engine
-\@for\bxjx@x:={%
+\@for\bxjx@tmpa:={%
0080,0100,0180,0250,02B0,0300,0500,0530,0590,0600,%
-0700,0750,0780,07C0,0800,0840,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,1CC0,1CD0,1D00,%
-1D80,1DC0,1E00,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,%
+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,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,11480,11580,11600,11680,11700,%
-118A0,11AC0,12000,12400,12480,13000,14400,16800,%
+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,1E800,1EE00,1F000,%
-1F030,1F0A0,1F100,1F200,1F300,1F600,1F650,1F680,%
-1F700,1F780,1F800,1F900,E0000,F0000,100000%
-}\do{\kcatcode"\bxjx@x=15 }
+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{ギリシャ・キリル文字の扱い}
%
-% \Note ここで「ギリシャ・キリル文字」はUnicodeとJIS X 0213に
-% 共通して含まれるもののみを指すことにする。
+% 「特定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
@@ -10758,35 +10829,51 @@ D800,DB80,DC00,E000,FB00,FB50,FE00,FE70,%
}
% \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}
-% ギリシャ・キリル文字を和文扱いにする。
-% \begin{macro}{\nogreekasCJK}
-% ギリシャ・キリル文字を欧文扱いにする。
+% 〔公開命令〕
+% 「特定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}
-% \end{macro}
%
-% \begin{macro}{\bx@fake@grk}
-% |\bx@fake@grk{|\Meta{出力文字}|}{|\Meta{基準文字}|}|\Means
+% \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@do#1\relax{%
+\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{%
@@ -10795,16 +10882,23 @@ D800,DB80,DC00,E000,FB00,FB50,FE00,FE70,%
\multiply\bxjx@cnta\@cclvi \advance\bxjx@cnta`##3\relax
\mathchar\bxjx@cnta
\else ##3\fi}
-}\expandafter\bxjx@do\string\mathchar\relax
+}\expandafter\bxjx@tmpdo\string\mathchar\relax
% \end{macrocode}
% \end{macro}
%
-% \paragraph{pdfLaTeX・upLaTeXの場合}
+% \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}}
@@ -10816,8 +10910,8 @@ D800,DB80,DC00,E000,FB00,FB50,FE00,FE70,%
\fi
% \end{macrocode}
%
-% up{\LaTeX}の場合は当該の文字を含むブロックをの和文カテゴリコード
-% を変更する。
+% {\upTeX}の場合に、「特定曖昧CJK文字」を含む
+% ブロックの和文カテゴリコードを変更する。
% \begin{macrocode}
\if u\bxjx@engine
\kcatcode"0370=15
@@ -10827,69 +10921,104 @@ D800,DB80,DC00,E000,FB00,FB50,FE00,FE70,%
% \end{macrocode}
% 各文字について |\DeclareUnicodeCharacter| を実行する。
% \begin{macrocode}
-\def\do#1{%
+\def\bxjx@tmpdo#1{%
\@tempcnta="#1\relax
- \@tempcntb=\@tempcnta \divide\@tempcntb256
- \expandafter\let\csname bxjx@KCR/\the\@tempcntb\endcsname=t%
- \expandafter\bxjx@do@a\csname bxjx@KC/\the\@tempcnta\endcsname{#1}}
-\def\bxjx@do@a#1#2#3#4#5{%
+ \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@do@b{#1}{#2}{#3}{#4}}%
+ \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
-% {\bxjx@KC/NN}{XXXX}{ENC}{\textCS}{\mathCS}
-\def\bxjx@do@b#1#2#3#4#5{%
+\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@do@b#1#2#3#4#5{%
+\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
-\bxjx@grkcyr@list
-\let\bxjx@do@a\undefined
-\let\bxjx@do@b\undefined
+% \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 \bxjx@cnta\count@ \divide\bxjx@cnta256
- \expandafter\ifx\csname bxjx@KCR/\the\bxjx@cnta\endcsname\relax
- \bxjx@org@DeclareUnicodeCharacter{#1}{#2}%
- \else\expandafter\ifx\csname bxjx@KC/\the\count@\endcsname\relax
+ \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\fi}
+ \fi}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\bxjx@ja@or@not}
-% |\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| の場合は、無条件に和文用コードを実行する。
+% |\greekasCJK| の場合は、無条件に\Meta{和文用定義}を実行する。
% \begin{macrocode}
\ifbxjx@gcc@cjk #1%
% \end{macrocode}
-% |\nogreekasCJK| の場合は、エンコーディングを固定して欧文用の
-% コードを実行するが、そのエンコーディングが未定義の場合は
-% (フォールバックとして)和文用コードを使う。
+% |\nogreekasCJK| の場合は、対象のエンコーディングに変更してLICRを
+% 実行するが、そのエンコーディングが未定義の場合は
+% (フォールバックとして)和文用定義を使う。
% \begin{macrocode}
\else\expandafter\ifx\csname T@#2\endcsname\relax #1%
\else \UseTextSymbol{#2}{#3}%
@@ -10912,26 +11041,32 @@ D800,DB80,DC00,E000,FB00,FB50,FE00,FE70,%
\def\bxjx@swap@DUC@cmd{%
\let\bxjx@tmpa\DeclareUnicodeCharacter
\let\DeclareUnicodeCharacter\bxjx@DeclareUnicodeCharacter
- \let\bxjx@DeclareUnicodeCharacter\bxjx@tmpa}
+ \let\bxjx@DeclareUnicodeCharacter\bxjx@tmpa
+ \let\bxjx@tmpa\relax}
% \end{macrocode}
% \end{macro}
%
% 以上。
%
-% \paragraph{{\XeLaTeX}・Lua{\LaTeX}の場合}
+% \paragraph{{\XeTeX}・Lua{\TeX}の場合}
% \begin{macrocode}
\else\ifnum0\if x\bxjx@engine1\fi\if l\bxjx@engine1\fi>0
% \end{macrocode}
%
-% 各文字について、math activeを設定する。
+% 各文字について、数式中の動作を定義する。
% \begin{macrocode}
-\def\do#1{%
+\def\bxjx@tmpdo#1{%
\bxjx@cnta="#1\relax
\begingroup
\lccode`~=\bxjx@cnta
\lowercase{\endgroup
- \bxjx@do@a{~}}{#1}}
-\def\bxjx@do@a#1#2#3#4#5{%
+ \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}%
@@ -10943,15 +11078,17 @@ D800,DB80,DC00,E000,FB00,FB50,FE00,FE70,%
\fi}
% \end{macrocode}
% 「Unicodeな数式」の設定が行われているかを(簡易的に)検査して、
-% そうでない場合にのみ、こちらの設定を有効にする。
+% そうでない場合にのみ、以上の処理を「特定CJK曖昧文字」の各々に適用する。
% \begin{macrocode}
\mathchardef\bxjx@tmpa="119
-\ifx\bxjx@tmpa\pi \bxjx@grkcyr@list \fi
-\let\bxjx@do@a\undefined
+\ifx\bxjx@tmpa\pi \let\do\bxjx@tmpdo \bxjx@grkcyr@list \fi
% \end{macrocode}
%
-% Lua{\TeX}における |\(no)greekasCJK| の定義。
-% |jacharrange| の設定を変更する。
+% 次に、テキストにおいて「特定CJK曖昧文字」の扱いが |\|[|no|]|greekasCJK|
+% で切り替わるようにする。
+%
+% Lua{\TeX}の場合は、Lua{\TeX}-jaの |jacharrange| の設定を変更する。
+% \Note “範囲2”がギリシャ・キリル文字、“範囲8”がLatin-1の記号。
% \begin{macrocode}
\if l\bxjx@engine
\protected\def\greekasCJK{%
@@ -10963,17 +11100,21 @@ D800,DB80,DC00,E000,FB00,FB50,FE00,FE70,%
\fi
% \end{macrocode}
%
-% {\XeTeX}における |\(no)greekasCJK| の定義。
+% {\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
- \def\do##1##2##3##4{\XeTeXcharclass"##1\@ne}%
- \bxjx@grkcyr@list}
+ \bxjx@cnta=\@ne \bxjx@gcc@cjk@list}
\protected\def\nogreekasCJK{%
\bxjx@gcc@cjkfalse
- \def\do##1##2##3##4{\XeTeXcharclass"##1\z@}%
- \bxjx@grkcyr@list}
+ \bxjx@cnta=\z@ \bxjx@gcc@cjk@list}
\fi
% \end{macrocode}
%
@@ -10984,7 +11125,7 @@ D800,DB80,DC00,E000,FB00,FB50,FE00,FE70,%
%
%^^A----------------
% \subsection{初期設定}
-% ギリシャ・キリル文字を欧文扱いにする。
+% 「特定CJK曖昧文字」を欧文扱いにする。
% \begin{macrocode}
\nogreekasCJK
% \end{macrocode}
@@ -11039,6 +11180,7 @@ D800,DB80,DC00,E000,FB00,FB50,FE00,FE70,%
% 特定のファイルを(|\@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{%
@@ -11054,6 +11196,7 @@ D800,DB80,DC00,E000,FB00,FB50,FE00,FE70,%
% |\pandocSkipLoadPackage{|\Meta{パッケージ名}|}|\Means
% |\pandocSkipLoadFile| の機能を用いてパッケージの読込を阻止する。
% \begin{macrocode}
+\@onlypreamble\pandocSkipLoadPackage
\newcommand*\pandocSkipLoadPackage[1]{%
\pandocSkipLoadFile{#1.sty}}
% \end{macrocode}
@@ -11161,7 +11304,7 @@ D800,DB80,DC00,E000,FB00,FB50,FE00,FE70,%
%
% |\ldots| の実装を置き換える。
% \begin{macrocode}
-\AtBeginDocument{%
+\g@addto@macro\bxjs@begin@document@hook{%
\let\bxjsp@org@ldots\ldots
\let\ldots\pandocLdots}
% \end{macrocode}