From d310a5884150cb8753e7fbea759cc579c2a305b4 Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Mon, 30 Apr 2018 22:40:21 +0000 Subject: bxjscls (30apr18) git-svn-id: svn://tug.org/texlive/trunk@47517 c570f23f-e606-0410-a88d-b1316a301751 --- Master/texmf-dist/source/latex/bxjscls/bxjscls.dtx | 911 ++++++++++++--------- 1 file changed, 527 insertions(+), 384 deletions(-) (limited to 'Master/texmf-dist/source') 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} % - [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 @@ %\ExecuteOptions{a4paper,oneside,onecolumn,titlepage,openany,final} %\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 % % \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 % % \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} -- cgit v1.2.3