diff options
author | Karl Berry <karl@freefriends.org> | 2024-01-30 21:07:59 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2024-01-30 21:07:59 +0000 |
commit | a49f9d08021990c92110e43b4dc073e3638c366b (patch) | |
tree | d58e4dde6100231cddf34ce2aef465398f63b73a /Master/texmf-dist/source | |
parent | fd74b232df8bff4305cfbc279c83539b1e955959 (diff) |
bxjscls (29jan24)
git-svn-id: svn://tug.org/texlive/trunk@69637 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/source')
-rw-r--r-- | Master/texmf-dist/source/latex/bxjscls/bxjscls.dtx | 776 |
1 files changed, 445 insertions, 331 deletions
diff --git a/Master/texmf-dist/source/latex/bxjscls/bxjscls.dtx b/Master/texmf-dist/source/latex/bxjscls/bxjscls.dtx index 99eb85ec9ef..d8708af2d9f 100644 --- a/Master/texmf-dist/source/latex/bxjscls/bxjscls.dtx +++ b/Master/texmf-dist/source/latex/bxjscls/bxjscls.dtx @@ -33,7 +33,7 @@ % Copyright 1999-2016 Haruhiko Okumura % Copyright 2016-2023 Japanese TeX Development Community % -% Copyright 2013-2023 Takayuki YATO (aka. "ZR") +% Copyright 2013-2024 Takayuki YATO (aka. "ZR") % % \fi % \CheckSum{0} @@ -56,7 +56,9 @@ %<*driver> \ProvidesFile{bxjscls.dtx} %</driver> - [2023/07/17 v2.9 BXJS document classes] + [2024/01/22 v2.9b BXJS document classes] +% [2023/08/02 v2.9a BXJS document classes] +% [2023/07/17 v2.9 BXJS document classes] % [2023/07/01 v2.8b BXJS document classes] % [2023/06/20 v2.8a BXJS document classes] % [2023/06/14 v2.8 BXJS document classes] @@ -793,6 +795,34 @@ % \end{macrocode} % \end{macro} % +% \begin{macro}{\bxjs@advance@qc} +% |\bxjs@advance@qc\CS{|\Meta{値}|}|\Means +% 擬似整数レジスタに値を加算する。 +% \begin{macrocode} +\def\bxjs@advance@qc#1#2{% + \begingroup + \@tempcnta=#1\relax \advance\@tempcnta by#2\relax + \global\chardef\bxjs@g@tmpa\@tempcnta + \endgroup \let#1\bxjs@g@tmpa} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\bxjs@new@count} +% \begin{macro}{\bxjs@advance@count} +% {\eTeX}拡張が有効なら通常の整数レジスタ、 +% 無効なら擬似整数レジスタを用いる。 +% \begin{macrocode} +\ifjsWitheTeX + \let\bxjs@new@count\newcount + \def\bxjs@advance@count#1#2{\advance#1by#2\relax} +\else + \def\bxjs@new@count#1{\chardef#1\z@} + \let\bxjs@advance@count\bxjs@advance@qc +\fi +% \end{macrocode} +% \end{macro} +% \end{macro} +% % \begin{macro}{\jsSetQHLength} % |\jsSetQHLength\CS{|\Meta{長さ式}|}|\Means % |\setlength| の変種で、通常の |calc| の長さ式の代わりに、 @@ -3583,7 +3613,7 @@ % % \begin{macrocode} \chardef\bxjs@periodchar=`\. -\bxjs@protected\def\bxjs@SE{% +\bxjs@robust@def\bxjs@SE{% \ifnum\spacefactor<\@m \spacefactor\@m \else \spacefactor\sfcode\bxjs@periodchar \fi} @@ -7615,9 +7645,9 @@ % \begin{macro}{\disallowoldfontcommands} % “二文字フォント命令”の使用に対して警告を出す。 % \begin{macrocode} -\newcommand*{\allowoldfontcommands}{% +\DeclareRobustCommand*{\allowoldfontcommands}{% \@jsc@warnoldfontcmdexceptiontrue} -\newcommand*{\disallowoldfontcommands}{% +\DeclareRobustCommand*{\disallowoldfontcommands}{% \@jsc@warnoldfontcmdexceptionfalse} % \end{macrocode} % \end{macro} @@ -9140,17 +9170,6 @@ % \end{macrocode} % % -% \paragraph{BXJS独自の追加処理 \ZRX} -% -% フックを実行する。 -% \begin{macrocode} -\bxjs@pre@jadriver@hook -% \end{macrocode} -% 和文ドライバのファイルを読み込む。 -% \begin{macrocode} -\input{bxjsja-\bxjs@jadriver.def} -% \end{macrocode} -% % \section{実験的コード} % % \begin{ZRnote} @@ -9164,11 +9183,359 @@ % exppl2eパッケージが読みこまれていない場合は通常版として動作しますので, % ここで終了します。 % +% 以上です。 +% +% \section{BXJS独自の追加処理 \ZRX} +% +% \paragraph{\textbackslash strong命令の補填} +% +% |fontspec| で提供される |\strong| 命令と |strongenv| 環境を +% 全てのエンジンで使えるようにする。 +% \Note この実装は特にエンジンや和文処理パッケージに依存しないはず +% であるが、現状ではstandard和文ドライバでの提供となっていて、 +% そこで有効化のオプションが定義されている。 +% ここでは |\js~| の名前で定義することにする。 +% +% \begin{macro}{\jsStrongText} +% 強調用の宣言型命令。 % \begin{macrocode} -%</class> +\bxjs@robust@def\jsStrongText{\bxjs@strong@text}% % \end{macrocode} +% |fontspec| と互換の |\strongfontdeclare| 命令も提供する。 +% 既定の設定は |\bfseries|(太字)である。 +% \Note |\strongfontdeclare| は試験的機能とする。 +% \begin{macrocode} +\chardef\bxjs@strong@level=0 +\DeclareRobustCommand*\jsStrongDeclare[1]{% + \bxjs@set@array@from@clist{bxjs@strong}{#1}% + \chardef\bxjs@strong@level\z@} +\jsStrongDeclare{\bfseries} +\def\bxjs@strong@text{% + \bxjs@csletcs{bxjs@tmpa}{bxjs@strong/\the\bxjs@strong@level}% + \ifx\bxjs@tmpa\relax + \bxjs@advance@qc\bxjs@strong@level\m@ne \bxjs@strong@text + \else \bxjs@advance@qc\bxjs@strong@level\@ne \bxjs@tmpa + \fi} +% \end{macro} % -% 以上です。 +% \paragraph{共通命令の実装} +% +% |\jQ| 等の「単位」系の共通命令を実装する。 +% +% \begin{macro}{\bxjs@const@unit} +% 固定値の単位として使える制御綴を定義する。 +% +% {\eTeX}拡張が使える場合は、 +% 「|\dimexpr|外部寸法表記|\relax|」の形式 +% (これは内部値なので単位として使える) +% に展開されるマクロとして定義する。 +% \begin{macrocode} +\@onlypreamble\bxjs@const@unit +\@onlypreamble\bxjs@const@unit@a +\ifjsWitheTeX + \def\bxjs@const@unit#1#2#3{% + \protected\edef#1{\dimexpr\the\dimexpr#3\relax\relax}} +% \end{macrocode} +% {\eTeX}拡張が使えない場合は、何らかの寸法パラメタに値を保持する必要が +% あるが、レジスタは貴重なので代わりに +% 「ダミーのTFMを定義してその |\fontdimen| を使う」 +% というテクニックを用いる(アレ)。 +% \begin{macrocode} +\else + \let\bxjs@Ct\fontdimen \font\bxjs@Ut=cmtex9 at 0.98245pt + \bxjs@Ct8\bxjs@Ut=8sp \bxjs@Ct16\bxjs@Ut=\z@ + \def\bxjs@const@unit#1#2{% + \expandafter\bxjs@const@unit@a\csname bxjs@#2@\endcsname#1} + \def\bxjs@const@unit@a#1#2#3{% + \chardef#1\bxjs@Ct8\bxjs@Ut \bxjs@advance@qc#1\@ne \bxjs@Ct8\bxjs@Ut#1sp + \bxjs@Ct#1\bxjs@Ut=#3\relax \def#2{\bxjs@Ct#1\bxjs@Ut}} +\fi +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\jQ} +% \begin{macro}{\jH} +% |\jQ| と |\jH| はともに0.25\,mmに等しい。 +% \begin{macrocode} +\bxjs@const@unit\jQ{jQ}{0.25mm} +\let\jH\jQ +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\trueQ} +% \begin{macro}{\trueH} +% |\trueQ| と |\trueH| はともに0.25\,true\,mmに等しい。 +% \begin{macrocode} +\ifjsc@mag + \@tempdimb=\jsBaseFontSize\relax + \edef\bxjs@tmpa{\strip@pt\@tempdimb}% + \@tempdima=2.5mm + \bxjs@invscale\@tempdima\bxjs@tmpa + \bxjs@const@unit\trueQ{trueQ}{\@tempdima} + \@tempdima=10pt + \bxjs@invscale\@tempdima\bxjs@tmpa + \bxjs@const@unit\bxjs@truept{truept}{\@tempdima} +\else \let\trueQ\jQ \let\bxjs@truept\p@ +\fi +\let\trueH\trueQ +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\ascQ} +% \begin{macro}{\ascpt} +% |\ascQ| は |\trueQ| を和文スケール値で割った値。 +% 例えば、|\fontsize{12\ascQ}{16\trueH}| とすると、 +% 和文が12Qになる。 +% +% 同様に、|\ascpt| は |truept| を和文スケールで割った値。 +% \begin{macrocode} +\@tempdima\trueQ \bxjs@invscale\@tempdima\jsScale +\bxjs@const@unit\ascQ{ascQ}{\@tempdima} +\@tempdima\bxjs@truept \bxjs@invscale\@tempdima\jsScale +\bxjs@const@unit\ascpt{ascpt}{\@tempdima} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\jafontsize} +% |\jafontsize{|\Meta{フォントサイズ}|}{|\Meta{行送り}|}|\Means +% 和文フォント規準で、すなわち、1\,zwが\Meta{フォントサイズ}に +% 等しくなるようにフォントサイズを指定する。 +% この命令の引数では、|Q|/|H| の単位が使用できる。 +% \begin{macrocode} +\DeclareRobustCommand*\jsJaFontSize[2]{% + \begingroup + \bxjs@jafontsize@a{#1}% + \@tempdimb\jsInverseScale\@tempdima + \bxjs@jafontsize@a{#2}% + \xdef\bxjs@g@tmpa{% + \noexpand\fontsize{\the\@tempdimb}{\the\@tempdima}}% + \endgroup\bxjs@g@tmpa} +\def\bxjs@jafontsize@a#1{% + \bxjs@parse@qh{#1}% + \ifx\bxjs@tmpb\relax \def\bxjs@tmpb{#1}\fi + \@defaultunits\@tempdima\bxjs@tmpb pt\relax\@nnil} +% \end{macrocode} +% \end{macro} +% +% 続いて、和文間空白・和欧文間空白関連の命令を実装する。 +% この実装はエンジンや和文処理パッケージに依存するが、 +% ここでは共通の基盤となる部分を実装する。 +% +% \begin{macrocode} +\def\bxjs@let@lenexpr{\edef} +% \end{macrocode} +% +% \begin{macro}{\bxjs@kanjiskip} +% 和文間空白の量を表すテキスト。 +% \begin{macrocode} +\def\bxjs@kanjiskip{0pt} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\jsSetKanjiSkip} +% 和文間空白の量を設定する。 +% \Note |\setkanjiskip| の実体。 +% \begin{macrocode} +\DeclareRobustCommand*\jsSetKanjiSkip[1]{% + \bxjs@let@lenexpr\bxjs@kanjiskip{#1}% + \bxjs@reset@kanjiskip} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\jsGetKanjiSkip} +% 和文間空白の量を表すテキストに展開する。 +% \Note |\getkanjiskip| の実体。 +% \begin{macrocode} +\newcommand*\jsGetKanjiSkip{% + \bxjs@kanjiskip} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\ifbxjs@kanjiskip@enabled} +% 和文間空白の挿入が有効か。 +% \Note エンジン側の機能で制御する場合は、 +% このスイッチは常に真にしておく。 +% \begin{macrocode} +\newif\ifbxjs@kanjiskip@enabled \bxjs@kanjiskip@enabledtrue +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\jsEnableKanjiSkip} +% \begin{macro}{\jsDisableKanjiSkip} +% 和文間空白の挿入を有効/無効にする。 +% \Note {\pTeX}系のエンジンや |luatexja| のパッケージを使用する場合は +% それ自体がもつ制御機能を利用するため、これらの命令は使わない。 +% \begin{macrocode} +\bxjs@robust@def\jsEnableKanjiSkip{% + \bxjs@kanjiskip@enabledtrue + \bxjs@reset@kanjiskip} +\bxjs@robust@def\jsDisableKanjiSkip{% + \bxjs@kanjiskip@enabledfalse + \bxjs@reset@kanjiskip} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\bxjs@reset@kanjiskip} +% 現在の和文間空白の設定を実際に反映させる。 +% \begin{macrocode} +\bxjs@robust@def\bxjs@reset@kanjiskip{% + \ifbxjs@kanjiskip@enabled + \setlength{\@tempskipa}{\bxjs@kanjiskip}% + \else \@tempskipa\z@ + \fi + \jsApplyKanjiSkip\@tempskipa} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\jsApplyKanjiSkip} +% |\jsApplyKanjiSkip{|\Meta{グルー値}|}|\Means +% 和文間空白を実際に設定するためのエンジン依存のコード。 +% \begin{macrocode} +\let\jsApplyKanjiSkip\@gobble +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\bxjs@xkanjiskip} +% \begin{macro}{\jsSetXKanjiSkip} +% \begin{macro}{\jsGetXKanjiSkip} +% \begin{macro}{\ifbxjs@xkanjiskip@enabled} +% \begin{macro}{\jsEnableXKanjiSkip} +% \begin{macro}{\jsDisableXKanjiSkip} +% \begin{macro}{\bxjs@reset@xkanjiskip} +% \begin{macro}{\jsApplyXKanjiSkip} +% 和欧文間空白について同様のものを用意する。 +% \begin{macrocode} +\def\bxjs@xkanjiskip{0pt} +\DeclareRobustCommand*\jsSetXKanjiSkip[1]{% + \bxjs@let@lenexpr\bxjs@xkanjiskip{#1}% + \bxjs@reset@xkanjiskip} +\newcommand*\jsGetXKanjiSkip{% + \bxjs@xkanjiskip} +\newif\ifbxjs@xkanjiskip@enabled \bxjs@xkanjiskip@enabledtrue +\bxjs@robust@def\jsEnableXKanjiSkip{% + \bxjs@xkanjiskip@enabledtrue + \bxjs@reset@xkanjiskip} +\bxjs@robust@def\jsDisableXKanjiSkip{% + \bxjs@xkanjiskip@enabledfalse + \bxjs@reset@xkanjiskip} +\bxjs@robust@def\bxjs@reset@xkanjiskip{% + \ifbxjs@xkanjiskip@enabled + \setlength{\@tempskipa}{\bxjs@xkanjiskip}% + \else \@tempskipa\z@ + \fi + \jsApplyXKanjiSkip\@tempskipa} +\let\jsApplyXKanjiSkip\@gobble +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% |\jsResetDimen| を用いて、フォントサイズが変更された時に +% 空白の量が追随するようにする。 +% \begin{macrocode} +\g@addto@macro\jsResetDimen{% + \bxjs@reset@kanjiskip + \bxjs@reset@xkanjiskip} +% \end{macrocode} +% +% 和文・和欧文間空白の初期値。 +% +% \begin{macrocode} +\AtEndOfPackage{% +\jsSetKanjiSkip{0pt plus.1\jsZw minus.01\jsZw}% +\ifx\jsDocClass\jsSlide \jsSetXKanjiSkip{0.1em}% +\else \jsSetXKanjiSkip{0.25em plus 0.15em minus 0.06em}% +\fi +} +% \end{macrocode} +% +% \paragraph{和文空白命令} +% \begin{macrocode} +\ifbxjs@jaspace@cmd +% \end{macrocode} +% +% \begin{macro}{\jaenspace} +% 半角幅の水平空き。 +% \begin{macrocode} + \def\jaenspace{\hskip.5\jsZw\relax} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\jathinspace} +% 和欧文間空白を入れるユーザ命令。 +% \begin{macrocode} + \def\jathinspace{\hskip\bxjs@xkanjiskip\relax} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\_} +% 全角空白文字1つからなる名前の制御綴。 +% |\zwspace| と等価になる。 +% \begin{macrocode} + \def\ {\zwspace} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\>} +% 非数式中では |\jathinspace| と等価になるように再定義する。 +% \Note 数式中では従来通り(|\:| と等価)。 +% \begin{macrocode} + \bxjs@protected\def\bxjs@choice@jathinspace{% + \relax\ifmmode \mskip\medmuskip + \else \jathinspace\ignorespaces + \fi} + \jsAtEndOfClass{% + \ifjsWitheTeX \let\>\bxjs@choice@jathinspace + \else \def\>{\protect\bxjs@choice@jathinspace}% + \fi} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\jaspace} +% |jlreq| クラスと互換の命令。 +% \begin{macrocode} + \DeclareRobustCommand*{\jaspace}[1]{% + \expandafter\ifx\csname bxjs@jaspace@@#1\endcsname\relax + \ClassError\bxjs@clsname + {Unknown jaspace: #1}{\@eha}% + \else + \csname bxjs@jaspace@@#1\endcsname + \fi} + \def\bxjs@jaspace@@zenkaku{\hskip 1\jsZw\relax} + \def\bxjs@jaspace@@nibu{\hskip .5\jsZw\relax} + \def\bxjs@jaspace@@shibu{\hskip .25\jsZw\relax} +% \end{macrocode} +% \end{macro} +% +% 終わり。 +% \begin{macrocode} +\fi +% \end{macrocode} +% +% \paragraph{和文ドライバ読込} +% +% フックを実行する。 +% \begin{macrocode} +\bxjs@pre@jadriver@hook +% \end{macrocode} +% 和文ドライバのファイルを読み込む。 +% \begin{macrocode} +\input{bxjsja-\bxjs@jadriver.def} +% \end{macrocode} +% +% おしまい。 +% \begin{macrocode} +%</class> +% \end{macrocode} % %^^A//////////////////////////////////////////////////////// % \clearpage @@ -9989,55 +10356,6 @@ \fi % \end{macrocode} % -% \paragraph{和文空白命令} -% \begin{macrocode} -\ifbxjs@jaspace@cmd -% \end{macrocode} -% -% \begin{macro}{\jaenspace} -% 半角幅の水平空き。 -% \begin{macrocode} - \def\jaenspace{\hskip.5\jsZw\relax} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\jathinspace} -% 和欧文間空白を入れるユーザ命令。 -% \Note minimalではダミー定義。 -% \begin{macrocode} - \def\jathinspace{\hskip\z@skip} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\_} -% 全角空白文字1つからなる名前の制御綴。 -% |\zwspace| と等価になる。 -% \begin{macrocode} - \def\ {\zwspace} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\jaspace} -% |jlreq| クラスと互換の命令。 -% \begin{macrocode} - \DeclareRobustCommand*{\jaspace}[1]{% - \expandafter\ifx\csname bxjs@jaspace@@#1\endcsname\relax - \ClassError\bxjs@clsname - {Unknown jaspace: #1}{\@eha}% - \else - \csname bxjs@jaspace@@#1\endcsname - \fi} - \def\bxjs@jaspace@@zenkaku{\hskip 1\jsZw\relax} - \def\bxjs@jaspace@@nibu{\hskip .5\jsZw\relax} - \def\bxjs@jaspace@@shibu{\hskip .25\jsZw\relax} -% \end{macrocode} -% \end{macro} -% -% 終わり。 -% \begin{macrocode} -\fi -% \end{macrocode} -% % 以上で終わり。 % \begin{macrocode} %</minimal> @@ -10053,9 +10371,6 @@ % 和文ファミリ連動 % \item |\mcfamily|/|\gtfamily| % \item |\textmc|/|\textgt| -% \item |\zw| -% \item |\jQ|/|\jH| -% \item |\trueQ|/|\trueH|/|\ascQ| % \item |\setkanjiskip|/|\getkanjiskip| % \item |\setxkanjiskip|/|\getxkanjiskip| % \item |\autospacing|/|\noautospacing| @@ -10187,6 +10502,10 @@ %^^A---------------- % \subsection{共通処理(1)} % +% \begin{macrocode} +\let\jafontsize\jsJaFontSize +% \end{macrocode} +% % \paragraph{jis2004パラメタ} % % |jis2004| パラメタが有効の場合は、グローバルオプションに |jis2004| @@ -10262,225 +10581,20 @@ % % \begin{macro}{\strong} % \begin{environment}{strongenv} -% |fontspec| で提供される |\strong| 命令と |strongenv| 環境を -% 全てのエンジンで使えるようにする。 -% \Note 既に利用可能である場合は何もしない。 +% 現在未定義(|fontspec| が未読込)である場合は、 +% クラス本体で定義した |\jsStrongText| を利用して定義する。 % \begin{macrocode} \ifbxjs@jp@strong@cmd\jsAtEndOfClass{% \ifx\strong\@undefined\ifx\strongenv\@undefined - \DeclareRobustCommand{\strongenv}{\bxjs@strong@font}% - \DeclareTextFontCommand{\strong}{\strongenv}% -% \end{macrocode} -% |fontspec| と互換の |\strongfontdeclare| 命令も提供する。 -% 既定の設定は |\bfseries|(太字)である。 -% \Note |\strongfontdeclare| は試験的機能とする。 -% \begin{macrocode} - \newcommand*{\strongfontdeclare}{\bxjs@strongfontdeclare}% - \newcount\bxjs@strong@level - \bxjs@protected\def\bxjs@strongfontdeclare#1{% - \bxjs@set@array@from@clist{bxjs@strong}{#1}% - \bxjs@strong@level\z@}% - \bxjs@strongfontdeclare{\bfseries}% - \def\bxjs@strong@font{% - \bxjs@csletcs{bxjs@tmpa}{bxjs@strong/\the\bxjs@strong@level}% - \ifx\bxjs@tmpa\relax - \advance\bxjs@strong@level\m@ne \bxjs@strong@font - \else \advance\bxjs@strong@level\@ne \bxjs@tmpa - \fi}% + \newcommand*{\strongenv}{\jsStrongText}% + \DeclareTextFontCommand{\strong}{\jsStrongText}% + \newcommand*{\strongfontdeclare}{\jsStrongDeclare}% \fi\fi }\fi % \end{macrocode} % \end{environment} % \end{macro} % -% \paragraph{共通命令の実装} -% -% |\jQ| 等の「単位」系の共通命令を実装する。 -% まず{$\varepsilon$-\TeX}拡張が使えるか検査する。 -% \begin{macrocode} -\ifjsWitheTeX -% \end{macrocode} -% 使える場合は、「|\dimexpr|外部寸法表記|\relax|」の形式 -% (これは内部値なので単位として使える)で各命令定義する。 -% -% \begin{macro}{\jQ} -% \begin{macro}{\jH} -% |\jQ| と |\jH| はともに0.25\,mmに等しい。 -% \begin{macrocode} - \@tempdima=0.25mm - \protected\edef\jQ{\dimexpr\the\@tempdima\relax} - \let\jH\jQ -% \end{macrocode} -% \end{macro} -% \end{macro} -% -% \begin{macro}{\trueQ} -% \begin{macro}{\trueH} -% |\trueQ| と |\trueH| はともに0.25\,true\,mmに等しい。 -% \begin{macrocode} - \ifjsc@mag - \@tempdimb=\jsBaseFontSize\relax - \edef\bxjs@tmpa{\strip@pt\@tempdimb}% - \@tempdima=2.5mm - \bxjs@invscale\@tempdima\bxjs@tmpa - \protected\edef\trueQ{\dimexpr\the\@tempdima\relax} - \@tempdima=10pt - \bxjs@invscale\@tempdima\bxjs@tmpa - \protected\edef\bxjs@truept{\dimexpr\the\@tempdima\relax} - \else \let\trueQ\jQ \let\bxjs@truept\p@ - \fi - \let\trueH\trueQ -% \end{macrocode} -% \end{macro} -% \end{macro} -% -% \begin{macro}{\ascQ} -% \begin{macro}{\ascpt} -% |\ascQ| は |\trueQ| を和文スケール値で割った値。 -% 例えば、|\fontsize{12\ascQ}{16\trueH}| とすると、 -% 和文が12Qになる。 -% -% 同様に、|\ascpt| は |truept| を和文スケールで割った値。 -% \begin{macrocode} - \@tempdima\trueQ \bxjs@invscale\@tempdima\jsScale - \protected\edef\ascQ{\dimexpr\the\@tempdima\relax} - \@tempdima\bxjs@truept \bxjs@invscale\@tempdima\jsScale - \protected\edef\ascpt{\dimexpr\the\@tempdima\relax} -\fi -% \end{macrocode} -% \end{macro} -% \end{macro} -% -% \begin{macro}{\jafontsize} -% |\jafontsize{|\Meta{フォントサイズ}|}{|\Meta{行送り}|}|\Means -% 和文フォント規準で、すなわち、1\,zwが\Meta{フォントサイズ}に -% 等しくなるようにフォントサイズを指定する。 -% この命令の引数では、|Q|/|H| の単位が使用できる。 -% \begin{macrocode} -\def\jafontsize#1#2{% - \begingroup - \bxjs@jafontsize@a{#1}% - \@tempdimb\jsInverseScale\@tempdima - \bxjs@jafontsize@a{#2}% - \xdef\bxjs@g@tmpa{% - \noexpand\fontsize{\the\@tempdimb}{\the\@tempdima}}% - \endgroup\bxjs@g@tmpa} -\def\bxjs@jafontsize@a#1{% - \bxjs@parse@qh{#1}% - \ifx\bxjs@tmpb\relax \def\bxjs@tmpb{#1}\fi - \@defaultunits\@tempdima\bxjs@tmpb pt\relax\@nnil} -% \end{macrocode} -% \end{macro} -% -% 続いて、和文間空白・和欧文間空白関連の命令を実装する。 -% (エンジン依存のコード。) -% -% \begin{macro}{\bxjs@kanjiskip} -% 和文間空白の量を表すテキスト。 -% \begin{macrocode} -\def\bxjs@kanjiskip{0pt} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\setkanjiskip} -% 和文間空白の量を設定する。 -% \begin{macrocode} -\newcommand*\setkanjiskip[1]{% - \bxjs@let@lenexpr\bxjs@kanjiskip{#1}% - \bxjs@reset@kanjiskip} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\getkanjiskip} -% 和文間空白の量を表すテキストに展開する。 -% \begin{macrocode} -\newcommand*\getkanjiskip{% - \bxjs@kanjiskip} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\ifbxjs@kanjiskip@enabled} -% 和文間空白の挿入が有効か。 -% ただし{\pTeX}では自身の |\(no)autospacing| での制御を -% 用いるのでこの変数は常に真とする。 -% \begin{macrocode} -\newif\ifbxjs@kanjiskip@enabled \bxjs@kanjiskip@enabledtrue -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\bxjs@enable@kanjiskip} -% \begin{macro}{\bxjs@disable@kanjiskip} -% 和文間空白の挿入を有効/無効にする。({\pTeX}以外) -% \begin{macrocode} -\bxjs@robust@def\bxjs@enable@kanjiskip{% - \bxjs@kanjiskip@enabledtrue - \bxjs@reset@kanjiskip} -\bxjs@robust@def\bxjs@disable@kanjiskip{% - \bxjs@kanjiskip@enabledfalse - \bxjs@reset@kanjiskip} -% \end{macrocode} -% \end{macro} -% \end{macro} -% -% \begin{macro}{\bxjs@reset@kanjiskip} -% 現在の和文間空白の設定を実際にエンジンに反映させる。 -% \begin{macrocode} -\bxjs@robust@def\bxjs@reset@kanjiskip{% - \ifbxjs@kanjiskip@enabled - \setlength{\@tempskipa}{\bxjs@kanjiskip}% - \else \@tempskipa\z@ - \fi - \bxjs@apply@kanjiskip} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\bxjs@xkanjiskip} -% \begin{macro}{\setxkanjiskip} -% \begin{macro}{\getxkanjiskip} -% \begin{macro}{\ifbxjs@xkanjiskip@enabled} -% \begin{macro}{\bxjs@enable@xkanjiskip} -% \begin{macro}{\bxjs@disable@xkanjiskip} -% \begin{macro}{\bxjs@reset@xkanjiskip} -% 和欧文間空白について同様のものを用意する。 -% \begin{macrocode} -\def\bxjs@xkanjiskip{0pt} -\newcommand*\setxkanjiskip[1]{% - \bxjs@let@lenexpr\bxjs@xkanjiskip{#1}% - \bxjs@reset@xkanjiskip} -\newcommand*\getxkanjiskip{% - \bxjs@xkanjiskip} -\newif\ifbxjs@xkanjiskip@enabled \bxjs@xkanjiskip@enabledtrue -\bxjs@robust@def\bxjs@enable@xkanjiskip{% - \bxjs@xkanjiskip@enabledtrue - \bxjs@reset@xkanjiskip} -\bxjs@robust@def\bxjs@disable@xkanjiskip{% - \bxjs@xkanjiskip@enabledfalse - \bxjs@reset@xkanjiskip} -\bxjs@robust@def\bxjs@reset@xkanjiskip{% - \ifbxjs@xkanjiskip@enabled - \setlength{\@tempskipa}{\bxjs@xkanjiskip}% - \else \@tempskipa\z@ - \fi - \bxjs@apply@xkanjiskip} -% \end{macrocode} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% -% |\jsResetDimen| を用いて、フォントサイズが変更された時に -% 空白の量が追随するようにする。 -% \begin{macrocode} -\g@addto@macro\jsResetDimen{% - \bxjs@reset@kanjiskip - \bxjs@reset@xkanjiskip} -\let\bxjs@apply@kanjiskip\relax -\let\bxjs@apply@xkanjiskip\relax -% \end{macrocode} -% % \paragraph{和文フォント指定の扱い} % % standard和文ドライバでは |\jsJaFont| の値を和文フォントの @@ -10743,10 +10857,14 @@ % \paragraph{共通命令の実装} % % \begin{macrocode} -\def\bxjs@apply@kanjiskip{% - \kanjiskip\@tempskipa} -\def\bxjs@apply@xkanjiskip{% - \xkanjiskip\@tempskipa} +\newcommand*{\setkanjiskip}{\jsSetKanjiSkip} +\newcommand*{\getkanjiskip}{\jsGetKanjiSkip} +\def\jsApplyKanjiSkip#1{% + \kanjiskip=#1\relax} +\newcommand*{\setxkanjiskip}{\jsSetXKanjiSkip} +\newcommand*{\getxkanjiskip}{\jsGetXKanjiSkip} +\def\jsApplyXKanjiSkip#1{% + \xkanjiskip=#1\relax} % \end{macrocode} % % |\jaJaChar| のサブマクロ。 @@ -11005,9 +11123,20 @@ \DeclareMathAlphabet{\mathgt}{\jsc@JYn}{gt}{m}{n} \g@addto@macro\bxjs@begin@document@hook{% \ifx\reDeclareMathAlphabet\@undefined\else +% \end{macrocode} +% |\reDeclareMathAlphabet| を適用した数式英字フォント命令は{\LaTeX}の +% 通常の命令とは定義文の形が異なる。 +% このため |bm| パッケージを読み込んで |\bm{\mathrm{A}}| を +% 実行するとエラーが発生する。 +% これを回避するための暫定対応として、|bm| が読み込まれた場合は +% 数式英字フォントの和文連動を無効にする。 +% \TODO ユーザが数式英字フォントの和文連動を制御できるようにする。 +% \begin{macrocode} + \@ifpackageloaded{bm}{}{%else \reDeclareMathAlphabet{\mathrm}{\@mathrm}{\@mathmc}% \reDeclareMathAlphabet{\mathbf}{\@mathbf}{\@mathgt}% \reDeclareMathAlphabet{\mathsf}{\@mathsf}{\@mathgt}% + }% \fi} \fi % \end{macrocode} @@ -11095,17 +11224,21 @@ \ifx\CJKecglue\@undefined \def\CJKtilde{\CJK@global\def~{\CJKecglue\ignorespaces}} \fi -\let\autospacing\bxjs@enable@kanjiskip -\let\noautospacing\bxjs@disable@kanjiskip +\newcommand*{\setkanjiskip}{\jsSetKanjiSkip} +\newcommand*{\getkanjiskip}{\jsGetKanjiSkip} +\newcommand*{\autospacing}{\jsEnableKanjiSkip} +\newcommand*{\noautospacing}{\jsDisableKanjiSkip} \protected\def\bxjs@CJKglue{\hskip\jsKanjiSkip} -\def\bxjs@apply@kanjiskip{% - \jsKanjiSkip\@tempskipa +\def\jsApplyKanjiSkip#1{% + \jsKanjiSkip=#1\relax \let\CJKglue\bxjs@CJKglue} -\let\autoxspacing\bxjs@enable@xkanjiskip -\let\noautoxspacing\bxjs@disable@xkanjiskip +\newcommand*{\setxkanjiskip}{\jsSetXKanjiSkip} +\newcommand*{\getxkanjiskip}{\jsGetXKanjiSkip} +\newcommand*{\autoxspacing}{\jsEnableXKanjiSkip} +\newcommand*{\noautoxspacing}{\jsDisableXKanjiSkip} \protected\def\bxjs@CJKecglue{\hskip\jsXKanjiSkip} -\def\bxjs@apply@xkanjiskip{% - \jsXKanjiSkip\@tempskipa +\def\jsApplyXKanjiSkip#1{% + \jsXKanjiSkip=#1\relax \let\CJKecglue\bxjs@CJKecglue} % \end{macrocode} % @@ -11241,17 +11374,21 @@ \ifx\CJKecglue\@undefined \def\CJKtilde{\CJK@global\def~{\CJKecglue\ignorespaces}} \fi -\let\autospacing\bxjs@enable@kanjiskip -\let\noautospacing\bxjs@disable@kanjiskip +\newcommand*{\setkanjiskip}{\jsSetKanjiSkip} +\newcommand*{\getkanjiskip}{\jsGetKanjiSkip} +\newcommand*{\autospacing}{\jsEnableKanjiSkip} +\newcommand*{\noautospacing}{\jsDisableKanjiSkip} \protected\def\bxjs@CJKglue{\hskip\jsKanjiSkip} -\def\bxjs@apply@kanjiskip{% - \jsKanjiSkip\@tempskipa +\def\jsApplyKanjiSkip#1{% + \jsKanjiSkip=#1\relax \xeCJKsetup{CJKglue={\bxjs@CJKglue}}} -\let\autoxspacing\bxjs@enable@xkanjiskip -\let\noautoxspacing\bxjs@disable@xkanjiskip +\newcommand*{\setxkanjiskip}{\jsSetXKanjiSkip} +\newcommand*{\getxkanjiskip}{\jsGetXKanjiSkip} +\newcommand*{\autoxspacing}{\jsEnableXKanjiSkip} +\newcommand*{\noautoxspacing}{\jsDisableXKanjiSkip} \protected\def\bxjs@CJKecglue{\hskip\jsXKanjiSkip} -\def\bxjs@apply@xkanjiskip{% - \jsXKanjiSkip\@tempskipa +\def\jsApplyXKanjiSkip#1{% + \jsXKanjiSkip=#1\relax \xeCJKsetup{CJKecglue={\bxjs@CJKecglue}}} % \end{macrocode} % @@ -11482,6 +11619,10 @@ % \paragraph{共通命令の実装} % % \begin{macrocode} +\newcommand*{\setkanjiskip}{\jsSetKanjiSkip} +\newcommand*{\getkanjiskip}{\jsGetKanjiSkip} +\newcommand*{\setxkanjiskip}{\jsSetXKanjiSkip} +\newcommand*{\getxkanjiskip}{\jsGetXKanjiSkip} \protected\def\autospacing{% \ltjsetparameter{autospacing=true}} \protected\def\noautospacing{% @@ -11490,10 +11631,10 @@ \ltjsetparameter{autoxspacing=true}} \protected\def\noautoxspacing{% \ltjsetparameter{autoxspacing=false}} -\def\bxjs@apply@kanjiskip{% - \ltjsetparameter{kanjiskip={\@tempskipa}}} -\def\bxjs@apply@xkanjiskip{% - \ltjsetparameter{xkanjiskip={\@tempskipa}}} +\def\jsApplyKanjiSkip#1{% + \ltjsetparameter{kanjiskip={#1}}} +\def\jsApplyXKanjiSkip#1{% + \ltjsetparameter{xkanjiskip={#1}}} % \end{macrocode} % % |\jachar| のサブマクロの実装。 @@ -11557,33 +11698,6 @@ % \end{macro} % \end{macro} % -% \paragraph{和文空白命令} -% \begin{macro}{\>} -% 非数式中では |\jathinspace| と等価になるように再定義する。 -% \Note 数式中では従来通り(|\:| と等価)。 -% \begin{macrocode} -\ifbxjs@jaspace@cmd - \bxjs@protected\def\bxjs@choice@jathinspace{% - \relax\ifmmode \mskip\medmuskip - \else \jathinspace\ignorespaces - \fi} - \jsAtEndOfClass{% - \ifjsWitheTeX \let\>\bxjs@choice@jathinspace - \else \def\>{\protect\bxjs@choice@jathinspace}% - \fi} -\fi -% \end{macrocode} -% \end{macro} -% -% \paragraph{和文・和欧文間空白の初期値} -% -% \begin{macrocode} -\setkanjiskip{0pt plus.1\jsZw minus.01\jsZw} -\ifx\jsDocClass\jsSlide \setxkanjiskip{0.1em} -\else \setxkanjiskip{0.25em plus 0.15em minus 0.06em} -\fi -% \end{macrocode} -% % 以上で終わり。 % % \begin{macrocode} |