summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/source/latex/bxjscls
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2018-09-04 21:13:16 +0000
committerKarl Berry <karl@freefriends.org>2018-09-04 21:13:16 +0000
commit93e6562acceca9eddeeca7348813746c09ac2d94 (patch)
treec1f51970a5b501909399d02a9cb8a5c47ef222b4 /Master/texmf-dist/source/latex/bxjscls
parentb3571583a30d61c5d29cee022d11b5f3a801eef2 (diff)
bxjscls (4sep18)
git-svn-id: svn://tug.org/texlive/trunk@48576 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/source/latex/bxjscls')
-rw-r--r--Master/texmf-dist/source/latex/bxjscls/bxjscls.dtx277
1 files changed, 240 insertions, 37 deletions
diff --git a/Master/texmf-dist/source/latex/bxjscls/bxjscls.dtx b/Master/texmf-dist/source/latex/bxjscls/bxjscls.dtx
index a23a8651a9a..25c2ebb2b99 100644
--- a/Master/texmf-dist/source/latex/bxjscls/bxjscls.dtx
+++ b/Master/texmf-dist/source/latex/bxjscls/bxjscls.dtx
@@ -56,7 +56,8 @@
%<*driver>
\ProvidesFile{bxjscls.dtx}
%</driver>
- [2018/08/20 v1.9b BXJS document classes]
+ [2018/09/04 v1.9c BXJS document classes]
+% [2018/08/20 v1.9b BXJS document classes]
% [2018/07/20 v1.9a BXJS document classes]
% based on jsclasses [2018/06/23]
% [2018/04/19 v1.9 BXJS document classes]
@@ -444,6 +445,24 @@
% \end{macrocode}
% \end{macro}
%
+% \begin{macro}{\ifbxjs@TUenc}
+% 〔スイッチ〕
+% {\LaTeX}の既定のフォントエンコーディングがTUであるか。
+% \Note 2017年1月以降の{\LaTeX}カーネルにおいて
+% 「Unicodeを表す{\LaTeX}公式のフォントエンコーディング」
+% である“TU”が導入され、
+% これ以降の{\LaTeX}を{\XeTeX}またはLua{\TeX}で動かしている場合は、
+% 既定のエンコーディングがTUになる。
+% それ以外の場合は、既定のエンコーディングはOT1である。
+% \begin{macrocode}
+\newif\ifbxjs@TUenc
+\def\bxjs@tmpa{TU}\edef\bxjs@tmpb{\f@encoding}
+\ifx\bxjs@tmpa\bxjs@tmpb
+ \bxjs@TUenctrue
+\fi
+% \end{macrocode}
+% \end{macro}
+%
% \begin{macro}{\bxjs@cond}
% |\bxjs@cond\ifXXX|……|\fi{|\Meta{真}|}{|\Meta{偽}|}|\par
% {\TeX}のif-文(|\ifXXX|……\Meta{真}|\else|\Meta{偽}|\fi|)を
@@ -2478,7 +2497,11 @@
% ムニャムニャムニャ……。
% \end{ZRnote}
% \begin{macrocode}
- \expandafter\let\csname OT1/cmr/m/n/10\endcsname\relax
+ \ifbxjs@TUenc
+ \expandafter\let\csname TU/lmr/m/n/10\endcsname\relax
+ \else
+ \expandafter\let\csname OT1/cmr/m/n/10\endcsname\relax
+ \fi
\expandafter\let\csname OMX/cmex/m/n/10\endcsname\relax
\let\jsc@get@external@font\get@external@font
\def\get@external@font{%
@@ -2514,7 +2537,9 @@
\edef\mandatory@arg{%
\mandatory@arg\expandafter\genb@x\jsc@cref@size..\@@}%
\empty@sfcnt}
- \DeclareErrorFont{OT1}{cmr}{m}{n}{10}
+ \ifbxjs@TUenc\else
+ \DeclareErrorFont{OT1}{cmr}{m}{n}{10}
+ \fi
\fi
% \end{macrocode}
%
@@ -8411,6 +8436,14 @@
\DeclareFontShape{\jsc@JYn}{gt}{m}{sl}{<->ssub*gt/m/n}{}
\DeclareFontShape{\jsc@JYn}{mc}{bx}{it}{<->ssub*gt/m/n}{}
\DeclareFontShape{\jsc@JYn}{mc}{bx}{sl}{<->ssub*gt/m/n}{}
+\DeclareFontShape{\jsc@JYn}{gt}{bx}{it}{<->ssub*gt/m/n}{}
+\DeclareFontShape{\jsc@JYn}{gt}{bx}{sl}{<->ssub*gt/m/n}{}
+\DeclareFontShape{\jsc@JYn}{mc}{b}{n}{<->ssub*mc/bx/n}{}
+\DeclareFontShape{\jsc@JYn}{mc}{b}{it}{<->ssub*mc/bx/n}{}
+\DeclareFontShape{\jsc@JYn}{mc}{b}{sl}{<->ssub*mc/bx/n}{}
+\DeclareFontShape{\jsc@JYn}{gt}{b}{n}{<->ssub*gt/bx/n}{}
+\DeclareFontShape{\jsc@JYn}{gt}{b}{it}{<->ssub*gt/bx/n}{}
+\DeclareFontShape{\jsc@JYn}{gt}{b}{sl}{<->ssub*gt/bx/n}{}
\DeclareFontShape{\jsc@JTn}{mc}{m}{it}{<->ssub*mc/m/n}{}
\DeclareFontShape{\jsc@JTn}{mc}{m}{sl}{<->ssub*mc/m/n}{}
\DeclareFontShape{\jsc@JTn}{mc}{m}{sc}{<->ssub*mc/m/n}{}
@@ -8418,6 +8451,14 @@
\DeclareFontShape{\jsc@JTn}{gt}{m}{sl}{<->ssub*gt/m/n}{}
\DeclareFontShape{\jsc@JTn}{mc}{bx}{it}{<->ssub*gt/m/n}{}
\DeclareFontShape{\jsc@JTn}{mc}{bx}{sl}{<->ssub*gt/m/n}{}
+\DeclareFontShape{\jsc@JTn}{gt}{bx}{it}{<->ssub*gt/m/n}{}
+\DeclareFontShape{\jsc@JTn}{gt}{bx}{sl}{<->ssub*gt/m/n}{}
+\DeclareFontShape{\jsc@JTn}{mc}{b}{n}{<->ssub*mc/bx/n}{}
+\DeclareFontShape{\jsc@JTn}{mc}{b}{it}{<->ssub*mc/bx/n}{}
+\DeclareFontShape{\jsc@JTn}{mc}{b}{sl}{<->ssub*mc/bx/n}{}
+\DeclareFontShape{\jsc@JTn}{gt}{b}{n}{<->ssub*gt/bx/n}{}
+\DeclareFontShape{\jsc@JTn}{gt}{b}{it}{<->ssub*gt/bx/n}{}
+\DeclareFontShape{\jsc@JTn}{gt}{b}{sl}{<->ssub*gt/bx/n}{}
% \end{macrocode}
%
% 欧文総称フォント命令で和文フォントが連動するように修正する。
@@ -9886,6 +9927,40 @@
}\bxjs@next
% \end{macrocode}
%
+% フォント代替の明示的定義。
+% \begin{macrocode}
+\DeclareFontShape{JY3}{mc}{m}{it}{<->ssub*mc/m/n}{}
+\DeclareFontShape{JY3}{mc}{m}{sl}{<->ssub*mc/m/n}{}
+\DeclareFontShape{JY3}{mc}{m}{sc}{<->ssub*mc/m/n}{}
+\DeclareFontShape{JY3}{gt}{m}{it}{<->ssub*gt/m/n}{}
+\DeclareFontShape{JY3}{gt}{m}{sl}{<->ssub*gt/m/n}{}
+\DeclareFontShape{JY3}{mc}{bx}{it}{<->ssub*gt/m/n}{}
+\DeclareFontShape{JY3}{mc}{bx}{sl}{<->ssub*gt/m/n}{}
+\DeclareFontShape{JY3}{gt}{bx}{it}{<->ssub*gt/m/n}{}
+\DeclareFontShape{JY3}{gt}{bx}{sl}{<->ssub*gt/m/n}{}
+\DeclareFontShape{JY3}{mc}{b}{n}{<->ssub*mc/bx/n}{}
+\DeclareFontShape{JY3}{mc}{b}{it}{<->ssub*mc/bx/n}{}
+\DeclareFontShape{JY3}{mc}{b}{sl}{<->ssub*mc/bx/n}{}
+\DeclareFontShape{JY3}{gt}{b}{n}{<->ssub*gt/bx/n}{}
+\DeclareFontShape{JY3}{gt}{b}{it}{<->ssub*gt/bx/n}{}
+\DeclareFontShape{JY3}{gt}{b}{sl}{<->ssub*gt/bx/n}{}
+\DeclareFontShape{JT3}{mc}{m}{it}{<->ssub*mc/m/n}{}
+\DeclareFontShape{JT3}{mc}{m}{sl}{<->ssub*mc/m/n}{}
+\DeclareFontShape{JT3}{mc}{m}{sc}{<->ssub*mc/m/n}{}
+\DeclareFontShape{JT3}{gt}{m}{it}{<->ssub*gt/m/n}{}
+\DeclareFontShape{JT3}{gt}{m}{sl}{<->ssub*gt/m/n}{}
+\DeclareFontShape{JT3}{mc}{bx}{it}{<->ssub*gt/m/n}{}
+\DeclareFontShape{JT3}{mc}{bx}{sl}{<->ssub*gt/m/n}{}
+\DeclareFontShape{JT3}{gt}{bx}{it}{<->ssub*gt/m/n}{}
+\DeclareFontShape{JT3}{gt}{bx}{sl}{<->ssub*gt/m/n}{}
+\DeclareFontShape{JT3}{mc}{b}{n}{<->ssub*mc/bx/n}{}
+\DeclareFontShape{JT3}{mc}{b}{it}{<->ssub*mc/bx/n}{}
+\DeclareFontShape{JT3}{mc}{b}{sl}{<->ssub*mc/bx/n}{}
+\DeclareFontShape{JT3}{gt}{b}{n}{<->ssub*gt/bx/n}{}
+\DeclareFontShape{JT3}{gt}{b}{it}{<->ssub*gt/bx/n}{}
+\DeclareFontShape{JT3}{gt}{b}{sl}{<->ssub*gt/bx/n}{}
+% \end{macrocode}
+%
% \paragraph{和文フォント定義}
%
% |\jsJaFont| が指定された場合は、その値をオプションと
@@ -10191,10 +10266,17 @@
% \begin{macrocode}
%<*pandoc>
\input{bxjsja-standard.def}
+% \end{macrocode}
+%
+% |bxjspandoc| パッケージを読み込む。
+% \begin{macrocode}
\RequirePackage{bxjspandoc}
% \end{macrocode}
%
-% |etoolbox| の |\AtEndPreamble| のフックを用意する。
+% \begin{macro}{\bxjs@endpreamble@hook}
+% |etoolbox| の |\AtEndPreamble| で実行されるBXJSクラス用のフック。
+% \Note {\eTeX}以外では無効になる。
+% (将来pandocの外に出す可能性あり。)
% \begin{macrocode}
\@onlypreamble\bxjs@endpreamble@hook
\let\bxjs@endpreamble@hook\@empty
@@ -10203,6 +10285,7 @@
\AtEndPreamble{\bxjs@endpreamble@hook}
\fi
% \end{macrocode}
+% \end{macro}
%
%^^A----------------
%\subsection{duploadシステム}
@@ -10224,6 +10307,8 @@
\@onlypreamble\bxjs@set@dupload@proc@a
\def\bxjs@set@dupload@proc@a#1{%
\@onlypreamble#1\def#1##1}
+\def\bxjs@unset@dupload@proc#1{%
+ \expandafter\let\csname bxjs@dlp/#1\endcsname\@undefined}
% \end{macrocode}
% \end{macro}
%
@@ -10232,22 +10317,28 @@
% \begin{macrocode}
\@onlypreamble\bxjs@org@if@ptions
\let\bxjs@org@if@ptions\@if@ptions
-\newif\ifbxjs@dlp
+\@onlypreamble\bxjs@org@reset@ptions
+\let\bxjs@org@reset@ptions\relax
\def\@if@ptions#1#2#3{%
- \bxjs@dlpfalse
+ \let\bxjs@next\@secondoftwo
\def\bxjs@tmpa{#1}\def\bxjs@tmpb{\@currext}%
\ifx\bxjs@tmpa\bxjs@tmpb
\expandafter\ifx\csname bxjs@dlp/#2.#1\endcsname\relax\else
- \bxjs@dlptrue \fi
+ \let\bxjs@next\@firstoftwo \fi
\fi
- \ifbxjs@dlp \expandafter\bxjs@do@dupload@proc
- \else \expandafter\bxjs@org@if@ptions
- \fi {#1}{#2}{#3}}
+ \bxjs@next\bxjs@do@dupload@proc\bxjs@org@if@ptions{#1}{#2}{#3}}
\g@addto@macro\bxjs@begin@document@hook{%
\let\@if@ptions\bxjs@org@if@ptions}
\@onlypreamble\bxjs@do@dupload@proc
\def\bxjs@do@dupload@proc#1#2#3{%
- \csname bxjs@dlp/#2.#1\endcsname{#3}%
+ \ifx\bxjs@org@reset@ptions\relax
+ \let\bxjs@org@reset@ptions\@reset@ptions
+ \fi
+ \bxjs@csletcs{bxjs@next}{bxjs@dlp/#2.#1}%
+ \def\@reset@ptions{%
+ \let\@reset@ptions\bxjs@org@reset@ptions
+ \@reset@ptions
+ \bxjs@next{#3}}%
\@firstoftwo}
% \end{macrocode}
% \end{macro}
@@ -10257,51 +10348,163 @@
% |lang=ja| という言語指定が行われると、
% Pandocはこれに対応していないため
% 不完全なBabelやPolyglossiaの設定を出力してしまう。
-% これを防ぐため、とりあえず両パッケージを無効化しておく。
+% これを防ぐための対策を行う。
+%
+% \begin{macro}{\bxjs@lang@pkg@options}
+% Babel・Polyglossiaのオプション列のテキスト。
+% “実際には読み込まれていない”場合は |\relax| になる。
+% \begin{macrocode}
+\let\bxjs@lang@pkg@options\relax
+% \end{macrocode}
+% \end{macro}
%
+% \paragraph{Polyglossiaについて}
+% つまり{\XeTeX}・{Lua\TeX}の場合。
+% \Note この場合 |etoolbox| が使用可能になっている。
% \begin{macrocode}
-\newif\ifbxjs@lang@exists
\ifnum0\if x\jsEngine1\fi\if l\jsEngine1\fi>0
% \end{macrocode}
-% Polyglossiaについて。
+%
+% パッケージの読込を検知するため読込済のマークを付けて
+% duploadの処理を仕込む。
% \begin{macrocode}
\pandocSkipLoadPackage{polyglossia}
\bxjs@set@dupload@proc{polyglossia.sty}{%
+ \bxjs@unset@dupload@proc{polyglossia.sty}%
\ClassWarning\bxjs@clsname
- {Loading of polyglossia is blocked}%
- \bxjs@lang@existstrue}
-\ifx\setmainlanguage\@undefined
-\newcommand*\setmainlanguage[2][]{}
-\newcommand*\setotherlanguage[2][]{%
- \ifcat_#2_\else
- \expandafter\let\csname #2\endcsname\@empty
- \expandafter\let\csname end#2\endcsname\@empty
- \expandafter\let\csname text#2\endcsname\@firstofone
- \fi}
-\newcommand*\setotherlanguages[2][]{%
- \@for\bxjs@tmpa:={#2}\do{%
- \setotherlangauge{\bxjs@tmpa}}}
-\fi
+ {Package polyglossia is required}%
+ \def\bxjs@lang@pkg@options{#1}%
+% \end{macrocode}
+%
+% |polyglossia| の読込が指示された場合、
+% 直後に |\setmainlanguage| が実行されることを想定して、
+% フック用の |\setmainlanguage| を定義する。
+% \Note 先に |\setmainlanguage| 以外が実行された場合はエラーになる。
+% \begin{macrocode}
+ \newcommand*\setmainlanguage[2][]{%
+% \end{macrocode}
+% もし、言語名が空の |\setmainlanguage{}| が実行された場合は、
+% |lang=ja| が指定されたと見なす。
+% \begin{macrocode}
+ \ifblank{##2}{%
+ \ClassWarning\bxjs@clsname
+ {Main language is invalid, thus the fallback\MessageBreak
+ definitions will be employed}%
+ \bxjs@pandoc@lang@ja
+% \end{macrocode}
+% 言語名が非空ならば、本来の |polyglossia| の処理を実行する。
+% \begin{macrocode}
+ }{%else
+ \ClassWarning\bxjs@clsname
+ {Main language is valid (##2),\MessageBreak
+ thus polyglossia will be loaded}%
+ \csundef{ver@polyglossia.sty}%
+ \edef\bxjs@next{%
+ \noexpand\RequirePackage[\bxjs@lang@pkg@options]{polyglossia}[]%
+ }\bxjs@next
+ \setmainlanguage[##1]{##2}%
+ }}}
+% \end{macrocode}
+%
+% プレアンブルで |polyglossia| の読込が指示されなかった場合、
+% Polyglossiaと連携するパッケージの誤動作を防ぐため、
+% 読込済マークを外す。
+% \begin{macrocode}
\g@addto@macro\bxjs@endpreamble@hook{%
- \ifbxjs@lang@exists\else
+ \ifx\bxjs@lang@pkg@options\relax
\csundef{ver@polyglossia.sty}%
\fi}
+% \end{macrocode}
+%
+% \begin{macro}{\bxjs@pandoc@lang@ja}
+% Pandoc側で |lang=ja| が指定されていた場合の処理。
+% この場合はPolyglossiaの処理を無効化するためにダミーの定義を行う。
+% その時点でダミーの |\setotherlanguage(s)| を定義する。
+% \begin{macrocode}
+\@onlypreamble\bxjs@pandoc@lang@ja
+\def\bxjs@pandoc@lang@ja{%
+ \renewcommand*\setmainlanguage[2][]{}%
+ \newcommand*\setotherlanguage[2][]{%
+ \ifblank{##2}{}{%else
+ \cslet{##2}\@empty \cslet{end##2}\@empty
+ \cslet{text##2}\@firstofone}}%
+ \newcommand*\setotherlanguages[2][]{%
+ \@for\bxjs@tmpa:={##2}\do{%
+ \setotherlangauge{\bxjs@tmpa}}}%
+% \end{macrocode}
+% Polyglossiaの読込済マークは外れるようにしておく。
+% \begin{macrocode}
+ \let\bxjs@lang@pkg@options\relax}%
+% \end{macrocode}
+% \end{macro}
+%
+% \paragraph{Babelについて}
+% {\XeTeX}・{Lua\TeX}以外の場合。
+% \begin{macrocode}
\else
% \end{macrocode}
-% Babelについて。
+%
+% パッケージの読込を検知するため読込済のマークを付けて
+% duploadの処理を仕込む。
% \begin{macrocode}
\pandocSkipLoadPackage{babel}
\bxjs@set@dupload@proc{babel.sty}{%
+ \bxjs@unset@dupload@proc{babel.sty}%
\ClassWarning\bxjs@clsname
- {Loading of babel is blocked}%
- \bxjs@lang@existstrue}
-\let\foreignlanguage\@secondoftwo
-\let\otherlanguage\@gobble
-\let\endotherlanguage\@empty
+ {Package babel is required}%
+% \end{macrocode}
+% パッケージオプションに言語名が空の |main=| があるかを調べる。
+% ある場合は |lang=ja| 対策を実行する。
+% \Note |\bxjs@lang@pkg@options| には |main=| を除いたオプション列を
+% 格納する。
+% \begin{macrocode}
+ \@tempswafalse \let\bxjs@lang@pkg@options\@empty
+ \def\bxjs@tmpb{main=}%
+ \@for\bxjs@tmpa:=#1\do{%
+ \ifx\bxjs@tmpa\bxjs@tmpb \@tempswatrue
+ \else \edef\bxjs@lang@pkg@options{\bxjs@lang@pkg@options,\bxjs@tmpa}%
+ \fi}%
+ \if@tempswa
+ \ClassWarning\bxjs@clsname
+ {Main language is invalid, so fallback\MessageBreak
+ definitions will be employed}%
+ \bxjs@pandoc@lang@ja
+% \end{macrocode}
+% ない場合は、本来の |babel| の処理を実行する。
+% \begin{macrocode}
+ \else
+ \ClassWarning\bxjs@clsname
+ {Main language is valid,\MessageBreak
+ thus babel will be loaded}%
+ \expandafter\let\csname ver@babel.sty\endcsname\@undefined
+ \RequirePackage[#1]{babel}[]%
+ \fi}
+% \end{macrocode}
+%
+% プレアンブルで |babel| の読込が指示されなかった場合、
+% 読込済マークを外す。
+% \begin{macrocode}
\g@addto@macro\bxjs@endpreamble@hook{%
- \ifbxjs@lang@exists\else
- \csundef{ver@babel.sty}%
+ \ifx\bxjs@lang@pkg@options\relax
+ \expandafter\let\csname ver@babel.sty\endcsname\@undefined
\fi}
+% \end{macrocode}
+%
+% \begin{macro}{\bxjs@pandoc@lang@ja}
+% Pandoc側で |lang=ja| が指定されていた場合の処理。
+% \begin{macrocode}
+\@onlypreamble\bxjs@pandoc@lang@ja
+\def\bxjs@pandoc@lang@ja{%
+ \expandafter\let\csname ver@babel.sty\endcsname\@undefined
+ \edef\bxjs@next{%
+ \noexpand\RequirePackage[\bxjs@lang@pkg@options]{babel}[]%
+ }\bxjs@next
+ \RequirePackage[main=japanese]{pxbabel}[]}
+% \end{macrocode}
+% \end{macro}
+%
+% lang対策はこれで終わり。
+% \begin{macrocode}
\fi
% \end{macrocode}
%