From caef61ed4952aee5804397dbdc93deb54f043a98 Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Mon, 5 Jun 2017 23:15:19 +0000 Subject: bxbase (30may17) git-svn-id: svn://tug.org/texlive/trunk@44481 c570f23f-e606-0410-a88d-b1316a301751 --- Master/texmf-dist/doc/latex/bxbase/00README | 47 - Master/texmf-dist/doc/latex/bxbase/LICENSE | 5 +- Master/texmf-dist/doc/latex/bxbase/README | 472 --------- Master/texmf-dist/doc/latex/bxbase/README-ja.md | 535 ++++++++++ Master/texmf-dist/doc/latex/bxbase/README.md | 133 +++ Master/texmf-dist/doc/latex/bxbase/bxbase-ja.pdf | Bin 0 -> 76496 bytes Master/texmf-dist/doc/latex/bxbase/bxbase-ja.tex | 108 ++ Master/texmf-dist/tex/latex/bxbase/bxbase.def | 750 ++++++-------- Master/texmf-dist/tex/latex/bxbase/bxbase.sty | 73 +- .../texmf-dist/tex/latex/bxbase/bxtoolbox-ext.def | 563 ++++++++++ .../texmf-dist/tex/latex/bxbase/bxtoolbox-ja.def | 186 ++++ Master/texmf-dist/tex/latex/bxbase/bxtoolbox.def | 1078 ++++++++++++++++++++ Master/texmf-dist/tex/latex/bxbase/bxtoolbox.sty | 27 + Master/texmf-dist/tex/latex/bxbase/bxucs.sty | 109 -- Master/texmf-dist/tex/latex/bxbase/bxutf8.def | 152 +-- Master/texmf-dist/tex/latex/bxbase/bxutf8x.def | 64 +- Master/texmf-dist/tex/latex/bxbase/zxbase.sty | 78 +- 17 files changed, 3146 insertions(+), 1234 deletions(-) delete mode 100644 Master/texmf-dist/doc/latex/bxbase/00README delete mode 100644 Master/texmf-dist/doc/latex/bxbase/README create mode 100644 Master/texmf-dist/doc/latex/bxbase/README-ja.md create mode 100644 Master/texmf-dist/doc/latex/bxbase/README.md create mode 100644 Master/texmf-dist/doc/latex/bxbase/bxbase-ja.pdf create mode 100644 Master/texmf-dist/doc/latex/bxbase/bxbase-ja.tex create mode 100644 Master/texmf-dist/tex/latex/bxbase/bxtoolbox-ext.def create mode 100644 Master/texmf-dist/tex/latex/bxbase/bxtoolbox-ja.def create mode 100644 Master/texmf-dist/tex/latex/bxbase/bxtoolbox.def create mode 100644 Master/texmf-dist/tex/latex/bxbase/bxtoolbox.sty delete mode 100644 Master/texmf-dist/tex/latex/bxbase/bxucs.sty diff --git a/Master/texmf-dist/doc/latex/bxbase/00README b/Master/texmf-dist/doc/latex/bxbase/00README deleted file mode 100644 index d1b0c766c2f..00000000000 --- a/Master/texmf-dist/doc/latex/bxbase/00README +++ /dev/null @@ -1,47 +0,0 @@ - -Package bxucs - bxucs.sty, bxutf8.def - -Description: - Simple Unicode support to use with TrueType fonts - -Example with 'Charis SIL' - -1. Name the family and font base name. - - Here I use 'fsch' and 'zfsch' -2. Setup this family for some ordinary TeX encoding (say T1). - - (Ex) Generate zfschr8t.tfm by: - ttf2tfm CharisSILR.ttf zfschr@TeXStd@.tfm - - Make t1fsch.fd as follows: - -\DeclareFontFamily{T1}{fsch}{} -\DeclareFontShape{T1}{fsch}{m}{n}{<->zfschr8t}{} - -3. Setup this family for Unicode-subfont (USF) encoding. - - Generate USF-encoding TFMs: - ttf2tfm CharisSILR.ttf zfschr9u-@Unicode@.tfm - - Note the valid UCS-row range: - 00-05,1D-1E,20-25,27,2C,A7,F1-F3,FB,FE-FF - - Make a special FD file for USF-encoding: - -\USFDeclareFontShape{fsch}{00-05,1D-1E,20-25,27,2C,A7,F1-F3,FB,FE-FF}{ - \USFShape{m}{n}{<->zfschr9z-#1}{} -} - - - -bxutf8.def: -> \bxus@uc -bxutf8s.def: -> / \bxus@uc - -\bxus@uc - - - - - -utf8 - bxucs - otf - - -utf8 - bxucs - otf - - diff --git a/Master/texmf-dist/doc/latex/bxbase/LICENSE b/Master/texmf-dist/doc/latex/bxbase/LICENSE index 15954156886..8ada757fbc8 100644 --- a/Master/texmf-dist/doc/latex/bxbase/LICENSE +++ b/Master/texmf-dist/doc/latex/bxbase/LICENSE @@ -1,9 +1,6 @@ -$BK\%=%U%H%&%'%"$O(B MIT $B%i%$%;%s%9$N2<$GG[I[$5$l$^$9!#Cx:n8"$O:nZ$G$9!#(B - The MIT License -Copyright (c) 2009 ZR +Copyright (c) 2017 Takayuki YATO (aka. "ZR") Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/Master/texmf-dist/doc/latex/bxbase/README b/Master/texmf-dist/doc/latex/bxbase/README deleted file mode 100644 index 09fc3a78597..00000000000 --- a/Master/texmf-dist/doc/latex/bxbase/README +++ /dev/null @@ -1,472 +0,0 @@ -================================================== -== BXbase バンドル v0.5 <2010/06/15> == -== by「ZR」(八登 崇之/Takayuki YATO)== -== == -================================================== -(This file is encoded in UTF-8,) - -欧文 LaTeX2e における多言語文書およびそれに関わるマクロパッケージの作成 -を支援する基本的な機能を提供する。 - - - bxutf8 入力エンコーディング: UTF-8 入力 - - bxutf8x 入力エンコーディング: UTF-8 入力 - - bxbase パッケージ: 基礎ライブラリ - - bxucs パッケージ: 欧文 Unicode 文字出力 - -※ 対応環境は各々のパッケージの解説を参照。 - -■ 本ソフトウェアの一次配布サイト(作者のサイト) - - En toi Pythmeni tes TeXnopoleos 〜電脳世界の奥底にて〜 - http://zrbabbler.hp.infoseek.co.jp/ - - ※ 以下のページに一部機能の使用例を紹介した。 - 「Unicode による文字入力」 - http://zrbabbler.hp.infoseek.co.jp/unichar.html - 「BXbase パッケージ」 - http://zrbabbler.hp.infoseek.co.jp/bxbase.html - -■ インストール - - TDS 1.1 に従ったシステムでは、各ファイルを次の場所に移動する。 - ・*.sty, *.def → $TEXMF/tex/latex/BXbase/ - (残りのファイルは不要) - - W32TeX を C:\usr\local にインストールした場合の例。 - ・*.sty, *.def → C:\usr\local\share\texmf-local\tex\latex\BXbase - --------------------------------------------------- - bxutf8 入力エンコーディング (v0.5) -- UTF-8 入力 --------------------------------------------------- - -LaTeX2e 標準の utf8 入力エンコーディングを拡張して、utf8 で処理できない -文字について符号値を含む中間形式に変換する。この中間形式は他のパッケージ -が処理することが想定されている。 - -■ 対応環境 - - 欧文 LaTeX2e / pLaTeX2e / upLaTeX2e - -■ 読込 - - inputenc のオプションとして指定する。 - \usepackage[bxutf8]{inputenc} - - inputenc が読み込み済の場合は \inputencoding を使う。 - \inputencoding{bxutf8} - - 本文中で他の入力エンコーディングとの間で切り替えることも可能であるが、 - その場合は、一度プレアンブルのどこかで入力エンコーディングを bxutf8 - に切り替えなければならない(bxutf8.def が内部で読み込む utf8.def の - 仕様による)。本文での切り替えはあまりテストされていないので、バグが - ある可能性が高い ;-) - -■ 機能 - - bxutf8 は utf8 の拡張である。utf8 は UTF-8 で書かれた文字を次のよう - に処理する。その文字が出力方法を知っている—つまり読込済のフォント - エンコーディングに含まれる—文字の場合、それを LaTeX の標準的な内部 - 形式(\"a や \OE 等)に変換して後をフォントエンコーディング(fontenc) - の処理に任せる。しかし、知らない文字の場合はエラーになる。 - - bxutf8 は「知らない文字」の場合の処理を変更し、これを \bxUHex{XXXX} - の形式に変換する。ここで XXXX は該当の文字のコード値の 16 進表現で - ある。\bxUHex は該当の文字を出力することが想定されているが、これの - 定義(「ドライバ」と呼ぶことにする)は他のパッケージで与えられる。 - bxutf8 自身のドライバの定義は単にエラーを出すだけである。 - -■ 注意事項 - - - UTF-8 のバイト列から \bxUHex の形式までは完全展開可能になっている。 - また、\bxUHex の定義は robust でなければならない。これは他の入力 - エンコーディングと共通の性質である。 - - 0.5 版の改訂で、BMP 外(U+10000 以上)の符号値に対応した。 - - pLaTeX/upLaTeX の場合、入力漢字コードは UTF-8 (-kanji=utf8) である - 必要がある。この場合、処理系により和文トークンと解釈される文字以外 - が bxutf8 の処理に回る。 - - utf8 が扱える文字については飽くまでも utf8 と全く同じように処理 - されることに注意。例えば、フォントエンコーディングに OT1 と T2A が - 読み込まれている状態で「Д」が入力されると、utf8 はこれを \CYRD に - 変換するが、これは現在のフォントエンコーディングが OT1 である時は - エラーになる(たとえ \bxUHex がフォントエンコーディングに関わらず - 動作するとしても)。 - - ---------------------------------------------------- - bxutf8x 入力エンコーディング (v0.3) -- UTF-8 入力 ---------------------------------------------------- - -Unicode パッケージ(ucs パッケージ)が使用する utf8x 入力エンコーディング -を拡張して、bxutf8 と同様の機能を実現したものである。 - -■ 対応環境 - - 欧文 LaTeX2e / pLaTeX2e / upLaTeX2e - -■ 読込 - - inputenc のオプションとして指定する。 - \usepackage[bxutf8]{inputenc} - - inputenc が読み込み済の場合は \inputencoding を使う。 - \inputencoding{bxutf8} - - 後者の使用については、bxutf8 と同じ制限の他に、utf8x に特有の制限 - がある。 - -■ 機能 - - 基本的には bxutf8 と同じなので、相違点を挙げておく。 - - - utf8x (ucs) のプログラムは utf8 と比して遥かに複雑である。従って - bxutf8x が正しく実装されているかについてはあまり自信が無い。 - - bxutf8x は \bxUInt という内部命令を用いる。 - - utf8x は実際にフォントエンコーディングが読み込まれているかに関わら - ず広範な範囲の文字を自分で処理しようとする。結果的に、欧文の文字に - 関してはほとんど \bxUInt に変換されない。CJK 文字に対しては utf8x - は既定では処理しないので \bxUInt に変換される。 - - --------------------------------------------- - bxbase パッケージ (v0.5) -- 基礎ライブラリ --------------------------------------------- - -他の BX シリーズのパッケージの下請けが主な役目である。文書作成者がこの -パッケージを読み込む場面は少ない。 - -■ 対応環境 - - 欧文 LaTeX2e / pLaTeX2e / upLaTeX2e - -■ 読込 - - \usepackage で読み込む。オプションはない。 - -■ pxbase パッケージとの関係 - - bxbase パッケージと pxbase パッケージ(PX シリーズ)は大部分の機能を - 共通にしている。両方読み込んだ場合は、共通する機能については版が - 新しい方が採用される。過去互換性を崩す更新は行われないので、このこと - に関して文書作成者が気にする必要はないはずである。 - - なお、現在の所、bxbase のみに存在する機能はない。 - -■ 機能 - - DVI special 出力の命令。 - - \recordpapersize - 次の形の papersize special 命令を DVI の先頭に出力する。 - papersize=<幅>,<高さ> - (幅と高さは現在の \paperwidth と \paperheight の値。) - - \dvipdfmxmapline{<テキスト>} - dvipdfmx のマップ指定を文書中で行う。 - ※次の形の papersize special 命令を DVI の先頭に出力する。 - pdf:mapline <テキスト> - - \dvipdfmxmapfile{<ファイル名>} - dvipdfmx のマップファイル指定を文書中で行う。 - ※次の形の papersize special 命令を DVI の先頭に出力する。 - pdf:mapfile <ファイル名> - - 符号値による文字入力のための命令。 - - \Ux{<コード値>,...} - \UI{<コード値>,...} - Unicode コード値による入力を行う。\Ux は欧文用、\UI は和文用(I は - Ideographic の意味)。コード値は以下の形式で表す。コンマで区切って - 複数文字入力できる。 - - <16進数>: A72C, 02000B, 1bd 等。 - - +<10進数>: +254, +0937 等。 - - '<8進数>: '376, '1651 等。 - Unicode 文字の出力には次の順番で利用可能な最初の機能を用いる。(\UI - の場合 3) を飛ばす。) - 1) zxjatype パッケージ。この場合、その機構に従って出力される。\UI - は必ず和文フォントで出力し、\Ux は和文/欧文切替の対象となる。 - 2) XeTeX の Unicode 出力。 - 3) [\Ux のみ] bxums パッケージ。 - 4) upTeX の和文 Unicode 出力。 - 5) UTF/OTF/pxotf パッケージ。 - 6) ums/bxsuika パッケージ。 - どれも使えない場合は「16進表現による代替表現」になる。 - - \AJ{<コード値>,...} - Adobe-Japan1 のコード値による入力を行う。コード値は 10 進数で指定 - する。出力には次の順番で利用可能な最初の機能を用いる。 - 1) zxotf パッケージ。 - 2) UTF/OTF/pxotf パッケージ。 - どれも使えない場合は代替表現になる。 - - \JI{<コード値>,...} - いわゆる「JIS コード」(JIS X 0208 の GL 表現)のコード値による入力 - を行う。コード値指定の方法は \Ux と同じ。出力には (u)pTeX の JIS - コード和文出力の機能を使う。使えない場合は代替表現になる。 - - \KI{<コード値>,...} - いわゆる「区点コード」のコード値による入力を行う。コード値指定は - 以下のいずれかの方法で指定する。 - - RRCC : RR は区番号、CC は点番号を 10 進 2 桁で表したもの。 - - PRRCC : P は面番号。JIS X 0213 のための指定。 - 出力には (u)pTeX の JIS コード和文出力の機能を使う。使えない場合は - 代替表現になる。JIS X 0213 の文字を出力したい場合は、現在の和文 - フォントのエンコーディングが JIS X 0213 に対応するものである必要が - ある。さらに、第 2 面の文字を出力する場合には pTeX の内部漢字コード - が sjis でなければならない。 - - \bxUx / \bxUI / \bxAJ / \bxJI / \bxKI - \Ux 等は非常に短い名前なので他のパッケージと衝突する恐れがあり、 - そこでこのパッケージでは既に同名の命令がある場合は上書きしない - ようにしている。\bxUx 等はそれぞれ \Ux 等と同じで、先のような場合 - にも常に使える。 - - 加えて、このパッケージは bxutf8 の為のドライバ \bxUHex および bxutf8x - の為のドライバを \Ux に相当するものに設定する。 - - 以下のものは本来は和文用の命令であるが、理由があって bxbase にも含めて - いる。pxbase と共通なので詳細は PXbase の説明書を参照してほしい。 - - \safecaret - TeX エスケープ形式(^^ab)の解釈が失敗するのを回避する。 - - Bwbel 関係の命令。 - - \bxcaptionlanguage{<言語名>} - Babel では、通常言語が切り替わるとキャプションや日付の文字列が切り - 替わる。この命令を実行すると、文字列は指定された言語のもので固定 - され、Babel の言語切替の命令に追随しなくなる。この命令自体はプレ - アンブル中で何回でも使用できて最後のものが有効になる。引数には有効 - な言語オプションの名前の他に以下のものが指定できる。 - - main : 基底言語、すなわち Babel で最後に読み込まれた言語だが - 次に述べる \bxmainlanguage で変更可能。 - - default : 文書クラスで指定されたものをそのまま用いる。日本語 - の文書クラスで Babel を用いる時に便利である。 - この命令の意義については後の「キャプション文字列の切替機能について」 - の節を参照。 - - \bxmainlanguage{<言語名>} - 基底言語、すなわち \begin{document} の直後において有効となる言語を - 設定する。通常は Babel において最後に読み込まれた言語オプションが - 基底言語になる。 - -■ キャプション文字列の切替機能について - - Babel の機能の 1 つとして、言語の切替に伴って、キャプションの文字列 - (「参考文献」や「図」等)および日付の書式をその言語用のものに切り替え - るというものがある。これにより、ある言語(例えばスロベニア語)の為の - 文書クラスがなくても英語用のクラスと Babel の言語切替でスロベニア語 - のキャプションの文書が作成できる(レイアウトがその言語の使用圏で許容 - されるかの問題は残るが)。だがこの目的には、プレアンブルでキャプション - 言語を 1 回指定できればよく、文書途中での言語切替にまでキャプション - が追随する利点はあまりなく、場合によっては弊害があると思われる。この - ような場合は - \bxcaptionlanguage{main} - を実行すれば、キャプションは基底言語(\bxmainlanguage の説明参照)で - 固定され以後は変更されない。また - \bxcaptionlanguage{spanish} - のように直接に言語名を指定することもできる。 - - 日本語の場合はもっと特殊な事情がある。日本語のレイアウトは欧米の言語 - のものとは大きく異なるので、日本語の文書を作成する場合には日本語用の - 文書クラスが用いられるのが普通であり、そこでは当然キャプションは既に - 日本語になっている。このような場合は - \bxcaptionlanguage{default} - を実行すれば、キャプションは文書クラスで設定されたものに固定され、 - 以後は変更されない。 - -■ 開発者向け機能 - - \bxUHex{<コード値16進表記>} - bxutf8 が構成する内部表現。用いる機能は \Ux と同じ。 - \bxUInt{<整数>} - bxutf8x が構成する内部表現。用いる機能は \Ux と同じ。 - - \bxInputDefFIle{<ファイルベース名>} - 拡張子 .def のファイルを \usepackage と同じ方式で読み込む。 - \bxCheckCPart{<ファイルベース名>} - 別のファイル(.sty/.def)との版の比較。 - \bxNullify\CS - マクロ \CS を無効にする。 - \bxDebug{<テキスト>} - デバッグメッセージの表示。 - \bxCheckMA<テキスト>\bxEndCheckMA - \edef 中ではこの部分がエラーを出す命令に展開される。 - \bxIfPrimitive\CS{}{} - 現在の \CS の定義が(同名の)プリミティブかの判定。 - \bxEngineTypeX [整数定数] - 1=pTeX拡張; 2=XeTeX拡張; 3=Omega拡張; 0=以上に該当せず - \bxEngineTypeY [整数定数] - 1=eTeX拡張; 3=pdfTeX拡張; 0=以上に該当せず - (upTeX か否かの判定は ifuptex パッケージを用いる) - - \bxTrivLangDef{<言語名>} - 中身が空の Babel 言語オプションを生成する。 - - \bxToHexTwo{<整数>} [%02X 形式; 0x00〜FF] - \bxToHexThree{<整数>} [%03X 形式; 0x000〜FFF] - \bxToHexFour{<整数>} [%04X 形式; 0x0000〜FFFF] - \bxToHexFive{<整数>} [%05X 形式; 0x00000〜FFFFF] - \bxToHexFiveX{<整数>} [%05X 形式; 0x00000〜FFFFF ※1] - \bxToHexEight{<整数>} [%08X 形式; 0x00000000〜7FFFFFFF] - \bxToHexTiny{<整数>} [%X 形式; 0x0〜FF] - \bxToHexSmall{<整数>} [%X 形式; 0x0〜7FFF] - \bxToHexUC{<整数>} [%04X 形式; 0x0000〜10FFFF ※2] - 16 進表記を \bxHex に返す。UC は 4〜6 桁での表記。 - ※1 0xFFFFF を超える場合は "FFFFF" になる - ※2 XeTeX/LuaTeX/upTeX の場合、\char が可能な範囲。 - - \bxCodeValueSeq\CS{<文字列>} [16進] - \bxCodeValueSeqD\CS{<文字列>} [10進] - \Ux, \UI が使っている、コード値の列を解釈するルーチン。 - - \bxAssign<代入文>\relax - 代入文が完全(ゴミがない)かの判定しスイッチ \ifbxOk に返す。 - - \bxToLower{<文字列>} - \bxToUpper{<文字列>} - 小文字/大文字に変換したものを \bxRes に返す。 - - \bxDocumentSpecial{<テキスト>} - \AtBeginDvi を普通に用いて DVI の先頭部に special を出力する。 - \bxDocumentSpecialUrgent{<テキスト>} - DVI のなるべく先頭(他の special より前)の位置に special を出力。 - - \bxEnableSafeCaret - safe caret 機能を使用可能にしておく。すなわち、プレアンブルでこの - 命令が呼ばれなかった場合、safe caret は使用不可になる。実際にある - 状況で safe caret を有効にするには、\bx@acr@normcaret を「その状況 - での本来の〈^〉の動作」に定義した上で〈^〉をアクティブにする必要が - ある。 - ※ ユーザ命令の \safecaret はこの命令を実行するとともに、verbatim - と babel での適切な safe caret 処理を有効化している。 - - \bxUseShadowMap\CS{} - 命令語 \CS を指定の TFM から生成される shadow map として定義する。 - \bxMap\CS - 整数レジスタ \bxUcv の現在の値に shadow map を適用し、その結果を - \bxUcv に代入する。 - ※ shadow map とは「16 bit 整数 → 整数」の写像を TFM として表現 - したもの。 - ---------------------------------------------------- - bxucs パッケージ (v0.2) -- 欧文 Unicode 文字出力 ---------------------------------------------------- - -Unicode subfont を利用して、(欧文の) Unicode 処理能力をネイティブには -もたない LaTeX 処理系で Unicode フォントを最大限活用する為のパッケージ -である。upLaTeX は和文に関するネイティブな Unicode 処理を行うが、欧文 -として Unicode 文字を扱う場合にはこのパッケージが有効であろう。 - -■ 対応環境 - - 欧文 LaTeX2e / pLaTeX2e / upLaTeX2e - -■ 読込 - - \usepackage で読み込む。オプションはない。 - \usepackage{bxucs} - -■ フォントの準備 - - 欧文フォントファミリに対してこのパッケージによる Unicode 出力を可能 - にする為には、次の 2 種類のエンコーディングに対するファミリの NFSS - に基づくフォント定義が必要である。 - - LaTeX の通常のエンコーディング、最低でも OT1 と T1 - - Unicode subfont エンコーディング(ここでは USF と呼ぶ) - - 例えば、次の 2 シェープからなるフォントファミリがあるとする。 - - FOO_R.ttf : regular weight - - FOO_B.ttf ; bold weight - これを LaTeX ファミリ名 "foo" で定義することを考える。 - - 最初に OT1 に関する定義をする。その為には、各シェープに対する TFM の - 名前を決める必要がある。regular を foo-r-ot1、bold を foo-b-ot1 と - する(勿論 Berry 命名法に従っても良い)と、OT1 に対するフォント定義 - ファイル ot1foo.fd の内容は次のようになる。 - - \DeclareFontFamily{T1}{foo}{} - \DeclareFontShape{T1}{foo}{m}{n}{<->foo-r-ot1}{} - \DeclareFontShape{T1}{foo}{bx}{n}{<->foo-b-ot1}{} - - T1 エンコーディングに対する設定も同様である。 - - 次に Unicode subfont (USF) に対する定義をする。Unicode subfont とは - Unicode の BMP 領域を 256 文字毎に分割して複数の TFM に収めたもので - ある。従って、1 つのシェープに対して TFM は(最大で) 256 個あること - になり、名前の一部に番号(小文字 16 進表記)を含めて表す。今の場合で - は例えば Regular のシェープに対する TFM 名は - foo-r-u?? (?? は 00, 01, …, fe, ff) - とすることができる。同様に Bold を foo-b-u?? とする。Unicode subfont - に対するフォント定義ファイルは次の形式で記述される。 - - \USFDeclareFontShape{<ファミリ>}{<番号列>}{ - \USFShape{<シリーズ>}{<シェープ>}{}{<初期化>} - (必要なだけ \USFShape を繰り返す) - } - - Unicode subfont は 256 個全てが揃っているとは限らない。例えば 60 番 - (U+6000〜60FF) は漢字のみを含むので、元のフォントファイルが CJK 対応 - のものでない限り、60 番の subfont は存在しないことになる。<番号列> - には、存在する番号の範囲の列を記す。ここでは 00, 01, 02, 03, ff が - 存在するとする。今の例でのフォント定義ファイル usffoo.fd の内容は次 - のようになる。 - - \USFDeclareFontShape{foo}{00-03,FF}{ - \USFShape{m}{n}{<->foo-r-u#1}{} - \USFShape{bx}{n}{<->foo-b-u#1}{} - } - - あとは、今の過程で決めた事項に従って、実際に TFM ファイルを生成し - (TrueType フォントの場合は ttf2tfm を使う)、さらに TFM と実物の - フォントファイルを関連付けるように DVI ウェアを設定する必要もある。 - -■ 機能 - - このパッケージは bxbase の \Ux のインタフェースを利用する。従って、 - \Ux{0425,043E,0440,043E,0448,043E} - のように \Ux の引数にコード値の 16 進表記の列を書けばよい。ただし - この時に、現在のフォントファミリは前述の説明で用意した Unicode - subfont が定義されたものでなければならない。(なお、このパッケージは - 内部で bxbase を読み込むので別に読み込む必要はない。) - - 使用中のフォントに指定されたコードの文字がない場合は、和文用の \UI - の方に処理を渡す。ただしここで e-TeX 拡張が使えない場合、存在する - 文字と同じ subfont に属する文字は全て存在すると判断されてしまうと - いう制限があり、結果として和文フォントには文字があるのに使えない - という現象が起こりうる。 - - -------------------------------------------------------- - zxbase パッケージ (v0.4a) -- XeLaTeX 基礎ライブラリ ------------------------------------------------------- - -拙作の XeLaTeX 用パッケージ(ZX シリーズ)で使われる部品的機能を収めた -パッケージである。今のところ、このパッケージにはユーザ命令は定義されて -いないので、文書作成者が \usepackage で直接これを読み込むことはない。 -(現在、zxotf がこのパッケージを内部で読み込む。) - ----------------------------------------- - -■ 更新履歴 - - version 0.5 <2010/06/15> - - bxbase: \JI/\KI を追加。 - - bxbase: \dvipdfmxmapline/\dvipdfmxmapfont を追加。 - - bxutf8: BMP 外の符号値への対応。 - - version 0.4a <2009/11/16> - - bxbase で \UI/\Ux を zxjatype と、\AJ を zxotf と連携させた。 - - zxbase パッケージを追加。 - - version 0.4 <2009/07/05> - - PXbase の v0.4 に合わせた改訂。 - - version 0.3 <2008/04/06> - - bxutf8x を追加。 - - bxutf8 のバグを修正。 - - bxbase でも pxbase の命令 \recordpapersize を使用可能にした。 - - version 0.2 <2008/03/28> - - 最初の公開版。 - -# EOF diff --git a/Master/texmf-dist/doc/latex/bxbase/README-ja.md b/Master/texmf-dist/doc/latex/bxbase/README-ja.md new file mode 100644 index 00000000000..c4489be1f78 --- /dev/null +++ b/Master/texmf-dist/doc/latex/bxbase/README-ja.md @@ -0,0 +1,535 @@ +BXbase パッケージバンドル +========================= + +LaTeX: 他の BX パッケージのためのサポートライブラリ + +本バンドルの主な目的は、作者(ZR)の制作する他のパッケージ(名前が +“BX”や“PX”で始まる)が依拠するライブラリ機能の提供である。 + +ただし bxbase パッケージは少数のユーザレベルのコマンドも含むので +単体でも有用である。 + +### 前提環境 + + * TeX フォーマット: LaTeX + * TeX エンジン: 不問 + * DVI ウェア(DVI 出力時): 不問 + +### 構成物 + + * `bxbase.sty`: ‘bxbase’パッケージ + * `bxbase.def`: ‘bxbase’のサブモジュール + * `bxtoolbox.sty`: ‘bxtoolbox’パッケージ + * `bxtoolbox.def`: ‘bxtoolbox’のサブモジュール + * `bxtoolbox-ext.def`: ‘bxtoolbox’のサブモジュール + * `bxtoolbox-ja.def`: ‘bxtoolbox’のサブモジュール + * `bxutf8.def`: ‘bxutf8’入力エンコーディング定義 + * `bxutf8x.def`:‘bxutf8x’入力エンコーディング定義 + * `zxbase.sty`: ‘zxbase’パッケージ + * `bxbase-ja.pdf`: ‘bxbase’のユーザ向け説明書(日本語) + * `bxbase-ja.tex`: `bxbase-ja.pdf` のソースファイル + +### インストール + +TDS 1.1 に準拠するシステムの場合、以下のようにファイルを移動する: + + - `*.sty`, `*.def` → $TEXMF/tex/latex/BXbase + +この後必要に応じて mktexlsr を実行する。 + +### ライセンス + +本パッケージは MIT ライセンスの下で配布される。 + +bxbase パッケージ ― 基礎ライブラリ +---------------------------------- + +基本的に、他のパッケージの内部で読み込まれるものであり、作者(ZR)の制作 +する他のパッケージで必要な機能を提供する。 + +本パッケージは幾つかのユーザ命令も提供していたが、その大部分が 1.1 版に +おいて非推奨となった。日本語入力に関する少数の機能が残されている。 + +### ユーザ向け機能 + +ユーザ向け機能についてはマニュアル `bxbase-ja.pdf` を参照されたい。 + +### 開発者向け機能 + +ここでは bxbase パッケージが提供する開発者向け機能について簡単に解説する。 + +※ bxbase パッケージは内部で bxtoolbox パッケージを読み込むため、bxtoolbox +の機能も利用できる。 + +#### 書式記述に関する注意 + +`` は `\newcommand` 等の LaTeX マクロ定義命令に +後続する要素列で、以下のものに等しい。 + + {<命令>}[<引数個数>][<引数既定値>]{<置換テキスト>} + +`` は `\def` 等の TeX マクロ定義プリミティブに +後続する要素列で、以下のものに等しい。 + + <命令><引数宣言部>{<置換テキスト>} + +`` は `` の先頭の `<命令>` +を除去したもの。 + +#### プログラミング補助 + + * `\bxDebug{<テキスト>}` + デバック出力用命令。このパッケージでの定義では何もしない。 + * `\bxRequireDefinition{<ファイルベース名>}` + 拡張子 .def のファイルを `\usepackage` と同じ方式で読み込む。 + * `\bxNullify\制御綴` + `\制御綴` を「何もしない命令」で `\providecommand` により + 上書きされないものに再定義する。 + * `\bxForEachIn<引数1>,<引数2>,...\do{<置換テキスト>}` + 各々の引数について、`<置換テキスト>` の `#1` をそれで置き換えた + ものを実行する。LaTeX の `\@for` のラッパーで、`\@for` と同じく、 + `\bxForEachIn` の直後のトークンは予め一度展開される。 + * `\bxForEachTokenIn<トークン1><トークン2>...\do{<置換テキスト>}` + 各々の引数について `<置換テキスト>` の `#1` を置き換えたものを + 実行する。LaTeX の `\@tfor` のラッパー。 + * `\bxWithArgExpd{<引数1>}\do{<置換テキスト>}` + * `\bxWithArgsExpd{<引数1>}{<引数2>}...\do{<置換テキスト>}` + `<置換テキスト>` 中の `#1`、`#2`… を各々の引数を一回展開した + ものに置き換えたものを実行する。`\bxWithArgExpd` は 1 引数用に + 最適化したもの。 + * `\bxWithArgFullExpd{<引数1>}\do{<置換テキスト>}` + * `\bxWithArgsFullExpd{<引数1>}{<引数2>}...\do{<置換テキスト>}` + `\bxWithArgsExpd` と同様だが、一回展開でなく完全展開する点が + 異なる。 + * `\bxChompComma<命令>` + `<命令>` の 置換テキストの先頭が `,` の場合、それを削除したもので + 再定義する。 + * `\bxAssign<代入文>\relax` + 代入を行った後、代入文の後ろにゴミがないかを判定しその結果を + スイッチ `\ifbxOk` に返す。 + * `\bxCheckMA<テキスト>\bxEndCheckMA` + `\edef` 中ではこの部分がエラーを出す命令に展開される。 + +#### TeX エンジン判別 + + * `\bxEngineTypeX` [整数定数] + 1=pTeX拡張; 2=XeTeX拡張; 3=Omega拡張; 0=以上に該当せず + * `\bxEngineTypeY` [整数定数] + 1=eTeX拡張; 3=pdfTeX拡張; 5=LuaTeX拡張; 0=以上に該当せず + ※現在の LuaTeX は X/Y=0/5 となる。 + ※upTeX か否かの判定は ifptex パッケージを用いる。 + +#### Babel 関係 + + * `\bxAtBeginDocumentBabel{<テキスト>}` + Babel 読込時にのみ実行される begin-document 時のフック。 + * `\bxTrivLangDef{<言語名>}` + 中身(キャプション定義等)が空の Babel 言語オプションを生成する。 + +#### 数値の書式化出力 + + * `\bxToHexTwo{<整数>}` [%02X 形式; 0x00~FF] + * `\bxToHexThree{<整数>}` [%03X 形式; 0x000~FFF] + * `\bxToHexFour{<整数>}` [%04X 形式; 0x0000~FFFF] + * `\bxToHexFive{<整数>}` [%05X 形式; 0x00000~FFFFF] + * `\bxToHexFiveX{<整数>}` [%05X 形式; 0x00000~FFFFF ※1] + * `\bxToHexEight{<整数>}` [%08X 形式; 0x00000000~7FFFFFFF] + * `\bxToHexTiny{<整数>}` [%X 形式; 0x0~FF] + * `\bxToHexSmall{<整数>}` [%X 形式; 0x0~7FFF] + * `\bxToHexUC{<整数>}` [%04X 形式; 0x0000~10FFFF ※2] + 16 進表記を `\bxHex` に返す。UC は 4~6 桁での表記。 + ※1 0xFFFFF を超える場合は `FFFFF` になる + ※2 XeTeX/LuaTeX/upTeX の場合、`\char` が可能な範囲。 + * `\bxToDecFour{<整数>}` [%04d 形式; 0000~9999] + * `\bxToDecFive{<整数>}` [%05d 形式; 00000~99999] + ゼロ付の 10 進表記を `\bxHex` に返す。 + +#### 符号値による入力 + + * `\bxCodeValueSeq\制御綴{<符号値>,...} [16進]` + * `\bxCodeValueSeqD\制御綴{<符号値>,...} [10進]` + 各々の `<符号値>` を解釈した結果を `\bxUcv` に代入してマクロ + `\制御綴` を呼び出す。解釈方法はそれぞれ `\Ux` と `\AJ` 命令の + 解説にある通り。 + * `\bxUHex{<コード値16進表記>}` + bxutf8 が構成する内部表現。用いる機能は `\Ux` と同じ。 + * `\bxUInt{<整数>}` + bxutf8x が構成する内部表現。用いる機能は `\Ux` と同じ。 + +#### 文字列操作 + + * `\bxToLower{<文字列>} [小文字]` + * `\bxToUpper{<文字列>} [大文字]` + `<文字列>` を小文字/大文字に変換したものを `\bxRes` に返す。 + +#### Special 出力 + + * `\bxDocumentSpecial{<テキスト>}` + `\AtBeginDvi` を普通に用いて DVI の先頭部に special を出力する。 + * `\bxDocumentSpecialUrgent{<テキスト>}` + DVI のなるべく先頭(他の special より前)の位置に special を出力。 + +#### Safe caret 機能 + + * `\bxBDHookSafeCaret` + safe caret 機能に関する begin-document フック。 + * `\bxEnableSafeCaret` + safe caret 機能を使用可能にしておく。すなわち、プレアンブルでこの + 命令が呼ばれなかった場合、safe caret は使用不可になる。実際にある + 状況で safe caret を有効にするには、`\bx@acr@normcaret` を「その + 状況での本来の `^` の動作」に定義した上で `^` をアクティブにする + 必要がある。 + ※ ユーザ命令の `\safecaret` はこの命令を実行した上で、verbatim + と babel での適切な safe caret 処理を有効化している。 + +#### Shadow map 機能 + +Shadow map とは「16 ビット整数 → 整数」の写像を TFM として表現 +したもの。 + + * `\bxUseShadowMap\制御綴{}` + `\制御綴` を指定の TFM から生成される shadow map として定義。 + * `\bxMap\制御綴` + 整数レジスタ `\bxUcv` の現在の値に shadow map を適用し、その結果を + `\bxUcv` に代入する。 + +#### モジュール名 + +ここでいう「モジュール」とは文書クラス(.cls)・パッケージ(.sty)・ +定義ファイル(.def)の総称。「モジュール読込中に発生するエラーを出力 +するためのマクロ」を別のモジュール内で定義する際に、呼び出した側の +モジュール名をメッセージ中に出力させるための仕組み。 + + * `\bxSetModuleName{<文字列>}` + 現在のモジュールに対するモジュール名を設定する。 + * `\bxModuleName` + 現在のモジュールに対するモジュール名に展開される。モジュール名が + 設定されていない場合はファイルのベース名を代わりに使う。 + * `\bxError` [`\PackageError` に対応] + * `\bxWarning` [`\PackageWarning` に対応] + * `\bxWarningNoLine` [`\PackageWarningNoLine` に対応] + * `\bxInfo` [`\PackageInfo` に対応] + 現在のモジュール名をパッケージ名として `\PackageError` 等を呼ぶ。 + +#### keyval の拡張 + +(xkeyval が普及した今では非推奨かも…) + +keyval の `\setkeys` について、「未定義のキーをエラーにせず、代わりに +未定義のキーのリストを作成する」という変種を提供する。この機能は +xkeyval で `\setkeys*` として提供されている。しかし xkeyval が利用 +できない環境に対応するために keyval へのパッチとして実現すること +にする。しかし、xkeyval はこのパッチを無効化してしまう。従って +xkeyval.sty が存在するかに応じて処理を分けることにした。 + + * `\bxPrepareSetKeysSafe` + `\bxSetKeysSafe` を使用可能にする。 + ※ xkeyval.sty が存在するかを判定し、存在すれば読み込む。 + そして `\bxSetKeysSafe` の実現方法をこの段階で確定させる。 + * `\bxSetKeysSafe{<ファミリ>}{<テキスト>}` + `\setkeys` と同様だが、未定義のキーをエラーとせず、代わりに + 未定義のキーからなるコンマ区切りのリストを `\bxRestKeys` に + 代入する。 + +#### ドライバ判別 + +以下の説明で「先天的な」ドライバとは、TeX 実行時に使用が判定できる +もの(事実上「TeX エンジンがドライバを兼ねるもの」に等しい)を指し、 +例えば pdfTeX、XeTeX、LuaTeX が該当する。 + + * `\bxDriverList` + (後天的な)ドライバ名のリスト。 + ※ 現状では「`dvips,dvipdfmx,dviout`」。 + * `\bxDriverInherent` + 先天的なドライバ名(未定義なら空)に展開される。 + * `\bxSetDriver[<ファイル名>]{<ドライバ名>}` + 指定のファイル名をもつモジュールに対するドライバ名を指定する。 + `<ファイル名>` がない場合は現在のモジュールに対する設定。 + * `\bxDriver` + 現在のモジュールに対するドライバ名に展開される。未定義ならば + `default` を返す。 + * `\bxDriverSpecifiedFor{<ファイル名>}` + `\bxDriver` と同様だが、指定のファイル名をもつモジュールに + 対する設定を返す。 + * `\bxDefineDDProcess{<名前>}{<ドライバ名>}` + ドライバ依存マクロを定義する。 + * `\bxDefineDDProcessDefault{<名前>}` + `<ドライバ名>` が `default` の `\bxDefineDDProcess`。 + * `\bxDoDDProcess{<名前>}` + ドライバ依存マクロを実行する。 + * `\bxDeclareDriverOptions` + 後天的なドライバ名の各々について、「`\bxSetDriver{ドライバ名}` + を呼ぶ」という動作のパッケージ(クラス)オプションを定義する。 + +bxtoolbox パッケージ ― 非 e-TeX エンジンでの etoolbox の模倣 +------------------------------------------------------------- + +本パッケージの主な目的は、etoolbox パッケージの一部の機能を e-TeX 拡張を +持たないエンジンで利用可能にすることである。(pTeX エンジンの e-TeX 拡張 +が普及し出したのは 2010 年頃である。) + +なお、本パッケージを e-TeX 拡張をもつエンジンで読み込んだ場合は、本物の +etoolbox が読み込まれてその機能が使われる。 + +### etoolbox 互換命令 + +ここに挙げる命令は、etoolbox の命令の複製であり、それぞれ、命令名の頭の +`bx` を取って先頭を小文字に変えた名前(`\bxCsdef`→`\csdef`)の etoolbox +の命令に対応する。e-TeX 拡張のエンジンで動作する場合は実際に etoolbox を +読み込んでそれの命令のエイリアスとするが、そうでない場合は自前の実装を +用いる。 + +各命令の詳細については etoolbox のマニュアルを参照されたい。etoolbox の +元の命令と仕様が異なる部分にのみ説明を付している(この説明は e-TeX 非拡張 +のエンジンでの動作時のみ当てはまることに注意)。 + +(頑強な命令の定義) + + * `\bxNewrobustcmd[*]` + * `\bxRenewrobustcmd[*]` + * `\bxProviderobustcommand[*]` + * `\bxRobustify{<命令>}` + e-TeX の \protected の代わりに LaTeX の protect 処理を用いる。結果 + 的に \DeclareRobustCommand と同じ処理が使われる。 + +(メイン文書コンパイル時フック) + + * `\AfterPreamble{<テキスト>}` + * `\AtEndPreamble{<テキスト>}` + * `\AfterEndPreamble{<テキスト>}` + * `\AfterEndDocument{<テキスト>}` + +(マクロ定義) + + * `\csdef` + * `\csgdef` + * `\csedef` + * `\csxdef` + +(命令の意味の操作) + + * `\cslet{<命令名1>}{<命令2>}` + * `\letcs{<命令1>}{<命令名2>}` + * `\csletcs{<命令名1>}{<命令名2>}` + * `\bxCsuse{<命令名>}` + * `\undef{<命令>}` + * `\csundef{<命令名>}` + * `\bxCsshow{<命令名>}` + `\bxCsuse` と `\bxCsshow` は、LaTeX の protect を施しているが、 + 動く引数の中で展開されるとエラーになる。 + +(マクロの追記式定義) + + * `\appto{<命令>}{<テキスト>}` + * `\gappto{<命令>}{<テキスト>}` + * `\eappto{<命令>}{<テキスト>}` + * `\xappto{<命令>}{<テキスト>}` + * `\csappto{<命令名>}{<テキスト>}` + * `\csgappto{<命令名>}{<テキスト>}` + * `\cseappto{<命令名>}{<テキスト>}` + * `\csxappto{<命令名>}{<テキスト>}` + * `\preto{<命令>}{<テキスト>}` + * `\gpreto{<命令>}{<テキスト>}` + * `\epreto{<命令>}{<テキスト>}` + * `\xpreto{<命令>}{<テキスト>}` + * `\cspreto{<命令名>}{<テキスト>}` + * `\csgpreto{<命令名>}{<テキスト>}` + * `\csepreto{<命令名>}{<テキスト>}` + * `\csxpreto{<命令名>}{<テキスト>}` + +(真理値変数―bool系) + + * `\newbool{<名前>}` + * `\providebool{<名前>}` + * `\booltrue{<名前>}` + * `\boolfalse{<名前>}` + * `\setbool{<名前>}{<値>}` + * `\ifbool{<名前>}{<真>}{<偽>}` + * `\notbool{<名前>}{<真>}{<偽>}` + +(真理値変数―toggle系) + + * `\newtoggle{<名前>}` + * `\providetoggle{<名前>}` + * `\toggletrue{<名前>}` + * `\togglefalse{<名前>}` + * `\settoggle{<名前>}{<値>}` + * `\iftoggle{<名前>}{<真>}{<偽>}` + * `\nottoggle{<名前>}{<真>}{<偽>}` + +(定義済判定) + + * `\ifdef{<命令>}{<真>}{<偽>}` + * `\ifundef{<命令>}{<真>}{<偽>}` + * `\bxIfcsdef{<命令名>}{<真>}{<偽>}` + * `\bxIfcsundef{<命令名>}{<真>}{<偽>}` + `\bxIfcsdef` と `\bxIfcsdef` は動く引数の中で展開されるとエラーに + なる。 + +### それ以外の命令 + +種々の事情により、「etoolbox 互換用」以外の機能も含まれている。 + +(エンジンチェック―ifトークン) + + * `\ifbxineTeX` + * `\ifbxinpdfTeX` + * `\ifbxinLuaTeX` + * `\ifbxinOmega` + * `\ifbxinAleph` + * `\ifbxinXeTeX` + * `\ifbxinpTeX` + * `\ifbxinupTeX` + エンジンのチェック。これらは TeX の if-トークンである。 + +(エンジンチェック―LaTeXテスト) + + * `\bxIfineTeX{<真>}{<偽>}` + * `\bxIfinpdfTeX{<真>}{<偽>}` + * `\bxIfinLuaTeX{<真>}{<偽>}` + * `\bxIfinOmega{<真>}{<偽>}` + * `\bxIfinAleph{<真>}{<偽>}` + * `\bxIfinXeTeX{<真>}{<偽>}` + * `\bxIfinpTeX{<真>}{<偽>}` + * `\bxIfinupTeX{<真>}{<偽>}` + エンジンのチェック。これらは LaTeX 形式のテストである。(完全展開 + 可能である。) + +(プリミティブifトークンのLaTeXテスト版) + + * `\bxIf{<テスト>}{<真>}{<偽>}` + * `\bxIfcat{<テスト>}{<真>}{<偽>}` + * `\bxIfx{<テスト>}{<真>}{<偽>}` + * `\bxIfdim{<テスト>}{<真>}{<偽>}` + * `\bxIfnum{<テスト>}{<真>}{<偽>}` + TeX のプリミティブなテストを LaTeX 形式のテストにしたもの。例えば + 以下のようにして使う。 + `\bxIfx{\somecs\relax}{\dotrue}{\dofalse}` + `\bxIfnum{\count@<3}{\dotrue}{\dofalse}` + (これらの命令は完全展開可能である。) + +(プリミティブ判定) + + * `\bxIfPrimitive{<命令>}{<真>}{<偽>}` + * `\bxIfPrimitiveX{<命令名>}{<真>}{<偽>}` + `<命令>` が同名の TeX プリミティブであるかを判定する。機能としては + pdfTeX の `\ifpdfprimitive` と同じ。`\bxIfPrimitive` は脆弱である。 + `\bxIfPrimitiveX` は完全展開可能(従って頑強)であるが、pdfTeX + 拡張の `\ifpdfprimitive` が使えない時は処理が非常に重い。 + * `\bxIfCsPrimitive{<命令名>}{<真>}{<偽>}` + 引数が命令名であることを除き `\bxIfPrimitive` と同じ。 + +(文字列化) + + * `\bxDetokenize{<テキスト>}` + e-TeX 拡張の `\detokenize` と同じ機能で、e-TeX 拡張が有効の場合は + `\detokenize` のエイリアスになる。無効の場合は自前の実装を使うが、 + 処理が非常に重い。(完全展開可能である。) + * `\bxStringify{<テキスト>}` + 完全展開して detokenize した文字列に展開する。現状では全エンジン + について自前の実装を使っていて処理が非常に重い。(完全展開可能。) + +(トークン列比較) + + * `\bxIfExpToEqual{<テキスト1>}{<テキスト2>}{<真>}{<偽>}` + * `\bxIfExpToEqualX{<テキスト1>}{<テキスト2>}{<真>}{<偽>}` + 2つのテキストについて、完全展開して detokenize した結果の文字列が + 等しいかを判定する。機能としては pdfTeX の `\pdfstrcmp` での等価 + 判定と同じ。`\bxIfExpToEqual` は脆弱である。`\bxIfExpToEqualX` + は完全展開可能だが、`\pdfstrcmp` が使えない時は処理が非常に重い。 + * `\bxIfstrequalX{<テキスト1>}{<テキスト2>}{<真>}{<偽>}` + etoolbox の `\ifstrequal` と同じ機能、すなわち 2 つのテキストに + ついて展開せずに detokenize した結果の文字列が等しいかを判定する。 + 元の `\ifstrequal` と異なり完全展開可能であるが、e-TeX 拡張が無効 + の時は処理が非常に重い。 + +(プレアンブル専用命令宣言) + + * `\bxPreamble` + * `\bxPreamble[*]` + `\@onlypreamble` を設定してマクロを定義する。 + ※ 実際の動作は単に `\bxPreamble\制御綴A[*]\制御綴B` を + `\@onlypreamble\制御綴B \制御綴A[*]\制御綴B` + に置き換えているだけである。 + +(保護付マクロ定義) + + * `\bxRobustdef` + * `\bxRobustgdef` + * `\bxRobustedef` + * `\bxRobustxdef` + 保護付な命令を定義する。e-TeX 拡張が有効であれば、`\protected` を + 有効にし、無効であれば、LaTeX の保護機構を用いる。前に `\long` を + 付けられるが `\global` は不可。 + +(その他) + + * `\bxIfInMovingArg{<真>}{<偽>}` + いわゆる動く引数(実行が抑止された環境)であるかのテスト。実行が有効 + である場合は、<偽> を実行したのと等価になる。実行が抑止されている + 場合は「無意味な代入文」の後に <真> を続けたものに展開される。この + 命令は、動く引数の中での使用を事前に検査してエラーを出すという目的 + を想定している。(`\bxCheckForMovingArg` も参照。) + + * `\bxMessageToken{<文字列>}{<テキスト>}` + `<テキスト>` の中の `#1` を制御綴 `\<文字列>` に置換したテキスト + を実行する。`\<文字列>` の意味は変化しない。`<テキスト>` 中で + パラメタ `#1` 等を使う場合は `##1` のように書く必要がある。例えば + 以下のように用いる。 + + \bxMessageToken{Hello TeX!}{\def\dohello{\do#1}} + + `\dohello` の定義は `\do` の後に制御綴「`\Hello TeX!`」が続いた + ものになる。 + + * `\bxCheckForMovingArg{<テキスト>}` + 動く引数の中であるかの確認。動く引数の中でない場合は `<テキスト>` + が実行されるが、ある場合は次のように「未定義命令の形」でエラーが + 表示される。ここでは、`\xx@prepare` の中で `\bxCheckForMovingArg` + のテストを行っているとする。 + + ! Undefined control sequence. + \ ERROR: Use in wrong place! + <*> \protected@edef\xx@example{\xx@prepare + \xx@tmpa} + + ※ 実行が抑止されている場合は `\errmessage` プリミティブも実行 + されないので、普通にエラー表示ができないのである。 + ※ `\bxIfInMovingArg` を利用しているので、そこに述べられている + ように、動く引数である場合の展開結果にはゴミが残る。 + +zxbase パッケージ ― XeTeX 用基礎ライブラリ +------------------------------------------- + +作者(ZR)の制作する他のパッケージで必要な、XeTeX 特有の機能を提供する。 + +現状では、本パッケージに公開の機能は存在しない。 + +更新履歴 +-------- + + * Version 1.1 〈2017/05/29〉 + - 内容の整理。 + - 一部の機能を非推奨にした。 + * Version 1.0 〈2013/04/29〉 + - ほぼ全面的な書き直し。 + * Version 0.5 〈2010/06/15〉 + - bxbase: `\JI`/`\KI` を追加。 + - bxbase: `\dvipdfmxmapline`/`\dvipdfmxmapfont` を追加。 + - bxutf8: BMP 外の符号値への対応。 + * Version 0.4a 〈2009/11/16〉 + - bxbase で `\UI`/`\Ux` を zxjatype と、`\AJ` を zxotf + と連携させた。 + - zxbase パッケージを追加。 + * Version 0.4 〈2009/07/05〉 + - PXbase の v0.4 に合わせた改訂。 + * Version 0.3 〈2008/04/06〉 + - bxutf8x を追加。 + - bxutf8 のバグを修正。 + - bxbase でも pxbase の命令 `\recordpapersize` を使用可能にした。 + * Version 0.2 〈2008/03/28〉 + - 最初の公開版。 + +-------------------- +Takayuki YATO (aka. "ZR") +https://github.com/zr-tex8r diff --git a/Master/texmf-dist/doc/latex/bxbase/README.md b/Master/texmf-dist/doc/latex/bxbase/README.md new file mode 100644 index 00000000000..7daab0f13bf --- /dev/null +++ b/Master/texmf-dist/doc/latex/bxbase/README.md @@ -0,0 +1,133 @@ +BXbase Package Bundle +===================== + +LaTeX: Support library for other BX packages + +The main purpose of this bundle is to serve as underlying library +to make work other packages created by the same author (their names +start with “BX” or “PX”). + +However bxbase package contains a few user-level commands and is of +some use by itself. + +### System Requirements + + * TeX format: LaTeX. + * TeX engine: Any engine. + * DVI-ware (in DVI output): Anything. + +### Package content + + * `bxbase.sty`: the ‘bxbase’ package + * `bxbase.def`: a submodule of ‘bxbase’ + * `bxtoolbox.sty`: the ‘bxtoolbox’ package + * `bxtoolbox.def`: a submodule of ‘bxtoolbox’ + * `bxtoolbox-ext.def`: a submodule of ‘bxtoolbox’ + * `bxtoolbox-ja.def`: a submodule of ‘bxtoolbox’ + * `bxutf8.def`: the ‘bxutf8’ input encoding definition + * `bxutf8x.def`: the ‘bxutf8x’ input encoding definition + * `zxbase.sty`: the ‘zxbase’ package + * `bxbase-ja.pdf`: the user manual for the ‘bxbase’ (in Japanese) + * `bxbase-ja.tex`: the source file of `bxbase-ja.pdf` + +### Installation + +In a system compliant to TDS 1.1, move the files as follows: + + - `*.sty`, `*.def` → $TEXMF/tex/latex/BXbase + +And rehash your TEXMF trees if necessary. + +### License + +This package is distributed under the MIT License. + +bxbase Package ― The base library +---------------------------------- + +This package provides many package-level features, which are required by +other packages created by the same author. + +It also contains some user-level commands, but most of such commands have +been deprecated since v1.1, except a few which are related to inputting +Japanese text. + +Unfortunately the documentation is available only in Japanese. (However, +those unfamiliar with the Japanese language will probably have no need to +load this package directly.) + +bxtoolbox Package ― To emulate etoolbox on non-e-TeX +----------------------------------------------------- + +The main goal of this package is to provide part of the functions of the +[etoolbox] package for TeX engines without e-TeX extension. (Note that +TeX users in Japan have long used the pTeX engine for writing Japanese, +and e-TeX extention for the engine did not appeared until around 2010.) + +[etoolbox]: https://www.ctan.org/pkg/etoolbox + +Note that when this package is loaded in e-TeX engines, then it loads +the real etoolbox and uses the functions of that package. + +### e-TeX functions provided by this package + +Below is the list: + + \AfterPreamble \AtEndPreamble \AfterEndPreamble + \AfterEndDocument + \csdef \csgdef \csedef \csxdef + \cslet \letcs \csletcs \undef \csundef + \appto \gappto \eappto \xappto + \csappto \csgappto \cseappto \csxappto + \preto \gpreto \epreto \xpreto + \cspreto \csgpreto \csepreto \csxpreto + \newbool \providebool \booltrue \boolfalse + \setbool \ifbool \notbool + \newtoggle \providetoggle \toggletrue \togglefalse + \settoggle \iftoggle \nottoggle + \ifdef \ifundef + \ifstrequal \ifstrempty + +### “Fakes” provided by this package + +These commands have a name of the original command prefixed by “bx”, +that is, `\bxZzz` instead of `\zzz`. Some come in two versions: `\bxZzz` +works as `\zzz` but is lack of expandability `\zzz` has, whereas `\bxZzzX` +is expandable as `\zzz` is but otherwise flawed. + + * `\bxNewrobustcmd`: Uses LaTeX-protect instead of `\protected`. + * `\bxRenewrobustcmd`: Ditto. + * `\bxProviderobustcmd`: Ditto. + * `\bxRobustify`: Ditto. + * `\bxCsuse`: Forbidden in moving arguments. + * `\bxCsuseX`: Suffering from `\relax`’ifying. + * `\bxCsshow`: Forbidden in moving arguments. + * `\bxIfcsdef`: Forbidden in moving arguments. + * `\bxIfcsundef`: Forbidden in moving arguments. + * `\bxIfcsundefX`: Suffering from `\relax`’ifying. + +Note: On e-TeX extended engines, these commands are simply aliases to the +real commands of etoolbox. + +zxbase Package ― The base library for XeTeX +-------------------------------------------- + +This package provides XeTeX-specific features, which are required by +other packages created by the same author. + +For the present this package contains no public features. + +Revision History +---------------- + + * Version 1.1 〈2017/05/29〉 + * Version 1.0 〈2013/04/29〉 + * Version 0.5 〈2010/06/15〉 + * Version 0.4a 〈2009/11/16〉 + * Version 0.4 〈2009/07/05〉 + * Version 0.3 〈2008/04/06〉 + * Version 0.2 〈2008/03/28〉 + +-------------------- +Takayuki YATO (aka. "ZR") +https://github.com/zr-tex8r diff --git a/Master/texmf-dist/doc/latex/bxbase/bxbase-ja.pdf b/Master/texmf-dist/doc/latex/bxbase/bxbase-ja.pdf new file mode 100644 index 00000000000..8ce551a1522 Binary files /dev/null and b/Master/texmf-dist/doc/latex/bxbase/bxbase-ja.pdf differ diff --git a/Master/texmf-dist/doc/latex/bxbase/bxbase-ja.tex b/Master/texmf-dist/doc/latex/bxbase/bxbase-ja.tex new file mode 100644 index 00000000000..aac6d387771 --- /dev/null +++ b/Master/texmf-dist/doc/latex/bxbase/bxbase-ja.tex @@ -0,0 +1,108 @@ +% 文字コードは UTF-8 +% uplatex で組版する +\documentclass[a4paper,uplatex]{jsarticle} +\usepackage{shortvrb} +\MakeShortVerb{\|} +\newcommand{\PkgVersion}{1.1} +\newcommand{\PkgDate}{2017/05/29} +\newcommand{\Pkg}[1]{\textsf{#1}} +\newcommand{\Meta}[1]{$\langle$\mbox{}#1\mbox{}$\rangle$} +\newcommand{\Note}{\par\noindent ※} +\newcommand{\Means}{~:\quad} +\providecommand{\pTeX}{p\TeX} +\providecommand{\upTeX}{u\pTeX} +\providecommand{\pLaTeX}{p\LaTeX} +\providecommand{\upLaTeX}{u\pLaTeX} +%----------------------------------------------------------- +\begin{document} +\title{\Pkg{bxbase} パッケージ\\ +(ユーザ命令の解説)} +\author{八登崇之\ (Takayuki YATO; aka.~``ZR'')} +\date{v\PkgVersion \quad[\PkgDate]} +\maketitle + +%=========================================================== +\section{パッケージの読込} + +|\usepackage| で読み込む。オプションは無い。 +\begin{quote}\small\begin{verbatim} +\usepackage{bxbase} +\end{verbatim}\end{quote} + +\Note 本パッケージのライブラリとしての機能は特定の +エンジンやDVIウェアに依存しないが、以下に述べる命令に +ついては必ずしもそうでないことに注意。 + +%=========================================================== +\section{機能} + +%------------------- +\subsection{符号値による文字入力} + +\begin{itemize} +\item |\Ux{|\Meta{コード値}|,...}|\\ + |\UI{|\Meta{<コード値>}|,...}|\Means +Unicode コード値による入力を行う。 +|\Ux| は欧文用、|\UI| は和文用 +(I は Ideographic の意味)。 +コード値は以下の形式で表す。 +コンマで区切って複数文字入力できる。 +\begin{itemize} +\item \Meta{16進数}\Means |A72C|, |02000B|, |1bd| 等。 +\item |+|\Meta{10進数}\Means |+254|, |+0937| 等。 +\item |'|\Meta{8進数}\Means |'376|, |'1651| 等。 +\end{itemize} + +Unicode 文字の出力には次の順番で利用可能な最初の機能を用いる。 +(|\UI| の場合 3) を飛ばす。) +\begin{enumerate} +\item[1)] \Pkg{zxjatype}パッケージ。 +この場合、その機構に従って出力される。 +すなわち |\UI| は必ず和文フォントで出力し、 +|\Ux| は和文/欧文切替の対象となる。 +\item[2)] XeTeXのUnicode出力。 +\item[3)] (|\Ux| のみ)\Pkg{bxucs}パッケージ。 +\item[4)] {\upTeX}の和文Unicode出力。 +\item[5)] \Pkg{UTF}/\Pkg{OTF}パッケージ。 +\item[6)] \Pkg{ums}/\Pkg{bxsuika}パッケージ。 +\end{enumerate} +どれも使えない場合は「16進表現による代替表現」になる。 + +\item |\AJ{|\Meta{コード値}|,...}|\Means +Adobe-Japan1のコード値による入力を行う。 +コード値は10進数で指定する。 +出力には次の順番で利用可能な最初の機能を用いる。 +\begin{enumerate} +\item[1)] \Pkg{zxotf}パッケージ。 +\item[2)] \Pkg{UTF}/\Pkg{OTF}パッケージ。 +\end{enumerate} +どれも使えない場合は代替表現になる。 + +\item |\JI{|\Meta{コード値}|,...}|\Means +いわゆる「JISコード」(JIS~X~0208のGL表現) +のコード値による入力を行う。 +コード値指定の方法は |\Ux| と同じ。 +出力には{(u)\pTeX}のJISコード和文出力の機能を使う。 +使えない場合は代替表現になる。 + +\item |\KI{|\Meta{コード値}|,...}|\Means +いわゆる「区点コード」のコード値による入力を行う。 +コード値指定は「RRCC」(RRは区番号、CCは点番号を10進2桁で表したもの) +の形式で指定する。 +出力には{(u)\pTeX}のJISコード和文出力の機能を使う。 +使えない場合は代替表現になる。 + +\item |\bxUx| / |\bxUI| / |\bxAJ| / |\bxJI| / |\bxKI|\Means +|\Ux| 等は非常に短い名前なので他のパッケージと衝突する恐れがあり、 +そこでこのパッケージでは既に同名の命令がある場合は上書きしない +ようにしている。 +|\bxUx| 等はそれぞれ |\Ux| 等と同じで、 +先のような場合にも常に使える。 + +\end{itemize} + +なお、このパッケージは\Pkg{bxutf8}の為のドライバ(|\bxUHex|) +および\Pkg{bxutf8x}の為のドライバを |\Ux| に相当するものに設定する。 + +%=========================================================== +\end{document} diff --git a/Master/texmf-dist/tex/latex/bxbase/bxbase.def b/Master/texmf-dist/tex/latex/bxbase/bxbase.def index 1488f6fa1c4..614ac5dcc81 100644 --- a/Master/texmf-dist/tex/latex/bxbase/bxbase.def +++ b/Master/texmf-dist/tex/latex/bxbase/bxbase.def @@ -1,94 +1,101 @@ -% -% bxbase.def -% - -% Note: bxbase.def and pxbase.def provide same set of functionality. -% To avoid version clash, when a version of one of them is loaded, -% load of an older version of the other is aborted. - -%%%% stuffs read when \input'ed -\ifx\bxbaseOk\undefined -\bgroup -\catcode`\@=11 -\gdef\bx@defextension{def} -\gdef\bx@ver@#1{\expandafter\expandafter\expandafter\@parse@version - \csname ver@#1.\@currext\endcsname//00\@nil} - %% \bxInputDefFile{} -\gdef\bxInputDefFile#1{\@onefilewithoptions{#1}[][]\bx@defextension} - %% \bxCheckCPart{} -\gdef\bxCheckCPart#1{% - \@ifl@aded\@currext{#1}{% - \ifnum\bx@ver@{#1}>\bx@ver@\@currname \expandafter\endinput\fi}{}} -\egroup -\let\bxbaseOk=t -\bxInputDefFile{bxbase} %% read this file again -\expandafter\endinput\fi - -%%--------------- folloing stuffs are read by \bxTnext - -%%%% file declaration +%% +%% This is file 'bxbase.def'. +%% + +%% file declaration \NeedsTeXFormat{LaTeX2e} -\ProvidesFile{bxbase.def}[2010/06/15 v0.5 BX/PX base library] -\bxCheckCPart{pxbase} -%* v0.5.r13 - -%%%% error messages -\def\bx@b@pkgname{BX/PXbase} % bundle name -\def\bx@b@error{\PackageError\bx@b@pkgname} -\def\bx@err@nobbl{\bx@b@error{babel not yet loaded}\@eha} -\def\bx@err@oorng{\bx@b@error{Number out of range}\@eha} -\def\bx@err@nanbc{\bx@b@error{Non-BMP characters not supported}\@eha} -\def\bx@err@ilnfm{\bx@b@error{Illegal number format}\@eha} -\def\bx@err@uddrv#1{\bx@b@error{\string#1 is undefined}\@eha} - -%%%% common stuffs -\ifx\bxUcv\@undefined -\newcount\bxUcv % argument of \bx@Ux -\fi -\newif\ifbxOk % all-purpsoe switch +\ProvidesFile{bxbase.def}[2017/05/29 v1.1 BX base library] +\def\bx@pkgname{BXbase} % bundle name + +%% check intergrity +\edef\bxbz@tmpa{\@currname.\@currext}\def\bxbz@tmpb{bxbase.def} +\ifx\bxbz@tmpa\bxbz@tmpb\else + \PackageError\bx@pkgname{Illegal load sequence}\@eha +\expandafter\endinput\fi\relax + +%% code guards +\edef\bxbz@restore@codes{% + \catcode33=\the\catcode33% + \catcode34=\the\catcode34% + \catcode39=\the\catcode39% + \catcode43=\the\catcode43% + \catcode45=\the\catcode45% + \catcode46=\the\catcode46% + \catcode47=\the\catcode47% + \catcode58=\the\catcode58% + \catcode60=\the\catcode60% + \catcode62=\the\catcode62% + \catcode94=\the\catcode94% + \catcode96=\the\catcode96% +\relax} +\catcode33=12 % +\catcode34=12 % <"> +\catcode39=12 % <'> +\catcode43=12 % <+> +\catcode45=12 % <-> +\catcode46=12 % <.> +\catcode47=12 % +\catcode58=12 % <:> +\catcode60=12 % <<> +\catcode62=12 % <>> +\catcode94=7 % <^> +\catcode96=12 % <`> +\AtEndOfPackage{% + \bxbz@restore@codes + \let\bxbz@restore@codes\@undefined} + +%--------------------------------------- general + +%% packages +\RequirePackage{bxtoolbox}[2017/05/29] + +%% variables \let\bxHex\relax % result of \bxToHex... \let\bxRes\relax % result of \bxToLower -\edef\bx@b@resetcatcodes{% < ! " ' + ^ > - \catcode33=\the\catcode33\catcode34=\the\catcode34% - \catcode39=\the\catcode39\catcode43=\the\catcode43% - \catcode94=\the\catcode94\relax} -\catcode33=12 \catcode34=12 \catcode39=12 \catcode43=12 -\catcode94=6 - -%%------ Programming tools - -%%%% \bxNullify\CS -% Make \CS void and unoverridable by \providecommand. -\def\bxNullify#1{\global\let#1\bx@nullified} -\def\bx@nullified{\@gobble\bx@@nullified} - -%%%% \bxDebug{} -% If \bxUseDebug is defined when bxbase is loaded, this command -% prints debug messages; otherwise it is ignored. -%\let\bx@typeout\typeout -%\ifx\bxUseDebug\@undefined \let\bxDebug\@gobble -%\else \def\bxDebug#1{\bx@typeout{BX debug: #1}}\fi -\providecommand*\bxDebug{\@gobble} - -%%%% \bxCheckMA\CS \bxEndCheckMA +\ifundef\bxUcv{\newcount\bxUcv}{} % argument of \bx@Ux + +%% unique tokens +\def\bxbz@uniq{\bxbz@uniq@} + +%% error messages +\def\bx@error{\PackageError\bx@pkgname} +\def\bx@warn{\PackageWarningNoLine\bx@pkgname} +\def\bx@err@nobbl{\bx@error{babel not yet loaded}\@eha} +\def\bx@err@nanbc{\bx@error{Non-BMP characters not supported}\@eha} +\def\bx@err@ilnfm{\bx@error{Illegal number format}\@eha} +\def\bx@err@uddrv#1{\bx@error{\string#1 is undefined}\@eha} +\def\bxbz@warn@depre#1#2{% + \PackageWarning\bx@pkgname + {The command '\string#1' is obsolete and\MessageBreak + its use is deprecated% + \ifx\relax#2\relax, \else + \MessageBreak (use #2 instead),\MessageBreak + \fi detected}} + +%--------------------------------------- programming tools + +%%<+> \bxCheckMA\CS \bxEndCheckMA % If this construct appears in moving arguments, it expands to % an error message command. \def\bxCheckMA{\let\bx@chkma@a\bx@chkma@a\noexpand} \let\bxEndCheckMA\@empty \let\bx@chkma@z\relax \def\bx@chkma@a#1{\bx@chkma@z\relax\bx@chkma@b} \def\bx@chkma@b#1#2#3\bxEncCheckMA{\noexpand\bx@err@ivfrg#1#2} -\def\bx@err@ivfrg#1{\bx@b@error{Cannot use \string#1 here}\@eha} +\def\bx@err@ivfrg#1{\bx@error{Cannot use \string#1 here}\@eha} -%%------ TeX engine distinction +%%<+D> \bxCheckCounterpart{} +% Compares the version between the current file and +% with the extension of current file, and if the latter file is +% already loaded and moreover turns out to be newer than the +% system aborts loading the current file. +\bxPreamble\newcommand*\bxCheckCounterpart[1]{% + \PackageWarning\bx@pkgname + {'\string\bxCheckCounterpart' is no more supported,% + \MessageBreak detected}} -%%%% \bxIfPrimitive\CS{}{} -% Checks if \CS is a primitive. -\def\bxIfPrimitive#1{% - \edef\bx@tmpa{\string#1}\edef\bx@tmpb{\meaning#1}% - \ifx\bx@tmpa\bx@tmpb \expandafter\@firstoftwo - \else \expandafter\@secondoftwo \fi} +%--------------------------------------- TeX engine distinction -%%%% \bxEngineTypeX / \bxEngineTypeY +%%<+> \bxEngineTypeX / \bxEngineTypeY % Numbers that signify what I am. % \bxEngineTypeX values \chardef\bxETTeX=0 % none of those @@ -98,27 +105,35 @@ % \bxEngineTypeY values (plus \bxETTeX) \chardef\bxETeTeX=1 % e-TeX-extended \chardef\bxETpdfTeX=3 % pdfTeX-extended +\chardef\bxETLuaTeX=5 % LuaTeX-extended % (here old pdfTeX without e-TeX is ignored) % -\bxIfPrimitive\kansuji{\let\bxEngineTypeX\bxETpTeX}{% -\bxIfPrimitive\XeTeXversion{\let\bxEngineTypeX\bxETXeTeX}{% -\bxIfPrimitive\Omegaversion{\let\bxEngineTypeX\bxETOmega}{% - \let\bxEngineTypeX\bxETTeX}}} -\bxIfPrimitive\eTeXversion{\let\bxEngineTypeY\bxETeTeX}{% -\bxIfPrimitive\pdftexversion{\let\bxEngineTypeY\bxETpdfTeX}{% - \let\bxEngineTypeY\bxETTeX}} - -%%%% \bx@b@uptex -\bxIfPrimitive\kchar{\chardef\bx@b@uptex\@ne}{\chardef\bx@b@uptex\z@} - -%%------ Babel something + % Note: + % Originally LuaTeX was supposed to be 'both pdfTeX- and Omega- + % extended' (\bxEngineTypeX/Y = 3/3); however, It seems that + % in today's LaTeX world LuaTeX is no longer seen as Omega- + % extended (indeed, current LuaTeX drops many of the Omega- + % specific features). So LuaTeX got relocated at \bxEngineTypeX/Y + % = 0/5. +\ifbxinpTeX \let\bxEngineTypeX\bxETpTeX +\else\ifbxinXeTeX \let\bxEngineTypeX\bxETXeTeX +\else\ifbxinOmega \let\bxEngineTypeX\bxETOmega +\else \let\bxEngineTypeX\bxETTeX +\fi\fi\fi +\ifbxineTeX \let\bxEngineTypeY\bxETeTeX +\else\ifbxinpdfTeX \let\bxEngineTypeY\bxETpdfTeX +\else\ifbxinLuaTeX \let\bxEngineTypeY\bxETLuaTeX +\else \let\bxEngineTypeY\bxETTeX +\fi\fi\fi +\bxDebug{engine type = \the\bxEngineTypeX/\the\bxEngineTypeY} + +%--------------------------------------- Babel something %%<+> \bxBDHookBabel % A begindocument-hook about Babel. -\newif\ifbx@bbl@inuse -\def\bx@bbl@bdhook{} -\providecommand\bxBDHookBabel{\bx@bdhook@babel@do} -\def\bx@bdhook@babel@do{% +\newbool{bx@bbl@inuse} +\bxPreamble\def\bx@bbl@bdhook{} +\bxPreamble\newcommand*\bxBDHookBabel{% \AtBeginDocument{% \@ifpackageloaded{babel}{% \bx@bbl@inusetrue @@ -126,241 +141,96 @@ \bx@bbl@bdhook }{}}% \bxNullify\bxBDHookBabel} -\@onlypreamble\bxBDHookBabel -\@onlypreamble\bx@bdhook@babel@do %%<+> \bxAtBeginDocumentBabel{} -% Register a begin-document hook that willl be invoked only when babel +% Register a begin-document hook that will be invoked only when babel % is loaded. -\def\bxAtBeginDocumentBabel{% +\bxPreamble\newcommand\bxAtBeginDocumentBabel{% \g@addto@macro\bx@bbl@bdhook} -\@onlypreamble\bxAtBeginDocumentBabel -\@onlypreamble\bx@bbl@bdhook -%%%% \bx@bbl@patch@sel@lang +%% \bx@bbl@patch@sel@lang % A patch to \select@language that disables automatic switching of % caption language. -\def\bx@bbl@patch@sel@lang{% this wlll be never invoked twice +\bxPreamble\def\bx@bbl@patch@sel@lang{% + \global\let\bx@bbl@patch@sel@lang\relax \global\let\bx@bbl@org@select@language\select@language \gdef\select@language##1{% \bx@bbl@copy{**C}{##1}\bx@bbl@copy{##1}{**Z}% \bx@bbl@org@select@language{##1}\bx@bbl@copy{##1}{**C}}} -\@onlypreamble\bx@bbl@patch@sel@lang - -%%%% \bx@bbl@do@captlang -\def\bx@bbl@@main{main} -\def\bx@bbl@@default{default} -\def\bx@bbl@do@captlang{% - % set captions - \ifx\bx@bbl@captlang\bx@bbl@@main - \let\bx@bbl@captlang\bbl@main@language \fi - \ifx\bx@bbl@captlang\bx@bbl@@default - \else\expandafter\ifx\csname l@\bx@bbl@captlang\endcsname\relax - \@nolanerr\bx@bbl@captlang - \else \csname date\bx@bbl@captlang\endcsname - \csname captions\bx@bbl@captlang\endcsname - \fi\fi} -\@onlypreamble\bx@bbl@do@captlang - -%%%% \bx@bbl@copy{}{} + +%% \bx@bbl@do@captlang +% Sets the caption language of Babel according to the value of +% \bx@bbl@captlang. +\bxPreamble\def\bx@bbl@do@captlang{% + \bxIfExpToEqual{\bx@bbl@captlang}{main}% + {\let\bx@bbl@captlang\bbl@main@language}{}% + \bxIfExpToEqual{\bx@bbl@captlang}{default}{}%else + {\bxIfcsundef{l@\bx@bbl@captlang}{\@nolanerr\bx@bbl@captlang}% + {\@nameuse{date\bx@bbl@captlang}% + \@nameuse{captions\bx@bbl@captlang}}}} + +%% \bx@bbl@copy{}{} % Copies \captions... and \date... for save. \def\bx@bbl@copy#1#2{% - \bx@bbl@copy@a{#1}{#2}{captions}% - \bx@bbl@copy@a{#1}{#2}{date}} -\def\bx@bbl@copy@a#1#2#3{% - \edef\bx@tmpa{\let\expandafter\noexpand\csname#3#1\endcsname - \expandafter\noexpand\csname#3#2\endcsname}\bx@tmpa} -\@namedef{captions**Z}{\@empty} -\@namedef{date**Z}{\@empty} - -%%<*> \bxcaptionlanguage{} + \csletcs{captions#1}{captions#2}% + \csletcs{date#1}{date#2}} +\csdef{captions**Z}{\@empty} +\csdef{date**Z}{\@empty} + +%%<*D> \fixcaptionlanguage{} +%%<+> \bxFixCaptionLanguage{} % Change the caption language manually, with disabling automatic % switching on it. -\def\bxcaptionlanguage#1{% +\bxPreamble\newcommand*\fixcaptionlanguage[1]{% + \bxbz@warn@depre\fixcaptionlanguage{}% + \bxFixCaptionLanguage{#1}} +\bxPreamble\newcommand*\bxFixCaptionLanguage[1]{% \@ifpackageloaded{babel}% - {\ifx\bx@bbl@captlang\@undefined \bx@bbl@patch@sel@lang \fi + {\bx@bbl@patch@sel@lang \xdef\bx@bbl@captlang{#1}}% {\bx@err@nobbl}} -\@onlypreamble\bxcaptionlanguage -%%<*> \bxmainlanguage{} +%%<+> \bxProvideCaptionLanguage{} +\bxPreamble\newcommand*\bxProvideCaptionLanguage[1]{% + \ifundef\bx@bbl@captlang + {\bxFixCaptionLanguage{#1}}{}} + +%%<*> \setmainlanguage{} % Changes the 'main' language (one that is effective at beginning). -\def\bxmainlanguage#1{% - \expandafter\ifx\csname date#1\endcsname\relax - \@nolanerr{#1}\fi +\bxPreamble\newcommand*\setmainlanguage[1]{% + \bxIfcsundef{date#1}{\@nolanerr{#1}}{}% \xdef\bbl@main@language{#1}} -\@onlypreamble\bxmainlanguage %%<+> \bxTrivLangDef{} % Makes a fake language option. -\def\bxTrivLangDef#1{% - \@ifundefined{date#1}{% - \@ifundefined{l@#1}% +\bxPreamble\newcommand*\bxTrivLangDef[1]{% + \bxIfcsundefX{date#1}{% + \bxIfcsundefX{l@#1}% {\expandafter\chardef\csname l@#1\endcsname\z@}{}% - \@namedef{date#1}{\relax}% - \@namedef{captions#1}{\relax}% - \@namedef{extras#1}{\relax}% - \@namedef{noextras#1}{\relax}% - \@namedef{date#1}{\relax}% + \csdef{date#1}{\relax}% + \csdef{captions#1}{\relax}% + \csdef{extras#1}{\relax}% + \csdef{noextras#1}{\relax}% + \csdef{date#1}{\relax}% }{}} -\@onlypreamble\bxTrivLangDef - -%%------ 'Number-to-hex-string' functions -% All public commands put their result in \bxHex. - -%%%% preparation -\newif\ifbx@hx@bigchar -\ifnum\bxEngineTypeX>\@ne \bx@hx@bigchartrue \fi -\ifnum\bx@b@uptex>\z@ \bx@hx@bigchartrue \fi - -%%<+> \bxToHexTiny -% For one-to-two-digit hex strings. -\def\bxToHexTiny#1{% - \chardef\bxHex=#1\relax - \expandafter\bx@hx@tohextiny@a\meaning\bxHex\@nil} -\def\bx@hx@tohextiny@a#1"#2\@nil{\def\bxHex{#2}} - -%%<+> \bxToHexSmall -% For one-to-three-digit hex strings. -\def\bxToHexSmall#1{% - \mathchardef\bxHex=#1\relax - \expandafter\bx@hx@tohexsmall@a\meaning\bxHex\@nil} -\def\bx@hx@tohexsmall@a#1"#2\@nil{\def\bxHex{#2}} - -%%<+> \bxToHexTwo -% For zero-padded two-digit hex strings. -\def\bxToHexTwo#1{% - \chardef\bxHex=#1\relax - \expandafter\bx@hx@tohextwo@a\meaning\bxHex"0\@nil} -\def\bx@hx@tohextwo@a#1"#2#3#4#5\@nil{\bx@hx@tohextwo@b#2#3#4\@nil} -\def\bx@hx@tohextwo@b#1"#2\@nil{\def\bxHex{#2#1}} - -%%<+> \bxToHexThree -% For zero-padded three-digit hex strings. -\def\bxToHexThree#1{% - \mathchardef\bxHex=#1\relax - \expandafter\bx@hx@tohexthree@a\meaning\bxHex"00\@nil} -\def\bx@hx@tohexthree@a#1"#2#3#4#5#6\@nil{\bx@hx@tohexthree@b#2#3#4#5\@nil} -\def\bx@hx@tohexthree@b#1"#2\@nil{\def\bxHex{#2#1}} - -%%<+> \bxToHexFour -% For zero-padded four-digit hex strings. -\ifbx@hx@bigchar %----<*bigchar> -\def\bxToHexFour#1{% - \chardef\bxHex=#1\relax - \expandafter\bx@hx@tohexfour@a\meaning\bxHex"000\@nil} -\def\bx@hx@tohexfour@a#1"#2#3#4#5#6#7\@nil{\bx@hx@tohexfour@b#2#3#4#5#6\@nil} -\def\bx@hx@tohexfour@b#1"#2\@nil{\def\bxHex{#2#1}} -\else %----<*!bigchar> -\mathchardef\bx@hx@fzzz="4000 -\def\bxToHexFour#1{\bgroup - \@tempcnta=#1\relax\@tempcntb\@tempcnta\divide\@tempcntb\bx@hx@fzzz - \ifcase\@tempcntb \advance\@tempcnta\bx@hx@fzzz \or \or - \advance\@tempcnta-\bx@hx@fzzz \or \advance\@tempcnta-"8000 \or - \@tempcnta\z@ \fi - \mathchardef\bx@hx@tmp\@tempcnta - \expandafter\bx@hx@tohexfour@a\meaning\bx@hx@tmp\@nil - \egroup \let\bxHex\bx@hx@gtmp} -\def\bx@hx@tohexfour@a#1"#2#3\@nil{% - \expandafter\let\expandafter\bx@hx@tmp - \csname bxhx@X/\the\@tempcntb#2\endcsname - \ifx\bx@hx@tmp\relax \bx@err@oorng \global\let\bx@hx@gtmp\@empty - \else \xdef\bx@hx@gtmp{\bx@hx@tmp#3}\fi} -\def\bx@hx@nxt#1#2#3{\bgroup\catcode`#3=12 - \global\expandafter\def\csname bxhx@X/#1#2\endcsname{#3}\egroup} -\@for\bx@hx@tmp:={040,051,062,073,144,155,166,177,248,259,26A,27B,% - 34C,35D,36E,37F}\do{\expandafter\bx@hx@nxt\bx@hx@tmp} -\fi %---- - -%%<+> \bxToHexFive -%%<+> \bxToHexFiveX -% For zero-padded five-digit hex strings. -\def\bxToHexFive{\bx@tohexfive@aa\relax} -\def\bxToHexFiveX{\bx@tohexfive@aa - {\ifnum\@tempcnta>\bx@hx@vdmax \@tempcnta=\bx@hx@vdmax\fi}} -\ifbx@hx@bigchar %----<*bigchar> -\chardef\bx@hx@vdmax="FFFFF -\def\bx@tohexfive@aa#1#2{% - {\@tempcnta=#2\relax#1\global\chardef\bx@hx@gtmp=\@tempcnta}% - \expandafter\bx@hx@tohexfivex@a\meaning\bx@hx@gtmp"0000\@nil} -\def\bx@hx@tohexfivex@a#1"#2#3#4#5#6#7#8\@nil{% - \bx@hx@tohexfivex@b#2#3#4#5#6#7\@nil} -\def\bx@hx@tohexfivex@b#1"#2\@nil{\edef\bxHex{#2#1}} -\else %----<*!bigchar> -\edef\bx@hx@vdmax{"FFFFF\space} -\def\bx@tohexfive@aa#1#2{% - \bgroup \@tempcnta=#2\relax#1% - \@tempcntb=\@tempcnta \divide\@tempcnta\bx@hx@m\relax - \bxToHexTwo\@tempcnta \let\bx@hx@tmp\bxHex - \multiply\@tempcnta-\bx@hx@m\advance\@tempcnta\@tempcntb\relax - \bxToHexThree\@tempcnta \xdef\bx@hx@gtmp{\bx@hx@tmp\bxHex}% - \egroup \let\bxHex\bx@hx@gtmp} -\fi %---- - -%%<+> \bxToHexEight -% For zero-padded eight-digit hex strings. -\def\bxToHexEight#1{% - \bgroup \@tempcnta=#1\relax - \@tempcntb=\@tempcnta\divide\@tempcnta\p@\relax - \bxToHexFour\@tempcnta \let\bx@hx@tmp\bxHex - \multiply\@tempcnta-\p@\advance\@tempcnta\@tempcntb\relax - \bxToHexFour\@tempcnta \xdef\bx@hx@gtmp{\bx@hx@tmp\bxHex}% - \egroup \let\bxHex\bx@hx@gtmp} - -%%<+> \bxToHexUC -% For zero-padded four-to-six-digit hex strings. -\ifbx@hx@bigchar %----<*bigchar> -\def\bxToHexUC#1{% - \chardef\bxHex=#1\relax - \expandafter\bx@hx@tohexuc@a\meaning\bxHex"\@empty\@empty000\@nil} -\def\bx@hx@tohexuc@a#1"#2#3#4#5#6#7#8#9\@nil{% - \bx@hx@tohexuc@b#2#3#4#5#6#7#8\@nil} -\def\bx@hx@tohexuc@b#1"#2\@nil{\edef\bxHex{#2#1}} -\else %----<*!bigchar> -\mathchardef\bx@hx@m="1000 -\def\bxToHexUC#1{% - \bgroup \@tempcnta=#1\relax - \@tempcntb=\@tempcnta \divide\@tempcnta\bx@hx@m\relax - \bxToHexSmall\@tempcnta \let\bx@hx@tmp\bxHex - \multiply\@tempcnta-\bx@hx@m\advance\@tempcnta\@tempcntb\relax - \bxToHexThree\@tempcnta \xdef\bx@hx@gtmp{\bx@hx@tmp\bxHex}% - \egroup \let\bxHex\bx@hx@gtmp} -\fi %---- - -%%<+> \bxToDecFour -\def\bxToDecFour#1{% - \expandafter\bx@hx@todecfour@a\number#1"000\@nil} -\def\bx@hx@todecfour@a#1#2#3#4#5#6\@nil{\bx@hx@todecfour@b#1#2#3#4#5\@nil} -\def\bx@hx@todecfour@b#1"#2\@nil{\def\bxHex{#2#1}} - -%%<+> \bxToDecFive -\def\bxToDecFive#1{% - \expandafter\bx@hx@todecfive@a\number#1"0000\@nil} -\def\bx@hx@todecfive@a#1#2#3#4#5#6#7\@nil{\bx@hx@todecfive@b#1#2#3#4#5#6\@nil} -\def\bx@hx@todecfive@b#1"#2\@nil{\def\bxHex{#2#1}} - -%%------ Input through code values + +%--------------------------------------- input through code values %%<+> \bxBDHookUnicode % A begindocument-hook about Unicode (& CID) input. -\providecommand\bxBDHookUnicode{\bx@bdhook@unicode@do} -\def\bx@bdhook@unicode@do{% +\bxPreamble\newcommand*\bxBDHookUnicode{% \AtBeginDocument{\bx@assign@Ux}% \bxNullify\bxBDHookUnicode} -\@onlypreamble\bxBDHookUnicode -\@onlypreamble\bx@bdhook@unicode@do %%<+> \bxBDHookJisInput % A begindocument-hook about JIS-code input. -\providecommand\bxBDHookJisInput{\bx@bdhook@jisinput@do} -\def\bx@bdhook@jisinput@do{% +\bxPreamble\newcommand*\bxBDHookJisInput{% \AtBeginDocument{\bx@assign@JI}% \bxNullify\bxBDHookJisInput} -\@onlypreamble\bxBDHookJisInput -\@onlypreamble\bx@bdhook@jisinput@do -%%<+> \bxFallbackSym -\def\bxFallbackSym#1{\leavevmode\bx@fbs@fnt{\dimen@=\bx@junit\relax +%%<+> \bxFallbackSym{} +\newcommand*\bxFallbackSym[1]{% + \leavevmode\bx@fbs@fnt{\dimen@=\bx@junit\relax \hb@xt@\dimen@{\hss\vrule\@width\z@\@height.88\dimen@\@depth.12\dimen@ \frame{\lower.04\dimen@\hb@xt@.84\dimen@{\hss\vbox to.84\dimen@{\vss \hsize=.84\dimen@\baselineskip\z@\lineskip.01\dimen@\parskip\z@skip @@ -375,7 +245,7 @@ %%<+> \bxCodeValueSeq\CS{} % Dispatcher for code value sequences. -\def\bxCodeValueSeq{% +\newcommand*\bxCodeValueSeq{% \let\bx@cvseq@branch\bx@cvseq@branch@hex \bx@cvseq@a} \def\bx@cvseq@a#1#2{% @@ -404,32 +274,31 @@ %%<+> \bxCodeValueSeqD\CS{} % Same as \bxCodeValueSeq, except that it defaults to decimal. -\def\bxCodeValueSeqD{% +\newcommand*\bxCodeValueSeqD{% \let\bx@cvseq@branch\bx@cvseq@branch@dec \bx@cvseq@a} \def\bx@cvseq@branch@dec{% \if !\bx@toka \let\bx@nxt\bx@cvseq@fin \else \let\bx@nxt\bx@cvseq@pfx \fi \bx@nxt} -%%<+> \bxUx, \bxUI, \bxAJ, \bxJI, \bxKI +%%<*> \bxUx, \bxUI, \bxAJ, \bxJI, \bxKI % The prefixed names for \Ux, etc. They are (more likely to be) % collision-safe. -\let\bxUx\relax -\DeclareRobustCommand*\bxUx{\bxCodeValueSeq\bx@Ux} -\let\bxUI\relax -\DeclareRobustCommand*\bxUI{\bxCodeValueSeq\bx@UI} -\let\bxAJ\relax -\DeclareRobustCommand*\bxAJ{\bxCodeValueSeqD\bx@AJ} -\let\bxJI\relax -\DeclareRobustCommand*\bxJI{\bxCodeValueSeq\bx@JI} -\let\bxKI\relax -\DeclareRobustCommand*\bxKI{\bxCodeValueSeqD\bx@KI} +\bxNewrobustcmd*\bxUx{\bxCodeValueSeq\bx@Ux} +\bxNewrobustcmd*\bxUI{\bxCodeValueSeq\bx@UI} +\bxNewrobustcmd*\bxAJ{\bxCodeValueSeqD\bx@AJ} +\bxNewrobustcmd*\bxJI{\bxCodeValueSeq\bx@JI} +\bxNewrobustcmd*\bxKI{\bxCodeValueSeqD\bx@KI} %%<+> \bxUHex{}, \bxUInt{} % Alternative entry points for \Ux. The code value is specified in % hexadecimal (\bxUHex) / decimal (\bxUInt) numerals. -\def\bxUHex{\protect\bx@Uxh} -\def\bxUqInt{\protect\bx@UInt} +\def\bxbz@tmpa{\bxUIntDummyBxutfx} +\bxIfx{\bxUInt\bxbz@tmpa}{\undef\bxUInt}{} +\def\bxbz@tmpa{\bxUHexDummyBxutf} +\bxIfx{\bxUHex\bxbz@tmpa}{\undef\bxUHex}{} +\newcommand*\bxUHex{\protect\bx@Uxh} +\newcommand*\bxUInt{\protect\bx@UInt} \def\bx@UInt#1{\bxUcv=#1\relax\bx@Ux} %% \bx@UIh@fb, \bx@AJ@fb @@ -447,7 +316,7 @@ \bxFallbackSym{{\sml#6}\\#1#2\\#3#4}} \def\bx@hx@supzero#1{\ifx0#1\else\expandafter#1\fi} -%%%% \bx@assign@Ux +%% \bx@assign@Ux % Picks up appropriate drivers \bx@Ux etc. according to current % load-states of packages. % [driver] [purpose] [argument] [default] @@ -477,7 +346,7 @@ \def\bx@UIh@ums#1{\expandafter\UMS\expandafter{#1}} % \CID with \bxUcv \def\bx@AJ@otf{\CID\bxUcv} -\def\bx@assign@Ux{% +\bxPreamble\def\bx@assign@Ux{% % If I have bxucs, then set \bx@Ux to \bx@Ux@ucs % (which fallbacks on \bx@UI in failure). \@ifpackageloaded{bxucs}{% @@ -495,7 +364,7 @@ \@ifpackageloaded{pxotf}{% \let\bx@UIh\bxUIh@otf \let\bx@UI\pxUcvUTF \let\bx@AJ\pxUcvCID}{}% % If I am upTeX I use \kchar. - \ifnum\bx@b@uptex>\z@ + \ifbxinupTeX \def\bx@UI{\kchar\bxUcv}\def\bx@UIh##1{\kchar"##1\relax}% % If I am a Unicode-aware engine, then... \else\ifnum\bxEngineTypeX>\@ne % @@ -515,17 +384,16 @@ \ifx\bx@AJ@usr\@undefined\else \let\bx@AJ\bx@AJ@usr \fi \let\bx@setajdriver@a\bx@setajdriver@b } -\@onlypreamble\bx@assign@Ux -%%%% \setUIdriver\CS -\def\setUIdriver#1{% +%%<*> \setUIdriver\CS +\newcommand*\setUIdriver[1]{% \ifx#1\@undefined \bx@err@uddrv#1% \else \bx@setuidriver@a#1\fi} \def\bx@setuidriver@a#1{\let\bx@UIh@usr#1} \def\bx@setuidriver@b#1{\let\bx@UIh#1} -%%%% \setAJdriver\CS -\def\setAJdriver#1{% +%%<*> \setAJdriver\CS +\newcommand*\setAJdriver[1]{% \ifx#1\@undefined \bx@err@uddrv#1% \else \bx@setajdriver@a#1\fi} \def\bx@setajdriver@a#1{\let\bx@AJ@usr#1} @@ -538,7 +406,7 @@ % \bx@KI Kuten-code \bxUcv fallback \def\bx@JI{\bx@JI@fb} \def\bx@KI{\bx@KI@fb} -\def\bx@assign@JI{% +\bxPreamble\def\bx@assign@JI{% % \JI & \KI are available only in (u)pTeX \ifnum\bxEngineTypeX=\@ne \def\bx@JI{\char\jis\bxUcv\relax}\let\bx@KI\bx@KI@pTeX @@ -557,7 +425,7 @@ \ifnum\bxUcv<\bx@ki@myr \advance\bxUcv\bx@ki@myr \fi \expandafter\bx@ki@ptex@a\the\bxUcv\@nil \bx@ki@char\jis\bxUcv\relax} -\bgroup \@tempcnta=94 +\begingroup \@tempcnta=94 \@for\bx@tmpa:=01,08,03,04,05,12,13,14,15\do{\advance\@tempcnta\@ne \expandafter\xdef\csname bx@JSH/\bx@tmpa\endcsname{\the\@tempcnta}} \@tempcntb=77 \loop @@ -565,111 +433,45 @@ \expandafter\xdef\csname bx@JSH/\the\@tempcntb\endcsname {\the\@tempcnta}% \ifnum\@tempcntb<94 \repeat -\egroup +\endgroup \def\bx@ki@ptex@a#1#2#3#4#5#6\@nil{% \ifnum#1=\@ne \bxUcv=#2#3\relax \else \bxUcv=0\csname bx@JSH/#2#3\endcsname\relax \fi \multiply\bxUcv\@cclvi \advance\bxUcv#4#5\relax \advance\bxUcv\bx@ki@bas} \fi %---- -\@onlypreamble\bx@assign@JI - -%%------ Assignment check - -%%%% \bxAssign \relax -\def\bxAssign{% - \bxOkfalse\afterassignment\bx@b@assign@a} -\def\bx@b@assign@a#1\relax{% - \def\bx@tmpa{#1}\ifx\bx@tmpa\@empty\bxOktrue\fi} - -%%------ Case conversion - -%%%% \bxToLower{} -% Sets to \bxRes converted to lowercase. -\def\bxToLower#1{% - \edef\bxRes{\lowercase{\def\noexpand\bxRes{#1}}}\bxRes} - -%%%% \bxToUpper{} -\def\bxToUpper#1{% - \edef\bxRes{\uppercase{\def\noexpand\bxRes{#1}}}\bxRes} - -%%------ Document-level specials -% Such specials must come before any typeset commands in DVI. - -%%%% \bxDocumentSpecial{} -% Appends \special{} to the list of 'document-level specials'. -% A simple use of \AtBeginDvi will do in this case. -\def\bxDocumentSpecial#1{% - \AtBeginDvi{\special{#1}}} -\@onlypreamble\bxDocumentSpecial - -%%%% \bxDocumentSpecialUrgent{} -% Similar to the above, but it demands that the given special be -% placed as early as possible. -\def\bxDocumentSpecialUrgent#1{% - \bx@docspec@urgent@init - \bx@prepend@box\bx@dsu@box{\special{#1}}} -\def\bx@prepend@box#1#2{% - \global\setbox#1\vbox{#2\unvbox#1}} -\providecommand\bx@docspec@urgent@init{\bx@docspec@urgent@init@do} -\def\bx@docspec@urgent@init@do{% - \newbox\bx@dsu@box - \AtBeginDocument{% - \ifx\AtBeginShipoutFirst\@undefined - \bx@prepend@box\@begindvibox{\unvbox\bx@dsu@box}% - \else % 'atbegshi' package is in use - {\toks@{\unvbox\bx@dsu@box}% - \toks\tw@\expandafter{\AtBegShi@HookFirst}% - \xdef\AtBegShi@HookFirst{\the\toks@\the\toks\tw@}} - \fi}% - \bxNullify\bx@docspec@urgent@init} -\@onlypreamble\bxDocumentSpecialUrgent -\@onlypreamble\bx@docspec@urgent@init -\@onlypreamble\bx@docspec@urgent@init@do - -%%%% \recordpapersize -\def\recordpapersize{% - \bxDocumentSpecial{papersize=\the\paperwidth,\the\paperheight}% - \bxNullify\recordpapersize} -\@onlypreamble\recordpapersize - -%%<*> \dvipdfmxmapline{} -%%<*> \dvipdfmxmapfile{} -\def\dvipdfmxmapline#1{\bxDocumentSpecial{pdf:mapline #1}} -\@onlypreamble\dvipdfmxmapline -\def\dvipdfmxmapfile#1{\bxDocumentSpecial{pdf:mapfile #1}} -\@onlypreamble\dvipdfmxmapfile - -%%----- "safe-caret" module -\newif\ifbx@acr@ok -\newif\ifbx@acr@needed \bx@acr@neededfalse -\newif\ifbx@safecaret \bx@safecaretfalse -\catcode`\^=13 - -%%%%<*> \safecaret -\def\safecaret{% + +%--------------------------------------- "safe-caret" module + +%% variables +\newbool{bx@acr@ok} +\newbool{bx@acr@needed} +\newbool{bx@safecaret} + +\catcode`\^=13 %---- make caret active + +%%<*> \safecaret +\bxPreamble\newcommand*\safecaret{% \bx@safecarettrue} -\@onlypreamble\safecaret -%%%% \bxEnableSafeCaret -\def\bxEnableSafeCaret{% +%%<+> \bxEnableSafeCaret +\bxPreamble\newcommand*\bxEnableSafeCaret{% \bx@acr@neededtrue} -\@onlypreamble\bxEnableSafeCaret -%%%% \bx@acr@defbytes -\def\bx@acr@defbytes{% +%% \bx@acr@defbytes +\bxPreamble\def\bx@acr@defbytes{% \bgroup\@tempcnta128\lccode`\Z=`\B\catcode`\^\active \@whilenum\@tempcnta<256 \do{% \lccode`\^\@tempcnta \chardef\bx@acr@tok\@tempcnta \expandafter\bx@acr@defbytes@do@a\meaning\bx@acr@tok\@nil \advance\@tempcnta\@ne}\egroup} -\def\bx@acr@defbytes@do@a#1"#2\@nil{% name is bx@acr@B/ab etc. +\bxPreamble\def\bx@acr@defbytes@do@a#1"#2\@nil{% name is bx@acr@B/ab etc. \lowercase{\expandafter\gdef\csname bx@acr@Z/#2\endcsname{^}}} \@onlypreamble\bx@acr@defbytes \@onlypreamble\bx@acr@defbytes@do@a -%%%% \bx@acr@caret -%% This command should be \let'd to active <^>. +%% \bx@acr@caret +% This command should be \let'd to active <^>. \def\bx@acr@caret{% \let\bx@acr@out\@empty \bx@acr@caret@a} \def\bx@acr@caret@a{% @@ -720,13 +522,12 @@ \bx@acr@normcaret #2} \let\bx@acr@normcaret\sp % this does not mean much -%%%% \bx@acr@initialize -\def\bx@acr@initialize{% +%% \bx@acr@initialize +\bxPreamble\def\bx@acr@initialize{% \bx@acr@defbytes} -\@onlypreamble\bx@acr@initialize -%%%% \bx@acr@annihilate -\def\bx@acr@annihilate{% +%% \bx@acr@annihilate +\bxPreamble\def\bx@acr@annihilate{% \let\bx@acr@caret\relax\let\bx@acr@caret@a\relax \let\bx@acr@caret@b\relax\let\bx@acr@caret@c\relax \let\bx@acr@caret@d\relax\let\bx@acr@caret@e\relax @@ -734,30 +535,28 @@ \let\bx@acr@nextcaret\relax\let\bx@acr@nextcaret@a\relax \let\bx@acr@nexthexdgt\relax\let\bx@acr@nexthexdgt@a\relax \let\bx@acr@finish\relax\let\bx@acr@finish@a\relax} -\@onlypreamble\bx@acr@annihilate -%%%% \bx@acr@babel@hookcaret -\def\bx@acr@babel@hookcaret{% +%% \bx@acr@babel@hookcaret +\bxPreamble\def\bx@acr@babel@hookcaret{% \expandafter\ifx\csname active@char\string^\endcsname\relax\else \declare@shorthand\system@group{^}{\bx@acr@caret}% \let\bx@acr@normcaret\bx@acr@babel@normcaret \bxEnableSafeCaret \fi} -\@onlypreamble\bx@acr@babel@hookcaret \edef\bx@acr@babel@normcaret{% \expandafter\noexpand\csname normal@char\string^\endcsname} -%%%% \bx@acr@verbatim@hookcaret -\def\bx@acr@verbatim@hookcaret{% +%% \bx@acr@verbatim@hookcaret +\bxPreamble\def\bx@acr@verbatim@hookcaret{% \g@addto@macro\@noligs{\catcode`\^\active\let^\bx@acr@caret \let\bx@acr@normcaret\bx@acr@verb@normcaret}% \bxEnableSafeCaret} \begingroup \catcode`\^=12 -\global\let\bx@acr@verb@normcaret=^\endgroup -\@onlypreamble\bx@acr@verbatim@hookcaret +\global\let\bx@acr@verb@normcaret=^% +\endgroup -%%%% begin-document hook -\providecommand*\bxBDHookSafeCaret{\bx@bdhook@safecaret@do} -\def\bx@bdhook@safecaret@do{% +%%<+> \bxBDHookSafeCaret +% Begin-document hook. +\bxPreamble\newcommand*\bxBDHookSafeCaret{% \AtBeginDocument{% %% function activated by '\safecaret' \ifbx@safecaret @@ -769,23 +568,106 @@ \else \bx@acr@annihilate \fi \let\bxEnableSafeCaret\@undefined}% \bxNullify\bxBDHookSafeCaret} -\@onlypreamble\bx@bdhook@safecaret@do -\catcode`\^=6 -%%------ "shadow map" module +\catcode`\^=7 %---- make caret normal + +%--------------------------------------- hyphenation something -%%%% \bxUseShadowMap\CS{} -\def\bxUseShadowMap#1#2{% - \global\font#1=#2\relax} +%%<*> 'withnohyph' environment +\expandafter\ifx\csname l@nohyphenation\endcsname\relax + \newlanguage\l@nohyphenation \fi +\def\withnohyph{\language\l@nohyphenation} +\let\endwithnohyph\relax -%%%% \bxMap\CS -\mathchardef\bx@m@cc=256 -\def\bxMap#1{\begingroup\count@\bxUcv\divide\count@\bx@m@cc - \chardef\bx@m@hb\count@ \multiply\count@\bx@m@cc - \advance\bxUcv-\count@ \setbox\z@\hbox{#1\bx@m@hb\char\bxUcv}% - \global\bxUcv\wd\z@ \endgroup} +%--------------------------------------- patch for 'ucs' package + +%% \bxBDHookUcsFastErrors +% The begin-document hook, which forces the 'fasterrors' option +% of 'ucs' package when running on pTeX. +\bxPreamble\newcommand*\bxBDHookUcsFastErrors{% + \ifbxinpTeX + \AtBeginDocument{% + \@ifpackageloaded{ucs}{% + \let\UnicodeOptionfasterrorsfalse\UnicodeOptionfasterrorstrue + \UnicodeOptionfasterrorstrue}{}}% + \fi + \bxNullify\bxBDHookUcsFastErrors} + +%--------------------------------------- DVI-specials + +%%<*D> \usejapanesepdfstring +\bxPreamble\newcommand*\usejapanesepdfstring{} +\if s\bxInternalJaEncoding + \def\usejapanesepdfstring{% why use CP932?? + \bxDocumentSpecialUrgent{pdf:tounicode 90ms-RKSJ-UCS2}% + \bxNullify\usejapanesepdfstring} +\else\if e\bxInternalJaEncoding + \def\usejapanesepdfstring{% + \bxDocumentSpecialUrgent{pdf:tounicode EUC-UCS2}% + \bxNullify\usejapanesepdfstring} +\else\if u\bxInternalJaEncoding + \def\usejapanesepdfstring{% + \bxDocumentSpecialUrgent{pdf:tounicode UTF8-UCS2}% + \bxNullify\usejapanesepdfstring} +\else + \def\usejapanesepdfstring{% + \bx@warn{\string\usejapanesepdfstring\space ignored,\MessageBreak + since internal encoding is unknown}% + \bxNullify\usejapanesepdfstring} +\fi\fi\fi +\preto\usejapanesepdfstring{% + \bxbz@warn@depre\usejapanesepdfstring{'pxjahyper' package}} + +%%<*D> \recordpapersize +\bxPreamble\newcommand*\recordpapersize{% + \bxbz@warn@depre\recordpapersize{'bxpapersize' package}% + \bxDocumentSpecial{papersize=\the\paperwidth,\the\paperheight}% + \bxNullify\recordpapersize} -%%------ all done -\bx@b@resetcatcodes \let\bx@nxt\relax +%%<*D> \dvipdfmxmapline{} +%%<*D> \dvipdfmxmapfile{} +\bxPreamble\newcommand*\dvipdfmxmapline[1]{% + \bxbz@warn@depre@dpxmap + \bxDocumentSpecial{pdf:mapline #1}} +\bxPreamble\newcommand*\dvipdfmxmapfile[1]{% + \bxbz@warn@depre@dpxmap + \bxDocumentSpecial{pdf:mapfile #1}} +\def\bxbz@warn@depre@dpxmap{% + \bxbz@warn@depre\dvipdfmxmapfile{'pxchfon' package}% + \global\let\bxbz@warn@depre@dpxmap\relax} + +%--------------------------------------- CJK font scaling + +%% \bxbz@doc@class@type +%%<+D> \pxDocClassType +% 1 = pLaTeX standard class +% 2 = New standard classes by Okumura +% 0 = otherwise +\bxUcv=\z@ +\@ifclassloaded{jarticle}{\bxUcv=\@ne}{} +\@ifclassloaded{jreport}{\bxUcv=\@ne}{} +\@ifclassloaded{jbook}{\bxUcv=\@ne}{} +\@ifclassloaded{tarticle}{\bxUcv=\@ne}{} +\@ifclassloaded{treport}{\bxUcv=\@ne}{} +\@ifclassloaded{tbook}{\bxUcv=\@ne}{} +\@ifclassloaded{ujarticle}{\bxUcv=\@ne}{} +\@ifclassloaded{ujreport}{\bxUcv=\@ne}{} +\@ifclassloaded{ujbook}{\bxUcv=\@ne}{} +\@ifclassloaded{utarticle}{\bxUcv=\@ne}{} +\@ifclassloaded{utreport}{\bxUcv=\@ne}{} +\@ifclassloaded{utbook}{\bxUcv=\@ne}{} +\@ifclassloaded{jsarticle}{\bxUcv=\tw@}{} +\@ifclassloaded{jsreport}{\bxUcv=\tw@}{} +\@ifclassloaded{jsbook}{\bxUcv=\tw@}{} +\chardef\bxbz@doc@class@type=\bxUcv +\chardef\pxDocClassType=\bxUcv + +%%<+> \pxUpScale +\edef\pxUpScale{% + \ifx\Cjascale\@undefined + \ifcase\bxbz@doc@class@type 1\or 0.962216\or 0.924690\else 1\fi + \else \Cjascale \fi} + +%--------------------------------------- all done \endinput %% EOF diff --git a/Master/texmf-dist/tex/latex/bxbase/bxbase.sty b/Master/texmf-dist/tex/latex/bxbase/bxbase.sty index d506fc37a62..194d7ccf3f0 100644 --- a/Master/texmf-dist/tex/latex/bxbase/bxbase.sty +++ b/Master/texmf-dist/tex/latex/bxbase/bxbase.sty @@ -1,49 +1,51 @@ -% -% bxbase.sty -% +%% +%% This is file 'bxbase.sty'. +%% +%% Copyright (c) 2017 Takayuki YATO (aka. "ZR") +%% GitHub: https://github.com/zr-tex8r +%% Twitter: @zr_tex8r +%% +%% This package is distributed under the MIT License. +%% -%%%% package declaration +%% package declaration \NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{bxbase}[2010/06/15 v0.5 BX base library] +\ProvidesPackage{bxbase}[2017/05/29 v1.1 BX base library] + +%--------------------------------------- main + +%% load submodule +\providecommand*\bxRequireDefinition[1]{% + \def\bxbz@ext{def}\@onefilewithoptions{#1}[][]\bxbz@ext} +\bxRequireDefinition{bxbase} -%%%% include 'bxbase.def' -\input{bxbase.def} +%% enable begin-document hooks \bxBDHookBabel \bxBDHookUnicode +\bxBDHookJisInput \bxBDHookSafeCaret +\bxBDHookUcsFastErrors -%%%% error messages -\def\bx@pkgname{bxbase} -\def\bx@error{\PackageError\bx@pkgname} -\def\bx@alert{\PackageWarningNoLine\bx@pkgname} -\def\bx@warn{\PackageInfo\bx@pkgname} -\def\bx@warn@aecs#1{\px@warn{Command \string#1 already exists}} +%% error messages +\def\bxbz@pkgname{bxbase} +\def\bxbz@inf@aecsq#1{% + \PackageInfo\bxbz@pkgname + {Command \string#1 already exists}} -%%------ +%--------------------------------------- extra -%%<*> \Ux, \UI, \AJ -\ifx\Ux\@undefined \def\Ux{\bxUx}% -\else \px@warn@aecs\Ux \fi -\ifx\UI\@undefined \def\UI{\bxUI}% -\else \px@warn@aecs\UI \fi -\ifx\AJ\@undefined \def\AJ{\bxAJ}% -\else \px@warn@aecs\AJ \fi +%%<*> \Ux / \UI / \AJ / \JI / \KI +% define commands unless their name is already used +\bxPreamble\def\bxbz@charcmd#1#2{% + \ifundef#1{\def#1{#2}}{\bxbz@inf@aecsq#1}} +\bxbz@charcmd\Ux\bxUx +\bxbz@charcmd\UI\bxUI +\bxbz@charcmd\AJ\bxAJ +\bxbz@charcmd\JI\bxJI +\bxbz@charcmd\KI\bxKI -%%<*> \JI, \KI -\ifx\JI\@undefined \def\JI{\bxJI}% -\else \px@warn@aecs\JI \fi -\ifx\KI\@undefined \def\KI{\bxKI}% -\else \px@warn@aecs\KI \fi - -%%%% withnohyph environment -\expandafter\ifx\csname l@nohyphenation\endcsname\relax - \newlanguage\l@nohyphenation \fi -\def\withnohyph{\language\l@nohyphenation} -\let\endwithnohyph\relax - -%%------ all done +%--------------------------------------- all done \endinput -%% EOF % % * bxbase provides: % - bx@Uxh@fb (terminal) @@ -68,3 +70,4 @@ % v v % bx@UI > bx@UIh = bx@Uxh@fb or bx@UIh@p % +%% EOF diff --git a/Master/texmf-dist/tex/latex/bxbase/bxtoolbox-ext.def b/Master/texmf-dist/tex/latex/bxbase/bxtoolbox-ext.def new file mode 100644 index 00000000000..63b7927f5c6 --- /dev/null +++ b/Master/texmf-dist/tex/latex/bxbase/bxtoolbox-ext.def @@ -0,0 +1,563 @@ +%% +%% This is file 'bxtoolbox-ext.def'. +%% + +%% file declaration +\NeedsTeXFormat{LaTeX2e} +\ProvidesFile{bxtoolbox-ext.def}[2017/05/29 v1.1] + +%% check intergrity +\edef\bxtb@tmpa{\@currname.\@currext}\def\bxtb@tmpb{bxtoolbox-ext.def} +\ifx\bxtb@tmpa\bxtb@tmpb\else + \PackageError\bxtb@pkgname{Illegal load sequence}\@eha +\expandafter\endinput\fi\relax + +%% load submodule +\providecommand*\bxRequireDefinition[1]{% + \def\bx@@def{def}\@onefilewithoptions{#1}[][]\bx@@def} +\bxRequireDefinition{bxtoolbox} + +%% code guards +\edef\bxtb@x@restore@codes{% + \catcode33=\the\catcode33% + \catcode34=\the\catcode34% + \catcode39=\the\catcode39% + \catcode45=\the\catcode45% + \catcode46=\the\catcode46% + \catcode47=\the\catcode47% + \catcode58=\the\catcode58% + \catcode59=\the\catcode59% + \catcode60=\the\catcode60% + \catcode62=\the\catcode62% + \catcode96=\the\catcode96% +\relax} +\catcode33=12 % +\catcode34=12 % <"> +\catcode39=12 % <'> +\catcode45=12 % <-> +\catcode46=12 % <.> +\catcode47=12 % +\catcode58=12 % <:> +\catcode59=12 % <;> +\catcode60=12 % <<> +\catcode62=12 % <>> +\catcode96=12 % <`> +\AtEndOfPackage{% + \bxtb@x@restore@codes + \undef\bxtb@x@restore@codes} + +%--------------------------------------- general + +%% variables +\bxIfcsundefX{ifbxOk}{\newbool{bxOk}}{} % all-purpsoe switch +\bxIfcsundefX{bxResDim}{\newdimen\bxResDim}{} +\let\bxHex\relax % result of \bxToHex... +\let\bxRes\relax % result of \bxToLower + +%% error messages +\def\bxtb@err@oorng{\bxtb@error{Number out of range}\@eha} + +%--------------------------------------- programming tools + +%%<+> \bxDebug{} +% Prints a debug message. By default, it is no-op. +\providecommand*\bxDebug{\@gobble} + +%%<+> \bxShowbool{} +\newcommand*{\bxShowbool}[1]{\ifbool{#1}{true}{false}} + +%%<+> \bxShowtoggle{} +\newcommand*{\bxShowtoggle}[1]{\iftoggle{#1}{true}{false}} + +%%<+> \bxRequireDefinition +% Same as \RequirePackage except that it loads '.def' files. +% [Definition appears near the top of this file] +%%<+D> \bxInputDefFile +% Old name for \bxRequireDefinition +\bxPreamble\newcommand*{\bxInputDefFile}{\bxRequireDefinition} + +%%<+> \bxNullify\CS +% Make \CS void and unoverridable by \providecommand. +\def\bxNullify#1{\global\let#1\bx@nullified} +\def\bx@nullified{\@gobble\bx@@nullified} + +%%<+> \bxForEachIn,...\do{} +%%<+> \bxForEachTokenIn,...\do{} +\newcommand*\bxForEachIn{\bxtb@forei@a\@for} +\newcommand*\bxForEachTokenIn{\bxtb@forei@a\@tfor} +\def\bxtb@forei@a#1#2\do#{% + \def\bxtb@forei@b{#1\bxtb@forei@x:=#2\do + {\expandafter\bxtb@forei@do\expandafter{\bxtb@forei@x}}}% + \afterassignment\bxtb@forei@b \def\bxtb@forei@do##1} + +%%<+> \bxWithArgExpd{}\do{} +%%<+> \bxWithArgFullExpd{}\do{} +\newcommand*\bxWithArgExpd{} +\def\bxWithArgExpd#1\do#{% + \expandafter\bxtb@with@arg@expd@a#1\@nil} +\def\bxtb@with@arg@expd@a#1\@nil{% + \def\bxtb@with@args@expd@do{\bxtb@do{#1}}% + \afterassignment\bxtb@with@args@expd@do + \def\bxtb@do##1} +\newcommand*\bxWithArgFullExpd{} +\def\bxWithArgFullExpd#1\do#{% + \edef\bxtb@args{{#1}}% + \def\bxtb@with@args@expd@do{\expandafter\bxtb@do\bxtb@args}% + \afterassignment\bxtb@with@args@expd@do + \def\bxtb@do##1} + +%%<+> \bxWithArgsExpd{}...\do{} +%%<+> \bxWithArgsFullExpd{}...\do{} +\newcommand*\bxWithArgsExpd{% + \begingroup + \count@=\z@ \let\do\bxtb@uniq + \let\bxtb@l@tmpa\@empty + \bxtb@with@args@expd@gth@a} +\def\bxtb@with@args@expd@gth@a{% + \futurelet\bxtb@tok\bxtb@with@args@expd@gth@b} +\def\bxtb@with@args@expd@gth@b{% + \bxIfx{\bxtb@tok\bxtb@uniq}% + {\bxtb@with@args@expd@pst@a}% + {\bxtb@with@args@expd@gth@c}} +\def\bxtb@with@args@expd@gth@c#1{% + \expandafter\bxtb@with@args@expd@gth@d#1\@nil} +\def\bxtb@with@args@expd@gth@d#1\@nil{% + \ifnum\count@<9 + \appto\bxtb@l@tmpa{{#1}}% + \advance\count@\@ne + \fi + \bxtb@with@args@expd@gth@a} +\def\bxtb@with@args@expd@pst@a#1{% + \@whilenum\count@<9 \do{% + \appto\bxtb@l@tmpa{{}}\advance\count@\@ne}% + \expandafter\def\expandafter\bxtb@l@tmpa\expandafter{% + \expandafter{\bxtb@l@tmpa}}% + \xpreto\bxtb@l@tmpa{\noexpand\bxtb@with@args@expd@ppst@a}% + \expandafter\endgroup\bxtb@l@tmpa} +\newcommand*\bxWithArgsFullExpd{% + \bxtb@with@args@fexpd@a\@nil} +\def\bxtb@with@args@fexpd@a\@nil#1\do{% + \bxtb@with@args@fexpd@b#1{}{}{}{}{}{}{}{}{}\do} +\def\bxtb@with@args@fexpd@b#1#2#3#4#5#6#7#8#9{% + \edef\bxtb@with@args@fexpd@d{% + \noexpand\bxtb@with@args@expd@ppst@a + {{#1}{#2}{#3}{#4}{#5}{#6}{#7}{#8}{#9}}}% + \bxtb@with@args@fexpd@c} +\def\bxtb@with@args@fexpd@c#1\do#{% + \bxtb@with@args@fexpd@d} +\def\bxtb@with@args@expd@ppst@a#1{% + \def\bxtb@with@args@expd@do{\bxtb@do#1}% + \afterassignment\bxtb@with@args@expd@do + \def\bxtb@do##1##2##3##4##5##6##7##8##9} + +%%<+> \bxAssign \relax +% Do an assignment and checks if the assignment statement is +% free of garbage and returns the result to \ifbxOk. +\newcommand*\bxAssign{% + \bxOkfalse\afterassignment\bx@b@assign@a} +\def\bx@b@assign@a#1\relax{% + \def\bx@tmpa{#1}\ifx\bx@tmpa\@empty\bxOktrue\fi} + +%%<+> \bxChompComma\CS +\newcommand*\bxChompComma[1]{% + \expandafter\bxtb@chomp@comma@a#1\bxtb@chomp@comma@end#1} +\def\bxtb@chomp@comma@a{% + \futurelet\bxtb@tmpa\bxtb@chomp@comma@b} +\def\bxtb@chomp@comma@b{% + \bxIfx{,\bxtb@tmpa}{\bxtb@chomp@comma@c}% + {\bxtb@chomp@comma@skip}} +\def\bxtb@chomp@comma@c#1\bxtb@chomp@comma@end#2{% + \expandafter\def\expandafter#2\expandafter{\@gobble#1}} +\def\bxtb@chomp@comma@skip#1\bxtb@chomp@comma@end#2{} + +%% \bxProcessOptions[*] +\newcommand*\bxProcessOptions{% + \@ifstar{\@tempswatrue\bxtb@process@options}% + {\@tempswafalse\bxtb@process@options}} +\def\bxtb@process@options{% + \let\bxtb@org@@removeelement\@removeelement + \let\@removeelement\bxtb@@removeelement + \if@tempswa \ProcessOptions*% + \else \ProcessOptions\relax \fi + \let\@removeelement\bxtb@org@@removeelement} +\def\bxtb@@removeelement#1#2#3{% + \bxtb@rem@elt@check#1\relax{}\bxtb@rem@elt@end + \if@tempswa \bxtb@org@@removeelement{#1}{#2}#3\fi} +\def\bxtb@rem@elt@check#1#{\bxtb@rem@elt@check@a} +\def\bxtb@rem@elt@check@a#1#2\bxtb@rem@elt@end{% + \ifstrempty{#2}{\@tempswatrue}{\@tempswafalse}} + +%--------------------------------------- character tokens + +%%<+> \ifbxHasUcsChar +\newbool{bxHasUcsChar} +\ifbxinOmega \bxHasUcsChartrue \fi +\ifbxinXeTeX \bxHasUcsChartrue \fi +\ifbxinLuaTeX \bxHasUcsChartrue \fi +\ifbxinupTeX \bxHasUcsChartrue \fi +\csletcs{ifbx@hx@bigchar}{ifbxHasUcsChar} + +%%<+> \ifbxHasAlUcsChar +\newbool{bxHasAlUcsChar} +\ifbxinOmega \bxHasAlUcsChartrue \fi +\ifbxinXeTeX \bxHasAlUcsChartrue \fi +\ifbxinLuaTeX \bxHasAlUcsChartrue \fi + +%%<+> \bxToChar{} +% Makes \bxRes expand to a single character token with character +% code . Note that in (u)pTeX this is valid only for 'alphabet' +% characters. +\newcommand*\bxToChar[1]{% + \bgroup \lccode`!=#1\relax + \lowercase{\xdef\bx@tch@g@temp{!}}% + \egroup \let\bxRes\bx@tch@g@temp} + +%%<+> \bxToJaChar{} +% Makes \bxRes expand to a single CJK character token with +% character code (in internal CJK encoding). +\ifbxinpTeX + \newcommand*\bxToJaChar[1]{% + \bgroup \bxtb@forcecjktoken + \kansujichar\@ne=#1\relax + \xdef\bx@tch@g@temp{\kansuji\@ne}% + \egroup \let\bxRes\bx@tch@g@temp} + \ifdef{\forcecjktoken}% + {\let\bxtb@forcecjktoken\forcecjktoken}% + {\let\bxtb@forcecjktoken\relax}% +\fi + +%%<+> \bxToUcsChar{} +% Makes \bxRes expand to a single character token with +% character code (in Unicode); valid for Unicode-aware +% engines plus upTeX. +\ifbxinupTeX +\let\bxToUcsChar\bxToJaChar +\else\ifbxHasAlUcsChar +\let\bxToUcsChar\bxToChar +\fi\fi + +%%<+> \bxToUcsCharDual{}{} +% Makes \bxRes expand to a single character token with the following +% character code: (1) on pTeX, in internal CJK encoding; and +% (2) on Unicode-aware engines, in Unicode. +\ifdef{\bxToUcsChar} + {\newcommand*\bxToUcsCharDual[2]{\bxToUcsChar{#2}}}% + {\newcommand*\bxToUcsCharDual[2]{\bxToJaChar{\jis#1}}} + +%%<+> \bxToUcsCharSeq{:,...} +\newcommand*\bxToUcsCharSeq[1]{% + \let\bx@tch@temp\@empty + \bxForEachIn#1\do{\bxtb@toucs@charseq@a##1\bxtb@end}% + \let\bxRes\bx@tch@temp} +\def\bxtb@toucs@charseq@a#1:#2\bxtb@end{% + \bxToUcsCharDual{"#1}{"#2}% + \eappto\bx@tch@temp{\bxRes}} + +%--------------------------------------- number to hex-string +% All public commands put their result in \bxHex. + +%%<+> \bxToHexTiny +% For one-to-two-digit hex strings. +\newcommand*\bxToHexTiny[1]{% + \chardef\bxHex=#1\relax + \expandafter\bx@hx@tohextiny@a\meaning\bxHex\@nil} +\def\bx@hx@tohextiny@a#1"#2\@nil{\def\bxHex{#2}} + +%%<+> \bxToHexSmall +% For one-to-three-digit hex strings. +\newcommand*\bxToHexSmall[1]{% + \mathchardef\bxHex=#1\relax + \expandafter\bx@hx@tohexsmall@a\meaning\bxHex\@nil} +\def\bx@hx@tohexsmall@a#1"#2\@nil{\def\bxHex{#2}} + +%%<+> \bxToHexTwo +% For zero-padded two-digit hex strings. +\newcommand*\bxToHexTwo[1]{% + \chardef\bxHex=#1\relax + \expandafter\bx@hx@tohextwo@a\meaning\bxHex"0\@nil} +\def\bx@hx@tohextwo@a#1"#2#3#4#5\@nil{\bx@hx@tohextwo@b#2#3#4\@nil} +\def\bx@hx@tohextwo@b#1"#2\@nil{\def\bxHex{#2#1}} + +%%<+> \bxToHexThree +% For zero-padded three-digit hex strings. +\newcommand*\bxToHexThree[1]{% + \mathchardef\bxHex=#1\relax + \expandafter\bx@hx@tohexthree@a\meaning\bxHex"00\@nil} +\def\bx@hx@tohexthree@a#1"#2#3#4#5#6\@nil{\bx@hx@tohexthree@b#2#3#4#5\@nil} +\def\bx@hx@tohexthree@b#1"#2\@nil{\def\bxHex{#2#1}} + +%%<+> \bxToHexFour +% For zero-padded four-digit hex strings. +\ifbx@hx@bigchar %----<*bigchar> +\newcommand*\bxToHexFour[1]{% + \chardef\bxHex=#1\relax + \expandafter\bx@hx@tohexfour@a\meaning\bxHex"000\@nil} +\def\bx@hx@tohexfour@a#1"#2#3#4#5#6#7\@nil{\bx@hx@tohexfour@b#2#3#4#5#6\@nil} +\def\bx@hx@tohexfour@b#1"#2\@nil{\def\bxHex{#2#1}} +\else %----<*!bigchar> +\mathchardef\bx@hx@fzzz="4000 +\newcommand*\bxToHexFour[1]{\bgroup + \@tempcnta=#1\relax\@tempcntb\@tempcnta\divide\@tempcntb\bx@hx@fzzz + \ifcase\@tempcntb \advance\@tempcnta\bx@hx@fzzz \or \or + \advance\@tempcnta-\bx@hx@fzzz \or \advance\@tempcnta-"8000 \or + \@tempcnta\z@ \fi + \mathchardef\bx@hx@tmp\@tempcnta + \expandafter\bx@hx@tohexfour@a\meaning\bx@hx@tmp\@nil + \egroup \let\bxHex\bx@hx@gtmp} +\def\bx@hx@tohexfour@a#1"#2#3\@nil{% + \expandafter\let\expandafter\bx@hx@tmp + \csname bxhx@X/\the\@tempcntb#2\endcsname + \ifx\bx@hx@tmp\relax \bxtb@err@oorng \global\let\bx@hx@gtmp\@empty + \else \xdef\bx@hx@gtmp{\bx@hx@tmp#3}\fi} +\def\bx@hx@nxt#1#2#3{\bgroup\catcode`#3=12 + \global\expandafter\def\csname bxhx@X/#1#2\endcsname{#3}\egroup} +\@for\bx@hx@tmp:={040,051,062,073,144,155,166,177,248,259,26A,27B,% + 34C,35D,36E,37F}\do{\expandafter\bx@hx@nxt\bx@hx@tmp} +\fi %---- + +%%<+> \bxToHexFive +%%<+> \bxToHexFiveX +% For zero-padded five-digit hex strings. +\newcommand*\bxToHexFive{\bx@tohexfive@aa\relax} +\newcommand*\bxToHexFiveX{\bx@tohexfive@aa + {\ifnum\@tempcnta>\bx@hx@vdmax \@tempcnta=\bx@hx@vdmax\fi}} +\ifbx@hx@bigchar %----<*bigchar> +\chardef\bx@hx@vdmax="FFFFF +\def\bx@tohexfive@aa#1#2{% + {\@tempcnta=#2\relax#1\global\chardef\bx@hx@gtmp=\@tempcnta}% + \expandafter\bx@hx@tohexfivex@a\meaning\bx@hx@gtmp"0000\@nil} +\def\bx@hx@tohexfivex@a#1"#2#3#4#5#6#7#8\@nil{% + \bx@hx@tohexfivex@b#2#3#4#5#6#7\@nil} +\def\bx@hx@tohexfivex@b#1"#2\@nil{\edef\bxHex{#2#1}} +\else %----<*!bigchar> +\edef\bx@hx@vdmax{"FFFFF\space} +\def\bx@tohexfive@aa#1#2{% + \bgroup \@tempcnta=#2\relax#1% + \@tempcntb=\@tempcnta \divide\@tempcnta\bx@hx@m\relax + \bxToHexTwo\@tempcnta \let\bx@hx@tmp\bxHex + \multiply\@tempcnta-\bx@hx@m\advance\@tempcnta\@tempcntb\relax + \bxToHexThree\@tempcnta \xdef\bx@hx@gtmp{\bx@hx@tmp\bxHex}% + \egroup \let\bxHex\bx@hx@gtmp} +\fi %---- + +%%<+> \bxToHexEight +% For zero-padded eight-digit hex strings. +\newcommand*\bxToHexEight[1]{% + \bgroup \@tempcnta=#1\relax + \@tempcntb=\@tempcnta\divide\@tempcnta\p@\relax + \bxToHexFour\@tempcnta \let\bx@hx@tmp\bxHex + \multiply\@tempcnta-\p@\advance\@tempcnta\@tempcntb\relax + \bxToHexFour\@tempcnta \xdef\bx@hx@gtmp{\bx@hx@tmp\bxHex}% + \egroup \let\bxHex\bx@hx@gtmp} + +%%<+> \bxToHexUC +% For zero-padded four-to-six-digit hex strings. +\ifbx@hx@bigchar %----<*bigchar> +\newcommand*\bxToHexUC[1]{% + \chardef\bxHex=#1\relax + \expandafter\bx@hx@tohexuc@a\meaning\bxHex"\@empty\@empty000\@nil} +\def\bx@hx@tohexuc@a#1"#2#3#4#5#6#7#8#9\@nil{% + \bx@hx@tohexuc@b#2#3#4#5#6#7#8\@nil} +\def\bx@hx@tohexuc@b#1"#2\@nil{\edef\bxHex{#2#1}} +\else %----<*!bigchar> +\mathchardef\bx@hx@m="1000 +\newcommand*\bxToHexUC[1]{% + \bgroup \@tempcnta=#1\relax + \@tempcntb=\@tempcnta \divide\@tempcnta\bx@hx@m\relax + \bxToHexSmall\@tempcnta \let\bx@hx@tmp\bxHex + \multiply\@tempcnta-\bx@hx@m\advance\@tempcnta\@tempcntb\relax + \bxToHexThree\@tempcnta \xdef\bx@hx@gtmp{\bx@hx@tmp\bxHex}% + \egroup \let\bxHex\bx@hx@gtmp} +\fi %---- + +%%<+> \bxToDecFour +\newcommand*\bxToDecFour[1]{% + \expandafter\bx@hx@todecfour@a\number#1"000\@nil} +\def\bx@hx@todecfour@a#1#2#3#4#5#6\@nil{\bx@hx@todecfour@b#1#2#3#4#5\@nil} +\def\bx@hx@todecfour@b#1"#2\@nil{\def\bxHex{#2#1}} + +%%<+> \bxToDecFive +\newcommand*\bxToDecFive[1]{% + \expandafter\bx@hx@todecfive@a\number#1"0000\@nil} +\def\bx@hx@todecfive@a#1#2#3#4#5#6#7\@nil{\bx@hx@todecfive@b#1#2#3#4#5#6\@nil} +\def\bx@hx@todecfive@b#1"#2\@nil{\def\bxHex{#2#1}} + +%--------------------------------------- case conversion + +%%<+> \bxToLower{} +% Sets to \bxRes converted to lowercase. +\newcommand*\bxToLower[1]{% + \edef\bxRes{\lowercase{\def\noexpand\bxRes{#1}}}\bxRes} + +%%<+> \bxToUpper{} +\newcommand*\bxToUpper[1]{% + \edef\bxRes{\uppercase{\def\noexpand\bxRes{#1}}}\bxRes} + +%--------------------------------------- document-level specials +% Such specials must come before any typeset commands in DVI. + +%%<+> \bxDocumentSpecial{} +% Appends \special{} to the list of 'document-level specials'. +% A simple use of \AtBeginDvi will do in this case. +\bxPreamble\newcommand*\bxDocumentSpecial[1]{% + \bxAtBeginDviX{\special{#1}}} + +%%%% \bxDocumentSpecialUrgent{} +% Similar to the above, but it demands that the given special be +% placed as early as possible. +\bxPreamble\newcommand*\bxDocumentSpecialUrgent[1]{% + \bx@docspec@urgent@init + \bx@prepend@box\bx@dsu@box{\special{#1}}} +\def\bx@prepend@box#1#2{% + \global\setbox#1\vbox{\bxToYokoDir#2\unvbox#1}} +\bxPreamble\def\bx@docspec@urgent@init{% + \newbox\bx@dsu@box + \AtBeginDocument{% + \ifx\AtBeginShipoutFirst\@undefined + \bx@prepend@box\@begindvibox{\unvbox\bx@dsu@box}% + \else % 'atbegshi' package is in use + {\toks@{\unvbox\bx@dsu@box}% + \toks\tw@\expandafter{\AtBegShi@HookFirst}% + \xdef\AtBegShi@HookFirst{\the\toks@\the\toks\tw@}} + \fi}% + \bxNullify\bx@docspec@urgent@init} + +%--------------------------------------- "shadow map" module + +%%<+> \bxUseShadowMap\CS{} +\bxPreamble\newcommand*\bxUseShadowMap[2]{% + \global\font#1=#2\relax} + +%%<+> \bxMap\CS +\mathchardef\bx@m@cc=256 +\bxPreamble\newcommand*\bxMap[1]{% + \begingroup\count@\bxUcv\divide\count@\bx@m@cc + \chardef\bx@m@hb\count@ \multiply\count@\bx@m@cc + \advance\bxUcv-\count@ \setbox\z@\hbox{#1\bx@m@hb\char\bxUcv}% + \global\bxUcv\wd\z@ \endgroup} + +%--------------------------------------- module name + +%%<+> \bxSetModuleName{} +\newcommand*\bxSetModuleName[1]{% + \csxdef{bx@modname/\@currname.\@currext}{#1}} +\let\bxtb@modname@default\bx@pkgname % name of this bundle + +%%<+> \bxModuleName +\@ifpackageloaded{ifptex}{\undef\bxModuleName}{} +\newcommand*\bxModuleName{% + \bxIfcsundefX{bx@modname/\@currname.\@currext}% + {\bxIfx{\@currname\@empty}{\bxtb@modname@default}% + {\@currname}}% + {\@nameuse{bx@modname/\@currname.\@currext}}} + +%%<+> \bxCurrentError / \bxCurrentWarning +%%<+> \bxCurrentWarningNoLine / \bxCurrentInfo +\newcommand*\bxCurrentError{\PackageError\bxModuleName} +\newcommand*\bxCurrentWarning{\PackageWarning\bxModuleName} +\newcommand*\bxCurrentWarningNoLine{% + \PackageWarningNoLine\bxModuleName} +\newcommand*\bxCurrentInfo{\PackageInfo\bxModuleName} + +%--------------------------------------- keyval extension + +%%<+> \bxPrepareSetKeysSafe +\bxPreamble\newcommand*\bxPrepareSetKeysSafe{% + \IfFileExists{xkeyval.sty}{\@tempswatrue}{\@tempswafalse}% + \if@tempswa + \RequirePackage{xkeyval}% + \def\bxtb@setkeys@safe##1##2{% + \setkeys*{##1}{##2}% +% \bxDebug{\XKV@rm}% + \bxForEachIn\XKV@rm\do{\bxtb@setkeys@safe@a####1=\@nil}}% + \def\bxtb@setkeys@safe@a##1=##2\@nil{% + \bxtb@setkeys@safe@b{##1}}% + \else + \RequirePackage{keyval}% + \def\bxtb@setkeys@safe##1##2{% + \let\bxtb@KV@errx\KV@errx + \let\KV@errx\bxtb@setkeys@safe@a + \setkeys{##1}{##2}% + \let\KV@errx\bxtb@KV@errx}% + \def\bxtb@setkeys@safe@a##1{% + \expandafter\bxtb@setkeys@safe@b\expandafter{\@tempa}}% + \fi + \let\bxPrepareSetKeysSafe\relax} + +%%<+> \bxSetKeysSafe +\newcommand*\bxSetKeysSafe[2]{% + \let\bxRestKeys\@empty + \bxtb@setkeys@safe{#1}{#2}% + \edef\bxRestKeys{\expandafter\@gobble\bxRestKeys\@empty}} +\def\bxtb@setkeys@safe@b#1{% + \edef\bxRestKeys{\bxRestKeys,#1}} +\def\bxtb@setkeys@safe#1#2{\bxCurrentError + {\string\bxSetKeysSafe\space not enabled}\@ehc} + +%--------------------------------------- driver handling + +%%<+> \bxDriverList +\providecommand*\bxDriverList{dvips,dvipdfmx,dviout} + +%%<+> \bxDriverInherent +\newcommand*\bxDriverInherent{} +\bxIfinXeTeX{\def\bxDriverInherent{xetex}}{} +\bxIfPdfOutput{\def\bxDriverInherent{pdftex}}{} + +%%<+> \bxDriver +\newcommand*\bxDriver{% + \bxIfx{\bxDriverInherent\@empty}% + {\bxIfcsundefX{bx@driver/\@currname.\@currext}{default}% + {\@nameuse{bx@driver/\@currname.\@currext}}}% + {\bxDriverInherent}} + +%%<+> \bxSetDriver[]{} +\newcommand*\bxSetDriver{% + \@ifnextchar[% + {\bxtb@set@driver@a}{\bxtb@set@driver@a[\@currname.\@currext]}} +\def\bxtb@set@driver@a[#1]#2{% + \bxIfx{\bxDriverInherent\@empty}{}{\bx@warn@ivdrv{#2}}% +% \bxDebug{set driver for #1 to #2}% + \csxdef{bx@driver/#1}{#2}} +\def\bx@warn@ivdrv#1{\bxCurrentWarningNoLine + {Driver specification '#1' ignored;\MessageBreak + driver is inherently set to '\bxDriverInherent'}} + +%%<+> \bxDriverSpecifiedFor{} +\newcommand*\bxDriverSpecifiedFor[1]{% + \bxCsuseX{bx@driver/#1}} + +%%<+> \bxDefineDDProcess{}{}{} +%%<+> \bxDefineDDProcessDefault{}{} +\newcommand*\bxDefineDDProcess[2]{% + \csdef{#1@@#2}} +\newcommand*\bxDefineDDProcessDefault[1]{% + \csdef{#1@@default}} + +%%<+> \bxDoDDProcess{} +\bxNewrobustcmd*\bxDoDDProcess[1]{% + \edef\bxtb@drv{\bxDriver}% + \def\bxtb@do@ddproc@try{\bxtb@do@ddproc@try@a{#1}}% + \bxtb@do@ddproc@try\bxtb@drv + \bxCsuse{bxtb@do@ddproc@fb@@\bxtb@drv}% + \bxtb@do@ddproc@try{default}% + \bxtb@do@ddproc@try@end} +\def\bxtb@do@ddproc@try@a#1#2{% +% \bxDebug{try #1@@#2}% + \bxIfcsundefX{#1@@#2}{}% + {\csname#1@@#2\endcsname + \bxtb@do@ddproc@skip}} +\def\bxtb@do@ddproc@skip#1\bxtb@do@ddproc@try@end{} +\let\bxtb@do@ddproc@try@end\@empty +\def\do{\noexpand\bxtb@do@ddproc@try} +% fallback setup +\edef\bxtb@do@ddproc@fb@@xetex{\do{dvipdfmx}} + +%%<+> \bxDeclareDriverOptions +\newcommand*\bxDeclareDriverOptions{% + \bxForEachIn\bxDriverList\do{% + \DeclareOption{##1}{\bxSetDriver{##1}}}} + +%--------------------------------------- all done +\endinput +%% EOF diff --git a/Master/texmf-dist/tex/latex/bxbase/bxtoolbox-ja.def b/Master/texmf-dist/tex/latex/bxbase/bxtoolbox-ja.def new file mode 100644 index 00000000000..a522d6e29a8 --- /dev/null +++ b/Master/texmf-dist/tex/latex/bxbase/bxtoolbox-ja.def @@ -0,0 +1,186 @@ +%% +%% This is file 'bxtoolbox-ja.def'. +%% + +%% file declaration +\NeedsTeXFormat{LaTeX2e} +\ProvidesFile{bxtoolbox-ja.def}[2017/05/29 v1.1] + +%% check intergrity +\edef\bxtb@tmpa{\@currname.\@currext}\def\bxtb@tmpb{bxtoolbox-ja.def} +\ifx\bxtb@tmpa\bxtb@tmpb\else + \PackageError\bxtb@pkgname{Illegal load sequence}\@eha +\expandafter\endinput\fi\relax + +%% load submodule +\providecommand*\bxRequireDefinition[1]{% + \def\bx@@def{def}\@onefilewithoptions{#1}[][]\bx@@def} +\bxRequireDefinition{bxtoolbox-ext} + +%% code guards +\edef\bxtb@j@restore@codes{% + \catcode34=\the\catcode34% + \catcode45=\the\catcode45% + \catcode46=\the\catcode46% + \catcode47=\the\catcode47% + \catcode58=\the\catcode58% + \catcode59=\the\catcode59% + \catcode63=\the\catcode63% + \catcode96=\the\catcode96% +\relax} +\catcode34=12 % <"> +\catcode45=12 % <-> +\catcode46=12 % <.> +\catcode47=12 % +\catcode58=12 % <:> +\catcode59=12 % <;> +\catcode63=12 % +\catcode96=12 % <`> +\AtEndOfPackage{% + \bxtb@j@restore@codes + \undef\bxtb@j@restore@codes} + +%--------------------------------------- pTeX something + +%% switch 'bxtb@pxbase@ok' +\newbool{bxtb@pxbase@ok} +\ifbxinpTeX + \IfFileExists{pxbase.sty}{% + \bxtb@pxbase@oktrue + }{} +\fi + +%%<+> \bxToYokoDir +% Switches to horizontal(yoko) writing direction +% when using pTeX. +\ifbxinpTeX %----<*pTeX> +\newcommand*\bxToYokoDir{% + \bxIfydir{}{\yoko}} +\else %----<*!pTeX> +\newcommand*\bxToYokoDir{} +\fi %---- + +%%<+> \bxAtBeginDviX +% \AtBeginDvi that is safe to use in pTeX. +\newcommand\bxAtBeginDviX[1]{% + \global\setbox\@begindvibox\vbox{% + \bxToYokoDir\unvbox\@begindvibox#1}} + +%--------------------------------------- Japanese something + +%%<+> \bxGetZenkakuWidth +% Assigns 1zw to \bxResDim +\ifbxinpTeX + \bxNewrobustcmd*\bxGetZenkakuWidth{% + \bxResDim=1zw\relax} +\else\ifbxHasAlUcsChar + \bxToUcsChar{"4E00}\let\bx@jan@onekanji\bxRes + \bxNewrobustcmd*\bxGetZenkakuWidth{% + \begingroup \setbox\z@\hbox{\bx@jan@onekanji}% + \xdef\bx@jan@g@next{\bxResDim=\the\wd\z@\relax}% + \endgroup \bx@jan@g@next} + \AtBeginDocument{% + \ifdef\jsZw{% + \bxRenewrobustcmd*\bxGetZenkakuWidth{% + \bxResDim=1\jsZw}}{}% + \ifdef\zw{% + \bxRenewrobustcmd*\bxGetZenkakuWidth{% + \bxResDim=1\zw}}{}% + } +\fi\fi + +%%<+> \bxIfCharToken{}{}{} +% Tests if the token is a character token with catcode 11 or 12. +\newcommand*\bxIfCharToken[1]{% + \bxIfcat{\relax\noexpand#1}{\@secondoftwo}% + {\expandafter\bxtb@ifchartok@a\meaning#1\bxtb@end}} +\def\bxtb@ifchartok@a#1{% + \bxIfcsundefX{bxtb@ICTF/#1}{\bxtb@ifchartok@false}% + {\bxtb@ifchartok@b#1}} +\def\bxtb@ifchartok@b#1#2#3#4#5#6{% + \bxIfcsundefX{bxtb@ICT/#1#2#3#4#5#6}{\bxtb@ifchartok@false}% + {\bxtb@ifchartok@true}} +\def\bxtb@ifchartok@true#1\bxtb@end#2#3{#2} +\def\bxtb@ifchartok@false#1\bxtb@end#2#3{#3} +\def\do#1#2:{\cslet{bxtb@ICTF/#1}{t}\cslet{bxtb@ICT/#1#2}{t}} +\do thelet:% 11 +\do thecha:% 12 +\do kanjic:% 16-19(upTeX) + +%--------------------------------------- kanji-encoding something + +%%<+> \bxInternalJaEncoding +\let\bxInternalJaEncoding=? +\ifbxHasAlUcsChar + \let\bxInternalJaEncoding=u +\else\ifbxinpdfTeX + \let\bxInternalJaEncoding=b +\else\ifbxinpTeX + \ifnum\jis"2121="8140 \let\bxInternalJaEncoding=s\else + \ifnum\jis"2121="A1A1 \let\bxInternalJaEncoding=e\else + \ifnum\jis"2121="3000 \let\bxInternalJaEncoding=u\fi\fi\fi +\fi\fi\fi + +%%<+> \bxInputJaEncoding +\let\bxInputJaEncoding=? +\ifbxHasAlUcsChar + \let\bxInputJaEncoding=u +\else\ifbxinpdfTeX + \let\bxInputJaEncoding=b +\else\ifbxtb@pxbase@ok + \@@input pxbsjc.def\relax + \def\bxtb@tmpb#1#2\@nil{% + \ifnum `#1=\jis"723F \let\bxInputJaEncoding=s\else + \ifnum `#1=\jis"693D \let\bxInputJaEncoding=e\else + \ifnum `#1=\jis"7379 \let\bxInputJaEncoding=u\fi\fi\fi} + \expandafter\bxtb@tmpb\bxtb@tmpa\@nil + \ifx e\bxInputJaEncoding + \@@input pxbsjc1.def\relax + \def\bxtb@tmpb#1#2\@nil{% + \ifnum `#1=\jis"723F \let\bxInputJaEncoding=a\fi} + \expandafter\bxtb@tmpb\bxtb@tmpa\@nil + \fi +\fi\fi\fi + +%%<+> \bxOutputJaEncoding +\let\bxOutputJaEncoding=? +% if input is 'auto', output should not be equal to it, +% but I don't know what to do then. +\let\bxOutputJaEncoding=\bxInputJaEncoding + +%% \bxtb@jaencname +\def\bxtb@jaencname#1#2{% + \ifx u#1#2\else + \ifx s#1sjis\else + \ifx e#1euc\else + \ifx a#1auto\else + \ifx b#1byte\else + (unknown)\fi\fi\fi\fi\fi} + +%%<*> \internaljaencodingname +\newcommand*\internaljaencodingname{} +\edef\internaljaencodingname{% + \bxtb@jaencname\bxInternalJaEncoding{unicode}} + +%%<*> \inputjaencodingname +\newcommand*\inputjaencodingname{} +\edef\inputjaencodingname{% + \bxtb@jaencname\bxInputJaEncoding{utf8}} + +%%<*> \outputjaencodingname +\newcommand*\outputjaencodingname{} +\edef\outputjaencodingname{% + \bxtb@jaencname\bxOutputJaEncoding{utf8}} + +%%<*> \infojenc +\newcommand*\infojenc{% + \typeout{% + Kanji encoding: + input=\inputjaencodingname; + output=\outputjaencodingname; + internal=\internaljaencodingname}% +} + +%--------------------------------------- all done +\endinput +%% EOF diff --git a/Master/texmf-dist/tex/latex/bxbase/bxtoolbox.def b/Master/texmf-dist/tex/latex/bxbase/bxtoolbox.def new file mode 100644 index 00000000000..07dae477f10 --- /dev/null +++ b/Master/texmf-dist/tex/latex/bxbase/bxtoolbox.def @@ -0,0 +1,1078 @@ +%% +%% This is file 'bxtoolbox.def'. +%% + +%% file declaration +\NeedsTeXFormat{LaTeX2e} +\ProvidesFile{bxtoolbox.def}[2017/05/29 v1.1] +\providecommand*\bxtb@pkgname{BXtoolbox}% bundle name + +%% check intergrity +\edef\bxtb@tmpa{\@currname.\@currext}\def\bxtb@tmpb{bxtoolbox.def} +\ifx\bxtb@tmpa\bxtb@tmpb\else + \PackageError\bxtb@pkgname{Illegal load sequence}\@eha +\expandafter\endinput\fi\relax + +%% code guards +\edef\bxtb@restore@codes{% + \catcode33=\the\catcode33% + \catcode34=\the\catcode34% + \catcode39=\the\catcode39% + \catcode45=\the\catcode45% + \catcode46=\the\catcode46% + \catcode47=\the\catcode47% + \catcode58=\the\catcode58% + \catcode60=\the\catcode60% + \catcode62=\the\catcode62% + \catcode63=\the\catcode63% + \catcode96=\the\catcode96% +\relax} +\catcode33=12 % +\catcode34=12 % <"> +\catcode39=12 % <'> +\catcode45=12 % <-> +\catcode46=12 % <.> +\catcode47=12 % +\catcode58=12 % <:> +\catcode60=12 % <<> +\catcode62=12 % <>> +\catcode63=12 % +\catcode96=12 % <`> +\AtEndOfPackage{% + \bxtb@restore@codes + \let\bxtb@restore@codes\@undefined} + +%--------------------------------------- 0. Prologue + +%% variables +\newif\ifbxOk % general-purpose switch +\let\bxRes\relax % result container + +%% unique tokens +\def\bxtb@uniq{\bxtb@uniq@} + +%% error messages +\def\bxtb@error{\PackageError\bxtb@pkgname} +\def\bxtb@warn{\PackageWarningNoLine\bxtb@pkgname} + +%--------------------------------------- 1. Engine-independent stuffs + +%% \bxtb@@bs +\let\bxtb@@bs\@backslashchar + +%%<+> \bxIfcsundefX{}{}{} +\newcommand*\bxIfcsundefX{} +\let\bxIfcsundefX\@ifundefined + +%%<+> \bxCsuseX{} +\newcommand*\bxCsuseX[1]{% + \@ifundefined{#1}{}{\csname#1\endcsname}} + +%% \bxtb@listmake@do +\def\bxtb@listmake@do{\let\do\bxtb@lm@do} +\def\bxtb@lm@do{\noexpand\do\noexpand} +\def\bxtb@csdo#1{\expandafter\do\csname#1\endcsname} + +%% \bxtb@letcs\CSA{} +%% \bxtb@cslet{}\CSB +%% \bxtb@csletcs{}{} +% Same as \letcs, \cslet, \csletcs in etoolbox. +% They are defined here since subsequent stuffs use them. +\def\bxtb@letcs#1#2{% + \expandafter\let\expandafter#1\csname #2\endcsname} +\def\bxtb@cslet#1#2{% + \expandafter\let\csname #1\endcsname#2} +\def\bxtb@csletcs#1#2{% + \expandafter\let\csname #1\expandafter\endcsname\csname #2\endcsname} + +%% \bxtb@ifprimitive\CS{}{} +% Core of \bxIfPrimitive. +\def\bxtb@ifprimitive#1{% + \edef\bxtb@tmpa{\string#1}\edef\bxtb@tmpb{\meaning#1}% + \ifx\bxtb@tmpa\bxtb@tmpb \expandafter\@firstoftwo + \else \expandafter\@secondoftwo \fi} + +%% \bxtb@ifstrempty{}{}{} +% Core of \ifstrempty. +\def\bxtb@ifstrempty#1{% + \ifx\bxtb@empty@uniq#1\bxtb@empty@uniq + \expandafter\@firstoftwo + \else \expandafter\@secondoftwo \fi} +\def\bxtb@empty@uniq{\bxtb@empty@uniq@} + +%%<+> \ifbxineTeX (if-token) +%%<+> \bxIfineTeX{}{} +%%<+> \ifbxinpdfTeX / \ifbxinLuaTeX / \ifbxinOmega / \ifbxinAleph +%%<+> \ifbxinXeTeX / \ifbxinpTeX / \ifbxinupTeX / \ifbxinjTeX +%%<+> \bxIfinpdfTeX / \bxIfinLuaTeX / \bxIfinOmega / \bxIfinAleph +%%<+> \bxIfinXeTeX / \bxIfinpTeX / \bxIfinupTeX / \bxIfinjTeX +%% Engine check. +\def\bxtb@do#1#2{% + \bxtb@ifprimitive#2% + {\let\bxtb@tmpa\@firstoftwo}{\let\bxtb@tmpa\@secondoftwo}% + \bxtb@cslet{bxIfin#1}\bxtb@tmpa + \bxtb@csletcs{ifbxin#1}{if\bxtb@tmpa{true}{false}}} +\bxtb@do{eTeX}{\eTeXversion} +\bxtb@do{pdfTeX}{\pdftexversion} +\bxtb@do{LuaTeX}{\luatexversion} +\bxtb@do{Omega}{\OmegaVersion} +\bxtb@do{Aleph}{\AlephVersion} +\bxtb@do{XeTeX}{\XeTeXversion} +\bxtb@do{pTeX}{\kanjiskip} +\bxtb@do{upTeX}{\enablecjktoken} +\bxtb@do{jTeX}{\jintercharskip} + +%%<+> \bxPreamble\CSX[*]\CSY +% Prefix used for preamble-only commands. +% \CSX can be \def, \newcommand, \DeclareRobustCommand, etc. +\@onlypreamble\bxPreamble +\newcommand*\bxPreamble[2]{% + \ifx *#2\def\bxtb@args{{#1*}}% + \else \def\bxtb@args{#1#2}% + \fi \expandafter\bxtb@preamble@a\bxtb@args} +\@onlypreamble\bxtb@preamble@a +\def\bxtb@preamble@a#1#2{% + \@onlypreamble#2#1#2} + +%%<+> \bxConstBool +\newcommand*\bxConstIfToken[2]{% + \bxtb@cslet{if#1}{if#2}} + +%% \bxtb@skip@new@cmd...{} +% Gobbles a following whole macro definition sentence. +\def\bxtb@skip@new@cmd#1#{\@gobble} + +%% \bxtb@name@cs\CS +\def\bxtb@name@cs{% + \expandafter\bxtb@name@cs@a\string\$\@gobble\@empty\@nil} +\def\bxtb@name@cs@a#1#2#3#4\@nil#5{% + \expandafter#3\string#5} + +%% \bxtb@let@name\CSX\CSY +\def\bxtb@let@name#1#2{% + \edef#1{\bxtb@name@cs#2}} + +%%<+> \bxIf{}{}{} +%%<+> \bxIfcat{}{}{} +%%<+> \bxIfx{}{}{} +%%<+> \bxIfdim{}{}{} +%%<+> \bxIfnum{}{}{} +% Primitive if-tests rendered in LaTeX format. +\let\bxtb@bumper\noindent % primitive other than \relax +\bxPreamble\def\bxtb@defifmacro@noarg#1#2#3{% + \@gobble{\if}% if-match hack + \def#1{#2\expandafter\@firstoftwo + \else\expandafter\@secondoftwo\fi}} +\bxPreamble\def\bxtb@defifmacro#1#2#3{% + \@gobble{\if}% if-match hack + \def#1##1{#2##1\expandafter\@firstoftwo + \else\expandafter\@secondoftwo\fi}} +\bxPreamble\def\bxtb@defifmacro@val#1#2#3{% + \@gobble{\if}% if-match hack + \def#1##1{\expandafter\@gobble + #2##1\bxtb@bumper\expandafter\@firstoftwo + \else \bxtb@bumper\expandafter\@secondoftwo \fi}} +\bxtb@defifmacro\bxIf\if\fi +\bxtb@defifmacro\bxIfcat\ifcat\fi +\bxtb@defifmacro\bxIfx\ifx\fi +\bxtb@defifmacro@val\bxIfdim\ifdim\fi +\bxtb@defifmacro@val\bxIfnum\ifnum\fi + +%%<+> \bxIfInMovingArg{}{} +% Moving argument check. Note that it actually expands to or +% prepended with some unexpandable garbles with no effect. +% For that reason, this macro is not suitable for switching +% implementation. Instead it is intended for error check for +% use in moving arguments. +\long\def\bxIfInMovingArg#1#2{% + \let\bxtb@ifinmovarg@a\bxtb@ifinmovarg@a\bxtb@ifinmovarg@c{#1}% + #2\bxtb@ifinmovarg@end} +\def\bxtb@ifinmovarg@a#1{% + \bxtb@ifinmovarg@dummy\relax \bxtb@ifinmovarg@b} +\def\bxtb@ifinmovarg@b#1#2#3\bxtb@ifinmovarg@end{#2} +\def\bxtb@ifinmovarg@c#1#2\bxtb@ifinmovarg@end{#2} +\let\bxtb@ifinmovarg@end\@empty +\let\bxtb@ifinmovarg@dummy\relax + +%%<+> \bxMessageToken{}{} +% Executes where #1 is replaced by control sequence \. +% The meaning of \ is unchanged. +% (In # must be doubled.) +\def\bxMessageToken#1{% + \begingroup + \xdef\bxtb@g@tmpa{\noexpand\bxtb@tmpa + \expandafter\noexpand\csname #1\endcsname}% + \endgroup + \afterassignment\bxtb@g@tmpa \long\def\bxtb@tmpa##1} + +%%<+> \bxCheckForMovingArg{} +% When in moving arguments, it raises an error in the form of +% undefined conrol sequence; otherwise expands to . +%%<+> \bxCheckForMovingArgForTest{\SOMETEST{}}{}{} +% When in moving arguments, it raises an error in the form of +% undefined conrol sequence and expands to ; otherwise +% it expands to \SOMETEST{}{}{}. +\bxMessageToken{ ERROR: Use in wrong place!}{% + \def\bxCheckForMovingArg{\bxIfInMovingArg{#1}}% + \def\bxCheckForMovingArgForTest{% + \bxIfInMovingArg{#1\@secondoftwo}}% +} + +%% \bxtb@ifnewdefok\CS{}{} +%% \bxtb@ifrenewdefok\CS{}{} +%% \bxtb@ifprovidedefok\CS{}{} +\def\bxtb@ifnewdefok#1{% + \newcommand#1{\bxtb@uniq}\bxtb@ifnewdefok@a#1} +\def\bxtb@ifrenewdefok#1{% is never executed + \renewcommand#1{\bxtb@uniq}\let#1\@undefined \@firstoftwo} +\def\bxtb@ifprovidedefok#1{% + \providecommand#1{\bxtb@uniq}\bxtb@ifnewdefok@a#1} +\def\bxtb@ifnewdefok@a#1{% + \ifx#1\bxtb@ifdefok@probe + \let#1\@undefined \expandafter\@firstoftwo + \else \expandafter\@secondoftwo + \fi} +\long\def\bxtb@ifdefok@probe{\bxtb@uniq} + +%% \bxtb@detokenize{} +% Resource consuming version of \detokenize ;) +%% \bxtb@stringify{} +% Expands and then detokenizes the result. +\def\bxtb@detokenize{% + \romannumeral-`a\bxtb@detok@pre@a\bxtb@detok@lop@a} +\def\bxtb@stringify{% + \romannumeral-`a\bxtb@detok@pre@a\bxtb@edetok@lop@a} +\def\bxtb@detok@pre@a#1#2{% + \expandafter\bxtb@detok@ppst@a + \csname\bxtb@nonce@pfx"#1#2\bxtb@detok@enda + {} \bxtb@detok@endb\endcsname} +\def\bxtb@detok@enda{\bxtb@detok@enda@} +\def\bxtb@detok@endb{\bxtb@detok@endb@} +\begingroup + \catcode`\(=12 \lccode`\(=`\{ \catcode`\)=12 \lccode`\)=`\} + \lowercase{\gdef\bxtb@detok@brc@a#1#2{(#1#2)}} +\endgroup +\def\bxtb@detok@lop@a#1 #2\bxtb@detok@endb{% + \bxtb@ifstrempty{#1}% + { \bxtb@detok@lop@a}{\bxtb@detok@lop@b#1 }% + #2\bxtb@detok@endb} +\def\bxtb@detok@lop@b#1#{% + \bxtb@ifstrempty{#1}% + {\bxtb@detok@brc@a\bxtb@detok@lop@a}{\bxtb@detok@lop@c#1}} +\def\bxtb@detok@lop@c#1{% + \bxIfx{#1\bxtb@detok@enda}{\bxtb@detok@pst@a}{% + \bxIfcat{\noexpand#1\relax}{\bxtb@format@cs#1}{\string#1}% + \bxtb@detok@lop@a}} +\def\bxtb@edetok@lop@a#1 #2\bxtb@detok@endb{% + \bxtb@ifstrempty{#1}% + { \bxtb@edetok@lop@a}{\bxtb@edetok@lop@b#1 }% + #2\bxtb@detok@endb} +\def\bxtb@edetok@lop@b#1#{% + \bxtb@ifstrempty{#1}% + {\bxtb@detok@brc@a\bxtb@edetok@lop@a}{\bxtb@edetok@lop@c#1}} +\def\bxtb@edetok@lop@c#1{% + \bxIfx{#1\bxtb@detok@enda}{\bxtb@detok@pst@a}% + {\bxtb@edetok@lop@d#1}} +\def\bxtb@edetok@lop@d#1{% + \bxtb@ifdefmacro#1{\expandafter\bxtb@edetok@lop@a#1}% + {\expandafter\bxtb@edetok@lop@e\romannumeral-`\a#1}} +\def\bxtb@edetok@lop@e#1{% + \bxIfcat{\noexpand#1\relax}{\bxtb@format@cs#1}{\string#1}% + \bxtb@edetok@lop@a} +\def\bxtb@detok@pst@a#1\bxtb@detok@endb{} +\def\bxtb@detok@ppst@a#1{% + \expandafter\bxtb@detok@ppst@b\string#1\@nil} +\def\bxtb@detok@ppst@b#1#2"#3\@nil{\space#3} + +%% \bxtb@format@cs\CS +% Detokenizes control sequence \CS with an optional space +% appended just in \write. +\def\bxtb@format@cs{% + \expandafter\bxtb@format@cs@a\string\$% + \bxtb@format@cs@c\bxtb@format@cs@b\@nil} +\def\bxtb@format@cs@a#1#2#3#4\@nil#5{% + \expandafter#3\string#5\@nil} +\def\bxtb@format@cs@b{\bxtb@format@cs@c\@empty} +\def\bxtb@format@cs@c#1#2#3\@nil{% + #1#2#3\ifcat_#3_\ifnum\catcode`#2=11 \space \fi\else\space\fi} + +%% \bxtb@return@true +\def\bxtb@return@true#1\bxtb@esac{% + \fi\@firstoftwo} +\def\bxtb@return@false#1\bxtb@esac{% + \fi\@secondoftwo} + + +%--------------------------------------- 2. Dummy if-token definitions. + +%% \bxtb@make@dummy@if@setter +\bxPreamble\def\bxtb@make@dummy@if@setter#1#2{% + \begingroup + \def\bxtb@bval{#1}% + \@for\bxtb@bname:=#2\do{\bxtb@make@dummy@if@setter@a}% + \endgroup} +\bxPreamble\def\bxtb@make@dummy@if@setter@a{% + \expandafter\ifx\csname if\bxtb@bname\endcsname\relax + \bxtb@make@dummy@if@setter@appto\bxtb@set@dummy@ifs{% + \let \expandafter\noexpand\csname if\bxtb@bname\endcsname + \expandafter\noexpand\csname if\bxtb@bval\endcsname}% + \bxtb@make@dummy@if@setter@appto\bxtb@unset@dummy@ifs{% + \let \expandafter\noexpand\csname if\bxtb@bname\endcsname + \noexpand\@undefined}% + \fi} +\bxPreamble\def\bxtb@make@dummy@if@setter@appto#1#2{% + \edef\bxtb@tmpx{#2}% + \expandafter\g@addto@macro\expandafter#1% + \expandafter{\bxtb@tmpx}} +\let\bxtb@set@dummy@ifs\@empty +\let\bxtb@unset@dummy@ifs\@empty +\bxtb@make@dummy@if@setter{false}{% + % e-TeX if-tokens + fontchar,defined,csname,incsname,% + % pdfTeX if-tokens + pdfprimitive,pdfabsdim,pdfabsnum,% + % LuaTeX if-tokens + absdim,absnum,primitive,% + % pTeX if-tokens + tdir} +\bxtb@make@dummy@if@setter{true}{% + % pTeX if-tokens + ydir} + +%%<+> \bxSetDummyIfs +%%<+> \bxUnsetDummyIfs +\newcommand*\bxSetDummyIfs{} +\let\bxSetDummyIfs\bxtb@set@dummy@ifs +\newcommand*\bxUnsetDummyIfs{} +\let\bxUnsetDummyIfs\bxtb@unset@dummy@ifs + +%% dummy-ifs are enabled in this file +\bxSetDummyIfs + +\bxPreamble\def\bxtb@defifmacro@engdep#1{% + \expandafter\bxtb@defifmacro@engdep@a + \csname bxIf#1\expandafter\endcsname + \csname if#1\expandafter\endcsname + \csname iftrue\expandafter\endcsname\csname iffalse\endcsname} +\bxPreamble\def\bxtb@defifmacro@engdep@a#1#2#3#4{% + % be careful that #2,#3,#4 are \if-tokens + \bxtb@defifmacro@noarg#1#2\relax \chardef\bxtb@tmpa\z@ + \ifx#2#3\chardef\bxtb@tmpa\@ne \fi + \ifx#2#4\chardef\bxtb@tmpa\tw@ \fi + \ifcase\bxtb@tmpa\relax + \or \let#1\@firstoftwo + \or \let#1\@secondoftwo + \fi} +\bxPreamble\def\bxtb@make@engdep@test#1{% + \@for\bxtb@bname:=#1\do{% + \bxtb@defifmacro@engdep\bxtb@bname}} +% this must be done in \bxSetDummyIfs effective +\bxtb@make@engdep@test{% + ydir,tdir% +} + +%--------------------------------------- 3. Macrodef prefix operations + +%% \bxtb@all@prefix +\def\bxtb@all@prefix{\do{protected}\do{long}\do{outer}} + +%% \bxtb@set@prefix{} +%% \bxtb@unset@prefix{} +%% \bxtb@unset@all@prefix{} +\def\bxtb@set@prefix#1{\bxtb@cslet{bxtb@PFX/#1}{T}} +\def\bxtb@unset@prefix#1{\bxtb@cslet{bxtb@PFX/#1}{F}} +\def\do{\noexpand\bxtb@unset@prefix} +\edef\bxtb@unset@all@prefix{\bxtb@all@prefix} + +%% \bxtb@clear@prefix +\def\bxtb@clear@prefix{% + \def\bxtb@savepfx@dummy{}\let\bxtb@savepfx@dummy\relax} + +%% \bxtb@render@prefix +\def\do{\noexpand\bxtb@render@prefix@a} +\edef\bxtb@render@prefix{\bxtb@all@prefix} +\def\bxtb@render@prefix@a#1{% + \bxIf{\csname bxtb@PFX/#1\endcsname T}{\csname #1\endcsname}{}} + +%% \bxtb@save@prefix +\def\bxtb@save@prefix{% + \def\bxtb@savepfx@dummy{}% prefixes applied to this definition + \bxtb@unset@all@prefix + \begingroup \escapechar`\\ + \expandafter\bxtb@savepfx@prs@a\meaning\bxtb@savepfx@dummy\@nil + %\endgroup already done +} + +%% some internal stuffs +\begingroup \escapechar\m@ne +\xdef\bxtb@g@args{{\string\macro:}{\space}{\string\\}} +\endgroup +\def\bxtb@do#1#2#3{% + \def\bxtb@savepfx@prs@a##1#1##2\@nil{% + \endgroup + \let\bxtb@savepfx@dummy\relax + \bxIfcat{_##1_}{}{\bxtb@savepfx@prs@b##1\@nil}} + \def\bxtb@savepfx@prs@b##1##2#2##3\@nil{% + \bxtb@savepfx@prs@c##2#3#3} + \def\bxtb@savepfx@prs@c##1#3{% + \bxIfcat{_##1_}{}% + {\bxtb@set@prefix{##1}\bxtb@savepfx@prs@c}} + \def\bxtb@ifdefmacro##1{% + \expandafter\bxtb@ifdefmacro@a\meaning##1#1\@nil} + \def\bxtb@ifdefmacro@a##1#1##2\@nil##3##4{% + \bxIfcat{_##2_}{##4}{##3}} +} +\expandafter\bxtb@do\bxtb@g@args + +%--------------------------------------- 4. pdfTeX primitives + +%%<+> \ifbxPrimitive +% The primitive equivalent to pdfTeX's \ifpdfprimitive; if the +% primitive is not available, this is \let'd to \iffalse. +%%<+> \bxIfHasIfPrimitive{}{} +% Whether \ifbxPrimitive has a valid definition. +\bxtb@cslet{ifbxPrimitive}\@undefined +\expandafter\bxtb@ifprimitive\csname ifpdfprimitive\endcsname{%then + \let\bxIfHasIfPrimitive\@firstoftwo + \bxtb@csletcs{ifbxPrimitive}{ifpdfprimitive}% +}{%else + \expandafter\bxtb@ifprimitive\csname ifprimitive\endcsname{%then + \let\bxIfHasIfPrimitive\@firstoftwo + \bxtb@csletcs{ifbxPrimitive}{ifprimitive}% + }{%else + \let\bxIfHasIfPrimitive\@secondoftwo + \bxtb@csletcs{ifbxPrimitive}{iffalse}% +}} + +%%<+> \bxPrimitive +% The primitive equivalent to pdfTeX's \pdfprimitive; if the +% primitive is not available, this is defined to be empty. +\bxtb@ifprimitive\pdfprimitive{%then + \let\bxPrimitive\pdfprimitive +}{%else + \bxtb@ifprimitive\primitive{%then + \let\bxPrimitive\primitive + }{%else + \let\bxPrimitive\@empty +}} + +%%<+> \bxStrcmp +% The primitive equivalent to pdfTeX's \pdfstrcmp; if the +% primitive is not available, this is left undefined. +\let\bxStrcmp\@undefined +\bxtb@ifprimitive\pdfstrcmp{%then + \let\bxStrcmp\pdfstrcmp +}{%else + \bxtb@ifprimitive\strcmp{%then + \let\bxStrcmp\strcmp + }{%else +}} +\ifbxinLuaTeX %----<*LuaTeX> + \ifdefined\luatexluaescapestring + \unless\ifdefined\bxStrcmp + \directlua0{% + function bxtoolbox_strcmp(A, B) + if A == B then tex.write("0") + elseif A < B then tex.write("-1") + else tex.write("1") + end + end + } + \long\def\bxStrcmp#1#2{\directlua0{% + bxtoolbox_strcmp("\luatexluaescapestring{#1}", + "\luatexluaescapestring{#2}") + }} + \fi + \fi +\fi %---- + +%--------------------------------------- 5. non etoolbox stuffs + +%%<+> \bxRobustdef\CS +%%<+> \bxRobustgdef\CS +%%<+> \bxRobustedef\CS +%%<+> \bxRobustxdef\CS +\ifbxineTeX %<*etex> +\def\bxRobustdef{\protected\def} +\def\bxRobustgdef{\protected\gdef} +\def\bxRobustedef{\protected\edef} +\def\bxRobustxdef{\protected\xdef} +\else %<*!etex> +\def\bxRobustdef{\bxtb@robustdef\def} +\def\bxRobustgdef{\bxtb@robustdef\gdef} +\def\bxRobustedef{\bxtb@robustdef\edef} +\def\bxRobustxdef{\bxtb@robustdef\xdef} +\def\bxtb@robustdef#1#2{% + \bxtb@save@prefix + \let#2\@undefined \DeclareRobustCommand*#2{}% + \bxtb@let@name\bxtb@tmpb#2% + \bxtb@render@prefix + \expandafter#1\csname \bxtb@tmpb\space \endcsname} +\fi % + +%% \bxtb@robustlet\CSA\CSB +\ifbxineTeX %<*etex> +\def\bxtb@robustlet#1#2{% + \protected\def#1{#2}} +\else %<*!etex> +\def\bxtb@robustlet#1{% + \expandafter\bxtb@robustlet@a + \csname\bxtb@name@cs#1\space\endcsname#1} +\def\bxtb@robustlet@a#1#2#3{% + \DeclareRobustCommand*#2{}\let#1#3} +\fi + +%%<+> \bxIfPdfOutput{}{} +%%<+> \bxIfPdfOutputNow{}{} +\newcommand*\bxIfPdfOutputNow{% + \ifx\pdfoutput\@undefined \bxtb@return@false \fi + \ifx\pdfoutput\relax \bxtb@return@false \fi + \ifnum\pdfoutput>\z@ \bxtb@return@true + \else \bxtb@return@false \fi + \bxtb@esac} +\newcommand*\bxIfPdfOutput{} +\bxIfPdfOutputNow +{\let\bxIfPdfOutput\@firstoftwo + \bxtb@letcs\ifbxPdfOutput{iftrue}}% +{\let\bxIfPdfOutput\@secondoftwo + \bxtb@letcs\ifbxPdfOutput{iffalse}}% + +%%<+> \bxIfPrimitive\CS +%%<+> \bxCSIfPrimitive{} +\newcommand*\bxIfPrimitive{} +\bxtb@robustlet\bxIfPrimitive\bxtb@ifprimitive +\def\bxtb@ifcsprimitive@a#1{% + \expandafter\bxIfPrimitive\csname #1\endcsname} +\ifbxineTeX %<*etex> +\def\bxIfCsPrimitive#1{% + \unless\ifcsname#1\endcsname \let\bxtb@tmpx\@secondoftwo + \else \def\bxtb@tmpx{\bxtb@ifcsprimitive@a{#1}}% + \fi \bxtb@tmpx} +\else %<*!etex> +\def\bxIfCsPrimitive#1{% + \begingroup\expandafter\endgroup + \expandafter\ifx\csname #1\endcsname\@undefined + \let\bxtb@tmpx\@secondoftwo + \else \def\bxtb@tmpx{\bxtb@ifcsprimitive@a{#1}}% + \fi \bxtb@tmpx} +\fi % +% use \ifbxPrimitive if available +\bxIfHasIfPrimitive{% +\bxtb@defifmacro\bxIfPrimitive\ifbxPrimitive\fi +}{} + +%%<+> \bxIfPrimitiveX\CS +%% TODO: for e-TeX, TeX +% use \ifpdfprimitive if available +\bxIfHasIfPrimitive\@tempswatrue\@tempswafalse +\if@tempswa %---- +\let\bxIfPrimitiveX\bxIfPrimitive +\else %---- +\def\bxIfPrimitiveX#1{% + \bxIfcat{\noexpand#1\relax}% + {\bxtb@ifdefmacro#1{\@secondoftwo}{\bxtb@ifprimitive@x@a#1}}% + {\@secondoftwo}} +\def\bxtb@ifprimitive@x@a#1{% + \expandafter\bxtb@ifprimitive@x@b\meaning#1\bxtb@cmp@endb#1} +\def\bxtb@ifprimitive@x@b#1\bxtb@cmp@endb#2{% + \expandafter\bxtb@ifprimitive@x@c\string#1\@bxtb@cmp@enda + #2\bxtb@cmp@endb} +\def\bxtb@do#1{% + \def\bxtb@ifprimitive@x@b##1\bxtb@cmp@endb##2{% + \expandafter\bxtb@ifprimitive@x@c\string##1\@bxtb@cmp@enda + ##2\bxtb@cmp@endb#1\@nil}} +\def\bxtb@ifprimitive@x@c#1 #2\@nil{% + \bxtb@ifstrempty{#2}{\bxtb@ifeq@pstr#1}% + {\@secondoftwo}} +\fi %---- + +%%<+> \bxIfExpToEqual{}{}{}{} +\newcommand*\bxIfExpToEqual{} +\bxRobustdef\bxIfExpToEqual#1#2{% + \bxCheckForMovingArgForTest{% + \bxtb@edef@detokenized\bxtb@tmpx{#1}% + \bxtb@edef@detokenized\bxtb@tmpy{#2}% + \bxIfx{\bxtb@tmpx\bxtb@tmpy}}} +% use \bxStrcmp if available +\ifx\bxStrcmp\@undefined\else +\def\bxIfExpToEqual#1#2{% + \bxIfnum{\bxStrcmp{#1}{#2}=\z@}} +\fi + +%%<+> \bxIfExpToEqualX{}{}{}{} +\def\bxIfExpToEqualX#1#2{% + \bxtb@ifeq@text#1\bxtb@cmp@enda#2\bxtb@cmp@endb} +% use \bxStrcmp if available +\ifx\bxStrcmp\@undefined\else +\let\bxIfExpToEqualX\bxIfExpToEqual +\fi + +%% \bxtb@ifstrequal@pdftex{}{}{}{} +% a version of \ifstrequal using \bxStrcmp +\ifx\bxStrcmp\@undefined\else +\def\bxtb@ifstrequal@pdftex#1#2{% + \bxIfnum{\bxStrcmp{\detokenize{#1}}{\detokenize{#2}}=\z@}} +\AtEndOfPackage{% override the definition in etoolbox + \let\bxIfstrequal\bxtb@ifstrequal@pdftex} +\fi + +%% \bxIfstrequalX{}{}{}{} +\newcommand*\bxIfstrequalX{} +\def\bxIfstrequalX#1#2{% + \bxtb@ifeq@str#1\bxtb@cmp@enda#2\bxtb@cmp@endb} +% use \bxStrcmp if available +\ifx\bxStrcmp\@undefined\else +\let\bxIfstrequalX\bxtb@ifstrequal@pdftex +\fi + +%% \bxtb@nonce@pfx +\def\bxtb@nonce@pfx{bxtb@?@\string\$} + +%%<+> \bxDetokenize{} +\bxIfineTeX +{\let\bxDetokenize\detokenize} +{\let\bxDetokenize\bxtb@detokenize} +%%<+> \bxStringify{} +\let\bxStringify\bxtb@stringify + +%% \bxtb@def@detokenized\CS{} +%% \bxtb@edef@detokenized\CS{} +\ifbxineTeX %<*etex> +\def\bxtb@def@detokenized#1#2{% + \edef#1{\detokenize{#2}}} +\def\bxtb@edef@detokenized#1#2{% + \edef\bxtb@args{\noexpand#1{#2}}% + \expandafter\bxtb@def@detokenized\bxtb@args} +\else %<*!etex> +\def\bxtb@def@detokenized{\bxtb@defdetok@a\def} +\def\bxtb@edef@detokenized{\bxtb@defdetok@a\edef} +\def\bxtb@defdetok@a#1#2#3{% + #1\bxtb@tmpa{#3}% + \expandafter\bxtb@defdetok@b\meaning\bxtb@tmpa\@nil#2} +\def\bxtb@defdetok@b#1>#2\@nil#3{\def#3{#2}} +\fi % + +%% \bxtb@ifeq@text +\def\bxtb@ifeq@text#1\bxtb@cmp@enda#2\bxtb@cmp@endb{% + \expandafter\expandafter\expandafter\bxtb@ifeqtx@a + \bxtb@stringify@ss{#2}\bxtb@cmp@endb#1\bxtb@cmp@enda} +\def\bxtb@ifeqtx@a#1\bxtb@cmp@endb#2\bxtb@cmp@enda{% + \expandafter\expandafter\expandafter\bxtb@ifeq@pstr + \bxtb@stringify@ss{#2}\bxtb@cmp@enda#1\bxtb@cmp@endb} + +%% \bxtb@ifeq@str#1#2 +\def\bxtb@ifeq@str#1\bxtb@cmp@enda#2\bxtb@cmp@endb{% + \expandafter\expandafter\expandafter\bxtb@ifeqstr@a + \bxtb@detokenize@ss{#2}\bxtb@cmp@endb#1\bxtb@cmp@enda} +\def\bxtb@ifeqstr@a#1\bxtb@cmp@endb#2\bxtb@cmp@enda{% + \expandafter\expandafter\expandafter\bxtb@ifeq@pstr + \bxtb@detokenize@ss{#2}\bxtb@cmp@enda#1\bxtb@cmp@endb} + +%% \bxtb@ifeq@pstr +\def\bxtb@ifeq@pstr#1\bxtb@cmp@enda#2\bxtb@cmp@endb{% + \bxtb@ifstrempty{#1}% + {\bxtb@ifstrempty{#2}}% + {\bxtb@ifstrempty{#2}{\@secondoftwo}% + {\bxtb@ifeqps@a#1\bxtb@cmp@enda#2\bxtb@cmp@endb}}} +\def\bxtb@ifeqps@a#1#2\bxtb@cmp@enda#3#4\bxtb@cmp@endb{% + \bxIfx{#1#3}% + {\bxtb@ifeq@pstr#2\bxtb@cmp@enda#4\bxtb@cmp@endb}% + {\@secondoftwo}} +\def\bxtb@cmp@enda{\bxtb@cmp@enda@} +\def\bxtb@cmp@endb{\bxtb@cmp@endb@} + +%% \bxtb@space@subst +\def\bxtb@space@subst#1 #2\bxtb@ss@endb{% + \bxtb@ifstrempty{#2}{\bxtb@spcsub@a#1\bxtb@ss@endb}% + {\bxtb@space@subst#1\space#2\bxtb@ss@endb}} +\def\bxtb@spcsub@a#1\bxtb@ss@enda#2\bxtb@ss@endb{\space#1} +\def\bxtb@ss@enda{\bxtb@ss@enda@} +\def\bxtb@ss@endb{\bxtb@ss@endb@} + +%% \bxtb@combine@ss +\def\bxtb@combine@ss#1#2{% + \expandafter\expandafter\expandafter\bxtb@space@subst + #1{#2}\bxtb@ss@enda{} \bxtb@ss@endb} +\def\bxtb@detokenize@ss{% + \romannumeral-`\a\bxtb@combine@ss\bxDetokenize} +\def\bxtb@stringify@ss{% + \romannumeral-`\a\bxtb@combine@ss\bxStringify} + +%%<+> \bxCsNoexpand{} +\newcommand*\bxCsNoexpand[1]{% + \expandafter\noexpand\csname#1\endcsname} + +%--------------------------------------- 6. Import from etoolbox + +%% \bxtb@import{\CSA \CSB ...} +% [e-TeX] Aliases each of macros to a new name with 'bx' prefixed. +% [non-e-TeX] Adds the prefixed name to the function check list. +\bxPreamble\def\bxtb@import#1{% + \bxtb@listmake@do + \@tfor\bxtb@tmpa:=#1\do{\expandafter\bxtb@importcmd\bxtb@tmpa}} +\bxPreamble\def\bxtb@importcmd#1{% + \begingroup + \expandafter\bxtb@importcmd@a\string#1\@nil + \endgroup} +\bxPreamble\def\bxtb@importcmd@a#1#2#3\@nil{% + \@tempcnta`#2 \@tempcntb\@tempcnta + \ifnum 96<\@tempcntb \ifnum 123>\@tempcntb + \advance\@tempcntb-32 \fi\fi + \uccode\@tempcnta\@tempcntb + \uppercase{\edef\bxtb@tmpa{#2}}% + \expandafter\bxtb@importcmd@b\csname bx\bxtb@tmpa#3% + \expandafter\endcsname\csname #2#3\endcsname} + +%% \bxtb@provide{\CSA \CSB ...} +% [e-TeX] Does nothing. +% [non-e-TeX] Adds the name to the function check list. +\bxPreamble\def\bxtb@provide#1{% + \bxtb@listmake@do + \@tfor\bxtb@tmpa:=#1\do{\expandafter\bxtb@providecmd\bxtb@tmpa}} + +\ifbxineTeX %<*etex> +%% Load etoolbox. +\RequirePackage{etoolbox}\relax +%% +\bxPreamble\def\bxtb@importcmd@b#1#2{\global\let#1#2} +\bxPreamble\def\bxtb@providecmd#1{} + +\else %<*!etex> +%% +\bxPreamble\let\bxtb@provided\@empty +\bxPreamble\def\bxtb@importcmd@b#1#2{% + \xdef\bxtb@provided{\bxtb@provided\do#1}} +\bxPreamble\def\bxtb@providecmd#1{% + \xdef\bxtb@provided{\bxtb@provided\do#1}} + +\fi % + +\bxtb@import{% +%%==== Here is a list of commands imported to bx* namespace. +%% For such commands, bxtoolbox provides compatible but not equivalent +%% commands when e-TeX extension is not available, under the same +%% 'bx'-prefixed name. + \newrobustcmd \renewrobustcmd \providerobustcmd %2.1 + \robustify %2.2 + \csuse \csshow %3.1.1 + \ifcsdef \ifcsundef %3.6.1 +} +\bxtb@provide{% +%% For the following commands, bxtoolbox provides equivalent commands +%% for non-e-TeX environment under the same name as in etoolbox. + \AfterPreamble \AtEndPreamble \AfterEndPreamble %2.5 + \AfterEndDocument + \csdef \csgdef \csedef \csxdef %3.1.1 + \cslet \letcs \csletcs \undef \csundef + \appto \gappto \eappto \xappto %3.3.1 + \csappto \csgappto \cseappto \csxappto + \preto \gpreto \epreto \xpreto %3.3.2 + \cspreto \csgpreto \csepreto \csxpreto + \newbool \providebool \booltrue \boolfalse %3.5.1 + \setbool \ifbool \notbool + \newtoggle \providetoggle \toggletrue \togglefalse %3.5.2 + \settoggle \iftoggle \nottoggle + \ifdef \ifundef %3.6.1 + \ifstrequal \ifstrempty %3.6.2 +} + +\ifbxineTeX %<*etex> +%% When the engine is eTeX, stop reading here. +\bxUnsetDummyIfs +\expandafter\endinput +\fi % +%--------------------------------------- 7. etoolbox compatible functions + +%% error messages +\def\bxtb@err@ukbool#1{\bxtb@error + {\bxtb@@bs if#1 undefined}\@eha} +\def\bxtb@err@ukbval#1{\bxtb@error + {Invalid boolean value '#1'}\@eha} +\def\bxtb@err@aetgl#1{\bxtb@error + {Toggle '#1' already defined}\@eha} +\def\bxtb@err@uktgl#1{\bxtb@error + {Toggle '#1' undefined}\@eha} +\def\bxtb@err@nomcr#1{\bxtb@error + {\string#1 is not a macro}\@eha} + +%%<+> \cslet +%%<+> \letcs +%%<+> \csletcs +\bxtb@robustlet\cslet\bxtb@cslet +\bxtb@robustlet\letcs\bxtb@letcs +\bxtb@robustlet\csletcs\bxtb@csletcs + +%%<+> \bxNewrobustcmd +%%<+> \bxRenewrobustcmd +%%<+> \bxProviderobustcmd +\newcommand\bxNewrobustcmd{} +\DeclareRobustCommand*\bxNewrobustcmd{% + \bxtb@dclrobustcmd@a\bxtb@ifnewdefok} +\def\bxtb@dclrobustcmd@a#1{% + \@ifstar{\bxtb@dclrobustcmd@b#1{*}}{\bxtb@dclrobustcmd@b#1{}}} +\def\bxtb@dclrobustcmd@b#1#2#3{% + #1#3{\DeclareRobustCommand#2#3}{\bxtb@skip@new@cmd}} +\bxNewrobustcmd*\bxRenewrobustcmd{% + \bxtb@dclrobustcmd@a\bxtb@ifrenewdefok} +\bxNewrobustcmd*\bxProviderobustcmd{% + \bxtb@dclrobustcmd@a\bxtb@ifprovidedefok} + +%%<+> \bxRobustify +\bxNewrobustcmd*\bxRobustify[1]{% + \ifundef{#1}{\bxtb@err@nomcr#1} + {\bxtb@ifdefmacro{#1}% + {\begingroup + \expandafter\bxtb@robustify@a + \csname\bxtb@name@cs#1\space\endcsname#1}% + {\bxtb@err@nomcr#1}}} +\def\bxtb@robustify@a#1#2{% + \global\let\bxtb@rbf@do\@empty + \let\bxtb@tmpa#2\let#2\@undefined + \let\bxtb@tmpb#1\let#1\@undefined + \DeclareRobustCommand*#2{}% + \ifx#2\bxtb@tmpa + \bxtb@warn{\string#2 is already robust}% + \else\ifx\bxtb@tmpb\relax + \global\let\bxtb@rbf@tmpa#2% + \gdef\bxtb@rbf@do{\let#1#2\let#2\bxtb@rbf@tmpa}% + \else \bxtb@error{Failed to robustify \string#1}\@ehc + \fi\fi + \endgroup \bxtb@rbf@do} + +%%<+> \csdef +%%<+> \csedef +%%<+> \csgdef +%%<+> \csxdef +\bxNewrobustcmd*\csdef[1]{\expandafter\def\csname #1\endcsname} +\bxNewrobustcmd*\csedef[1]{\expandafter\edef\csname #1\endcsname} +\bxNewrobustcmd*\csgdef[1]{\expandafter\gdef\csname #1\endcsname} +\bxNewrobustcmd*\csxdef[1]{\expandafter\xdef\csname #1\endcsname} + +%%<+> \undef +%%<+> \csundef +\bxNewrobustcmd*\undef[1]{\let#1\@undefined} +\bxNewrobustcmd*\csundef[1]{% + \expandafter\let\csname #1\endcsname\@undefined} + +%%<+> \ifdef\CS{}{} +%%<+> \ifundef\CS{}{} +%%<+> \bxIfcsdef{}{}{} +%%<+> \bxIfcsundef{}{}{} +\newcommand*\ifdef[1]{% + \ifx#1\@undefined \expandafter\@secondoftwo + \else \expandafter\@firstoftwo + \fi} +\newcommand*\ifundef[1]{% + \ifx#1\@undefined \expandafter\@firstoftwo + \else \expandafter\bxtb@ifundef@a\expandafter#1% + \fi} +\def\bxtb@ifundef@a#1{% + \ifx#1\relax \expandafter\@firstoftwo + \else \expandafter\@secondoftwo + \fi} +\newcommand*\bxIfcsdef[1]{% + \bxCheckForMovingArgForTest{% + \begingroup\expandafter\endgroup + \expandafter\ifx\csname #1\endcsname\@undefined + \expandafter\@secondoftwo + \else \expandafter\@firstoftwo + \fi}} +\newcommand*\bxIfcsundef[1]{% + \bxCheckForMovingArgForTest{% + \begingroup\expandafter\expandafter\expandafter\endgroup + \expandafter\ifx\csname #1\endcsname\relax + \expandafter\@firstoftwo + \else \expandafter\@secondoftwo + \fi}} + +%%<+> \bxCsuse +\bxNewrobustcmd*\bxCsuse[1]{% + \bxIfcsdef{#1}{\csname #1\endcsname}{}} + +%%<+> \bxCsshow +\bxNewrobustcmd*\bxCsshow[1]{% + \bxIfcsdef{#1}{\expandafter\show\csname #1\endcsname}{}} + +%%<+> \appto +%%<+> \gappto +%%<+> \eappto +%%<+> \xappto +\bxNewrobustcmd*\appto{\bxtb@appto\@empty} +\bxNewrobustcmd*\gappto{\bxtb@appto\global} +\bxNewrobustcmd*\eappto{\bxtb@eappto\@empty} +\bxNewrobustcmd*\xappto{\bxtb@eappto\global} +\bxNewrobustcmd*\csappto[1]{\expandafter\appto\csname#1\endcsname} +\bxNewrobustcmd*\csgappto[1]{\expandafter\gappto\csname#1\endcsname} +\bxNewrobustcmd*\cseappto[1]{\expandafter\eappto\csname#1\endcsname} +\bxNewrobustcmd*\csxappto[1]{\expandafter\xappto\csname#1\endcsname} +\def\bxtb@eappto#1#2#3{% + \edef\bxtb@args{\noexpand#1\noexpand#2{#3}}% + \expandafter\bxtb@appto\bxtb@args} +\def\bxtb@appto#1#2#3{% + \begingroup + \ifx#2\@undefined \let#2\@empty \fi + \toks@\expandafter{#2#3}\xdef\bxtb@g@tmpa{\the\toks@}% + \endgroup #1\let#2\bxtb@g@tmpa} + +%%<+> \preto +%%<+> \gpreto +%%<+> \epreto +%%<+> \xpreto +\bxNewrobustcmd*\preto{\bxtb@preto\@empty} +\bxNewrobustcmd*\gpreto{\bxtb@preto\global} +\bxNewrobustcmd*\epreto{\bxtb@epreto\@empty} +\bxNewrobustcmd*\xpreto{\bxtb@epreto\global} +\bxNewrobustcmd*\cspreto[1]{\expandafter\preto\csname#1\endcsname} +\bxNewrobustcmd*\csgpreto[1]{\expandafter\gpreto\csname#1\endcsname} +\bxNewrobustcmd*\csepreto[1]{\expandafter\epreto\csname#1\endcsname} +\bxNewrobustcmd*\csxpreto[1]{\expandafter\xpreto\csname#1\endcsname} +\toksdef\bxtb@toksa=2 +\def\bxtb@epreto#1#2#3{% + \edef\bxtb@args{\noexpand#1\noexpand#2{#3}}% + \expandafter\bxtb@preto\bxtb@args} +\def\bxtb@preto#1#2#3{% + \begingroup + \ifx#2\@undefined \let#2\@empty \fi + \toks@\expandafter{#2}\bxtb@toksa{#3}% + \xdef\bxtb@g@tmpa{\the\bxtb@toksa\the\toks@}% + \endgroup #1\let#2\bxtb@g@tmpa} + +%%<+> \newbool +%%<+> \providebool +\bxNewrobustcmd*\newbool[1]{% + \expandafter\bxtb@newbool@a\csname if#1\endcsname} +\def\bxtb@newbool@a#1{\@ifdefinable#1{\newif#1}} +\bxNewrobustcmd*\providebool[1]{% + \@ifundefined{if#1}% + {\expandafter\newif\csname if#1\endcsname}{}} + +%%<+> \booltrue +%%<+> \boolfalse +%%<+> \setbool +% NB: Here \bxIfcsundef cannot be used because otherwise the use +% with \global would fail. +\bxNewrobustcmd*\booltrue[1]{% + \bxIfcsundefX{if#1}{\bxtb@clear@prefix\bxtb@err@ukbool{#1}}% + {\csname #1true\endcsname}} +\bxNewrobustcmd*\boolfalse[1]{% + \bxIfcsundefX{if#1}{\bxtb@clear@prefix\bxtb@err@ukbool{#1}}% + {\csname #1false\endcsname}} +\bxNewrobustcmd*\setbool[2]{% + \bxIfcsundefX{if#1}{\bxtb@clear@prefix\bxtb@err@ukbool{#1}}% + {\bxIfcsundefX{#1#2}{\bxtb@clear@prefix\bxtb@err@ukbval{#2}}% + {\csname #1#2\endcsname}}} + +%%<+> \ifbool +%%<+> \notbool +\@gobble{\if\if}% if-match hack +\newcommand*\ifbool[1]{% + \bxIfcsundefX{if#1}{\bxtb@err@ukbool{#1}\@gobbletwo}% + {\csname if#1\endcsname\expandafter\@firstoftwo + \else \expandafter\@secondoftwo + \fi}} +\newcommand*\notbool[1]{% + \bxIfcsundefX{if#1}{\bxtb@err@ukbool{#1}\@gobbletwo}% + {\csname if#1\endcsname\expandafter\@secondoftwo + \else \expandafter\@firstoftwo + \fi}} + +%%<+> \newtoggle +%%<+> \providetoggle +\bxNewrobustcmd*\newtoggle[1]{% + \bxIfcsdef{bxtb@TG/#1}{\bxtb@err@aetgl{#1}}% + {\cslet{bxtb@TG/#1}\bxtb@tgl@@false}} +\bxNewrobustcmd*\providetoggle[1]{% + \bxIfcsdef{bxtb@TG/#1}{}{\cslet{bxtb@TG/#1}\bxtb@tgl@@false}} +\let\bxtb@tgl@@true\@firstoftwo +\let\bxtb@tgl@@false\@secondoftwo + +%%<+> \toggletrue +%%<+> \togglefalse +%%<+> \settoggle +% NB: Here \bxIfcsdef cannot be used because otherwise the use +% with \global would fail. +\bxNewrobustcmd*\toggletrue[1]{% + \bxIfcsundefX{bxtb@TG/#1}{\bxtb@clear@prefix\bxtb@err@uktgl{#1}}% + {\cslet{bxtb@TG/#1}\bxtb@tgl@@true}} +\bxNewrobustcmd*\togglefalse[1]{% + \bxIfcsundefX{bxtb@TG/#1}{\bxtb@clear@prefix\bxtb@err@uktgl{#1}}% + {\cslet{bxtb@TG/#1}\bxtb@tgl@@false}} +\bxNewrobustcmd*\settoggle[2]{% + \bxIfcsundefX{bxtb@TG/#1}{\bxtb@clear@prefix\bxtb@err@uktgl{#1}}% + {\bxIfcsundefX{bxtb@tgl@@#2}{\bxtb@clear@prefix\bxtb@err@ukbval{#2}}% + {\csletcs{bxtb@TG/#1}{bxtb@tgl@@#2}}}} + +%%<+> \iftoggle +%%<+> \nottoggle +\newcommand*\iftoggle[1]{% + \bxIfcsundefX{bxtb@TG/#1}{\bxtb@err@uktgl{#1}\@gobbletwo}% + {\csname bxtb@TG/#1\endcsname}} +\newcommand*\nottoggle[1]{% + \bxIfcsundefX{bxtb@TG/#1}{\bxtb@err@uktgl{#1}\@gobbletwo}% + {\csname bxtb@TG/#1\endcsname\@secondoftwo\@firstoftwo}} + +%%<+> \ifstrequal{}{}{}{} +\newcommand*\ifstrequal{} +\bxRobustdef\ifstrequal#1#2{% + \bxCheckForMovingArgForTest{% + \bxtb@def@detokenized\bxtb@tmpx{#1}% + \bxtb@def@detokenized\bxtb@tmpy{#2}% + \bxIfx{\bxtb@tmpx\bxtb@tmpy}}} + +%%<+> \ifstrempty{}{}{} +\newcommand*\ifstrempty{} +\let\ifstrempty\bxtb@ifstrempty + +%% internal stuffs needed for hook commands +\bxPreamble\def\bxtb@prepare@bdhook#1#2{% + \bxNewrobustcmd*#1{\gappto#2}% + \newcommand*#2{}} +\def\bxtb@dispatch@bdhook#1#2{% + \let#1\@firstofone #2% + \bxRobustdef#1{\@notprerr\@gobble}\undef#2} + +%%<+> \AtEndPreamble +%%<+> \AfterPreamble +%%<+> \AfterEndPreamble +%%<+> \AfterEndDocument +\bxtb@prepare@bdhook\AtEndPreamble\@endpreamblehook +\bxtb@prepare@bdhook\AfterEndPreamble\@afterendpreamblehook +\bxtb@prepare@bdhook\AfterEndDocument\@afterenddocumenthook +\bxNewrobustcmd*\AfterPreamble{\AtBeginDocument} +\AtEndPreamble{\let\AfterPreamble\@firstofone} +\AfterEndPreamble{\undef\bxtb@dispatch@bdhook} +% +\preto\document{\endgroup + \bxtb@dispatch@bdhook\AtEndPreamble\@endpreamblehook + \begingroup} +\appto\document{% + \bxtb@dispatch@bdhook\AfterEndPreamble\@afterendpreamblehook + \ignorespaces} +% patch to \enddocument +\bxPreamble\def\bxtb@patch@enddocument{% + \expandafter\bxtb@patch@ed@a\enddocument\deadcycles\bxtb@end} +\bxPreamble\def\bxtb@patch@ed@a#1\deadcycles#2\bxtb@end{% + \bxtb@ifstrempty{#2}{\bxtb@patch@ed@fail}% + {\def\bxtb@tmpa{#1}\bxtb@patch@ed@b#2\bxtb@end}} +\bxPreamble\def\bxtb@patch@ed@b#1\deadcycles#2\bxtb@end{% + \bxtb@ifstrempty{#2}{\bxtb@patch@ed@c{#1}}% + {\bxtb@patch@ed@fail}} +\bxPreamble\def\bxtb@patch@ed@c#1{% + \appto\bxtb@tmpa{\let\AfterEndDocument\@firstofone + \@afterenddocumenthook + \deadcycles#1}% + \let\bxtb@org@enddocument\enddocument + \let\enddocument\bxtb@tmpa} +\bxPreamble\def\bxtb@patch@ed@fail{% + \bxtb@warn{\string\AfterEndDocument\space is set disabled}% + \bxRobustdef\AfterEndDocument##1{\bxtb@error + {\string\AfterEndDocument\space is now disabled}\@eha}} +\bxtb@patch@enddocument + +%--------------------------------------- 8. Epilogue +\def\do#1{% + \ifx#1\@undefined \bxtb@warn{\string#1 not yet implemented}\fi} +\bxtb@provided +\bxUnsetDummyIfs +\endinput +%% EOF diff --git a/Master/texmf-dist/tex/latex/bxbase/bxtoolbox.sty b/Master/texmf-dist/tex/latex/bxbase/bxtoolbox.sty new file mode 100644 index 00000000000..4f1ee3b8319 --- /dev/null +++ b/Master/texmf-dist/tex/latex/bxbase/bxtoolbox.sty @@ -0,0 +1,27 @@ +%% +%% This is file 'bxtoolbox.sty'. +%% +%% Copyright (c) 2017 Takayuki YATO (aka. "ZR") +%% GitHub: https://github.com/zr-tex8r +%% Twitter: @zr_tex8r +%% +%% This package is distributed under the MIT License. +%% + +%% file declaration +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{bxtoolbox}[2017/05/29 v1.1 BX developers' toolbox] +\def\bxtb@pkgname{bxtoolbox} + +%--------------------------------------- main + +%% load submodules +\providecommand*\bxRequireDefinition[1]{% + \def\bx@@def{def}\@onefilewithoptions{#1}[][]\bx@@def} +\bxRequireDefinition{bxtoolbox} +\bxRequireDefinition{bxtoolbox-ext} +\bxRequireDefinition{bxtoolbox-ja} + +%--------------------------------------- all done +\endinput +%% EOF diff --git a/Master/texmf-dist/tex/latex/bxbase/bxucs.sty b/Master/texmf-dist/tex/latex/bxbase/bxucs.sty deleted file mode 100644 index 39d42824f0e..00000000000 --- a/Master/texmf-dist/tex/latex/bxbase/bxucs.sty +++ /dev/null @@ -1,109 +0,0 @@ -% -% bxucs.sty -% - -%%%% package declaration -\NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{bxucs}[2008/03/28 v0.2 BX Unicode output] - -%%%% preparation -\RequirePackage{bxbase} - -%%%% error messages -\def\bxus@pkgname{bxucs} -\def\bxus@error{\PackageError\bxus@pkgname} -\def\bxus@err@inf#1{\bxus@error - {extra characters after number}% - {I ignore such characters}} -\def\bxus@err@nousf{\bxus@error - {Unicode subfont encoding not declared\MessageBreak - for family '\f@family'}\@ehc} - -%%%% declare encoding 'USF' -% There must be at least one valid font shape in USF encoding and is set -% in \DeclareFontSubstitution properly; otherwise an error will occur at -% the beginning of document. Here we use the value of 'error font' as -% dummy default font of USF encoding. -\DeclareFontEncoding{USF}{}{} -\bgroup \escapechar\m@ne \error@fontshape - \DeclareFontFamily{USF}{\f@family}{} - \global\expandafter\let - \csname USF/\f@family/\f@series/\f@shape\expandafter\endcsname - \csname \f@encoding/\f@family/\f@series/\f@shape\endcsname - \xdef\bx@nxt{\noexpand\DeclareFontSubstitution - {USF}{\f@family}{\f@series}{\f@shape}} -\egroup \bx@nxt - -%%%% \USFDeclareFontShape{}{} -% is a range list of available Unicode-row-numbers. -\def\USFDeclareFontShape#1#2{% - \edef\bx@nxt{\uppercase{\def\noexpand\bxus@dfs@range{#2}}}% - \edef\bxus@dfs@fam{#1}\bx@nxt - \ifx\bxus@dfs@range\@empty \def\bxus@dfs@range{00-FF}\fi - \afterassignment\bxus@decl@fontshape\def\bxus@dfs@body##1} -\def\bxus@decl@fontshape{% - \DeclareFontFamily{USF}{\bxus@dfs@fam}{\relax}% make last arg non-empty - {\let\bxus@do\bxus@dfs@do\bxus@hexrange\bxus@dfs@range}} -\def\bxus@dfs@do{% - \bxToHexTwo\@tempcnta \bxToLower\bxHex\edef\guz{\bxRes}% - \global\expandafter\let - \csname bxus@U/\bxus@dfs@fam/\bxRes\endcsname=t% - \DeclareFontFamily{USF}{\bxus@dfs@fam=U\bxRes}{}% - \bxDebug{font family \bxus@dfs@fam=U\bxRes\space loaded}% - \edef\USFShape{% - \noexpand\DeclareFontShape{USF}{\bxus@dfs@fam=U\bxRes}}% - \bxus@dfs@body\bxRes} - -%%%% \bx@Ux@ucs -\def\bx@Ux@ucs{% code value is given in \bxUcv - \bxus@loadfontdef - \ifnum\bxUcv<\p@% \p@ equals 65536 - \bxToHexFour\bxUcv \expandafter\bxus@uxh@a\bxHex\@nil - \else \expandafter\bx@UI \fi} - -%%%% \bx@Uxh@ucs -\def\bx@Uxh@ucs#1{% - \bxus@loadfontdef\edef\bxHex{#1}% - \expandafter\bxus@uxh@a\bxHex\@nil} -\def\bxus@uxh@a#1#2#3#4\@nil{% - \bxDebug{char "\bxHex}% - \lowercase{\bxus@uxh@b{#1#2}}{#3#4}} -\def\bxus@uxh@b#1#2{% - \bgroup - \expandafter\ifx\csname bxus@U/\f@family/#1\endcsname\relax\else - \fontencoding{USF}\fontfamily{\f@family=U#1}\selectfont - \@tempcnta="#2\relax\bxus@chkchr - \ifbxOk \char\@tempcnta \aftergroup\@gobble \fi - \fi - \egroup \bxus@uxh@x} % this \bxus@uxh@x may be gobbled -\def\bxus@uxh@x{% - \bxDebug{fallback}\bx@UIh\bxHex} - -%%%% \bxus@chkchr -\def\bxus@chkchr{% - \iffontchar\font\@tempcnta \bxOktrue \else \bxOkfalse \fi} -\ifnum\bxEngineTypeY=\z@ -\def\bxus@chkchr{\bxOktrue} -\fi - -%%%% \bxus@loadfontdef -\def\bxus@loadfontdef{% - \expandafter\ifx\csname USF+\f@family\endcsname\relax - \begingroup \let\typeout\@font@info \escapechar\m@ne - \def\f@encoding{USF}\try@load@fontshape - \endgroup\fi - \expandafter\ifx\csname USF+\f@family\endcsname\@empty - \bxus@err@nousf \expandafter\bxus@skiptonil\fi} -\def\bxus@skiptonil#1\@nil{} - -%%%% \bxus@hexrange{} -\def\bxus@hexrange#1{% - \@for\bxus@u:=#1\do{\expandafter\bxus@hexrange@a\bxus@u--\@nil}} -\def\bxus@hexrange@a#1-#2-#3\@nil{% - \if-#2-\@tempcnta"#1\relax\bxus@do - \else\@tempcnta"#1\@tempcntb"#2\relax\expandafter\bxus@hexrange@b\fi} -\def\bxus@hexrange@b{% - \@whilenum\@tempcnta<\@tempcntb\do{\bxus@do\advance\@tempcnta\@ne}% - \bxus@do} - -%% EOF diff --git a/Master/texmf-dist/tex/latex/bxbase/bxutf8.def b/Master/texmf-dist/tex/latex/bxbase/bxutf8.def index 1422552e095..9fd21684250 100644 --- a/Master/texmf-dist/tex/latex/bxbase/bxutf8.def +++ b/Master/texmf-dist/tex/latex/bxbase/bxutf8.def @@ -1,34 +1,58 @@ +%% +%% This is file 'bxutf8.def'. +%% % -% bxutf8.def -% -%%%% package declarations -\ProvidesFile{bxutf8.def}[2010/05/05 v0.5 BX UTF-8 input encoding] +%% file declaration +\ProvidesFile{bxutf8.def}[2017/05/29 v1.1 BX UTF-8 input encoding] % % Note: All definitions in this file should be local. +% This file should not spill any spaces or \par. % -%%%% preparation -% Here spaces are set back to valid. So great care must be taken +%% code guards +% Here spaces are set back to effective. So great care must be taken % so spaces should not be spilt out (in horizontal mode). \catcode32=10\relax -\expandafter\edef\csname bx@b@resetcatcodes\endcsname{% " . : @ - \catcode34=\the\catcode34\catcode46=\the\catcode46% - \catcode58=\the\catcode39\catcode64=\the\catcode64\relax}% -\catcode34=12 \catcode46=12 \catcode58=12 \catcode64=11 % +\edef\bxus@i@restore@codes{% + \catcode33=\the\catcode33% + \catcode34=\the\catcode34% + \catcode39=\the\catcode39% + \catcode45=\the\catcode45% + \catcode46=\the\catcode46% + \catcode47=\the\catcode47% + \catcode58=\the\catcode58% + \catcode63=\the\catcode63% + \catcode96=\the\catcode96% +\relax} +\catcode33=12 % +\catcode34=12 % <"> +\catcode39=12 % <'> +\catcode45=12 % <-> +\catcode46=12 % <.> +\catcode47=12 % +\catcode58=12 % <:> +\catcode63=12 % +\catcode96=12 % <`> +\g@addto@macro\bxus@i@restore@codes{% + \let\bxus@i@restore@codes\@undefined}% +% +%--------------------------------------- dynamic part +% % abort when this is first loaded after \begin{document} \def\bxus@i@error{\PackageError{inputenc}}% \ifx\@nodocument\relax \ifx\bxus@bxutf@loaded\@undefined - \bxus@i@error{cannot load `bxutf8' after \string\begin{document}}% - \@eha \bx@b@resetcatcodes\endinput\fi\fi + \bxus@i@error + {cannot load `bxutf8' after \string\begin{document}}\@eha + \bxus@i@restore@codes\endinput\fi\fi % -%%%% load 'utf8' encoding +%% load 'utf8' encoding \InputIfFileExists{utf8.def}{}% - {\bxus@i@error{input encoding `utf8' unavailable}% - \@eha \bx@b@resetcatcodes\endinput}% -\makeatletter + {\bxus@i@error{input encoding `utf8' unavailable}\@eha + \bxus@i@restore@codes\endinput}% +\makeatletter % is this needed?? %\@inpenc@test % This is done in utf8.def % -%%%% attach the hook +%% attach the hook \def\UTFviii@two@octets#1#2{\expandafter\bxus@choice \csname u8:#1\string#2\endcsname#1#2.@}% \def\UTFviii@three@octets#1#2#3{\expandafter\bxus@choice @@ -36,33 +60,21 @@ \def\UTFviii@four@octets#1#2#3#4{\expandafter\bxus@choice@four \csname u8:#1\string#2\string#3\string#4\endcsname#1#2#3#4@}% % -%%%% attach the hook (old version) -% * This hook was found to fail in pTeX. -% Here #1 is a control word of form \u8:. If it is -% defined in standard way of utf8.def, then it is dispatched; -% otherwise it is passed to \bxus@preproc. -%\def\UTFviii@defined#1{% -% \ifx#1\relax \bxus@preproc#1% -% \else\expandafter#1\fi}% -%%%% \bxus@preproc\CS -%\def\bxus@preproc#1{% -% \expandafter\bxus@preproc@a\string#1..\@nil}% -%\def\bxus@preproc@a#1:#2#3#4#5#6\@nil{% -% \if.#5\bxus@proc#2#3#4\else\bxus@err@uknbc\fi}% -% % When this file is reloaded, the 'static' part will be skipped. \ifx\bxus@bxutf@loaded\@undefined\else - \bx@b@resetcatcodes\endinput \fi + \bxus@i@restore@codes\endinput \fi \let\bxus@bxutf@loaded=t% % -%%---------- Beginning of static part +%--------------------------------------- static part % -%%%% error messages -\def\bxus@err@uknbc{\bxus@i@error{Unknown non-BMP character found}% +%% error messages +\def\bxus@err@uknbc{\bxus@i@error + {Unknown non-BMP character found}% {bxutf8 cannot handle non-BMP characters.}}% -\def\bxus@err@nodrv{\bxus@i@error{Unicode driver not found}\@ehb}% +\def\bxus@err@nodrv{\bxus@i@error + {Unicode driver not found}\@ehb}% % -%%%% make tables +%% make tables for 'nybble conversion' \def\bxus@fornbl{% \bxus@fornbl@a00001102203310411512613720821922A23B30C31D32E33FXXX}% \def\bxus@fornbl@a#1#2#3{% @@ -78,26 +90,26 @@ \lowercase{\expandafter\gdef\csname bxus@@!\endcsname{#2}}}}% \bxus@fornbl \@namedef{bxus@@.}{}% % -%%%% \bxcs@choice -%% Called in the form -%% \bxus@choice[\u8:??]??.@ (2-byte) or -%% \bxus@choice[\u8:???]???@ (3-byte) -%% where ?? is a (TF-8 byte string and [\u8:...] denotes a single -%% control word. This macro expands to the control word if it is -%% defined; otherwise expands to \bxus@proc. +%% \bxcs@choice +% Called in the form +% \bxus@choice[\u8:??]??.@ (2-byte) or +% \bxus@choice[\u8:???]???@ (3-byte) +% where ?? is a (TF-8 byte string and [\u8:...] denotes a single +% control word. This macro expands to the control word if it is +% defined; otherwise expands to \bxus@proc. \def\bxus@choice#1#2@{% \ifx#1\relax \bxus@proc#2% \else\expandafter#1\fi}% % -%%%% \bxus@choice@four +%% \bxus@choice@four \def\bxus@choice@four#1#2@{% \ifx#1\relax \bxus@prociv#2% \else\expandafter#1\fi}% % -%%%% \bxus@proc -%% When ??? is the UTF-8 string of U+XXXX (padded to length 3 with -%% a dot), then \bxus@proc@a??? fully expands to \bxUHex{XXXX}. -%% (\bxUHex should be robust.) +%% \bxus@proc +% When ??? is the UTF-8 string of U+XXXX (padded to length 3 with +% a dot), then \bxus@proc@a??? fully expands to \bxUHex{XXXX}. +% (\bxUHex should be robust.) \def\bxus@proc#1#2#3{% \expandafter\bxus@proc@b\csname bxus@@\string#1\expandafter\endcsname \csname bxus@@\string#2\expandafter\endcsname @@ -123,6 +135,8 @@ \def\bxus@proc@g#1\@nil#2\@nil{% \bxUHex{#2#1}}% % +%% \bxus@prociv +% The variant of \bxus@proc that is adapted to 4-octet sequences. \def\bxus@prociv#1#2#3#4{% \expandafter\bxus@prociv@a\csname bxus@@\string#1\expandafter\endcsname \csname bxus@@\string#2\expandafter\endcsname @@ -130,39 +144,39 @@ \csname bxus@@\string#4\endcsname}% \def\bxus@prociv@a#1#2#3#4{% \expandafter\expandafter\expandafter\bxus@prociv@b - \expandafter#3#4@#1#2} + \expandafter#3#4@#1#2}% \def\bxus@prociv@b#1@#2#3{% \expandafter\expandafter\expandafter\bxus@prociv@c - \expandafter#2#3#1@@} + \expandafter#2#3#1@@}% \def\bxus@prociv@c#1#2#3#4{% \expandafter\bxus@prociv@d\csname bxus@*#1#2\expandafter\endcsname - \csname bxus@*#3#4\endcsname} + \csname bxus@*#3#4\endcsname}% \def\bxus@prociv@d#1#2{% \expandafter\expandafter\expandafter\bxus@prociv@e - \expandafter#1#2} -\def\bxus@prociv@e#1#2#3@#4@{\bxus@prociv@f#3@#4#1#2@} + \expandafter#1#2}% +\def\bxus@prociv@e#1#2#3@#4@{\bxus@prociv@f#3@#4#1#2@}% \def\bxus@prociv@f#1#2#3#4{% \expandafter\bxus@prociv@g\csname bxus@*#1#2\expandafter\endcsname - \csname bxus@*#3#4\endcsname} + \csname bxus@*#3#4\endcsname}% \def\bxus@prociv@g#1#2{% \expandafter\expandafter\expandafter\bxus@prociv@h - \expandafter#1#2} -\def\bxus@prociv@h#1#2#3@#4@{\bxus@prociv@i#3@#4#1#2@} + \expandafter#1#2}% +\def\bxus@prociv@h#1#2#3@#4@{\bxus@prociv@i#3@#4#1#2@}% \def\bxus@prociv@i#1#2#3#4{% \expandafter\bxus@prociv@j\csname bxus@*#1#2\expandafter\endcsname - \csname bxus@*#3#4\endcsname} + \csname bxus@*#3#4\endcsname}% \def\bxus@prociv@j#1#2{% \expandafter\expandafter\expandafter\bxus@prociv@k - \expandafter#1#2} -\def\bxus@prociv@k#1#2@#3@{\bxUHex{#3#1#2}} - - - - -%%%% default (useless) Unicode driver -\providecommand*\bxUHex[1]{?\protect\bxus@err@nodrv}% -% -%%%% all done -\bx@b@resetcatcodes + \expandafter#1#2}% +\def\bxus@prociv@k#1#2@#3@{\bxUHex{#3#1#2}}% +% +% +%% default (useless) Unicode driver +% Note: this \bxUHex definition is used for check. +\providecommand*\bxUHex{\bxUHexDummyBxutf}% +\newcommand*\bxUHexDummyBxutf[1]{?\protect\bxus@err@nodrv}% +% +%--------------------------------------- all done +\bxus@i@restore@codes \endinput %% EOF diff --git a/Master/texmf-dist/tex/latex/bxbase/bxutf8x.def b/Master/texmf-dist/tex/latex/bxbase/bxutf8x.def index a703d5bfe94..972f392fd94 100644 --- a/Master/texmf-dist/tex/latex/bxbase/bxutf8x.def +++ b/Master/texmf-dist/tex/latex/bxbase/bxutf8x.def @@ -1,40 +1,54 @@ +%% +%% This is file 'bxutf8x.def'. +%% % -% bxutf8x.def -% -%%%% package declarations -\ProvidesFile{bxutf8x.def}[2008/04/06 v0.3 - BX UTF-8 input encoding (ucs ver.)] +%% file declaration +\ProvidesFile{bxutf8x.def}[2017/05/29 v1.1 BX extended utf8x input] % % Note: All definitions in this file should be local. +% This file should not spill any spaces or \par. % -%%%% preparation +%% code guards \catcode32=10\relax -\expandafter\edef\csname bx@b@resetcatcodes\endcsname{% " . : @ - \catcode34=\the\catcode34\catcode46=\the\catcode46% - \catcode58=\the\catcode39\catcode64=\the\catcode64\relax}% -\catcode34=12 \catcode46=12 \catcode58=12 \catcode64=11 % +\expandafter\edef\csname bxus@i@restore@codes\endcsname{% + \catcode34=\the\catcode34% <"> + \catcode46=\the\catcode46% <.> + \catcode58=\the\catcode58% <:> + \catcode64=\the\catcode64% <@> +\relax}% +\catcode34=12 % +\catcode46=12 % +\catcode58=12 % +\catcode64=11 % +\g@addto@macro\bxus@i@restore@codes{% + \let\bxus@i@restore@codes\@undefined}% +% +%--------------------------------------- dynamic part +% \def\bxus@i@error{\PackageError{inputenc}}% \ifx\@nodocument\relax \ifx\bxus@bxutfx@loaded\@undefined - \bxus@i@error{cannot load `bxutf8x' after \string\begin{document}}% - \@eha \bx@b@resetcatcodes\endinput\fi\fi + \bxus@i@error + {cannot load `bxutf8x' after \string\begin{document}}\@eha + \bxus@i@restore@codes\endinput\fi\fi % -%%%% load 'utf8x' encoding +%% load 'utf8x' encoding \InputIfFileExists{utf8x.def}{}% {\PackageError{inputenc}{input encoding `utf8x' unavailable}% {You must install `unicode' package to use it.}% - \bx@b@resetcatcodes\endinput}% + \bxus@i@restore@codes\endinput}% %\@inpenc@test % This is done in utf8.def % % When this file is reloaded, the 'static' part will be skipped. \ifx\bxus@bxutfx@loaded\@undefined\else - \bx@b@resetcatcodes \endinput \fi + \bxus@i@restore@codes \endinput \fi \let\bxus@bxutfx@loaded=t% % -%%---------- Beginning of static part +%--------------------------------------- Static part % -%%%% error messages -\def\bxus@err@nodrv{\bxus@i@error{Unicode driver not found}\@ehb}% +%% error messages +\def\bxus@err@nodrv{\bxus@i@error + {Unicode driver not found}\@ehb}% % %%%% \bxus@uc@char@notloaded % Hooked version of \uc@char@notloaded @@ -58,23 +72,25 @@ \def\bxus@uc@notloaderr#1#2#3{% \bxUInt{#1}}% \bxUInt should be robust % -%%%% attach the hook +%% attach the hook % Note that ucs.sty could be loaded after utf8x.def. \AtBeginDocument{% \let\uc@notloaderr\bxus@uc@notloaderr \let\uc@char@notloaded\bxus@uc@char@notloaded}% % -%%%% force ucs 'fasterrors' option switched on +%% force ucs 'fasterrors' option switched on % Heavy 'uninames' decoding process is of no use in presence of the hook, % and it causes unexpected result in use of pTeX. \AtBeginDocument{% \let\UnicodeOptionfasterrorsfalse\UnicodeOptionfasterrorstrue \UnicodeOptionfasterrorstrue}% % -%%%% default (useless) Unicode driver -\providecommand*\bxUInt[1]{?\protect\bxus@err@nodrv}% +%% default (useless) Unicode driver +% Note: this \bxUHex definition is used for check. +\providecommand*\bxUInt{\bxUIntDummyBxutfx}% +\newcommand*\bxUIntDummyBxutfx[1]{?\protect\bxus@err@nodrv}% % -%%%% all done -\bx@b@resetcatcodes +%--------------------------------------- all done +\bxus@i@restore@codes \endinput %% EOF diff --git a/Master/texmf-dist/tex/latex/bxbase/zxbase.sty b/Master/texmf-dist/tex/latex/bxbase/zxbase.sty index be7e5189fcf..4d5b2baef31 100644 --- a/Master/texmf-dist/tex/latex/bxbase/zxbase.sty +++ b/Master/texmf-dist/tex/latex/bxbase/zxbase.sty @@ -1,21 +1,27 @@ -% -% zxbase.sty -% -%%%% package declaration +%% +%% This is file 'zxbase.sty'. +%% +%% Copyright (c) 2017 Takayuki YATO (aka. "ZR") +%% GitHub: https://github.com/zr-tex8r +%% Twitter: @zr_tex8r +%% +%% This package is distributed under the MIT License. +%% + +%% package declaration \NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{zxbase}[2009/11/16] +\ProvidesPackage{zxbase}[2017/05/29 v1.1] \RequirePackage{ifxetex} \RequireXeTeX -%%%% preparations +%% preparations \RequirePackage{bxbase} \def\zx@pkgname{zxbase} -\def\zx@error{\PackageError\zx@pkgname} -\def\zx@warn{\PackageWarningNoLine\zx@pkgname} -%%------ generic family detection +%--------------------------------------- generic family detection -%%%% constants \zxSpecFamily, \zxRMFamily, etc. +%%<+> \zxSpecFamily / \zxRMFamily / \zxSFFamily / \zxTTFamily +% The constants signifying each generic family. % These values can be considered as fixed, so you can say i.e. % "\ifnum\zxGFFlag<\zxSFFamily \else \fi" \chardef\zxSpecFamily=0 @@ -23,7 +29,7 @@ \chardef\zxSFFamily=2 \chardef\zxTTFamily=3 -%%%% \zx@set@genfamflag +%% \zx@set@genfamflag % A patch to be inserted to \selectfont. This makes \selectfont % set a right \zx..Family constant to \zxGFFlag. \def\zx@set@genfamflag{% @@ -40,7 +46,7 @@ \zx@set@gff@get\zx@genfam#1% \ifx\zx@genfam\zx@curfam \let\zxGFFlag#2\fi} -%%%% \zxBDHookGenFamFlag +%%<+> \zxBDHookGenFamFlag \def\zxBDHookGenFamFlag{\zx@bdhook@genfamflag@do} \@onlypreamble\zx@bdhook@genfamflag@do \def\zx@bdhook@genfamflag@do{% @@ -51,8 +57,11 @@ \expandafter\def\expandafter#1\expandafter{% \expandafter\zx@set@genfamflag#1}} -%%------ Forging pTeX direction primitives +%--------------------------------------- forge pTeX primitives +% It is not totally safe, but is required so as to make +% the 'ajmacros' package work. +%%<+> \zxBDHookForgepTeXDir \def\zxBDHookForgepTeXDir{\zx@bdhook@forgeptexdir@do} \@onlypreamble\zx@bdhook@forgeptexdir@do \def\zx@bdhook@forgeptexdir@do{% @@ -65,14 +74,20 @@ \expandafter\let\csname if#1\expandafter\endcsname \csname if#2\endcsname \fi} -%%------ Forcing to read pLaTeX packages +%--------------------------------------- load pLaTeX packages +%%<+> switch 'zxPPInUTFEight' \newif\ifzxPPInUTFEight + +%% variables \newif\ifzx@jisenc -\def\zx@err@ukenc#1{\zx@error{File '#1' is in unknown encoding}% -{The file must be encoded in ISO-2022-JP or UTF-8.}} -%%%% \zxRequirepLaTeXPackage +%% errors +\def\zx@err@ukenc#1{\PackageError\zx@pkgname + {File '#1' is in unknown encoding}% + {The file must be encoded in ISO-2022-JP or UTF-8.}} + +%%<+> \zxRequirepLaTeXPackage{} \@onlypreamble\zxRequirepLaTeXPackage \def\zxRequirepLaTeXPackage#1{% \ifzxPPInUTFEight \zx@jisencfalse @@ -82,17 +97,17 @@ \fi \let\NeedsTeXFormat\zx@mute@NeedsTeXFormat \ifzx@jisenc \XeTeXdefaultencoding ISO-2022-JP\relax \fi - \RequirePackage{#1}% + \RequirePackage{#1}\relax \ifzx@jisenc \XeTeXdefaultencoding auto\relax \fi \let\NeedsTeXFormat\zx@org@NeedsTeXFormat } -%%%% \zx@mute@NeedsTeXFormat +%% \zx@mute@NeedsTeXFormat \def\zx@mute@NeedsTeXFormat#1{\@ifnextchar[{\zx@mute@ntf@a}{\relax}} \def\zx@mute@ntf@a[#1]{\relax} \let\zx@org@NeedsTeXFormat\NeedsTeXFormat -%%%% \zx@checkjisorutfeight{} +%% \zx@checkjisorutfeight{} % Decides whether is encoded in JIS or UTF-8 and sets to \zx@joru. % 0:binary; 1:JIS; 2:UTF-8; 3:US-ASCII \def\zx@checkjisorutfeight#1{% @@ -127,25 +142,8 @@ %%<*> \platexpackagesinunicode \@onlypreamble\platexpackagesinunicode -\let\platexpackagesinunicode\zxPPInUTFEight - -%%------ trashed stuff - -%\def\zxRemoveFSSuffix#1{% -% \edef\zx@tmpx{#1}\bxOkfalse -% \let\bxRes\@empty \let\zx@chunk\@gobble -% \expandafter\zx@rem@fssfx@a\zx@tmpx(@\@nil} -%\def\zx@rem@fssfx@a#1(#2#3\@nil{% -% \ifx @#2\edef\bxRes{\bxRes\zx@chunk\@empty}% -% \def\zx@nxt{\zx@rem@fssfx@b#1@)@\@nil}% -% \else \edef\bxRes{\bxRes\zx@chunk(}\def\zx@chunk{#1}% -% \def\zx@nxt{\zx@rem@fssfx@a#2#3\@nil}% -% \fi \zx@nxt} -%\def\zx@rem@fssfx@b#1)@#2\@nil{% -% \ifx\bxRes\@empty\else -% \ifx @#2@\else \bxAssign\@tempcnta0#1\relax \fi \fi -% \ifbxOk\else \let\bxRes\zx@tmpx \fi} - -%%------ all done +\newcommand*\platexpackagesinunicode{\zxPPInUTFEighttrue} + +%--------------------------------------- all done \endinput %% EOF -- cgit v1.2.3