summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/source/latex/bxjscls
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2015-11-21 22:29:46 +0000
committerKarl Berry <karl@freefriends.org>2015-11-21 22:29:46 +0000
commitb019d15db444b32288a5d65981d31fbf283b9f25 (patch)
tree4692852612b211a045c0e26ea5258e2661280f97 /Master/texmf-dist/source/latex/bxjscls
parent641c546e6e7c0c6473f3bfd0a9e8e8a7cc199fe1 (diff)
bxjscls (20nov15)
git-svn-id: svn://tug.org/texlive/trunk@38915 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/source/latex/bxjscls')
-rw-r--r--Master/texmf-dist/source/latex/bxjscls/bxjscls.dtx282
1 files changed, 276 insertions, 6 deletions
diff --git a/Master/texmf-dist/source/latex/bxjscls/bxjscls.dtx b/Master/texmf-dist/source/latex/bxjscls/bxjscls.dtx
index 5f3c76b0f8b..3c96c020807 100644
--- a/Master/texmf-dist/source/latex/bxjscls/bxjscls.dtx
+++ b/Master/texmf-dist/source/latex/bxjscls/bxjscls.dtx
@@ -58,7 +58,9 @@
%<*driver>
\ProvidesFile{bxjscls.dtx}
%</driver>
- [2015/09/07 v1.0b BXJS document classes]
+ [2015/11/21 v1.0d BXJS document classes]
+% [2015/10/18 v1.0c BXJS document classes]
+% [2015/09/07 v1.0b BXJS document classes]
% [2015/08/23 v1.0a BXJS document classes]
% [2015/08/05 v1.0 BXJS document classes]
% based on jsclasses [2014/02/07]
@@ -189,12 +191,20 @@
%
% \paragraph{BXJSクラス特有の設定 ☆}
%
+% \mbox{}
+% \begin{ZRnote}
% \begin{macrocode}
%<*!drvminimal&!drvstandard>
+% \end{macrocode}
+% 長さ値の指定で式を利用可能にするため |calc| を読み込む。
+% \begin{macrocode}
\RequirePackage{calc}
+% \end{macrocode}
+% クラスオプションでkey-value形式を使用するため |keyval| を読み込む。
+% \begin{macrocode}
\RequirePackage{keyval}
% \end{macrocode}
-% \begin{ZRnote}
+% クラスの本体ではこの他に |geometry| パッケージが読み込まれる。
%
% \begin{macro}{\jsEngine}
% 〔暗黙文字トークン〕
@@ -273,6 +283,18 @@
% \end{macrocode}
% \end{macro}
%
+% \begin{macro}{\bxjs@cond}
+% |\bxjs@cond\ifXXX|……|\fi|\Meta{真}\Meta{偽}\par
+% {\TeX}のif-文(|\ifXXX|……\Meta{真}|\else|\Meta{偽}|\fi|)を
+% 末尾呼出形式に変換するためのマクロ。
+% \begin{macrocode}
+\@gobbletwo\if\if \def\bxjs@cond#1\fi{%
+ #1\expandafter\@firstoftwo
+ \else\expandafter\@secondoftwo
+ \fi}
+% \end{macrocode}
+% \end{macro}
+%
% \begin{macro}{\jsDocClass}
% 〔トークン〕
% 文書クラスの種別。
@@ -1072,7 +1094,7 @@
% \end{ZRnote}
%
% \paragraph{オプションの実行}
-%
+% \mbox{}
% \begin{ZRnote}
% {\LaTeX}の実装では、クラスやパッケージのオプションのトークン列の
% 中に |{ }| が含まれると正常に処理ができない。
@@ -1104,6 +1126,31 @@
%
% \begin{ZRnote}
%
+% グローバルオプションのトークン列に |{ }| が含まれていると、
+% やはり後のパッケージの読込処理で不具合を起こすようである
+% (|\ProcessOptions*| がエラーになる)。
+% 従って、このようなオプションは除外することにする。
+% \begin{macrocode}
+\@onlypreamble\bxjs@purge@brace@elts
+\def\bxjs@purge@brace@elts{%
+ \def\bxjs@tmpa{\@gobble}%
+ \expandafter\bxjs@purge@be@a\@classoptionslist,\@nil,%
+ \let\@classoptionslist\bxjs@tmpa}
+\@onlypreamble\bxjs@purge@be@a
+\def\bxjs@purge@be@a#1,{%
+ \ifx\@nil#1\relax\else
+ \bxjs@purge@be@b#1{}\@nil
+ \if@tempswa \edef\bxjs@tmpa{\bxjs@tmpa,#1}\fi
+ \expandafter\bxjs@purge@be@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{%
+ \ifx\@nil#1\@nil \@tempswatrue \else \@tempswafalse \fi}
+\bxjs@purge@brace@elts
+% \end{macrocode}
+%
% |papersize| と |10pt| のオプションは他のパッケージと衝突を
% 起こす可能性があるため、グローバルオプションから外す。
%
@@ -3605,18 +3652,25 @@
%
% 見出しの後ろで改行されません。
%
+% \begin{ZRnote}
+% 段落のマーク(■)が必ず和文フォントで出力されるようにする。
+% さらに、このマークを変更可能にするため |\jsParagraphMark| と
+% いうマクロに切り出した。
+% \end{ZRnote}
+%
% \begin{macrocode}
+\newcommand\jsParagraphMark{\jsJaChar{■}}
\if@twocolumn
\newcommand{\paragraph}{\@startsection{paragraph}{4}{\z@}%
{\z@}{-1\jsZw}% 改行せず 1\jsZw のアキ
%<jspf> {\normalfont\normalsize\headfont}}
-%<!jspf> {\normalfont\normalsize\headfont ■}}
+%<!jspf> {\normalfont\normalsize\headfont\jsParagraphMark}}
\else
\newcommand{\paragraph}{\@startsection{paragraph}{4}{\z@}%
{0.5\Cvs \@plus.5\Cdp \@minus.2\Cdp}%
{-1\jsZw}% 改行せず 1\jsZw のアキ
%<jspf> {\normalfont\normalsize\headfont}}
-%<!jspf> {\normalfont\normalsize\headfont ■}}
+%<!jspf> {\normalfont\normalsize\headfont\jsParagraphMark}}
\fi
% \end{macrocode}
% \end{macro}
@@ -5777,6 +5831,9 @@
% 選択の余地がないため、このドライバにおいて、
% 「JSクラスと同等の指定」を完成させるためのコードを記述する。
%
+%^^A----------------
+% \subsection{補助マクロ}
+%
% \begin{macrocode}
%<*drvminimal>
%% このファイルは日本語文字を含みます
@@ -5808,7 +5865,90 @@
% \end{macrocode}
% \end{macro}
%
+% \begin{macro}{\jsLetHeadChar}
+% |\jsLetHeadChar\CS{|\Meta{トークン列}|}|\Means
+% トークン列の先頭の文字を抽出し、|\CS| をその文字トークン
+% (に展開されるマクロ)として定義する。
+% \Note 先頭にあるのが制御綴やグループである場合は |\CS| は |\relax|
+% に等置される。
+% \Note 文字トークンは“|\the|-文字列”のカテゴリコードをもつ。
+% \Note 非Unicodeエンジンの場合は文字列がUTF-8で符号化されていると
+% 見なし、先頭が高位バイトの場合は1文字分のバイト列(のトークン列)
+% を抽出する。
+% この場合は元のカテゴリコードが保持される。
+% \begin{macrocode}
+\def\jsLetHeadChar#1#2{%
+ \begingroup
+ \escapechar=`\\ %
+ \let\bxjs@tmpa={% brace-match-hack
+ \bxjs@let@hchar@exp#2}%
+ \endgroup
+ \let#1\bxjs@g@tmpa}
+\def\bxjs@let@hchar@exp{%
+ \futurelet\@let@token\bxjs@let@hchar@exp@a}
+\def\bxjs@let@hchar@exp@a{%
+ \bxjs@cond\ifcat\noexpand\@let@token\bgroup\fi{% 波括弧
+ \bxjs@let@hchar@out\let\relax
+ }{\bxjs@cond\ifcat\noexpand\@let@token\@sptoken\fi{% 空白
+ \bxjs@let@hchar@out\let\space%
+ }{\bxjs@cond\if\noexpand\@let@token\@backslashchar\fi{% バックスラッシュ
+ \bxjs@let@hchar@out\let\@backslashchar
+ }{\bxjs@let@hchar@exp@b}}}}
+\def\bxjs@let@hchar@exp@b#1{%
+ \expandafter\bxjs@let@hchar@exp@c\string#1?\@nil#1}
+\def\bxjs@let@hchar@exp@c#1#2\@nil{%
+%\message{<#1#2>}%
+ \bxjs@cond\if#1\@backslashchar\fi{% 制御綴
+ \bxjs@cond\expandafter\ifx\noexpand\@let@token\@let@token\fi{%
+ \bxjs@let@hchar@out\let\relax
+ }{%else
+ \expandafter\bxjs@let@hchar@exp
+ }%
+ }{%else
+ \bxjs@let@hchar@chr#1%
+ }}
+\def\bxjs@let@hchar@chr#1{%
+ \bxjs@let@hchar@out\def{{#1}}}
+\def\bxjs@let@hchar@out#1#2{%
+ \global#1\bxjs@g@tmpa#2\relax
+ \toks@\bgroup}% skip to right brace
+% \end{macrocode}
+% UTF-8のバイト列を扱うコード。
+% \begin{macrocode}
+\chardef\bxjs@let@hchar@csta=128
+\chardef\bxjs@let@hchar@cstb=192
+\chardef\bxjs@let@hchar@cstc=224
+\chardef\bxjs@let@hchar@cstd=240
+\chardef\bxjs@let@hchar@cste=248
+\let\bxjs@let@hchar@chr@ue@a\bxjs@let@hchar@chr
+\def\bxjs@let@hchar@chr@ue#1{%
+ \@tempcnta=`#1\relax
+%\message{\the\@tempcnta}%
+ \bxjs@cond\ifnum\@tempcnta<\bxjs@let@hchar@csta\fi{%
+ \bxjs@let@hchar@chr@ue@a#1%
+ }{\bxjs@cond\ifnum\@tempcnta<\bxjs@let@hchar@cstb\fi{%
+ \bxjs@let@hchar@out\let\relax
+ }{\bxjs@cond\ifnum\@tempcnta<\bxjs@let@hchar@cstc\fi{%
+ \bxjs@let@hchar@chr@ue@b
+ }{\bxjs@cond\ifnum\@tempcnta<\bxjs@let@hchar@cstd\fi{%
+ \bxjs@let@hchar@chr@ue@c
+ }{\bxjs@cond\ifnum\@tempcnta<\bxjs@let@hchar@cste\fi{%
+ \bxjs@let@hchar@chr@ue@d
+ }{%else
+ \bxjs@let@hchar@out\let\relax
+ }}}}}}
+\def\bxjs@let@hchar@chr@ue@a#1{%
+ \bxjs@let@hchar@out\def{{#1}}}
+\def\bxjs@let@hchar@chr@ue@b#1#2{%
+ \bxjs@let@hchar@out\def{{#1#2}}}
+\def\bxjs@let@hchar@chr@ue@c#1#2#3{%
+ \bxjs@let@hchar@out\def{{#1#2#3}}}
+\def\bxjs@let@hchar@chr@ue@d#1#2#3#4{%
+ \bxjs@let@hchar@out\def{{#1#2#3#4}}}
+% \end{macrocode}
+% \end{macro}
%
+%^^A----------------
% \subsection{(u){\pTeX}用の設定}
%
% \begin{macrocode}
@@ -5819,6 +5959,22 @@
% としてBXJSクラスで除外されている部分に相当するが、
% 若干の変更が加えられている。
%
+% \paragraph{補助マクロ}
+%
+% |\jsLetHeadChar| を和文文字トークンに対応させる。
+% \begin{macrocode}
+\def\bxjs@let@hchar@chr@pp#1{%
+ \expandafter\bxjs@let@hchar@chr@pp@a\meaning#1\relax#1}
+\def\bxjs@let@hchar@chr@pp@a#1#2\relax#3{%
+%\message{(#1)}%
+ \bxjs@cond\if#1t\fi{%
+ \bxjs@let@hchar@chr@ue#3%
+ }{%else
+ \bxjs@let@hchar@out\def{{#3}}%
+ }}
+\let\bxjs@let@hchar@chr\bxjs@let@hchar@chr@pp
+% \end{macrocode}
+%
% \paragraph{エンジン依存の定義}
%
% 最初にエンジン({\pTeX}かu{\pTeX}か)に依存する定義を行う。
@@ -5987,12 +6143,16 @@
%
% |\jsResetDimen| は空のままでよい。
%
+%^^A----------------
% \subsection{pdf{\TeX}用の処理}
%
% \begin{macrocode}
\else\ifx p\jsEngine
% \end{macrocode}
%
+% \begin{macrocode}
+\let\bxjs@let@hchar@chr\bxjs@let@hchar@chr@ue
+% \end{macrocode}
%
% \begin{macrocode}
\@onlypreamble\bxjs@cjk@loaded
@@ -6019,9 +6179,30 @@
}
% \end{macrocode}
%
+%^^A----------------
+% \subsection{{\XeTeX}用の処理}
+%
+% \begin{macrocode}
+\else\ifx x\jsEngine
+% \end{macrocode}
+%
+% |\bxjs@let@hchar@chr| について、
+% 「BMP外の文字の文字トークンに対して |\string| を適用すると
+% サロゲートペアに分解される」という問題に対する応急措置を施す。
+% \begin{macrocode}
+\def\bxjs@let@hchar@chr#1{%
+ \@tempcnta`#1\relax \divide\@tempcnta"800\relax
+ \bxjs@cond\ifnum\@tempcnta=27 \fi{%
+ \bxjs@let@hchar@chr@xe
+ }{\bxjs@let@hchar@out\def{{#1}}}}
+\def\bxjs@let@hchar@chr@xe#1{%
+ \lccode`0=`#1\relax
+ \lowercase{\bxjs@let@hchar@out\def{{0}}}}
+% \end{macrocode}
+%
% 以上で終わり。
% \begin{macrocode}
-\fi\fi
+\fi\fi\fi
%</drvminimal>
% \end{macrocode}
%
@@ -6040,6 +6221,8 @@
% \item |\trueQ|/|\trueH|/|\ascQ|
% \item |\setkanjiskip|/|\getkanjiskip|
% \item |\setxkanjiskip|/|\getxkanjiskip|
+% \item |\autospacing|/|\noautospacing|
+% \item |\autoxspacing|/|\noautoxspacing|
% \end{itemize}
%
% \paragraph{和文フォント指定の扱い}
@@ -6295,6 +6478,31 @@
% \end{macrocode}
% \end{macro}
%
+% \begin{macro}{\jsJaChar}
+% |\jsJaChar{|\meta{文字}|}|\Means
+% 和文文字として出力する。
+% \begin{macrocode}
+\def\jsJaChar#1{%
+ \begingroup
+% \end{macrocode}
+% |\jsLetHeadChar| で先頭の“文字”を拾って
+% それを |\bxjs@jachar| に渡す。
+% \begin{macrocode}
+ \jsLetHeadChar\bxjs@tmpa{#1}%
+ \ifx\bxjs@tmpa\relax
+ \ClassWarningNoLine\bxjs@clsname
+ {Illegal argument given to \string\jsJaChar}%
+ \else
+ \expandafter\bxjs@jachar\expandafter{\bxjs@tmpa}%
+ \fi
+ \endgroup}
+% \end{macrocode}
+% 下請けの |\bxjs@jachar| の実装はエンジンにより異なる。
+% \begin{macrocode}
+\let\bxjs@jachar\@firstofone
+% \end{macrocode}
+% \end{macro}
+%
% \paragraph{hyperref対策}
%
% 出力ページサイズに館する処理は |geometry| パッケージが行うので、
@@ -6358,6 +6566,49 @@
\xkanjiskip\@tempskipa}
% \end{macrocode}
%
+% |\jaJaChar| のサブマクロ。
+% \begin{macrocode}
+\def\bxjs@jachar#1{%
+ \bxjs@jachar@a#1....\@nil}
+\def\bxjs@jachar@a#1#2#3#4#5\@nil{%
+% \end{macrocode}
+% 引数が単一トークンなら和文文字トークンが得られたと
+% 見なしてそれをそのまま出力する。
+% \begin{macrocode}
+ \ifx.#2#1%
+% \end{macrocode}
+% 引数が複数トークンの場合は、UTF-8のバイト列であると見なし、
+% そのスカラー値を |\@tempcnta| に代入する。
+% \begin{macrocode}
+ \else\ifx.#3%
+ \@tempcnta`#1 \multiply\@tempcnta64
+ \advance\@tempcnta`#2 \advance\@tempcnta-"3080
+ \bxjs@jachar@b
+ \else\ifx.#4%
+ \@tempcnta`#1 \multiply\@tempcnta64
+ \advance\@tempcnta`#2 \multiply\@tempcnta64
+ \advance\@tempcnta`#3 \advance\@tempcnta-"E2080
+ \bxjs@jachar@b
+ \else
+ \@tempcnta`#1 \multiply\@tempcnta64
+ \advance\@tempcnta`#2 \multiply\@tempcnta64
+ \advance\@tempcnta`#3 \multiply\@tempcnta64
+ \advance\@tempcnta`#4 \advance\@tempcnta-"3C82080
+ \bxjs@jachar@b
+ \fi\fi\fi}
+% \end{macrocode}
+% 符号値が |\@tempcnta| の和文文字を出力する処理。
+% \begin{macrocode}
+\ifjsWithupTeX
+ \def\bxjs@jachar@b{\kchar\@tempcnta}
+\else
+ \def\bxjs@jachar@b{%
+ \ifx\bxUInt\@undefined\else
+ \bxUInt{\@tempcnta}%
+ \fi}
+\fi
+% \end{macrocode}
+%
% \paragraph{和文フォント指定の扱い}
%
% {\pTeX}は既定で |kanji-config-updmap| の設定に従うため、
@@ -6532,6 +6783,12 @@
\let\CJKecglue\bxjs@CJKecglue}
% \end{macrocode}
%
+% |\jsJaChar| のサブマクロの実装。
+% \begin{macrocode}
+\def\bxjs@jachar#1{%
+ \CJKforced{#1}}
+% \end{macrocode}
+%
%^^A----------------
% \subsection{{\XeTeX}用設定: xeCJK + zxjatype}
%
@@ -6617,6 +6874,13 @@
\fi
% \end{macrocode}
%
+% |\jsJaChar| のサブマクロの実装。
+% \begin{macrocode}
+\def\bxjs@jachar#1{%
+ \xeCJKDeclareCharClass{CJK}{`#1}\relax
+ #1}
+% \end{macrocode}
+%
%^^A----------------
% \subsection{Lua{\TeX}用設定: Lua{\TeX}-ja}
%
@@ -6739,6 +7003,12 @@
\ltjsetparameter{xkanjiskip={\@tempskipa}}}
% \end{macrocode}
%
+% |\jsJaChar| のサブマクロの実装。
+% \begin{macrocode}
+\def\bxjs@jachar#1{%
+ \ltjjachar`#1\relax}
+% \end{macrocode}
+%
%^^A----------------
% \subsection{共通処理(2)}
%