From 93e6562acceca9eddeeca7348813746c09ac2d94 Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Tue, 4 Sep 2018 21:13:16 +0000 Subject: bxjscls (4sep18) git-svn-id: svn://tug.org/texlive/trunk@48576 c570f23f-e606-0410-a88d-b1316a301751 --- Master/texmf-dist/source/latex/bxjscls/bxjscls.dtx | 277 ++++++++++++++++++--- 1 file changed, 240 insertions(+), 37 deletions(-) (limited to 'Master/texmf-dist/source/latex/bxjscls') 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} % - [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} % -- cgit v1.2.3