diff options
author | Norbert Preining <norbert@preining.info> | 2019-09-02 13:46:59 +0900 |
---|---|---|
committer | Norbert Preining <norbert@preining.info> | 2019-09-02 13:46:59 +0900 |
commit | e0c6872cf40896c7be36b11dcc744620f10adf1d (patch) | |
tree | 60335e10d2f4354b0674ec22d7b53f0f8abee672 /language/japanese/BX/bxjscls |
Initial commit
Diffstat (limited to 'language/japanese/BX/bxjscls')
-rw-r--r-- | language/japanese/BX/bxjscls/LICENSE | 28 | ||||
-rw-r--r-- | language/japanese/BX/bxjscls/README-ja.md | 279 | ||||
-rw-r--r-- | language/japanese/BX/bxjscls/README.md | 146 | ||||
-rw-r--r-- | language/japanese/BX/bxjscls/bxjscls-manual.pdf | bin | 0 -> 635563 bytes | |||
-rw-r--r-- | language/japanese/BX/bxjscls/bxjscls-manual.tex | 1664 | ||||
-rw-r--r-- | language/japanese/BX/bxjscls/bxjscls.dtx | 11608 | ||||
-rw-r--r-- | language/japanese/BX/bxjscls/bxjscls.ins | 16 | ||||
-rw-r--r-- | language/japanese/BX/bxjscls/bxjscls.pdf | bin | 0 -> 1051568 bytes |
8 files changed, 13741 insertions, 0 deletions
diff --git a/language/japanese/BX/bxjscls/LICENSE b/language/japanese/BX/bxjscls/LICENSE new file mode 100644 index 0000000000..4e794feb3a --- /dev/null +++ b/language/japanese/BX/bxjscls/LICENSE @@ -0,0 +1,28 @@ +The BSD 2-Clause License + +Copyright 1995-1999 ASCII Corporation. +Copyright 1999-2016 Haruhiko Okumura +Copyright 2016-2019 Japanese TeX Development Community +Copyright 2013-2019 Takayuki YATO (aka. "ZR") +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, +this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/language/japanese/BX/bxjscls/README-ja.md b/language/japanese/BX/bxjscls/README-ja.md new file mode 100644 index 0000000000..5dce4a844e --- /dev/null +++ b/language/japanese/BX/bxjscls/README-ja.md @@ -0,0 +1,279 @@ +BXjscls パッケージバンドル +========================== + +LaTeX: 全エンジン対応日本語文書クラス集 + +奥村晴彦氏作製の [pLaTeX2e 新ドキュメントクラス] の和文文書クラス集を +拡張したもの。元のクラスは (u)pLaTeX 専用であるが、こちらは pdfLaTeX / +XeLaTeX / LuaLaTeX の上でも日本語処理パッケージと連携して使用すること +ができる。 + +[pLaTeX2e 新ドキュメントクラス]: +(http://oku.edu.mie-u.ac.jp/~okumura/jsclasses/) + +### 前提環境 + + * TeX エンジン: pdfTeX / XeTeX / LuaTeX / pTeX / upTeX / pTeX-ng + - e-TeX 拡張は必須でない + - XeTeX は 0.997 版以降が必要 + * フォーマット: LaTeX + * DVI ウェア: 不問 + * 必須パッケージ: + - keyval + - calc + - geometry + * standard 和文ドライバで連携するパッケージ: + - (pdf)LaTeX の場合: + CJK / bxcjkjatype(v0.2c以降) + - XeLaTeX の場合: + xeCJK(v3.0以降) / zxjatype(v0.6以降) + - LuaLaTeX の場合: + LuaTeX-ja + * その他、場合により必須となるパッケージ: + - type1cm : `magstyle` が `real`/`xreal` である場合 + - pxchfon(v0.5以降): pLaTeX で `jafont` を指定した場合 + - zxjafont(v0.2a以降): XeLaTeX で `jafont` を指定した場合 + * エンジンが (u)pTeX 以外で、かつ和文ドライバが standard 以外の場合、 + そのエンジンに対応する日本語処理パッケージが必要となる。 + +### 構成物 + + * `bxjscls-manual.pdf`: ユーザ向け説明書 + * `bxjscls-manual.tex`: 上項のソースファイル + * `bxjscls.dtx`: DocStrip ソースファイル + * `bxjscls.ins`: DocStrip インストーラファイル + * `bxjscls.pdf`: DocStrip 文書(ソースコード説明書) + +※アーカイブ中に DocStrip からの生成ファイル(`*.cls`/`*.def`、一覧は +次節に後掲)が含まれる場合もある。 + +### インストール + +本パッケージバンドルは DocStrip 形式ファイルの形で提供されている。 + +アーカイブに文書クラスファイル(`*.cls`/`*.def`)が含まれていない場合 +は、以下のコマンドを実行して生成する。 + + luatex bxjscls.ins + +このコマンドにより次のファイル群が生成される。 + + * `bxjsarticle.cls`: BXJS版 article クラスファイル + * `bxjsbook.cls`: BXJS版 book クラスファイル + * `bxjsreport.cls`: BXJS版 report クラスファイル + * `bxjsslide.cls`: BXJS版 slide クラスファイル + * `bxjsja-minimal.def`: minimal 和文ドライバファイル + * `bxjsja-standard.def`: standard 和文ドライバファイル + * `bxjsja-pandoc.def`: pandoc 和文ドライバファイル + * `bxjsja-modern.def`: modern 和文ドライバファイル + * `bxjscompat.sty`: bxjscompat パッケージファイル + * `bxjscjkcat.sty`: bxjscjkcat パッケージファイル + * `bxjspandoc.sty`: bxjspandoc パッケージファイル + +その後、各ファイルを次の場所に移動する。 +(TDS 1.1 に従ったシステムの場合。) + + - `*.cls`/`*.def`/`*.sty` → $TEXMF/tex/latex/bxjscls/ + - `*.dtx`/`*.ins` → $TEXMF/source/latex/bxjscls/ + - `*.pdf`/`*.tex` → $TEXMF/doc/latex/bxjscls/ + +その後、(必要に応じて)`mktexlsr` を実行する。 + +#### (参考)説明書文書のコンパイル + +アーカイブに含まれる説明書の PDF 文書は以下のコマンドによって生成 +されたものである。 + + * `bxjscls-manual.pdf` ← `lualatex bxjscls-manual.tex` + * `bxjscls.pdf` ← `lualatex bxjscls.dtx` + +### 使用方法 + +ユーザ向け説明書 `bxjscls-manual.pdf` を参照されたい。 + +### ライセンス + +修正BSDライセンス(The BSD 2-Clause License)の下で配布される。 + +更新履歴 +-------- + + * Version 1.9h 〈2019/07/27〉 + - jsclasses の 2019/07/25 と同期。 + - バグ修正。 + * Version 1.9g 〈2019/06/23〉 + - バグ修正。 + * Version 1.9f 〈2019/03/10〉 + - Pandoc モードを最新の Pandoc に対応させる。 + * Version 1.9e 〈2019/01/13〉 + - XeTeX の場合の既定の IPAex フォントをファイル名指定にする。 + * Version 1.9d 〈2018/10/03〉 + - 原則的に和暦の処理を bxwareki パッケージに任せる。 + - バグ修正。 + * Version 1.9c 〈2018/09/04〉 + - pandoc 和文ドライバの Babel 対策を改良。 + - バグ修正。 + * Version 1.9b 〈2018/08/20〉 + - バグ修正。 + * Version 1.9a 〈2018/07/20〉 + - jsclasses の 2018/06/23 と同期。 + + `\jsTocLine` を新設。 + * Version 1.9 〈2018/04/19〉 + - 一部のオプションの名前を変更: + `use-zw`、`disguise-js`、`precise-text`、`simple-ja-setup` + * Version 1.8b 〈2018/04/14〉 + - bxjscjkcat を新しい upTeX に追随させる。 + - 新元号に関する何か。 + * Version 1.8a 〈2018/03/29〉 + - jsclasses の 2018/03/11 と同期。(仕様変更は無し。) + - バグ修正。 + * Version 1.8 〈2018/03/03〉 + - `textwidth`、`number-of-lines` オプションを新設。 + - `\setpagelayout+` 命令をを新設。 + - jlreq 文書クラスとの互換用のオプション(`fontsize` 等)を追加。 + - (u)pLaTeX 以外のエンジンでは常に `ja` オプションを明示することを + 推奨する。 + - 二文字フォント命令の使用の警告を少し冗長にした。 + - バグ修正。 + * Version 1.7c 〈2018/02/04〉 + - オプション `label-section` を新設。 + * Version 1.7b 〈2018/01/28〉 + - 和文パラメタ `units` を新設。 + - `jafont` オプションの丸括弧記法。 + - バグ修正。 + * Version 1.7a 〈2017/12/09〉 + - 〈試験的〉新元号対応の準備。`\jayear` 命令を追加。 + - `\@` の定義を修正。`fix-at-cmd` オプションを追加。 + * Version 1.7 〈2017/10/21〉 + - 和文空白命令(`\jaenspace` 等)を追加。 + - `everyparhook` オプションを新設。 + * Version 1.6b 〈2017/09/28〉 + - Pandoc モードでは bxcjkjatype に autotilde を付けない。 + * Version 1.6a 〈2017/09/24〉 + - `bxjspandoc` パッケージを新設。 + - Pandoc モードで起こる細かい不具合に対処した。 + * Version 1.6 〈2017/09/09〉 + - bxjsreport の継承元を jsbook + report から jsreport に変更した。 + - jsclasses の 2017/09/03 版と同期。 + * Version 1.5d 〈2017/07/07〉 + - バグ修正。 + * Version 1.5c 〈2017/06/10〉 + - `\jafontsize` 命令を追加。 + - 和文パラメタ `jis2004` を新設。 + - 和文パラメタ `font` を新設。 + - `jafont=auto` 設定で updmap.cfg を読む際に `kanjiEmbed` に加えて + `jaEmbed` も読み取る。 + - バグ修正。 + * Version 1.5b 〈2017/04/01〉 + - 全エンジンについて、`\>` で和欧文間空白を挿入するようにした。 + - `xkanjiskip-cmd` オプションを新設。 + - `nodvidriver` ドライバオプションを新設。 + - バグ修正。 + * Version 1.5a 〈2017/03/14〉 + - バグ修正。 + * Version 1.5 〈2017/03/11〉 + - jsreport の `layout=v2` 指定で、従来の jsbook + report に代わって、 + jsclasses で新設された jsreport のレイアウトを継承する。 + - pLaTeX-ng のためのエンジンオプション `platex-ng` を新設。 + - `chapterabstract` 環境を新設。 + - `hyperref-enc`、`whole-zw-lines` オプションを新設。 + - jsclasses の 2017/03/05 と同期。 + + `openleft` オプションを新設。 + + `\frontmatter`、`\backmatter` の仕様の変更。 + * Version 1.4 〈2017/02/03〉 + - `\zwapace` 命令を追加。 + - 数式中の和文出力をサポートした。 + - バグ修正。 + * Version 1.3a 〈2017/01/28〉 + - jsclasses の 2017/01/13 と同期。 + * Version 1.3 〈2016/11/01〉 + - bxjsbook について、水平マージンの量が jsbook と大きく異なると + いう不具合を修正した。同時に修正前のレイアウトを継続するための + オプション `layout` を新設した。 + - jsclasses の 2016/10/08 と同期。 + ※ページレイアウトの修正にはまだ追随てきていない。 + + `(no)jslogo` オプションを新設。`jslogo` 指定時は(jsclasses + の)jslogo パッケージを読みこむ。(既定は `nojslogo`。) + + bxjsslide の一部の節見出しのレイアウトを修正。 + + 和文用の微調整。 + * Version 1.2a 〈2016/08/17〉 + - fancyhdr パッケージに対する調整を入れた。 + - `fancyhdr`、`textwidth-limit`、`paragraph-mark` オプションを新設。 + - `\ascpt` 命令を新設した。 + * Version 1.2 〈2016/08/01〉 + - `geometry` オプションを新設した。 + - `dvi` オプションを新設した。 + - `\bf` や `\it` などの“二文字フォント命令”の使用に対して警告を + (現状では控えめに)出すようにする。この警告を制御するオプション + `(no)oldfontcommands` および `\(dis)allowoldfontcommands` 命令 + を新設した。 + - 万一“2.09 互換モード”で BXJS クラスが読み込まれた場合は致命的 + エラーとする。 + * Version 1.1f 〈2016/07/16〉 + - jsclasses の開発体制の変更に応じて、原作に関する記述を修正。 + - magstyle オプションの値の名前を jsclasses に合わせて変更。 + - 動く引数中で `\@` を用いた場合に aux ファイル中で後続の空白文字 + が消えてしまう不具合を修正。 + - graphics/color パッケージ対策で `nosetpagesize` をグローバルに + 指定した。 + * Version 1.1e 〈2016/05/28〉 + - `\subtitle` の定義を遅延させる。 + * Version 1.1d 〈2016/05/21〉 + - XeTeX でも「hyperref で `unicode` を既定で有効」にする。 + - `bigcode`/`nobigcode` オプションを追加。 + * Version 1.1c 〈2016/05/01〉 + - バグ修正。 + * Version 1.1b 〈2016/03/27〉 + - 〈試験的〉`precisetext` オプションを追加。 + * Version 1.1a 〈2016/02/20〉 + - `\jachar` 命令を追加。 + - バグ修正。 + * Version 1.1 〈2016/02/14〉 + - “Pandoc モード”および pandoc 和文ドライバを追加。 + - サブタイトル命令 `\subtitle` を追加。 + - 〈試験的〉modern 和文ドライバを追加。 + - 〈試験的〉補助パッケージ bxjscompat と bxjscjkcat を追加。 + * Version 1.0d 〈2015/11/21〉 + - バグ修正。 + * Version 1.0c 〈2015/10/18〉 + - バグ修正。 + * Version 1.0b 〈2015/09/07〉 + - 未知のオプションがあるとエラーになるという不具合(これだと + “グローバルオプション”が使えない)を修正した。 + - `ja(driver)` が非指定の場合はエンジンやドライバのオプションが + 無い場合のエラー・警告を抑止した。(v0.3 との互換性対策。) + - 別行立て数式で不要な警告が出ていたのを修正。 + * Version 1.0a 〈2015/08/23〉 + - `base`/`jbase` での Q 単位の指定に対応。 + - pdflatex 使用時に `\hypersetup` で和文文字を含む文書情報を + 指定可能にする。 + - バグ修正。 + * Version 1.0 〈2015/08/05〉 + - bxjsreport と bxjsslide クラスを提供する。 + - `jafont` オプションを追加。 + - `nopapersize` オプションを追加。 + - hyperref 対策を追加。 + - microtype 対策を追加。 + - `\ifdraft` の定義を遅延させる。 + - その他もろもろ。 + * Version 0.9 〈2013/10/03〉 + - LuaTeX-ja との連携をサポート。 + - `magstyle`、`(no)zw`、`(no)js` オプションを追加。 + - “和文ドライバ”の概念を採用して、ソースコードの構成を + 大幅に変更した。 + * Version 0.4 〈2013/08/03〉 + - CJK + bxcjkjatype との連携を追加。 + * Version 0.3a 〈2012/05/01〉 + - 一部の用紙サイズオプション(`b4paper` 等)で、縦と横の長さを + 逆に指定していたのを修正した。 + * Version 0.3 〈2010/08/15〉 + - (u)pLaTeX 用連携モジュールを追加。 + - `jbase` クラスオプションを追加。 + - `base`, `jbase`, `mag` を calc パッケージの数式で + 記述できるようにした。 + * Version 0.2 〈2009/08/15〉 + - 最初の公開版。 + +-------------------- +Takayuki YATO (aka. "ZR") +https://github.com/zr-tex8r diff --git a/language/japanese/BX/bxjscls/README.md b/language/japanese/BX/bxjscls/README.md new file mode 100644 index 0000000000..c0071f8824 --- /dev/null +++ b/language/japanese/BX/bxjscls/README.md @@ -0,0 +1,146 @@ +BXjscls Package +=============== + +LaTeX: Japanese document class collection for all major engines + +This package provides an extended version of the Japanese document +class collection provided by [jsclasses package]. While the original +version supports only pLaTeX and upLaTeX, the extended version also +supports pdfLaTeX, XeLaTeX and LuaLaTeX, with the aid of suitable +packages that provide capability of Japanese typesetting. + +[jsclasses package]: (https://www.ctan.org/pkg/jsclasses) + +### SYSTEM REQUIREMENTS + + * TeX engine: pdfTeX, XeTeX, LuaTeX, pTeX, upTeX or pTeX-ng. + - e-TeX extension is not needed. + - XeTeX must be of version 0.997 or later. + * TeX format: LaTeX. + * DVIware: Anything. + * Prerequisite packages: + - keyval + - calc + - geometry + * Packages that the standard ja-driver cooperates with: + - On (pdf)LaTeX: + CJK + bxcjkjatype (v0.2c+) + - On XeLaTeX: + xeCJK (v3.0+) + zxjatype (v0.6+) + - On LuaLaTeX: + LuaTeX-ja + * Other packages required on occasion: + - type1cm: when `magstyle` is `nomag`/`nomag*` + - pxchfon (v0.5+): when `jafont` is used on pLaTeX + - zxjafont (v0.2a+): when `jafont` is used on XeLaTeX + * When you use ja-drivers other than standard, you generally need + packages for processing Japanese documents that the employed + combination of the ja-driver and the engine supports. + +### PACKAGE CONTENT + + * `bxjscls-manual.pdf`: the user manual + * `bxjscls-manual.tex`: the source file for the above + * `bxjscls.dtx`: the DocStrip source file + * `bxjscls.ins`: the DocStrip installer file + * `bxjscls.pdf`: the DocStrip document (source code description) + +### INSTALLATION + +This package bundle is provided in the form of a DocStrip file. + +First, run the command to create some files: + + luatex bxjscls.ins + +This command will generate the following files: + + * `bxjsarticle.cls`: the BXJS-flavored article class file + * `bxjsbook.cls`: the BXJS-flavored book class file + * `bxjsreport.cls`: the BXJS-flavored report class file + * `bxjsslide.cls`: the BXJS-flavored slide class file + * `bxjsja-minimal.def`: the `minimal` ja-driver file + * `bxjsja-standard.def`: the `standard` ja-driver file + * `bxjsja-pandoc.def`: the `pandoc` ja-driver file + * `bxjsja-modern.def`: the `modern` ja-driver file + * `bxjscompat.sty`: the `bxjscompat` package file + * `bxjscjkcat.sty`: the `bxjscjkcat` package file + * `bxjspandoc.sty`: the `bxjspandoc` package file + +After that, move the files as follows (in a system compliant to +TDS 1.1): + + - `*.cls`/`*.def`/`*.sty` → $TEXMF/tex/latex/bxjscls/ + - `*.dtx`/`*.ins` → $TEXMF/source/latex/bxjscls/ + - `*.pdf`/`*.tex` → $TEXMF/doc/latex/bxjscls/ + +And rehash your TEXMF trees if necessary. + +### USAGE + +Please refer to the user manual `bxjscls-manual.pdf`. +Unfortunately, the manual is available only in Japanese.... + +### LICENSE + +This package is distributed under the BSD 2-Clause License. + +Revision History +---------------- + + * Version 1.9h 〈2019/07/27〉 + * Version 1.9g 〈2019/06/23〉 + * Version 1.9f 〈2019/03/10〉 + * Version 1.9e 〈2019/01/13〉 + * Version 1.9d 〈2018/10/03〉 + * Version 1.9c 〈2018/09/04〉 + * Version 1.9b 〈2018/08/20〉 + * Version 1.9a 〈2018/07/20〉 + - Sync with jsclasses 2018/06/23. + * Version 1.9 〈2018/04/19〉 + * Version 1.8b 〈2018/04/14〉 + * Version 1.8a 〈2018/03/29〉 + - Sync with jsclasses 2018/03/11. + * Version 1.8 〈2018/03/03〉 + * Version 1.7c 〈2018/02/04〉 + * Version 1.7b 〈2018/01/28〉 + * Version 1.7a 〈2017/12/09〉 + * Version 1.7 〈2017/10/21〉 + * Version 1.6b 〈2017/09/28〉 + * Version 1.6a 〈2017/09/24〉 + * Version 1.6 〈2017/09/09〉 + - Sync with jsclasses 2017/09/03. + * Version 1.5d 〈2017/07/07〉 + * Version 1.5c 〈2017/06/10〉 + * Version 1.5b 〈2017/04/01〉 + * Version 1.5a 〈2017/03/14〉 + * Version 1.5 〈2017/03/11〉 + - Sync with jsclasses 2017/03/05. + * Version 1.4 〈2017/02/03〉 + * Version 1.3a 〈2017/01/28〉 + - Sync with jsclasses 2017/01/13. + * Version 1.3 〈2016/11/01〉 + - Sync with jsclasses 2016/10/08. + * Version 1.2a 〈2016/08/17〉 + * Version 1.2 〈2016/08/01〉 + * Version 1.1f 〈2016/07/16〉 + * Version 1.1e 〈2016/05/28〉 + * Version 1.1d 〈2016/05/21〉 + * Version 1.1c 〈2016/05/01〉 + * Version 1.1b 〈2016/03/27〉 + * Version 1.1a 〈2016/02/20〉 + * Version 1.1 〈2016/02/14〉 + * Version 1.0d 〈2015/11/21〉 + * Version 1.0c 〈2015/10/18〉 + * Version 1.0b 〈2015/09/07〉 + * Version 1.0a 〈2015/08/23〉 + * Version 1.0 〈2015/08/05〉 + * Version 0.9 〈2013/10/03〉 + * Version 0.4 〈2013/08/03〉 + * Version 0.3a 〈2012/05/01〉 + * Version 0.3 〈2010/08/15〉 + * Version 0.2 〈2009/08/15〉 + +-------------------- +Takayuki YATO (aka. "ZR") +https://github.com/zr-tex8r diff --git a/language/japanese/BX/bxjscls/bxjscls-manual.pdf b/language/japanese/BX/bxjscls/bxjscls-manual.pdf Binary files differnew file mode 100644 index 0000000000..00b4706eec --- /dev/null +++ b/language/japanese/BX/bxjscls/bxjscls-manual.pdf diff --git a/language/japanese/BX/bxjscls/bxjscls-manual.tex b/language/japanese/BX/bxjscls/bxjscls-manual.tex new file mode 100644 index 0000000000..fd0a4a019d --- /dev/null +++ b/language/japanese/BX/bxjscls/bxjscls-manual.tex @@ -0,0 +1,1664 @@ +% 文字コードは UTF-8 +% lualatex で組版する +\documentclass[a4paper]{ltjsarticle} +\usepackage{color} +\definecolor{myblue}{rgb}{0,0,0.75} +\definecolor{mygreen}{rgb}{0,0.45,0} +%\usepackage{url} +\usepackage[unicode,colorlinks,hyperfootnotes=false]{hyperref} +\hypersetup{linkcolor=myblue,urlcolor=mygreen} +\usepackage{metalogo} +\pdfstringdefDisableCommands{% + \renewcommand*{\XeLaTeX}{XeLaTeX}} +\usepackage{shortvrb} +\MakeShortVerb{\|} +\newcommand{\PkgVersion}{1.9h} +\newcommand{\PkgDate}{2019/07/27} +\newcommand{\Pkg}[1]{\textsf{#1}} +\newcommand{\Meta}[1]{$\langle$\mbox{}\nobr#1\nobr\mbox{}$\rangle$} +\newcommand{\Note}{\par\noindent ※} +\newcommand{\Means}{:\ } +\newcommand{\jemph}{\textsf} +\newcommand{\wbr}{\linebreak[0]} +\newcommand{\nobr}{\nolinebreak[4]} +\newcommand{\xast}{\mbox{}\mbox{$^*$}} +\providecommand{\pTeX}{p\TeX} +\providecommand{\pLaTeX}{p\LaTeX} +\providecommand{\upTeX}{u\pTeX} +\providecommand{\upLaTeX}{u\pLaTeX} +\providecommand{\pdfLaTeX}{pdf\LaTeX} +\providecommand{\BibTeX}{Bib\TeX} +%----------------------------------------------------------- +\begin{document} +\title{\Pkg{BXjscls} パッケージ\\ + (BXJS文書クラス集)\\ + ユーザマニュアル} +\author{八登崇之\ (Takayuki YATO; aka.~``ZR'')} +\date{v\PkgVersion\quad[\PkgDate]} +\maketitle +\tableofcontents + +%=========================================================== +\section*{注意} + +BXJS文書クラスについては、サイト“{\TeX} Wiki”中の記事、 +\footnote{\url{https://texwiki.texjp.org/?BXjscls}}% +およびそこからたどれる情報も併せて参照してほしい。 + +%=========================================================== +\section{概要} +\label{sec:Ovewview} + +本パッケージに含まれる文書クラス集 +(以下では\jemph{BXJS(文書)クラス}と呼ぶ) +は、奥村晴彦氏および“日本語{\TeX}開発コミュニティ”により作製された +\Pkg{jsclasses}パッケージの文書クラス集 +(以下では\jemph{JS(文書)クラス}と呼ぶ) +の拡張版に相当する。 +JSクラスのレイアウトデザインと機能をほぼ踏襲しているが、 +以下の点で改良が加えられている。 +\begin{itemize} +\item JSクラスは{\pLaTeX}と{\upLaTeX}のみをサポートするが、 + BXJSクラスはこれらに加えて{\pdfLaTeX}と{\XeLaTeX}と{\LuaLaTeX}を + サポートしており主要エンジンの全てで使用可能である。 +\item (u){\pLaTeX}以外では各々のエンジンの日本語処理パッケージを + 利用するが、“標準設定”を用いることで、それらのパッケージの + 設定を書かずに済ませられるので、{\pLaTeX}並に簡単に日本語の + 文書を書き始めることができる。 +\item JSクラスでは、フォントのオプティカルサイズを最適にするため、 + 基底フォントサイズが10\,pt以外の時に{\TeX}の版面拡大(mag)機能を + 利用しているが、これが他のパッケージと衝突して + 不具合を起こすことがある。 + BXJSクラスではmag機能を使う他に別の方式を選べるようにしている。 + \Note JSクラスについても新しい(2016/07/11以降の)版では + 同様の機能が提供されている。 +\item 用紙サイズや基底フォントサイズについて、任意の値を指定する + ことができる。 +\end{itemize} + +%=========================================================== +\section{最も基本的な使い方} +\label{sec:Basic} + +ここでは、BXJSクラスを“標準設定”(standard和文ドライバ)で +用いる場合について解説する。 +この場合、|\documentclass| 命令を次のように書く。 +\footnote{もちろんクラスオプションの順序は任意である。}% + +\begin{quote} +|\documentclass[|\Meta{エンジン}|,|\Meta{ドライバ}% +|,ja=standard,jafont=|\Meta{フォント指定}|,|\Meta{他オプション}|]|\\ +| {|\Meta{クラス名}|}| +\end{quote} + +\begin{itemize} +\item \Meta{エンジン}の指定は必須で、実際に使っている + 「{\LaTeX}のコマンド名」を書く。 + |platex|、|uplatex|、 + |pdflatex|、|xelatex|、|lualatex|等が指定できる。 +\item DVI出力のエンジンを使う場合は、\Meta{ドライバ}の指定が必須で、 + これは実際に使っている「DVIウェアの名前」を書く。 + |dvips|、|dvipdfmx|、|dviout|、|xdvi|が指定できる。 + PDF出力のエンジンの場合は\Meta{ドライバ}の指定は不要である。 +\item “標準設定”を適用するので |ja=standard| を指定する。 +\item 既定以外のフォント設定を利用する場合は、\Meta{フォント指定}に + その名前を書く。 + 既定の設定を用いる場合は |jafont=...| 自体を省略する。 +\item その他のクラスオプション(|a4paper| 等)については、 + 多くの場合JSクラスと同じものが使える。 +\item BXJSクラスについて、\Meta{クラス名}は以下のものがある。 + \begin{itemize} + \item \Pkg{bxjsarticle}\Means 章のないレポート + (\Pkg{jsarticle}に相当する) + \item \Pkg{bxjsreport}\Means 章のあるレポート + (\Pkg{jsreport}に相当する) + \item \Pkg{bxjsbook}\Means 書籍 + (\Pkg{jsbook}に相当する) + \item \Pkg{bxjsslide}\Means スライド + (\Pkg{jsarticle}\,+\,|slide|に相当する) + \end{itemize} +\end{itemize} + +{\XeLaTeX}で\Pkg{bxjsarticle}クラスを用いた文書の例を示す。 +\footnote{組版結果における日付の出力はJSクラスと同様の +「2015年7月3日」の形式になる。}% + +\begin{quote}\small\begin{verbatim} +\documentclass[a4paper,xelatex,ja=standard]{bxjsarticle} +\usepackage[unicode,colorlinks, + pdftitle={いきなり日本語}]{hyperref} +\title{いきなり日本語} +\author{七篠 権兵衛} +\begin{document} +\maketitle + +\section{日本語で{\LaTeX}する} +中身はまだない。 + +\end{document} +\end{verbatim}\end{quote} + +以下では各エンジンについて、挙動を少し詳しく説明する。 + +%------------------- +\subsection{{\pLaTeX}の場合} + +例えば次の設定は: +\begin{quote}\small\begin{verbatim} +\documentclass[a4paper,platex,dvipdfmx,ja=standard]{bxjsarticle} +\end{verbatim}\end{quote} +対応するJSクラスを用いた次の設定とほぼ等価になる +\footnote{すなわち、論理フォントは明朝がjis、 +ゴシックがjisgが使われる。 +なお、BXJSでは |mingoth| 等の論理フォント変更の +オプションはサポートされていない。}: +\begin{quote}\small\begin{verbatim} +\documentclass[a4paper,dvipdfmx]{jsarticle} +\end{verbatim}\end{quote} + +次のように |jafont| を指定した場合は: +\begin{quote}\small\begin{verbatim} +\documentclass[a4paper,platex,dvipdfmx,ja=standard,jafont=ms]{bxjsarticle} +\end{verbatim}\end{quote} +|jafont| の値をプリセットオプションとして\Pkg{pxchfon}が読み込まれる: +\begin{quote}\small\begin{verbatim} +\documentclass[a4paper,dvipdfmx]{jsarticle} +\usepackage[ms]{pxchfon} +\end{verbatim}\end{quote} + +%------------------- +\subsection{{\upLaTeX}の場合} + +例えば次の設定は: +\begin{quote}\small\begin{verbatim} +\documentclass[a4paper,uplatex,dvipdfmx,ja=standard]{bxjsarticle} +\end{verbatim}\end{quote} +次の設定とほぼ等価になる +\footnote{論理フォントについては、従来のもの + (明朝がupjisr-h、ゴシックがupjisg-h) + に代わって、BMP外の文字に対応したもの + (明朝がupjpnrm-h、ゴシックがupjpngt-h) + を採用した。 + 組み方は従来のものと変わらない。}: +\begin{quote}\small\begin{verbatim} +\documentclass[uplatex,a4paper,dvipdfmx]{jsarticle} +\end{verbatim}\end{quote} + +|jafont| オプションの扱いは{\pLaTeX}の場合と同じである。 + +%------------------- +\subsection{{\pdfLaTeX}の場合} + +エンジン指定が |pdflatex| の場合、 +日本語処理パッケージとして\Pkg{bxcjkjatype} +(これ自体は内部で\Pkg{CJK}パッケージを読み込む) +を利用する。 + +例えば次の設定は: +\begin{quote}\small\begin{verbatim} +\documentclass[a4paper,pdflatex,ja=standard]{bxjsarticle} +\end{verbatim}\end{quote} +次の設定と大体同じであるが、ただし文書レイアウトは +\Pkg{article}でなく\Pkg{jsarticle}とほぼ同じになっている: +\begin{quote}\small\begin{verbatim} +\documentclass[a4paper]{article} +\usepackage[whole,autotilde]{bxcjkjatype} +\end{verbatim}\end{quote} + +|jafont| を指定した場合は: +\begin{quote}\small\begin{verbatim} +\documentclass[a4paper,pdflatex,ja=standard,jafont=ipaex]{bxjsarticle} +\end{verbatim}\end{quote} +その値が\Pkg{bxcjkjatype}のフォントプリセットになる。 +\begin{quote}\small\begin{verbatim} +\documentclass[a4paper]{article} +\usepackage[whole,autotilde,ipaex]{bxcjkjatype} +\end{verbatim}\end{quote} + +\Note 補足: +\begin{itemize} +\item 自動的に文書本体が |CJK*| 環境 + \footnote{\Pkg{CJKspace}パッケージが読み込まれた下での |CJK*| + 環境である。}% + で囲まれかつ |\CJKtilde| が有効な状態になっている。 + 従っていきなり日本語を書き始めることができる。 + ただし和欧文間空白(四分空き)は手動で |~| を入れる必要がある。 + \footnote{\Pkg{CJK}パッケージには自動で和欧文間空白を入れる + 機能はない。}% + 日本語出力の挙動の詳細については\Pkg{bxcjkjatype}のマニュアルを + 参照してほしい。 + 以下に完全な文書ソースの例を示す: +\begin{quote}\small\begin{verbatim} +\documentclass[a4paper,pdflatex,ja=standard]{bxjsarticle} +\begin{document} +日本語で~pdf{\LaTeX}~するテスト。 +\end{document} +\end{verbatim}\end{quote} +\item \Pkg{bxcjkjatype}パッケージにおけるフォントの既定設定は + 「Type1形式のIPAexフォント」(\Pkg{ipaex-type1}パッケージ)である。 + 一方、|ipaex| プリセットを指定した場合は + 「TrueType形式のIPAexフォント」が使われるので、両者の出力は + 見かけは同じであるが、PDFデータとしては異なる。 + \footnote{ちなみに、\Pkg{bxcjkjatype}には |ipaex-type1| という + オプションもあるが、この設定と既定設定(オプション無し)も + 動作は異なる。 + BXJSクラスが用いるのは既定設定の方である。}% +\end{itemize} + +%------------------- +\subsection{{\XeLaTeX}の場合} + +エンジン指定が |xelatex| の場合、 +日本語処理パッケージとして\Pkg{zxjatype} +(これ自体は内部で\Pkg{xeCJK}パッケージを読み込む) +を利用する。 + +例えば次の設定は: +\begin{quote}\small\begin{verbatim} +\documentclass[a4paper,twocolumn,xelatex,ja=standard]{bxjsarticle} +\end{verbatim}\end{quote} +次の設定と大体同じであるが、ただし文書レイアウトは +\Pkg{jsarticle}とほぼ同じになっている: +\begin{quote}\small\begin{verbatim} +\documentclass[a4paper,twocolumn]{article} +\usepackage{zxjatype} +\setCJKmainfont[BoldFont=IPAexGothic]{IPAexMincho}% 明朝→IPAex明朝 +\setCJKsansfont[BoldFont=IPAexGothic]{IPAexGothic}% ゴシック→IPAexゴシック +\end{verbatim}\end{quote} + +|jafont| を指定した場合は: +\begin{quote}\small\begin{verbatim} +\documentclass[a4paper,xelatex,ja=standard,jafont=ms]{bxjsarticle} +\end{verbatim}\end{quote} +その値が\Pkg{zxjafont}のプリセットになる。 +\begin{quote}\small\begin{verbatim} +\usepackage{zxjatype} +\usepackage[ms]{zxjafont} +\end{verbatim}\end{quote} + +%------------------- +\subsection{{\LuaLaTeX}の場合} + +エンジン指定が |lualatex| の場合、 +日本語処理パッケージとして\Pkg{\LuaTeX-ja}を利用する。 + +例えば次の設定は: +\begin{quote}\small\begin{verbatim} +\documentclass[b5paper,9pt,lualatex,ja=standard]{bxjsarticle} +\end{verbatim}\end{quote} +次の設定とほぼ等価になる +(ただし\Pkg{luatexja-preset}は実際には読み込まれない): +\begin{quote}\small\begin{verbatim} +\documentclass[b5paper,9pt]{ltjsarticle} +\usepackage{luatexja-fontspec} +\usepackage[ipaex]{luatexja-preset} +\end{verbatim}\end{quote} + +|jafont| を指定した場合は: +\begin{quote}\small\begin{verbatim} +\documentclass[b5paper,lualatex,ja=standard,jafont=ms]{bxjsarticle} +\end{verbatim}\end{quote} +次の設定とほぼ等価になる: +\begin{quote}\small\begin{verbatim} +\documentclass[b5paper]{ltjsarticle} +\usepackage{luatexja-fontspec} +\usepackage[ms]{luatexja-preset} +\end{verbatim}\end{quote} + +\Note 補足: +\begin{itemize} +\item \Pkg{luatexja-preset}パッケージの読込が行われるのは |jafont| を + 指定した場合に限られる。 +\end{itemize} + +%------------------- +\subsection{注意事項} + +主にJSクラスとの違いについての注意。 + +\begin{itemize} +\item ページレイアウトについて、JSクラスの設計思想を受け継いで + いるが、全く同じになるわけではない。 +\item JSクラスの一部のオプションで、 + BXJSクラスでは使用不可能なものがある。 + (\ref{ssec:JS-deleted-option}節参照。) +\item BXJSクラスではページレイアウトを設定するために + 内部で\Pkg{geometry}パッケージを読み込んでいる。 + そのため、後からユーザが\Pkg{geometry}を読み込むことはできない。 + ページレイアウトを変更する場合は、BXJSクラスが用意している + 再設定用の命令(\ref{ssec:page-layout}節参照)か、または + \Pkg{geometry}パッケージが提供する再設定用命令(|\geometry| 等) + を利用する。 +\item |papersize|オプションは既定で有効になっていて、 + 出力用紙サイズはクラスオプションで指定したものに + 自動的に設定される。 + この処理を無効にするには|nopapersize|オプションを指定すればよい。 +\item |papersize|オプションの処理は\Pkg{geometry}パッケージの + 機能により行われる。 + \Pkg{hyperref}パッケージや(最近の)\Pkg{graphics}/ + \Pkg{color}パッケージがもつ出力用紙サイズ設定の機能は + これと干渉する可能性があるので、 + BXJSクラスにおいては自動的に無効化される。 +\item \Pkg{hyperref}パッケージにおける“PDFの文字コード”の設定は + エンジンごとに適切な値が異なっていて複雑であり、 + これが不適切であるためにPDF文書情報(しおり等)が文字化けして + しまう事例が数知れない。 + そこで、文書クラス側でエンジン毎に適切な設定を予め行う + ようにした。 + \footnote{従って、(u){\pLaTeX}において、ほとんどの場合に + \Pkg{pxjahyper}パッケージを読み込む必要がない。 + ただし読み込んでも構わないし、必要な場合もある。}% + (ただし文書クラスが\Pkg{hyperref}を読み込むわけではない。) +\item pdf{\LaTeX}上で\Pkg{hyperref}で |pdftitle| 等の文書情報に + 和文文字を含めたい場合は、|\hypersetup| 命令を通常通り + 使うことができる。 + \footnote{ちなみに、普通に\Pkg{CJKutf8}パッケージを用いた場合は、 + この方法では失敗してしまう。 + 恐らく |\hypersetup| 命令全体を |CJK*| 環境で囲う必要が + あるのだと思われる。}% +\begin{quote}\small\begin{verbatim} +\documentclass[pdflatex,a4paper,ja=standard]{bxjsarticle} +\usepackage[colorlinks]{hyperref} +\hypersetup{pdftitle={日本語タイトル}} +\end{verbatim}\end{quote} + \Note \Pkg{hyperref}のパッケージオプションで和文文字を含む文書情報を + 指定することはできない。 + (\Pkg{hyperref}の制限仕様。) +\item |jafont| が無い場合の既定のフォント設定は多くのエンジンに + おいて「IPAexフォント使用」であるが、(u){\pLaTeX}だけは異なっていて + 「何も指定しない状態」(JSクラスと同様)である。 + すなわち実際に使われる物理フォントの選択はDVIウェアの設定に + 委ねられている。 +\item 1.2版より、|\bf| や |\it| 等の + {\LaTeX}\,2.09方式のフォント選択命令の使用が + 非推奨となり、これらの命令を使うと警告が出るようになった。 + 詳細は\ref{sec:Old-font-commands}節を参照。 +% TODO: \@ptsize の話 +\end{itemize} + +%=========================================================== +\section{Pandocモードの使い方} +\label{sec:Pandoc-mode} + +「Pandocモード」は文書形式変換ツールである +Pandoc\footnote{\url{http://pandoc.org/}}% +を用いた日本語{\LaTeX}文書生成(および{\LaTeX}経由のPDF生成) +のために調整された設定である。 + +\begin{quote} +|\documentclass[pandoc,|\Meta{ドライバ}% +|,jafont=|\Meta{フォント指定}|,|\Meta{他オプション}|]|% +|{|\Meta{クラス名}|}| +\end{quote} + +\begin{itemize} +\item クラスオプションに |pandoc| を指定し、代わりに + 「エンジン」と「和文ドライバ(|ja|)」のオプションを省く。 + \footnote{|pandoc| が指定された場合は、エンジンオプションの + 値は |autodetect-engine|、和文ドライバの値は |pandoc| に + 固定される。} +\item エンジンがDVI出力である場合のドライバの + 既定値が |dvipdfmx| になる。 + ただし明示的にドライバオプションを与えることで |dvips| などに + 変更できる。 +\item 「和文フォント(|jafont|)」および他のクラスオプションは + 従来通り使用できる。 +\end{itemize} + +以下でPandocでBXJSクラスを用いる例を示す。 + +\Note なお、以下の記述はPandoc 2.x版に従う。 +(1.x版からかなり変更されている。) + +\begin{itemize} +\item \Pkg{bxjsarticle}クラスを使用する一例。 + \begin{itemize} + \item {\XeLaTeX}経由 + \item 用紙サイズはA4判 + \item 和文フォント設定は |ipaex| + \end{itemize} + + コマンド行は次のようになる。 + \footnote{もちろん、実際には改行を含めず1行で書く。 + なお、日本語文書の場合、変換先書式(|-t|)は |latex| + でなく |lates-smart|(|smart| 機能を無効化)とすべきである。} + \begin{quote} + |pandoc| \Meta{入力ファイル名}\ + |-o| \Meta{出力ファイル名}|.pdf| + |-t latex-smart|\\\quad + |--pdf-engine=xelatex| + |-V papersize=a4| + |-V documentclass=bxjsarticle|\\\quad + |-V classoption=pandoc| + |-V classoption=jafont=ipaex| + \end{quote} + + なおこの場合、途中で生成される{\LaTeX}文書のクラス指定は + 以下のようになる: + \begin{quote} + |\documentclass[a4paper,jafont=ipaex,pandoc]{bxjsarticle}| + \end{quote} + +\item \Pkg{bxjsbook}クラスを用いる場合の一例。 + \begin{itemize} + \item 節番号を出力する + \item Lua{\LaTeX}経由 + \item 用紙サイズはJIS~B5判 + \item 和文の基底フォントサイズは11\,Q + \item 和文フォント設定は |ipaex| + \item 欧文フォントをPandocの機能で設定 + \end{itemize} + + コマンド行は次のようになる: + \begin{quote} + |pandoc| \Meta{入力ファイル名}\ + |-o| \Meta{出力ファイル名}|.pdf| + |-N| + |-t latex-smart|\\\quad + |--top-level-division=chapter| + |--pdf-engine=xelatex|\\\quad + |-V papersize=b5| + |-V documentclass=bxjsbook| + |-V classoption=pandoc|\\\quad + |-V classoption=jbase=11Q| + |-V classoption=jafont=ipaex|\\\quad + |-V mainfont="TeX Gyre Termes"| + |-V sansfont="TeX Gyre Heros"| + \end{quote} + + 注意事項: + \begin{itemize} + \item \Pkg{bxjsbook}クラスは「章(|\chapter|)」をもつクラスなので、 + Pandocで |--top-level-division=|\linebreak[0]|chapter| の指定 + が必要。 + \end{itemize} + +\item Pandocで{\LaTeX}経由でPDFを出力する場合、 + エンジン指定(|--pdf-engine|)は + |pdflatex|、|xelatex|、|lualatex|のみがサポートされる。 + しかし、Pandocの出力を「単体の{\LaTeX}文書」(|-s|指定)とすることで、 + {\LaTeX}エンジンに(u){\pLaTeX}を使用することができる。 + 出力された{\LaTeX}文書は通常の方法でPDFやPostScript形式に + 変換できる。 + + \begin{quote}\small +\begin{verbatim} +pandoc mydoc.md -o mydoc.tex -s -V documentclass=bxjsarticle -V classoption=pandoc +uplatex mydoc +uplatex mydoc +dvipdfmx mydoc +\end{verbatim} + \end{quote} +\end{itemize} + +%=========================================================== +\section{クラスオプション} +\label{sec:Class-Option} + +一般的な値の書式についての注意\Means +\begin{itemize} +\item 真偽値は、 |true|(真)または |false|(偽)で指定する。 +\item 長さ値および整数値は\Pkg{calc}パッケージの式で指定できる。 +\item \Meta{長さ\xast}のように“\xast”のついた長さパラメタについては、 + \Pkg{calc}の長さ式の代わりに、和文用単位(|Q|、|H|、|zw|、|zh|) + 付きの実数値で指定することもできる。 + \footnote{この機能は |units| 和文パラメタとは無関係である。 + 和文用単位を含む長さ式は((u){\pLaTeX}以外では)使えない。 + なお、ここで使われる |zw| は常に((u){\pLaTeX}でも) + “規約上の全角幅”(|\jsZw|)を指す + (和文フォント設定が未完了のため)。} +\end{itemize} + +%------------------- +\subsection{BXJSクラスに特有のオプション} +\label{ssec:BXJS-specific-option} + +JSクラスには無くBXJSクラスで追加されたクラスオプション。 + +\begin{itemize} +\item エンジンオプション\Means + 実際に使用するエンジン({\LaTeX}コマンド名)を指定する。 + 有効な値は |latex|、|platex|、|uplatex|、|pdflatex|、|xelatex|、 + |lualatex|、|platex-ng| である。 + エンジンオプション(と次項の |autodetect-engine| の何れか) + の指定は必須である。 + \Note |platex-ng| は{\pTeX-ng}エンジン + (別名A\pTeX、Asiatic \pTeX)のためのオプションである。 + 現時点では |platex-ng| 指定時の仕様は流動的であり詳細を述べる + ことは避けるが、大体は |uplatex| と同様になる。 + {\pTeX-ng}はPDF出力を行うので、ドライバオプションは指定しない。 + \footnote{現状の実装では、自動的に |dvipdfmx| が + グローバルオプションに追加される。 + また、|platex-ng| オプションの変種に |platex-ng*| があり、 + こちらは |dvipdfmx| の自動追加を行わない。} +\item |autodetect-engine|\Means + 使用しているエンジンを判定して、自動的に適切なエンジンオプションを + 設定する。 + \footnote{実はエンジンの判定は常に行っていて、エンジンオプションが + 指定された場合はそれが正しいかを検査して、誤りの場合はエラーを + 出すようにしている。}% + \Note BXJSクラスの設計の思想としては、 + 「{\LaTeX}文書がどのエンジンでコンパイルすべきものかは + ソース中に明示されるべき」と考えていて、 + 従って、人間が“普通に”文書を作る際にはこのオプションの + 使用は推奨されない。 + このオプションは 「{\LaTeX}ソースの自動生成」が絡む処理を念頭において + 用意されている。 +\item ドライバオプション\Means + DVI出力のエンジンを用いる場合に、実際に使用するDVIウェアの名前を + 指定する。 + 有効な値は |dvips|、|dvipdfmx|、|dviout|、|xdvi| である。 + DVI出力時はドライバオプション(と次項の |nodvidriver| の何れか) + の指定は必須である。 + \footnote{ただし現状では、ドライバオプションが無い場合には + エラーではなく警告が出る。} +\item |nodvidriver|\Means + 特殊なドライバオプションの一種で、BXJSクラスが持つ + ドライバ依存の機能を全て抑止することを指定する。 + \footnote{従って、ドライバ依存のパッケージを使用しなければ、 + 出力されるDVIファイルは特定のDVIウェアに依存しないものになる。} +\item |dvi=|\Meta{ドライバ名}\Means + エンジンがDVI出力の場合に限り、指定のドライバオプションを + 有効にする。 + \footnote{実際にドライバオプションが有効化された場合は、 + そのオプションがグローバルオプションとしても働く。 + 例えば、DVI出力のエンジンで |dvi=dvipdfmx| が指定された場合は、 + |dvipdfmx| がグローバルオプションに追加される。}% + |autodetect-engine| と一緒に使うことが想定されている。 +\item |pandoc|\Means + 「Pandocモード」(\ref{sec:Pandoc-mode}節)を指定する。 + 以下の設定が行われる: + \begin{itemize} + \item エンジンオプションが |autodetect-engine| に固定される。 + \item 和文ドライバが |pandoc| に固定される。 + \item ドライバオプションについて |dvi=dvipdfmx| が既定になる + (明示指定で上書可能)。 + \end{itemize} +\item |nopapersize|\Means + 出力用紙サイズ設定 + (DVI出力の場合は所謂“papersize special出力”) + を抑止する。 + (JSクラスとは異なり、出力用紙サイズ設定のオプション |papersize| + は既定で有効である。) + \Note 出力用紙サイズ設定を行う他のパッケージとの干渉に + 対する対策。 +\item |ja=|\Meta{名前}\Means + 使用する和文ドライバの名前を指定する。 + (詳細は\ref{sec:Ja-Driver}節を参照。) + 標準で提供されている和文ドライバには |minimal|、 + |standard|、|pandoc| がある。 + エンジンが |platex| か |uplatex| の時は |ja| の + 既定値は |standard| である。 + それ以外の場合は、一応 |minimal| とするが、 + 明示的な指定が推奨される。 +\item |jafont=|\Meta{名前}\Means + 「和文フォントプリセット指定」の名前を設定する。 + \Note \ref{sec:Basic}節で解説した通り、standard和文ドライバでは |jafont| + の値が利用される。 + \par + プリセット指定の値が丸括弧を含む(例えば“|sourcehan(-otc)|”)場合、 + 以下のように解釈される。 + \begin{itemize} + \item エンジンが{\XeLaTeX}/{\LuaLaTeX}の場合は、 + 丸括弧囲いの部分を削除した文字列(“sourcehan”)が使われる。 + \item それ以外の場合は、 + 丸括弧だけ削除した文字列(“sourcehan-otc”)が使われる。 + \end{itemize} +\item |japaram={|\Meta{キー}|=|\Meta{値}|,...}|\Means + 「和文ドライバパラメタ」の値を設定する。 + 詳しくは\ref{sec:Ja-Driver-Param}節を参照。 + \Note |jafont| と |japaram| の値がどのように解釈されるかは + 和文ドライバの仕様次第である。 +\item |base=|\Meta{長さ\xast}\Means + 基底フォントサイズ(|\normalsize| のサイズ)を指定する。 + JSクラスの |10pt|、|11pt| 等と同じ役割で、任意の長さ値を指定できる。 + 基底フォントサイズの既定値は10\,ptである。 + \Note |##pt| の形のオプションには名前と実際に設定される値が + ずれているものが多く、例えば |11pt| は10.95\,pt、 + |14pt| は 14.4\,pt が実際の設定値である。 + \footnote{これは昔の{\LaTeX}の“magstep”の習慣に由来する。}% + これに対して |base=14pt| は文字通り14\,ptを設定する。 +\item |jbase=|\Meta{長さ\xast}\Means + 和文を基準にして基底フォントサイズを指定する。 + すなわち和文フォントの |\normalsize| のサイズを指定の長さとする。 + \footnote{この場合に決定されるmag値は和文スケール値にも依存する + ことに注意。} + \Note 1.8版から、|base| と |jbase| の両方の指定が可能になった。 + この場合、和文スケール値がそれらに基づいて決定される + (|scale| 指定は無効になる)。 +\item |scale=|\Meta{実数}\Means + 和文スケール値を設定する。 + 既定値は 0.924715(= 13\,Q/10\,pt)である。 + \footnote{これはJSクラスの設計に基づく値である。 + ただし実装の都合で、JSクラスの実際のスケール値はこれから + 僅かだけずれている。} +\item |paper={|\Meta{横幅}|}{|\Meta{縦幅}|}|\Means + 用紙サイズ設定。 + |a4paper| 等と同じ役割で、任意の長さ値を指定できる。 + 用紙サイズの既定値はA4縦 + ($\mbox{210\,mm}\times\mbox{294\,mm}$)である。 +\item |enablejfam=|\Meta{値}\Means + 数式中の和文出力をサポートするか否か。 + 値は |true|(有効)/|false|(無効)/|default|(既定値に従う) + の何れかである。 + エンジンや和文ドライバの種類により、 + 既定値が有効・無効の何れになるかは異なり、また、 + そもそも有効・無効の一方しか選択できない場合もある。 + 詳細については\ref{sec:Ja-math-fonts}節を参照されたい。 +\item |textwidth=|\Meta{長さ}\Means + 行長(本文領域の横幅;|\textwidth|)を指定する。 + \Note 実際には全角の整数倍に丸めた値が使われる + (\ref{ssec:page-layout}節参照)。 + \begin{itemize} + \item \Pkg{bxjsbook}以外では、\Pkg{geometry}で |textwidth| を + 指定したのと同値。 + この場合、既定では |textwidth| を指定しない。 + \item \Pkg{bxjsbook}では、\Pkg{geometry}の |textwidth| は + 実際には |\fullwidth|(ヘッダ部分の横幅)の指定とみなされる。 + 従って、|\textwidth| はこのオプションで指定する必要がある。 + この場合の既定値は40\,zwである。 + \Note |\textwidth| が |\fullwidth| を超えることはできない。 + \end{itemize} +\item |number-of-lines=|\Meta{整数}\Means + 1ページあたりの行数を指定する。 + \Pkg{geometry}で |lines| を指定したのと同値。 + 既定では |lines| を指定しない。 +\end{itemize} + +\paragraph{上級者向けのオプション}\mbox{} + +\begin{itemize} +\item |use-zw=|\Meta{真偽値}\Means + |\jsZw| と等価な命令として |\zw| を定義するか。 + 既定値は真。 + \Note つまり |\zw| の命令名が衝突する場合に、 + |use-zw=false| を指定する。 +\item |disguise-js=|\Meta{真偽値}\Means + JSクラス(例えば\Pkg{bxjsreport}の場合は\Pkg{jsbook}) + が読込済であるように振舞うか否か。 + 既定値は真。 + \Note つまり「JSクラスの一種である」と判定されると不都合な場合に、 + |disguise-js=false| を指定する。 +\item |bigcode|\Means + {\upTeX}エンジンとdvipdfmxの組合せで\Pkg{hyperref}パッケージを + 利用する時に適用されるToUnicode CMapとして |UTF8-UTF16| を指定する。 + PDFの文書情報の文字列にBMP外の文字が含まれる場合には + この指定が必要である。 + |UTF8-UTF16| のファイルがインストールされていないと、 + dvipdfmxの処理が失敗する。 +\item |nobigcode|\Means + |bigcode| の否定。ToUnicode CMapとして |UTF8-UCS2| を指定する。 + この場合は文書情報の文字列にBMP外の文字を使用できない。 + \Note |UTF8-UTF16| のファイルが利用できるかを確実に判定するのは + 困難なため、|bigcode| の既定値は次のようなアドホックな方法で + 決めている: + {\TeX}エンジンのバージョンが3.14159265以上 + \footnote{{\TeX}のバージョン3.14159265は2014年1月にリリースされた。} + である場合は、 + ({\TeX}環境がある程度新しく、|UTF8-UTF16| が利用可能と思われるので) + |bigcode| を既定とし、それ以外は |nobigcode| を既定とする。 +\item |precise-text=|\Meta{真偽値}\Means + {\XeTeX}エンジンにおいて、「ActualText生成機能」を有効化する + \footnote{つまり、|\XeTeXgenerateactualtext=1| を行う。 + ActualText 生成機能と日本語処理は相性が悪いため、これを使うと + 出力PDFのサイズが増大する(1.5~2倍)ことに注意。}% + か否か。 + 既定値は偽。 +\item |simple-ja-setup=|\Meta{真偽値}\Means + {\XeTeX}エンジン自体の行組版機能(|\XeTeXlinebreaklocale| 等) + を利用した、簡易的な日本語用組版設定を行うか否か。 + 既定値は真(だが多くの場合に無効化される)。 + \Note {\XeTeX}エンジン以外では無効である。 + また、\Pkg{xeCJK}や\Pkg{zhspacing}等の日本語(CJK)組版用 + パッケージが読み込まれた場合も無効化される。 + 特に、和文ドライバがstandardである場合は、必ず\Pkg{xeCJK}が + 読み込まれるため、このオプションは無意味である。 +\item |a4varpaper|、|b5varpaper|\Means + 用紙サイズ指定オプション |a4var|、|b5var| の別名。 + \Note Pandocで |-V papersize=a4var| の指定を可能にするため。 +\item |mag=|\Meta{整数}\Means + 版面拡大率(mag値)の直接設定。 + 既定は |base| から算出する。 + \Note mag値が$n$の場合、版面が $n/1000$ 倍に拡大される。 +\item |magstyle=|\Meta{値}\Means + “版面拡大”の実現方法を指定する。 + 有効な値は |usemag|、|nomag|、|nomag*| の何れか。 + 詳細は\ref{ssec:magstyle}節を参照。 +\item |geometry=|\Meta{値}\Means + \Pkg{geometry}パッケージの読込に対する制御。 + \begin{itemize} + \item |class|(既定)\Means + 通常通り、文書クラスが\Pkg{geometry}パッケージを読み込む。 + ユーザは\Pkg{geometry}を後から読み込むことはできない。 + \item |user|\Means + 文書クラスによる\Pkg{geometry}パッケージの読込をスキップする。 + この場合、ユーザが自分で\Pkg{geometry}を読み込むことが想定される。 + \footnote{\Pkg{geometry}の読込は必須ではなく、ページレイアウトの + パラメタを自分で設定しても構わない。 + ただし\Pkg{geometry}の読込が強く推奨される。 + (\Pkg{geometry}非読込時の動作テストはほとんど行っていない。)} + \end{itemize} + \Note 「どうしても\Pkg{geometry}パッケージを自分で読み込みたい」 + という人のための設定。 +\item |oldfontcommands|\Means + |\bf| 等の“二文字フォント命令”の使用を許容する。 +\item |nooldfontcommands|(既定)\Means + “二文字フォント命令”の使用に対して警告を出す。 + 詳細については\ref{sec:Old-font-commands}節を参照されたい。 +\item |fancyhdr=|\Meta{真偽値}\Means + \Pkg{fancyhdr}パッケージの機能に対する補正を行うか。 + 真の場合、以下の補正が行われる。既定値は真。 + \begin{itemize} + \item ヘッダ・フッタ書式の既定値に含まれる“二文字フォント命令” + を除去する。 + \item \Pkg{bxjsbook}クラスでヘッダ・フッタの横幅を(|\textwidth| + ではなく)|\fullwidth| に一致させる。 + \end{itemize} +\item |paragraph-mark=|\Meta{文字1つ}\Means + パラグラフ(|\paragraph|)の見出し先頭に付く記号。 + 既定値は“■”。 + \Note “|paragraph-mark=|”のように値を空にするのも可能。 +\item |whole-zw-lines=|\Meta{真偽値}\Means + ページレイアウト策定において「行長を全角幅の整数倍に丸める処理」 + を行うか否か。 + 既定値は真。 +\item |hyperref-enc=|\Meta{真偽値}\Means + \Pkg{hyperref}パッケージについて + 「PDF文字列の文字コード設定を補正する処理」 + を行うか否か。 + 既定値は真。 +\item |jaspace-cmd=|\Meta{真偽値}\Means + 以下に挙げる和文空白命令を定義するか否か。 + (詳しくは\ref{ssec:ja-settings}節を参照。) + \begin{quote} + |\jaenspace|、|\jathinspace|、|\>|、 + |\_|(|\|\,+\,全角空白) + \end{quote} + 既定値は真。 +\item |fix-at-cmd=|\Meta{真偽値}\Means + |\@| 命令に対してJSクラスと同様の拡張を施すか否か。 + 既定値は真。 +\item |label-section=|\Meta{値}\Means + 節番号の書式出力、特に + 「|\pre|/|postsectionname|」 + 「\Pkg{bxjsarticle}での付録部における |\appendixname|」 + の語句の付加の方法を選択する。 + \begin{itemize} + \item |compat|(既定)\Means + JSクラスと同じ実装を用いる。 + この場合、節のカウンタの書式(|\thesection|)そのものに語句が + 付加されるため、|\thesection| を参照する他のカウンタ書式が + 奇妙になる可能性がある。 + \item |modern|\Means + 節のカウンタの書式(|\thesection|)には語句の付加を行わず、 + 実際にそれが節番号として出力される際に語句を付加する。 + \item |none|\Means + 節番号に対する語句の付加を抑止する。 + 欧文・和文の標準文書クラスと同等になる。 + \end{itemize} +\item |layout=|\Meta{値}\Means + レイアウトの変種を選択する。 + 現状では、過去の版との互換性を維持するために用いられている。 + 有効な値は以下の通り。 + \begin{itemize} + \item \Pkg{bxjsbook}クラスの場合: + \begin{itemize} + \item |v2|(既定)\Means + 現版の既定のレイアウト。 + \item |v1|\Means + 1.2a版以前の(本来は不適切な)水平マージンの設定を適用する。 + (詳細は\ref{ssec:page-layout}節を参照。) + \end{itemize} + \item \Pkg{bxjsreport}クラスの場合: + \begin{itemize} + \item |v2|(既定 + \footnote{1.6版より既定値が |v2| に変更された。})\Means + JSクラスに新設された\Pkg{jsreport}クラスのレイアウトを継承する。 + \item |v1|\Means + 従来の「\Pkg{jsbook}クラス\,+\,|report|オプション」の + レイアウトを継承する。 + \end{itemize} + \item それ以外のクラスでは、本オプションは無効である。 + \end{itemize} +\end{itemize} + +\paragraph{jlreq文書クラスとの互換用のオプション}\mbox{} + +\begin{itemize} +\item |paper={|\Meta{横幅}|,|\Meta{縦幅}|}|\Means + |paper={|\Meta{横幅}|}{|\Meta{縦幅}|}| と同値(用紙サイズ設定)。 +\item |fontsize=|\Meta{長さ}\Means + |base=|\Meta{長さ} と同値(基底フォントサイズ)。 +\item |jafontsize=|\Meta{長さ}\Means + |jbase=|\Meta{長さ} と同値(和文基底フォントサイズ)。 +\item |line_length=|\Meta{長さ}\Means + |textwidth=|\Meta{長さ} と同値(行長指定)。 +\item |number_of_lines=|\Meta{整数}\Means + |number-of-lines=|\Meta{整数} と同値(行数指定)。 +\end{itemize} + +\paragraph{旧版との互換用のオプション}\mbox{} + +\begin{itemize} +\item |zw|\Means + |use-zw=true| と同値。 +\item |nozw|\Means + |use-zw=false| と同値。 +\item |js|\Means + |disguise-js=true| と同値。 +\item |nojs|\Means + |disguise-js=false| と同値。 +\item |precisetext|\Means + |precise-text=true| と同値。 +\item |noprecisetext|\Means + |precise-text=false| と同値。 +\item |simplejasetup|\Means + |simple-ja-setup=true| と同値。 +\item |nosimplejasetup|\Means + |simple-ja-setup=false| と同値。 + \Note 以上の8個は1.9版より前で使われた。 +\item |textwidth-limit=|\Meta{整数}\Means + |textwidth-limit=|\Meta{整数}|zw| と同値。 + \Note 1.8版より前で使われた。 +\item |dvipdfmx-if-dvi|\Means + |dvi=dvipdfmx| と同値。 + \Note 1.2版より前で使われた。 +\item |magstyle=mag|/|real|/|xreal|\Means + それぞれ |magstyle=usemag|/|nomag|/|nomag*| と同値。 + \Note 1.1f版より前で使われた。 +\item |jadriver=|\Meta{名前}\Means + |ja=|\Meta{名前} と同値(和文ドライバ指定)。 + \Note 1.0版より前で使われた。 +\item |noscale|\Means + |scale=1| と同値。 + \Note 0.9版より前で使われた。 +\end{itemize} + +%------------------- +\subsection{JSクラスのオプションで使用可能なもの} +\label{ssec:JS-inherited-option} + +これらについては名前だけ列挙するに留める。 +ただし、“JSクラス特有”(標準クラスに無い)オプションの一部に +ついては解説を加える。 + +\paragraph{用紙サイズ指定} +|a3paper|、|a4paper|、|a5paper|、|a6paper|、 +|b4paper|、|b5paper|、|b6paper|、 +|a4j|、|a5j|、|b4j|、|b5j|、|a4var|、|b5var|、 +|letterpaper|、|legalpaper|、|executivepaper|。 +\Note |a4var| はA4変判($\mbox{210\,mm}\times\mbox{283\,mm}$)、 +|b5var| はB5変判($\mbox{182\,mm}\times\mbox{230\,mm}$)。 +\Note JS/BXJSクラスでは |a4j| は |a4paper| と全く等価である。 +(他の |b4j| 等も同様。) + +\paragraph{横置き} +|landscape|。 + +\paragraph{基底フォントサイズ} +|8pt|、|9pt|、|10pt|、|11pt|、|12pt|、|14pt|、|17pt|、|20pt|、 +|21pt|、|25pt|、|30pt|、|36pt|、|43pt|、 +|12Q|、|14Q|、 +|10ptj|、|10.5ptj|、|11ptj|、|12ptj|。 +\Note |10pt|、|11pt|、|12pt|、|14pt|、|17pt|、|21pt|、|25pt|、 +|30pt|、|36pt|、|43pt| はそれぞれmagstepの +0、0.5、1、2、3、4、5、6、7、8である。 +|8pt|、|9pt|、|20pt| は文字通りの値。 +|##Q|/|##ptj| は |jbase=##Q|/|jbase=##pt| を表す +(つまり和文規準)。 +\footnote{ちなみにJSクラスの(固定の)和文スケール値に従うと |10pt| + が |jbase=13Q| に相当するので |13Q| というオプションは無い。}% + +\paragraph{両面用レイアウト} +|oneside|、|twoside|、|vartwoside|。 +\Note |vartwoside| は |twoside| と同様だが +傍注が常に右側余白に出力される。 + +\paragraph{段組み} +|onecolumn|、|twocolumn|。 + +\paragraph{表題ページ} +|titlepage|、|notitlepage|。 + +\paragraph{起こし} +|openright|、|openleft|、|openany|。 +\Note \Pkg{jsreport}と\Pkg{jsbook}にのみ存在するオプション。 +\Note |openleft| は部・章の開始を見開き左側のページ +(偶数ページ)に強制する(左起こし)。 + +\paragraph{数式配置} +|leqno|、|fleqn|。 + +\paragraph{オーバーフル警告} +|final|、|draft|。 + +\paragraph{papersize special出力} +|papersize|。 +\Note BXJSクラスでは |papersize| は既定で有効。 + +\paragraph{英語化} +|english|。 + +\paragraph{エンジン種別} +|uplatex|、|autodetect-engine|。 +\Note 既に\ref{ssec:BXJS-specific-option}節で述べた通り。 + +\paragraph{magstyle指定} +|usemag|、|nomag|、|nomag*|。 +\Note BXJSクラスでは、これらは“|magstyle=|”を前置したものと +同等に扱われる。 +詳細は\ref{ssec:magstyle}節を参照。 + +\paragraph{和文数式ファミリ不使用} +|disablejfam|。 +\Note BXJSクラスでは |enablejfam=false| と同値。 +詳細は\ref{sec:Ja-math-fonts}節を参照。 + +\paragraph{ロゴ命令パッケージの読込} +|jslogo|、|nojslogo|。 +\Note BXJSクラスでは |nojslogo| が既定値である。 + +%------------------- +\subsection{JSクラスのオプションで使用不可能なもの} +\label{ssec:JS-deleted-option} + +\begin{itemize} +\item クラス変種指定\Means + |report|、|slide|。 + \Note |report| 相当は\Pkg{bxjsreport}、|slide| 相当は\Pkg{bxjsslide}と + 別クラスになっている。 +\item トンボ出力\Means + |tombow|、|tombo|、|mentuke| + \Note これは{\pLaTeX}のカーネル命令を利用しているので + とりあえず除外。 +\item 和文フォントメトリック指定\Means + |jis|、|mingoth|。 + \Note 異なるエンジンで汎用的に扱うのが難しい。 +\end{itemize} + +%------------------- +\subsection{クラスオプション設定の既定値} + +\begin{itemize} +\item BXJSクラス共通\Means + |a4paper|、|onecolumn|、|final|、 + |ja=minimal|、|jafont|は空、|japaram|は空、 + |scale=0.924715|、|magstyle=usemag|% + \footnote{Lua{\TeX}の0.87版以降では |magstyle=nomag*| が既定となる。 + \ref{ssec:magstyle}節参照。} +\item \Pkg{bxjsarticle}\Means + |10pt|、|oneside|、|notitlepage| +\item \Pkg{bxjsreport}\Means + |10pt|、|oneside|、|titlepage|、|openany| +\item \Pkg{bxjsbook}\Means + |10pt|、|twoside|、|titlepage|、|openright| +\item \Pkg{bxjsslide}\Means + |36pt|、|oneside|、|notitlepage| +\end{itemize} + +%------------------- +\subsection{magstyleオプション} +\label{ssec:magstyle} + +JSクラスにおけるページレイアウト決定の過程では、 +基底フォントサイズが10\,pt以外の場合に、 +「版面を拡大縮小する」という処理を採用している。 +\footnote{例えば、基底フォントサイズが20\,ptだとすると、 +まずは指定されたものの半分の縦横幅をもつ用紙に対して +基底フォントサイズが10\,ptとしてレイアウトを決定し、 +それを縦横2倍に拡大する、という過程をとっている。}% +これには、「フォントのオプティカルサイズの選択を最適にするため +\footnote{{\LaTeX}の既定の欧文フォントであるComputer Modernフォントが +オプティカルサイズの性質をもつことは有名であるが、 +少々癖が強くて、本文を10\,pt(cmr10)で組んだ場合と +12\,pt(cmr12)で組んだ場合でかなり異なった印象を受ける場合がある。 +JSクラスではそれを嫌って、本文(|\normalsize| のフォント)が +必ず「cmr10を拡大縮小したもの」で組まれることを +企図しているのである。}% +」という理由があり、またこれにより、多種の基底フォントサイズへの +対応が容易になるという利点もある。 +\footnote{BXJSで「任意の」基底フォントサイズが設定できるのも +この利点があるため。}% +ところがここで、JSクラスではこの“版面拡大”を実現するために +{\TeX}エンジンが持つ版面拡大機能(仮に「mag設定」と呼称する) +を用いていて、これについて批判されることが多い。 +また、現実問題として、mag設定が{\LaTeX}で用いられる機会は少ないため、 +実際に用いられた時にそれを想定していないパッケージが誤動作すると +いう問題もある。 + +これらの問題を緩和するため、BXJSクラスでは“版面拡大”について +他の実現方法を提供している。 +それを選択するのが以下に挙げる「magstyleオプション」である。 +\footnote{「magstyleオプション」の値は、|magstyle|をキー名にした +keyval形式(例えば|magstyle=nomag*|)で書くこともできる。 +1.1e版以前では、keyval形式のみがサポートされ、しかも値の識別子として +|usemag|/|nomag|/|nomag*|の代わりに|mag|/|real|/|xreal|を用いて +(つまり|magstyle=xreal|と書いて)いた。} + +\begin{itemize} +\item |usemag|\Means + JSクラスと同様に、“版面拡大”のためにmag設定を用いる。 +\item |nomag|\Means + mag設定を一切用いず、代わりに、 + 全てのページレイアウトのパラメタの値をスケールさせる。 + |\normalsize| や |\large| 等の高位フォントサイズ命令で指定される + フォントサイズもスケールさせるが、 + “オプティカルサイズの調整”は行わない。 + いわゆる「基本35書体」のようなオプティカルサイズでない + \footnote{或いは、オプティカルサイズに“変な癖”のない。}% + フォントのみを用いるのであれば、この設定が最も適切である。 +\item |nomag*|\Means + |nomag| と同様に、 + 全てのページレイアウトのパラメタの値をスケールさせる。 + さらに、“オプティカルサイズの調整”を実現するために、 + NFSSの実装コードにパッチを当てる。 + \footnote{要するに、|OT1/cmr/m/n/12| が要求された時に、 + |cmr12| でなくて |cmr10 at 12pt| が選ばれるようにする。}% + この場合、mag設定による不具合は起こらなくなるが、 + 当然、NFSSのパッチのせいで別の不具合が起こる可能性はある。 +\end{itemize} + +\Note Lua{\TeX}の0.87版以降では(PDF出力時の)「mag設定」の機能が +廃止されている。 +そのため、そのようなエンジンでは |usemag| はサポートされない +(エラーになる)。 + +\Note |magstyle| オプションの既定値は |usemag| である。 +ただし例外として、|usemag| がサポートされない +エンジンでは |nomag*| が既定値となる。 + +%=========================================================== +\section{和文ドライバ} +\label{sec:Ja-Driver} + +BXJSクラスでは様々なエンジンについて、そのエンジンおよび +それに対応するパッケージが提供する日本語処理機能を活用することで、 +日本語用の文書クラスとしての機能を実現している。 +そこでの汎用性を確保するため、 +“日本語処理機能と連携する部分”の実装をモジュールとして分離していて、 +これを\jemph{和文ドライバ}と呼ぶ。 +\footnote{\Pkg{graphicx}パッケージ等の「ドライバ」と類似した概念 +のためこの名称を用いた。}% +\Pkg{BXjscls}のバンドルでは以下に挙げる和文ドライバを提供している。 + +\begin{itemize} +\item standard和文ドライバ\Means +各エンジンについて、最も一般的に用いられる特定の +“日本語処理機能”(例えば |lualatex| なら\Pkg{\LuaTeX-ja}) +を連携対象とした和文ドライバ。 +(u){\pLaTeX}上のJSクラスと同じくらい容易に日本語が +書き始められることを目指している。 +\item minimal和文ドライバ\Means +“何も実装されていない”和文ドライバ。 +上級ユーザがプレアンブルや自作パッケージ等に +アドホックな連携コードを書いて、 +好きな“日本語処理機能”との連携を実現するために +用いることを想定している。 +\item pandoc和文ドライバ\Means +「Pandocモード」で仕様される和文ドライバ。 +standardドライバの機能を継承するが、 +「Pandocの既定のlatexテンプレート」が使われることを前提として、 +それとBXJSの設定を整合させるための措置を加えている。 +\Note 本マニュアルで「standard和文ドライバの場合」という場合、 +特に明示がない限りはpandoc和文ドライバも含まれる。 +\end{itemize} + +和文ドライバは自分で作製することも可能である。 +\footnote{和文ドライバの実装に必要な連携仕様の + 情報については、ソースコード説明書(bxjscls.pdf) + の付録Aを参照してほしい。}% +|bxjsja-XXX.def|(|XXX| は任意の文字列 +\footnote{{\LaTeX}の非特殊文字 +({\TeX}言語でいうとカテゴリコードが11または12の文字) +からなる必要がある。}% +)の名前のファイルに実装コードを書いてそのファイルを配置すると、 +|ja=XXX| のオプション指定でその和文ドライバを利用できる。 + +なお、和文ドライバ指定オプション(|ja|)の既定値は |minimal| +である。 +現実には、ほとんど全ての場合に |standard| が用いられると思われるが、 +種々の理由があって、これを既定値にはしていない。 + +\Note ただし、(u){\pLaTeX}については、日本語処理機能がエンジン自体に +備わっていて不可分なため少し異なる扱いになっている。 +\footnote{JSクラスの実装から分離した「日本語処理関連」のコードを +minimalに配置している。}% +|minimal| を用いる意義がほとんどないため、 +|standard| が既定値になっている。 + +\Note 1.8版より、(u){\pLaTeX}以外のエンジンについては、 +和文ドライバを明示指定することを推奨する。 + + +%=========================================================== +\section{和文ドライバパラメタ} +\label{sec:Ja-Driver-Param} + +和文ドライバパラメタ(|japaram| オプション)は +和文ドライバに依存する設定を指定するために用意されている。 +|japaram| オプションの値はそれ自身がキー値ペアのリストであり、 +一般的に次のような形式で指定される。 +\begin{quote}\small\begin{verbatim} +\usepackage[...,japaram={key=value,...},...]{bxjsarticle} +\end{verbatim}\end{quote} + +minimal和文ドライバには有効な和文ドライバパラメタは存在しない。 + +%------------------- +\subsection{standard和文ドライバの場合} + +以下の和文ドライバパラメタが存在する。 + +\begin{itemize} +\item |jis2004=|\Meta{真偽値}\Means + 漢字の字形について「2004JIS字形を優先させる」処理を行うか。 + 真の場合、以下の処理が行われる。既定値は偽。 + \begin{itemize} + \item グローバルオプションに |jis2004| を追加する。% + \footnote{\Pkg{japanese-otf}や\Pkg{luatexja-preset}などの + パッケージが |jis2004| オプションを利用する。} + \item エンジンが{(u)\pLaTeX}の場合、|pxchfon| と |pxbabel| + パッケージに予め |prefer2004jis| オプションが渡される。 + \end{itemize} +\item |units=|\Meta{真偽値}\Means + これを真にすると、 + {\LaTeX}における長さ指定において、{\pTeX}の和文用の単位 + (|zw|、|zh|、|(true)Q|、|(true)H|) + を全てのエンジンで使用できるようにする。 + 既定値は偽。 + \Note \Pkg{bxcalc}パッケージを読み込む。 + \Note 厳密にいうと、「\Pkg{calc}の長さ数式が使える箇所」 + において和文用の単位が使用できるようになる。 +\item |font={|\Meta{文字列}|}|\Means + standard和文ドライバが利用する和文フォントパッケージについて + 追加のオプションを指定する。 +\end{itemize} + + +%=========================================================== +\section{ユーザ用命令} +\label{sec:Commands} + +原則として、BXJSクラスで追加されたものだけを説明する。 + +%------------------- +\subsection{レイアウト設定関連} +\label{ssec:page-layout} + +BXJSクラスではページレイアウトの設定に\Pkg{geometry}パッケージを +用いて次の手順で行っている。 + +\begin{enumerate} +\item + (基底フォントサイズにより決定されたmag値を実際に設定する。) +\item + \Pkg{geometry}で次のパラメタを設定する。 + \label{itm:pl-param} + \begin{enumerate} + \item + クラスオプションで指定された用紙サイズ、 + および|truedimen| とドライバ指定。 + \label{itm:pl-parama} + \item + \Pkg{bxjsarticle}/\Pkg{bxjsreport}の場合は次のパラメタ値。 + \label{itm:pl-paramb} +\begin{quote}\small\begin{verbatim} +headheight=10pt, footskip=0.03367\paperheight, +headsep=\footskip-\topskip, includeheadfoot, +hscale=0.76, hmarginratio=1:1, vscale=0.83, vmarginratio=1:1 +\end{verbatim}\end{quote} + \item + \Pkg{bxjsbook}の場合は次のパラメタ値。% + \label{itm:pl-paramc} +\begin{quote}\small\begin{verbatim} +headheight=10pt, headsep=6mm, nofoot, includeheadfoot, +hmargin=18mm, vscale=0.83, vmarginratio=1:1 +\end{verbatim}\end{quote} + \Note \Pkg{bxjsbook}の1.2a版以前では、この設定の中の + “|hmargin=18mm|”の代わりに“|hmargin=36mm,| |hmarginratio=1:1|” + を用いていた。 + これでは\Pkg{jsbook}の水平マージン設定と同等にならないため + 1.3版で現在の設定に修正された。 + もし1.2a版以前との互換性を保ちたい場合は、 + クラスオプションに |layout=v1| を指定してほしい。 + \item + \Pkg{bxjsslide}の場合は次のパラメタ値。 + \label{itm:pl-paramd} +\begin{quote}\small\begin{verbatim} +noheadfoot, hscale=0.9, hmarginratio=1:1, +vscale=0.944, vmarginratio=1:1 +\end{verbatim}\end{quote} + \end{enumerate} +\item + 後処理を行う。 + \label{itm:pl-post}% + 以下の処理が含まれる。 + \begin{itemize} + \item |textwidth| を全角幅の整数倍に、|textheight| を整数行分の + 自然長になるように丸める。 + \item |marginpar| 関連の設定を行う。 + \end{itemize} + \Note ただし、横幅の全角整数倍への丸めは、|whole-zw-lines=false| + 指定時には抑止される。 +\end{enumerate} + +ページレイアウトの再設定のために次の命令が用意されている。 +\begin{itemize} +\item |\setpagelayout{|\Meta{設定}|}|\Means + 現在のページレイアウトの設定の一部を修正する。 + \Meta{設定}は\Pkg{geometry}のパラメタの記述であり、 + 現在の設定に追記して\Pkg{geometry}が再設定を行った後、 + 再び\ref{itm:pl-post}の後処理が行われる。 +\item |\setpagelayout*{|\Meta{設定}|}|\Means + 用紙以外の設定をリセットして改めてページレイアウトの設定を行う。 + 具体的には、まず\Pkg{geometry}の |reset| オプションで初期化し、 + その後\ref{itm:pl-parama}と\Meta{設定}の + 内容を用いて再設定を行った後、 + 再び\ref{itm:pl-post}の後処理が行われる。 +\item |\setpagelayout+{|\Meta{設定}|}|\Means + |\setpagelayout*| の変種で、「本文領域のサイズと位置」の設定のみを + リセットして改めてページレイアウトの設定を行う。 + すなわち、前項の“再設定”の際に、 + \ref{itm:pl-paramb}~\ref{itm:pl-paramd}の内容のうち + 「本文領域」以外のものが追加される。 +\end{itemize} + +なお、|\geometry| 命令を直接呼び出すことも可能である。 +当然この場合は\ref{itm:pl-post}の後処理は行われない。 + +%------------------- +\subsection{構造マークアップ関連} + +\begin{itemize} +\item |\subtitle{|\Meta{テキスト}|}|\Means + サブタイトルを設定する。 + \Note |\maketitle| の出力にサブタイトルが含まれるようになる。 +\item |chapterabstract| 環境\Means + \Pkg{jsbook}クラスの |abstract| 環境 + \footnote{article系やreport系のクラスにあるような + (文書要旨のための)abstract 環境は、book系クラスでは + 用意されていないことが多いことに注意。}% + と等価な環境で、 + 「各章の初めにちょっとしたことを書く」用途を想定したもの。 + (ただし使用可能な場所に特に制限はない。) + + なお、|abstract| 環境の機能については継承元のJSクラスと同一に + なるため以下のようになる。 + \begin{itemize} + \item \Pkg{bxjsarticle}および|layout=v2|指定の\Pkg{bxjsreport}\Means + \Pkg{jsarticle}/\Pkg{jsreport}クラスと同じ、 + つまり「文書要旨」のための環境。 + \item \Pkg{bxjsbook}および|layout=v1|指定の\Pkg{bxjsreport}\Means + \Pkg{jsbook}クラスと同じ、 + つまり |chapterabstract| 環境と等価。 + \end{itemize} + +\item |\jayear|\Means + 和暦表示(|\和暦|)が有効な時の |\today| のテキスト中の年号 + (「年」より前の部分、例えば「平成28」) + の部分を表すマクロ。 +\end{itemize} + +|label-section=modern| の場合に限り、以下の命令が利用できる。 + +\begin{itemize} +\item |\labelsection|\Means + 節見出し(|\section|)における節番号の表示形式を表すマクロ。 + 通常、|\thesection|(|section| カウンタの出力形式)に + 必要な装飾(“節”や“§”など)を加えたテキストを指定する。 + \par + 既定値は以下に示すものと同等になっている。 + \begin{itemize} + \item 文書開始時は“|\presectionname\thesection\postsectionname|”。 + \item 付録開始時(|\appendix| 実行時)に + “|\appendixname\thesection|”に切り替わる。 + \footnote{|\labelsection| を実際に再定義するわけではないので、 + ユーザが独自の |\labelsection| を設定している場合は + 切替は発生しなくなる。} + \end{itemize} + \Note |label-section=compat| の場合は(JSクラスと同様に) + 付録開始時に + 「|\presectionname| を |\appendixname| で上書きする」 + という動作が発生するが、|label-section=modern| では + これは起こらない。 +\item |\labelsubsection|/|\labelsubsubsection|\Means + これらのマクロが定義されている場合は、各々の内容のテキストが + 小節見出しおよび小々節見出しの表示形式として利用される。 + 未定義の場合は |\thesub(sub)section| で代用される。 +\end{itemize} + +%------------------- +\subsection{和文用設定関連} +\label{ssec:ja-settings} + +\begin{itemize} +\item |\jsZw|\Means + 和文の全角幅を表す。 + 例えば |2\jsZw| が pLaTeX の |2zw| に相当する。 +\item |\zw|\Means + |\jsZw| の別名。 + \footnote{\Pkg{\LuaTeX-ja}では「実際の全角幅」を表す + 命令 |\zw|({\pLaTeX}の |zw| と本当に等価)が規定されている。 + |lualatex| エンジン指定かつ和文ドライバが |standard| の場合は + この |\zw| の定義がそのまま使われる。 + (従って |use-zw| は実質的に意味を持たない。) + なお、|\jsZw| は「規約上の全角幅」であり、「実際の全角幅」と本来は + 一致するはずだが、実際には計算誤差のせいで僅かに値が異なる。}% + ただし |use-zw=false| 指定時は定義されない。 +\item |\zwspace|\Means + 全角(|\jsZw|)幅の水平空き。 +\item |\_|(|\|\,の後に全角空白文字)\Means + |\zwspace| の別名。 + 全角幅の水平空き。 + \Note \Pkg{jlreq}クラスと互換の命令。 + ただしBXJSクラスはJLREQの和字間隔の規定とは無関係であり、 + この命令は単純に |\hspace|\wbr|{\jsZw}| と等価である。 +\item |\jaenspace|\Means + 半角(0.5\,|\jsZw|)幅の水平空き。 +\item |\allowoldfontcommands|\Means + これ以降に実行される二文字フォント命令を警告の対象にしない。 +\item |\disallowoldfontcommands|\Means + これ以降に実行される二文字フォント命令を警告の対象にする。 +\Note 詳細については\ref{sec:Old-font-commands}節を参照されたい。 +\end{itemize} + +\subsubsection{standard和文ドライバの場合} + +standard和文ドライバ(およびそれを継承するドライバ)では和文に関連する +文書ソース記述をエンジンに依らずに共通になることを目指している。 +従って、和文関連の組版パラメタの設定についても +「共通の命令」が提供される。 + +\begin{itemize} +\item 和文ファミリ変更命令\Means + {\pLaTeX}と同様に、 + |\mcfamily| で「明朝」、|\gtfamily| で「ゴシック」に変更される。 + |\textmc|、|\textgt| も使える。 +\item 欧文ファミリ変更命令での和文の連動\Means + JSクラスと同様 + \footnote{ちなみに、(u){\pLaTeX}の既定ではこの連動は起こらない。}% + に、|\rmfamily| で和文が「明朝」、 + |\sffamily| および |\ttfamily| で和文が「ゴシック」に変更される。 +\item |\jQ|、|\jH|、|\trueQ|、|\trueH|\Means + それぞれ{\pLaTeX}の単位Q、H、true\,Q、true\,Hに相当する長さ。 +\item |\ascQ|\Means + 1\,true\,Qを和文スケール値で割った長さ。 + \footnote{命令名は“anti-scaled Q”の略。}% + 例えば、|\fontsize{10\ascQ}{16\trueH}| + で和文のサイズが10\,Qになる。% + \footnote{1.5c版で導入された |\jafontsize| 命令を用いて % + |\jafontsize{10trueQ}{16trueH}| としてもよい。} +\item |\ascpt|\Means + 1\,true\,ptを和文スケール値で割った長さ。 + 例えば、|\fontsize{9\ascpt}{13truept}| + で和文のサイズが9ポイントになる。 +\item |\setxkanjiskip{|\Meta{長さ}|}|\Means + 和欧文間空白の量を指定する。 + {\pLaTeX}での |\setlength{\xkanjiskip}{|\Meta{長さ}|}| に相当する。 +\item |\getxkanjiskip|\Means + 現在の和欧文間空白の量を表す文字列に展開される。 + {\pLaTeX}での |\xkanjiskip| の読出 + \footnote{{\TeX}言語でいうと |\the\xkanjiskip|。}% + に相当する。 +\item |\autoxspacing|/|\noautoxspacing|\Means + 和欧文間空白の挿入を有効/無効にする。 + {\pLaTeX}の同名の命令と同等。 +\item |\setkanjiskip{|\Meta{長さ}|}|\Means + 和文間空白の量を指定する。 + {\pLaTeX}での |\setlength{\kanjiskip}{|\Meta{長さ}|}| に相当する。 +\item |\getkanjiskip|\Means + 現在の和文間空白の量を表す文字列に展開される。 + {\pLaTeX}での |\kanjiskip| の読出 + \footnote{{\TeX}言語でいうと |\the\kanjiskip|。}% + に相当する。 +\item |\autospacing|/|\noautospacing|\Means + 和文間空白の挿入を有効/無効にする。 + {\pLaTeX}の同名の命令と同等。 +\item |\jathinspace|\Means + 和欧文間空白を挿入する。 +\item |\>|\Means + (非数式モードで + \footnote{|\>| という命令名は、plain {\TeX}では数式中の空白 + ({\LaTeX}の |\:| と同等)を表す。 + このため、実際には{\LaTeX}でも |\>| は |\:| と同等の命令として + 定義されている。 + この「plain互換の |\>|」を利用したコードが影響を受けるのを避ける + ため、数式中では |\>| は従来通り |\:| と同等の動作を行う。}% + )和欧文間空白を挿入する。 + \Note |jaspace-cmd=false| 指定時は定義されない。% + \footnote{ただし、standard和文ドライバで自動的に読み込まれる + \Pkg{zxjatype}や\Pkg{bxcjkjatype}のパッケージは、 + それ自体が同様の機能の |\>| を提供することにも注意を要する。} +\item |\jachar{|\Meta{文字1つ}|}|\Means + 指定の文字を和文文字として(現在の和文フォントで)出力する。 +\item |\jafontsize{|\Meta{フォントサイズ\xast}|}{|\Meta{行送り\xast}|}|\Means + “和文規準”でフォントサイズを指定する。 + すなわち、和文の1\,zwが\Meta{フォントサイズ}と等しくなるように + フォントサイズを設定する。 +\item 和文数式フォント命令\Means + JSクラスと同様に、 + |\mathmc| で「明朝」、|\mathgt| で「ゴシック」の + 和文数式フォントを指定する。 +\item 欧文数式フォント命令での和文の連動\Means + |\mathrm| で和文が「明朝」、 + |\mathsf| および |\mathtt| で和文が「ゴシック」に指定される。 + \Note JSクラスとは異なり、連動の組合せは + テキストと同一であることに注意。 +\end{itemize} + +例えば、{\pLaTeX}において、次のように「和文間空白」を +利用して均等割りを行うという技法が知られている。 + +\begin{quote}\small\begin{verbatim} +%% \kintouwari{<整数n>}{<テキスト>} +% n全角の幅にテキストを均等割りで出力する. +\newcommand\kintouwari[2]{{% + \setlength{\kanjiskip}{\fill}% + \makebox[#1zw][s]{#2}}} +\end{verbatim}\end{quote} + +これと同等のものを、次のようにエンジン非依存な形で書くことができる。 + +\begin{quote}\small\begin{verbatim} +\newcommand\kintouwari[2]{{% + \setkanjiskip{\fill}% + \makebox[#1\zw][s]{#2}}} +\end{verbatim}\end{quote} + +%=========================================================== +\section{数式中の和文出力について} +\label{sec:Ja-math-fonts} + +minimal和文ドライバは数式中の和文出力の機能を何も提供しない。 +従って、そのような機能を提供する他のパッケージを併用するので +ない限り、数式中に和文を書いたときの挙動は未定義である。 + +standard和文ドライバ(およびそれを継承する和文ドライバ)に +おける数式中の和文出力の扱いは、エンジンと |enablejfam| オプション +の値の組合せにより異なり、表\ref{tbl:ja-math}に示すようになる。 +以下でこの表に関する補足説明を行う。 +\begin{itemize} +\item この表にある以外のエンジンと |enablejfam| 値の組合せは + 許容されない。 + この場合、警告が出て、|enablejfam| が可能な値に自動的に変更される。 +\item 「直書き」が「可」の場合、数式フォント命令(|\mathXX{}|)の外に + 書いた和文文字は明朝体で出力される。 + 「不可」の場合、そのような和文文字の扱いは未定義である。 +\item 「|\mathmc|/|gt|」が「サポート有り」の場合、これらの命令は + “本物”の数式フォント命令として働く。 + 「フォールバック」の場合は、これらの命令は内部で一旦テキストモードに + 切り替えて非数式として出力される。 + このフォールバック機能を実用したい場合は、 + \Pkg{amstext}(または\Pkg{amsmath})パッケージの併用が望ましい。% + \footnote{\Pkg{amstext}を読み込まない場合、 + 添字中で |\mathmc|/|gt| を用いたときに + 文字サイズが非添字のものに戻ってしまうという不具合が出る。} +\end{itemize} + +\DeleteShortVerb{\|} +\MakeShortVerb{\+} +\begin{table}[t] + \caption{standard和文ドライバにおける数式中の和文出力のサポート} + \label{tbl:ja-math} + \small\centering + \begin{tabular}{ll|ccc} + \hline + エンジン & +enablejfam+ & 直書き & +\mathmc+/+gt+ & 和欧文連動 \\ + \hline + +(u)platex+ & +true+(既定) & 可 & サポート有り & 有り \\ + & +false+ & 不可 & フォールバック & --- \\ + +lualatex+ & +true+ & 可 & サポート有り & 有り \\ + +xelatex+ & +true+ & 可 & フォールバック & 無し \\ + & +false+(既定)& 不可 & フォールバック & --- \\ + +pdflatex+ & +false+ & 不可 & フォールバック & --- \\ + \hline + \end{tabular} +\end{table} +\DeleteShortVerb{\+} +\MakeShortVerb{\|} + +%=========================================================== +\section{“二文字フォント命令”に対する警告} +\label{sec:Old-font-commands} + +ここでいう“二文字フォント命令”というのは、|\bf| や |\it| 等の +{\LaTeX}~2.09で標準であったフォント選択命令のことである。 +\footnote{なお、|\em| は「二文字の名前のフォント命令」であるが、 + これは{\LaTeXe}でも標準命令であり、“二文字フォント命令”には + 含まれない。}\ +{\LaTeXe}においては、これらに代わって、|\bfseries| 等の +NFSS方式の新しい命令群が標準となり、 +古い二文字フォント命令はカーネルではもはサポートされなくなった。 +しかし同時に、二文字フォント命令を利用したパッケージを +動作させるための“当面の” +\footnote{ちなみに、 + {\LaTeXe}が最初にリリースされたのは1994年のことである。}% +互換性対策として、 +「標準の文書クラス(\Pkg{article}、\Pkg{book}等)で二文字フォント命令の +サポートを行う」という方針がとられた。 +これに倣って、他の文書クラスの多くもクラスのレベルで +二文字フォント命令をサポートしていて、 +BXJSクラスもその例に含まれる。 + +ところが最近になって、一部の文書クラス +(\Pkg{KOMA-Script}クラス群や\Pkg{memoir}クラス等) +において、二文字フォント命令を明示的に非推奨の扱いにした上で、 +その使用に制限を設ける +(警告を出す、オプションを指定しないと使えない、等) +という措置が取られるようになっている。 + +これに合わせて、BXJSクラスでは1.2版より +二文字フォント命令を非推奨とし、また、 +既定でその使用に対して警告を出すようにした。 + +%------------------- +\subsection{警告の内容} + +文書中で |\bf| などの二文字フォント命令が呼び出された場合、 +コンパイルの最後に(一度だけ)以下の警告メッセージが表示される。 + +\begin{quote}\small\begin{verbatim} +Class bxjsarticle Warning: Some old font commands were used in text: +(bxjsarticle) \bf \it +(bxjsarticle) You should note, that since 1994 LaTeX2e provides a +(bxjsarticle) new font selection scheme called NFSS2 with several +(bxjsarticle) new, combinable font commands. The class provides +(bxjsarticle) the old font commands only for compatibility. +\end{verbatim} +\end{quote} + +なお、この警告は、パッケージの機能の実装として用いられたものも含めて +全ての二文字フォント命令の呼出が対象になる。 +ただし例外として、thebibliography環境の内部で呼び出されたものだけは +対象から除外される。 +{\BibTeX}の文献スタイルファイル(|.bst|)や文献データベース(|.bib|) +のファイルは(パッケージと比較しても)極めて古いものが +割と普通に使い続けられることが多い。 +そういった極めて古いファイルに由来する二文字フォント命令を +警告したとしても、多くの場合、ユーザ側には対処する方法が存在しない。 +これが文献リスト環境中で警告を抑止する理由である。 + +%------------------- +\subsection{警告の制御} + +二文字フォント命令に対する警告の有無はクラスオプションで制御できる。 + +\begin{itemize} +\item |oldfontcommands|\Means + 二文字フォント命令を警告の対象にしない。 +\item |nooldfontcommands|(既定)\Means + 二文字フォント命令を警告の対象にする。 +\end{itemize} + +また、以下の命令により、文書中で一時的に警告の設定を変えられる。 +\footnote{これらの命令の効果はグルーピングの影響を受ける。} + +\begin{itemize} +\item |\allowoldfontcommands|\Means + これ以降に実行される二文字フォント命令を警告の対象にしない。 +\item |\disallowoldfontcommands|\Means + これ以降に実行される二文字フォント命令を警告の対象にする。 +\end{itemize} + +%------------------- +\subsection{将来的な二文字フォント命令の扱い} + +\jemph{現在の版で存在する}和文ドライバを使用する場合には、 +将来的に以下の方針が維持される。 + +\begin{itemize} +\item 二文字フォント命令に対する警告の様式は、 + 今後変更される可能性がある。 +\item しかし、将来に二文字フォント命令のサポートが廃止されることはない。 +\item |oldfontcommands| オプションよおび |\allowoldfontcommands| 命令 + は継続して提供され、 + これらの機能を用いた場合は、二文字フォント命令に関する警告が + 端末に表示されることは一切無い。 +\end{itemize} + +%=========================================================== +\end{document} + +%=========================================================== +\appendix +\section{パッケージレベル公開命令の一覧} + +\begin{itemize} +% \jsAtEndOfClass はBXJSの補助パッケージ専用 +\item |\jsBaseFontSize| +\item |\jsDocClass| + \begin{itemize} + \item |\jsArticle| + \item |\jsBook| + \item |\jsReport| + \item |\jsSlide| + \end{itemize} +\item |\ifjsDraft| +\item |\jsEngine| +\item |\jsFontSizeChanged| +\item |\jsGeometryOptions| +\item |\jsInhibitGlue| +\item |\jsInhibitGlueAtParTop| +\item |\jsInJaParen| +\item |\ifjsInPdfMode| +\item |\jsJaChar| +\item |\jsJaFont| +\item |\jsJaParam| +\item |\jsKanjiSkip| +\item |\jsLetHeadChar| +\item |\jsParagraphMark| +\item |\jsResetDimen| +\item |\jsScale| +\item |\ifjsSeireki| +\item |\jsSimpleJaSetup| +\item |\jsSubtitle| +\item |\jsTextWidthLimit| +\item |\jsUnusualPtSize| +% \jsUseMinimalPageLayout はテスト用 +\item |\ifjsWitheTeX| +\item |\ifjsWithupTeX| +\item |\jsXKanjiSkip| +% \jsZw はユーザレベル命令 +\end{itemize} + +%% EOF diff --git a/language/japanese/BX/bxjscls/bxjscls.dtx b/language/japanese/BX/bxjscls/bxjscls.dtx new file mode 100644 index 0000000000..c46d0fd9b7 --- /dev/null +++ b/language/japanese/BX/bxjscls/bxjscls.dtx @@ -0,0 +1,11608 @@ +% ^^A -*- japanese-latex -*- +% \iffalse meta-comment +% +% BXJS ドキュメントクラス +% (BXJS Document Classes) +% +% 本ソフトウェアは奥村晴彦氏および日本語TeX開発コミュニティによる +% 「pLaTeX2ε新ドキュメントクラス」を +% 「八登 崇之(別名 ZR)」が改変したものである。 +% (This software is a modified version of +% "New Document CLasses for pLaTeX2e" +% authored by Haruhiko Okumura and the Japanese TeX Development Community, +% and the modification is by Takayuki YATO (aka."ZR").) +% +% 本ソフトウェアは修正 BSD ライセンスの下で配布される。 +% (This software is distributed under the BSD 2-Clause License.) +% +% 以下に原版についての原版著者による情報を示す: +% (Below is shown the information on the original version, +% provided by the original authors.) +%--------------------------------------- +% +% pLaTeX2ε新ドキュメントクラス(日本語 TeX 開発コミュニティ版) +% 原作者:奥村晴彦 <okumura@okumuralab.org> +% +%--------------------------------------- +% +% Copyright 1993-2016 +% The LaTeX3 Project and any individual authors listed elsewhere +% in this file. +% +% Copyright 1995-1999 ASCII Corporation. +% Copyright 1999-2016 Haruhiko Okumura +% Copyright 2016-2019 Japanese TeX Development Community +% +% Copyright 2013-2019 Takayuki YATO (aka. "ZR") +% +% \fi +% \CheckSum{0} +% +% \iffalse +% +% \begin{macrocode} +%<article|report|book|slide>\NeedsTeXFormat{LaTeX2e} +%<article>\ProvidesClass{bxjsarticle} +%<report>\ProvidesClass{bxjsreport} +%<book>\ProvidesClass{bxjsbook} +%<slide>\ProvidesClass{bxjsslide} +%<minimal>\ProvidesFile{bxjsja-minimal.def} +%<standard>\ProvidesFile{bxjsja-standard.def} +%<modern>\ProvidesFile{bxjsja-modern.def} +%<pandoc>\ProvidesFile{bxjsja-pandoc.def} +%<compat>\ProvidesPackage{bxjscompat} +%<cjkcat>\ProvidesPackage{bxjscjkcat} +%<ancpandoc>\ProvidesPackage{bxjspandoc} +%<*driver> +\ProvidesFile{bxjscls.dtx} +%</driver> + [2019/07/27 v1.9h BXJS document classes] +% based on jsclasses [2019/07/25] +% [2019/06/23 v1.9g BXJS document classes] +% [2019/03/10 v1.9f BXJS document classes] +% [2019/01/13 v1.9e BXJS document classes] +% [2018/10/03 v1.9d BXJS document classes] +% [2018/09/04 v1.9c BXJS document classes] +% [2018/08/20 v1.9b BXJS document classes] +% [2018/07/20 v1.9a BXJS document classes] +% based on jsclasses [2018/06/23] +% [2018/04/19 v1.9 BXJS document classes] +% [2018/04/14 v1.8b BXJS document classes] +% [2018/03/29 v1.8a BXJS document classes] +% based on jsclasses [2018/03/11] +% [2018/03/03 v1.8 BXJS document classes] +% [2018/02/04 v1.7c BXJS document classes] +% [2018/01/28 v1.7b BXJS document classes] +% [2017/12/09 v1.7a BXJS document classes] +% [2017/10/21 v1.7 BXJS document classes] +% [2017/09/28 v1.6b BXJS document classes] +% [2017/09/24 v1.6a BXJS document classes] +% [2017/09/09 v1.6 BXJS document classes] +% based on jsclasses [2017/09/03] +% [2017/07/07 v1.5d BXJS document classes] +% [2017/06/10 v1.5c BXJS document classes] +% [2017/04/01 v1.5b BXJS document classes] +% [2017/03/14 v1.5a BXJS document classes] +% [2017/03/11 v1.5 BXJS document classes] +% based on jsclasses [2017/03/05] +% [2017/02/03 v1.4 BXJS document classes] +% [2017/01/28 v1.3a BXJS document classes] +% based on jsclasses [2017/01/13] +% [2016/11/01 v1.3 BXJS document classes] +% based on jsclasses [2016/10/08] +% [2016/08/16 v1.2a BXJS document classes] +% [2016/08/01 v1.2 BXJS document classes] +% based on jsclasses [2016/07/18] +% [2016/07/16 v1.1f BXJS document classes] +% based on jsclasses [2016/07/15] +% [2016/05/28 v1.1e BXJS document classes] +% [2016/05/21 v1.1d BXJS document classes] +% [2016/05/01 v1.1c BXJS document classes] +% [2016/03/27 v1.1b BXJS document classes] +% [2016/02/20 v1.1a BXJS document classes] +% [2016/02/14 v1.1 BXJS document classes] +% [2015/11/21 v1.0d BXJS document classes] +% [2015/10/18 v1.0c BXJS document classes] +% [2015/09/07 v1.0b BXJS document classes] +% [2015/08/23 v1.0a BXJS document classes] +% [2015/08/05 v1.0 BXJS document classes] +% based on jsclasses [2014/02/07] +% [2013/10/03 v0.9pre BXJS document classes] +% based on jsclasses [2013/05/14] +%<*driver> +\documentclass[a4paper]{ltjsarticle} +\usepackage[ipaex]{luatexja-preset} +\usepackage{metalogo} +\usepackage{doc} +\usepackage{color} +\newcommand{\Pkg}[1]{\textsf{#1}} +\newcommand{\Meta}[1]{$\langle$\mbox{}#1\mbox{}$\rangle$} +\newcommand{\Note}{\par\noindent ※} +\newcommand{\TODO}{\par\noindent + {\usefont{OT1}{cmss}{sbc}{n}\color{red}TODO:}\ } +\newcommand{\Means}{~:\quad} +\newcommand{\OR}{$\;|\;$} +\newcommand{\ZRX}{☃} +\newenvironment{ZRnote} + {\StartZRnote}{\EndZRnote} +\newcommand*{\ZRnoteline}[1]{ + \par\noindent\makebox[0pt][l]{\rule[.5ex]{\linewidth}{.4pt}}% + \makebox{\hspace{.05\linewidth}\rule[#1ex]{.9\linewidth}{.2pt}}\par} +\newcommand*{\StartZRnote}{\ZRnoteline{.1}} +\newcommand*{\EndZRnote}{\ZRnoteline{.9}} +\providecommand*{\eTeX}{$\varepsilon$-\TeX} +\providecommand*{\upTeX}{u\pTeX} +\providecommand*{\XeTeX}{XeTeX} +\newcommand*{\zrWDash}{\symbol{"301C}}% WAVE DASH +\newcommand*{\zrNote}[1]{[#1]} +\makeatletter +\providecommand*\jsTocLine{\leaders\hbox{% + $\m@th \mkern \@dotsep mu\hbox{.}\mkern \@dotsep mu$}\hfill} +\def\meta@font@select{\rmfamily\itshape} +\makeatother +\addtolength{\textwidth}{-1in} +\addtolength{\evensidemargin}{1in} +\addtolength{\oddsidemargin}{1in} +\addtolength{\marginparwidth}{1in} +\setlength\marginparpush{0pt} +% \OnlyDescription +\DisableCrossrefs +\CodelineNumbered +\setcounter{StandardModuleDepth}{1} +\GetFileInfo{bxjscls.dtx} +\begin{document} + \DocInput{bxjscls.dtx} +\end{document} +%</driver> +% \end{macrocode} +% +% \fi +% +%^^A======================================================== +% \title{\Pkg{BXjscls} パッケージ\\ +% (BXJS文書クラス集)\\ +% ソースコード説明書} +% \author{八登崇之\ (Takayuki YATO; aka.~``ZR''} +% \date{\fileversion\quad[\filedate]} +% \maketitle +% +% \MakeShortVerb{\|} +% +% \begin{ZRnote} +% この文書はソースコード説明書です。 +% 一般の文書作成者向けの解説については、 +% ユーザマニュアル |bxjscls-manual.pdf| を参照してください。 +% \end{ZRnote} +% +% \tableofcontents +% +% \section{はじめに} +% +% \begin{ZRnote} +% この文書は「BXJSドキュメントクラス」のDocStrip形式のソースである。 +% インストール時のモジュール指定は以下のようである。 +% \begin{quote} +% \begin{tabular}{lll} +% $\langle$\textsf{article}$\rangle$ & \texttt{bxjsarticle.cls} +% & 短いレポート(章なし) \\ +% $\langle$\textsf{report}$\rangle$ & \texttt{bxjsreport.cls} +% & 長いレポート(章あり) \\ +% $\langle$\textsf{book}$\rangle$ & \texttt{bxjsbook.cls} +% & 書籍用 \\ +% $\langle$\textsf{slide}$\rangle$ & \texttt{bxjsslide.cls} +% & スライド用 \\ +% \end{tabular} +% \end{quote} +% +% 本ドキュメントクラスは奥村晴彦氏および日本語TeX開発コミュニティ +% による「p\LaTeXe 新ドキュメントクラス」に改変を加えたものである。 +% 本ドキュメントクラスに関する説明は全てこの形式の枠の中に記す。 +% 枠の外にあるものは原版著者による原版に対する解説である。 +% \end{ZRnote} +% +% これは\LaTeX3 Projectの \texttt{classes.dtx} と +% 株式会社アスキーの \texttt{jclasses.dtx} に基づいて +% もともと奥村晴彦により作成されたものです。 +% 現在は日本語\TeX 開発コミュニティによりGitHubで管理されています。 +% \begin{quote} +% |https://github.com/texjporg/jsclasses| +% \end{quote} +% +% [2002-12-19] いろいろなものに収録していただく際にライセンスを明確にする +% 必要が生じてきました。アスキーのものが最近はmodified BSDライセンスになっ +% ていますので,私のものもそれに準じてmodified BSDとすることにします。 +% +% [2016-07-13] 日本語\TeX 開発コミュニティによる管理に移行しました。 +% +% [2009-02-22] 田中琢爾氏によるup\LaTeX 対応パッチを取り込みました。 +% +% ここでは次のドキュメントクラス(スタイルファイル)を作ります。 +% +% [2017-02-13] forum:2121の議論を機に,jsreportクラスを新設しました。 +% 従来のjsbookの |report| オプションと比べると,|abstract| 環境の使い方 +% および挙動がアスキーのjreportに近づきました。 +% +% \begin{quote} +% \begin{tabular}{lll} +% $\langle$\textsf{article}$\rangle$ & \texttt{jsarticle.cls} & 論文・レポート用 \\ +% $\langle$\textsf{book}$\rangle$ & \texttt{jsbook.cls} & 書籍用 \\ +% $\langle$\textsf{report}$\rangle$ & \texttt{jsreport.cls} & レポート用 \\ +% $\langle$\textsf{jspf}$\rangle$ & \texttt{jspf.cls} & 某学会誌用 \\ +% $\langle$\textsf{kiyou}$\rangle$ & \texttt{kiyou.cls} & 某紀要用 +% \end{tabular} +% \end{quote} +% +% \iffalse +% +% \LaTeXe あるいは\pLaTeXe 標準のドキュメントクラスとの違いを説明してお +% きます。 +% +% \paragraph{JISフォントメトリックの使用} +% +% ここでは和文TFM(\TeX フォントメトリック)として東京書籍印刷の小林肇さ +% んの作られたJISフォントメトリック \texttt{jis.tfm},\texttt{jisg.tfm} +% を標準で使います。従来のフォントメトリック \texttt{min10.tfm}, +% \texttt{goth10.tfm} の類を使うには +% \begin{quote} +% |\documentclass[mingoth]{jsarticle}| +% \end{quote} +% のように \texttt{mingoth} オプションを付けます。 +% +% \paragraph{サイズオプションの扱いが違う} +% +% 標準のドキュメントクラスでは本文のポイント数を指定するオプションがあり +% ましたが,ポイント数は10,11,12しかなく,それぞれ別のクラスオプション +% ファイルを読み込むようになっていました。しかも,標準の10ポイント以外で +% は多少フォントのバランスが崩れることがあり,あまり便利ではありませんで +% した。ここでは文字サイズを増すとページを小さくし,\TeX の |\mag| プリ +% ミティブで全体的に拡大するという手を使って,9ポイントや21,25,30,36, +% 43ポイント,12Q,14Qの指定を可能にしています。 +% \fi +% +% \StopEventually{} +% +% 以下では実際のコードに即して説明します。 +% \begin{macrocode} +%<*cls> +%% このファイルは日本語文字を含みます. +% \end{macrocode} +% +% \begin{macro}{\bxjs@clsname} +% +% 文書クラスの名前です。エラーメッセージ表示などで使われます。 +% +% \begin{macrocode} +%<article>\def\bxjs@clsname{bxjsarticle} +%<book>\def\bxjs@clsname{bxjsbook} +%<report>\def\bxjs@clsname{bxjsreport} +%<slide>\def\bxjs@clsname{bxjsslide} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\ifjsc@needsp@tch} +% +% [2016-08-22] 従来\texttt{jsclasses}では,\pLaTeX や\LaTeX の +% 不都合な点に対して,クラスファイル内で独自に対策を施していま +% した。しかし,2016年以降,コミュニティ版\pLaTeX が次第に対策 +% コードをカーネル内に取り込むようになりました。そこで,新しい +% \pLaTeX カーネルと衝突しないように,日付が古い場合だけパッチ +% をあてる場合があります。この処理に使用するフラグを定義します。 +% +% \begin{macrocode} +\newif\ifjsc@needsp@tch +\jsc@needsp@tchfalse +% \end{macrocode} +% \end{macro} +% +% \paragraph{BXJSクラス特有の設定 \ZRX} +% +% \mbox{} +% \begin{ZRnote} +% 長さ値の指定で式を利用可能にするため |calc| を読み込む。 +% \begin{macrocode} +\RequirePackage{calc} +% \end{macrocode} +% クラスオプションでkey-value形式を使用するため |keyval| を読み込む。 +% \begin{macrocode} +\RequirePackage{keyval} +% \end{macrocode} +% クラスの本体ではこの他に |geometry| パッケージが読み込まれる。 +% \TODO 依存パッケージの情報。 +% +% 互換性のための補助パッケージを読み込む。 +% \begin{macrocode} +\IfFileExists{bxjscompat.sty}{% + \let\jsAtEndOfClass\@gobble + \RequirePackage{bxjscompat}% +}{} +% \end{macrocode} +% +% \begin{macro}{\jsDocClass} +% 〔トークン〕 +% 文書クラスの種別。 +% 以下の定値トークンの何れかと同等: +% |\jsArticle|=bxjsarticle、 +% |\jsBook|=bxjsbook、 +% |\jsReport|=bxjsreport、 +% |\jsSlide|=bxjsslide。 +% \begin{macrocode} +\let\jsArticle=a +\let\jsBook=b +\let\jsReport=r +\let\jsSlide=s +%<article>\let\jsDocClass\jsArticle +%<book>\let\jsDocClass\jsBook +%<report>\let\jsDocClass\jsReport +%<slide>\let\jsDocClass\jsSlide +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\jsEngine} +% 〔暗黙文字トークン〕 +% エンジン({\TeX}の種類)の種別: +% |j|={\pTeX}系、 +% |x|={\XeTeX}、 +% |p|=pdf{\TeX}(含DVIモード)、 +% |l|=Lua{\TeX}、 +% |J|=NTT j{\TeX}、 +% |O|=Omega系、 +% |n|=以上の何れでもない。 +% +% \begin{macrocode} +\let\jsEngine=n +\def\bxjs@test@engine#1#2{% + \edef\bxjs@tmpa{\string#1}% + \edef\bxjs@tmpb{\meaning#1}% + \ifx\bxjs@tmpa\bxjs@tmpb #2\fi} +\bxjs@test@engine\kanjiskip{\let\jsEngine=j} +\bxjs@test@engine\jintercharskip{\let\jsEngine=J} +\bxjs@test@engine\Omegaversion{\let\jsEngine=O} +\bxjs@test@engine\XeTeXversion{\let\jsEngine=x} +\bxjs@test@engine\pdftexversion{\let\jsEngine=p} +\bxjs@test@engine\luatexversion{\let\jsEngine=l} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\ifjsWithupTeX} +% 〔スイッチ〕 +% エンジンが(内部漢字コードがUnicodeの){\upTeX}であるか。 +% \begin{macrocode} +\newif\ifjsWithupTeX +\ifx\ucs\@undefined\else \ifnum\ucs"3000="3000 + \jsWithupTeXtrue +\fi\fi +\let\if@jsc@uplatex\ifjsWithupTeX +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\ifjsWithpTeXng} +% 〔スイッチ〕 +% エンジンが{\pTeX-ng}であるか。 +% \begin{macrocode} +\newif\ifjsWithpTeXng +\bxjs@test@engine\ngbanner{\jsWithpTeXngtrue} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\ifjsWitheTeX} +% 〔スイッチ〕 +% エンジンが{\eTeX}拡張をもつか。 +% \begin{macrocode} +\newif\ifjsWitheTeX +\bxjs@test@engine\eTeXversion{\jsWitheTeXtrue} +% \end{macrocode} +% \end{macro} +% +% 非サポートのエンジンの場合は強制終了させる。 +% \Note NTT j{\TeX}とOmega系。 +% \begin{macrocode} +\let\bxjs@tmpa\relax +\ifx J\jsEngine \def\bxjs@tmpa{NTT-jTeX}\fi +\ifx O\jsEngine \def\bxjs@tmpa{Omega}\fi +\ifx\bxjs@tmpa\relax \expandafter\@gobble +\else + \ClassError\bxjs@clsname + {The engine in use (\bxjs@tmpa) is not supported} + {It's a fatal error. I'll quit right now.} + \expandafter\@firstofone +\fi{\endinput\@@end} +% \end{macrocode} +% +% Lua{\TeX}の場合、本クラス用のLuaモジュールを用意する。 +% \begin{macrocode} +\ifx l\jsEngine + \directlua{ bxjs = {} } +\fi +% \end{macrocode} +% +% \begin{macro}{\bxjs@protected} +% {\eTeX}拡張が有効な場合にのみ |\protected| +% の効果をもつ。 +% \begin{macrocode} +\ifjsWitheTeX \let\bxjs@protected\protected +\else \let\bxjs@protected\@empty +\fi +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\bxjs@robust@def} +% 無引数の頑強な命令を定義する。 +% \begin{macrocode} +\ifjsWitheTeX + \def\bxjs@robust@def{\protected\def} +\else + \def\bxjs@robust@def{\DeclareRobustCommand*} +\fi +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\ifjsInPdfMode} +% 〔スイッチ〕 +% pdf{\TeX}/Lua{\TeX}がPDFモードで動作しているか。 +% \Note Lua{\TeX} 0.8x版でのプリミティブ名変更に対応。 +% \begin{macrocode} +\newif\ifjsInPdfMode +\@nameuse{ImposeOldLuaTeXBehavior} +\let\bxjs@tmpa\PackageWarningNoLine +\let\PackageWarningNoLine\PackageInfo % suppress warning +\RequirePackage{ifpdf} +\let\PackageWarningNoLine\bxjs@tmpa +\@nameuse{RevokeOldLuaTeXBehavior} +\let\ifjsInPdfMode\ifpdf +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\ifbxjs@TUenc} +% 〔スイッチ〕 +% {\LaTeX}の既定のフォントエンコーディングがTUであるか。 +% \Note 2017年1月以降の{\LaTeX}カーネルにおいて +% 「Unicodeを表す{\LaTeX}公式のフォントエンコーディング」 +% である“TU”が導入され、 +% これ以降の{\LaTeX}を{\XeTeX}またはLua{\TeX}で動かしている場合は、 +% 既定のエンコーディングがTUになる。 +% それ以外の場合は、既定のエンコーディングはOT1である。 +% \begin{macrocode} +\newif\ifbxjs@TUenc +\def\bxjs@tmpa{TU}\edef\bxjs@tmpb{\f@encoding} +\ifx\bxjs@tmpa\bxjs@tmpb + \bxjs@TUenctrue +\fi +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\bxjs@cond} +% |\bxjs@cond\ifXXX|……|\fi{|\Meta{真}|}{|\Meta{偽}|}|\par +% {\TeX}のif-文(|\ifXXX|……\Meta{真}|\else|\Meta{偽}|\fi|)を +% 末尾呼出形式に変換するためのマクロ。 +% \begin{macrocode} +\@gobbletwo\if\if \def\bxjs@cond#1\fi{% + #1\expandafter\@firstoftwo + \else\expandafter\@secondoftwo + \fi} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\bxjs@cslet} +% |\bxjs@cslet{|\Meta{名前1}|}\制御綴|\Means +% \begin{macrocode} +\def\bxjs@cslet#1{% + \expandafter\let\csname#1\endcsname} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\bxjs@csletcs} +% |\bxjs@csletcs{|\Meta{名前1}|}{|\Meta{名前2}|}|\Means +% \begin{macrocode} +\def\bxjs@csletcs#1#2{% + \expandafter\let\csname#1\expandafter\endcsname\csname#2\endcsname} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\bxjs@catopt} +% |\bxjs@catopt{|\Meta{文字列1}|}{|\Meta{文字列2}|}|\Means +% 2つの文字列を |,| で繋いだ文字列。 +% ただし片方が空の場合は |,| を入れない。 +% 完全展開可能。 +% \begin{macrocode} +\def\bxjs@catopt#1#2{% + #1\if\relax#1\relax\else\if\relax#2\relax\else,\fi\fi#2} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\bxjs@ifplus} +% |\@ifstar| の |+| 版。 +% \begin{macrocode} +\def\bxjs@ifplus#1{\@ifnextchar+{\@firstoftwo{#1}}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\bxjs@gset@tempcnta} +% |calc| の整数式を用いて |\@tempcnta| の値を設定する。 +% \begin{macrocode} +\let\c@bxjs@tempcnta\@tempcnta +\def\bxjs@gset@tempcnta{\setcounter{bxjs@tempcnta}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\jsSetQHLength} +% |\jsSetQHLength\CS{|\Meta{長さ式}|}|\Means +% |\setlength| の変種で、通常の |calc| の長さ式の代わりに、 +% 「|Q|/|H|/|trueQ|/|trueH|/|zw|/|zh| の単位付きの実数」 +% が記述できる(この場合は式は使えない)。 +% \begin{macrocode} +\def\jsSetQHLength#1#2{% + \begingroup + \bxjs@parse@qh{#2}% + \ifx\bxjs@tmpb\relax + \setlength\@tempdima{#2}% + \xdef\bxjs@g@tmpa{\the\@tempdima}% + \else \global\let\bxjs@g@tmpa\bxjs@tmpb + \fi + \endgroup + #1=\bxjs@g@tmpa\relax} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\bxjs@parse@qh} +% |#1| が |Q|/|H|/|trueQ|/|trueH|/|zw|/|zh| で終わる場合、 +% 単位用の寸法値マクロ |\bxjs@unit@XXX| が定義済なら、 +% |\bxjs@tmpb| に |#1| に等しい寸法の表現を返し、 +% そうでないならエラーを出す。 +% それ以外では、|\bxjs@tmpb| は |\relax| になる。 +% \Note {(u)\pLaTeX}の場合はこれらの和文単位はエンジンでサポートされる。 +% しかし和文フォントの設定が完了するまでは |zw|/|zh| の値は正しくない。 +% \begin{macrocode} +\if j\jsEngine \def\bxjs@parse@qh@units{zw,zh} +\else \def\bxjs@parse@qh@units{trueQ,trueH,Q,H,zw,zh} +\fi +\def\bxjs@parse@qh#1{% + \let\bxjs@tmpb\relax + \@for\bxjs@tmpa:=\bxjs@parse@qh@units\do{% + \ifx\bxjs@tmpb\relax + \edef\bxjs@next{{\bxjs@tmpa}{#1}}% + \expandafter\bxjs@parse@qh@a\csname bxjs@unit@\bxjs@tmpa\expandafter + \endcsname\bxjs@next + \fi}} +\def\bxjs@parse@qh@a#1#2#3{% + \def\bxjs@next##1#2\@nil##2\@nnil{\bxjs@parse@qh@b{##1}{##2}#1}% + \bxjs@next#3\@nil#2\@nil\@nnil} +\def\bxjs@parse@qh@b#1#2#3{% + \ifx\@nnil#2\@nnil\else + \ifx#3\relax + \ClassError\bxjs@clsname + {You cannot use '\bxjs@tmpa' here}{\@ehc}% + \def\bxjs@tmpb{0pt}% + \else + \@tempdimb#3\relax \@tempdimb#1\@tempdimb + \edef\bxjs@tmpb{\the\@tempdimb}% + \fi + \fi} +% \end{macrocode} +% 今の段階では |Q|/|H| だけが使用可能。 +% \begin{macrocode} + \def\bxjs@unit@Q{0.25mm}\let\bxjs@unit@H\bxjs@unit@Q +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\bxjs@begin@document@hook} +% BXJSクラス用の文書本体開始時フック。 +% \begin{macrocode} +\@onlypreamble\bxjs@begin@document@hook +\let\bxjs@begin@document@hook\@empty +\AtBeginDocument{\bxjs@begin@document@hook} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\bxjs@post@option@hook} +% |\ProcessOptions| 直後に実行されるフック。 +% \begin{macrocode} +\@onlypreamble\bxjs@post@option@hook +\let\bxjs@post@option@hook\@empty +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\bxjs@pre@jadriver@hook} +% 和文ドライバ読込直前に実行されるフック。 +% \begin{macrocode} +\@onlypreamble\bxjs@pre@jadriver@hook +\let\bxjs@pre@jadriver@hook\@empty +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\jsAtEndOfClass} +% このクラスの読込終了時に対するフック。 +% (補助パッケージ中で用いられる。) +% \begin{macrocode} +\def\jsAtEndOfClass{% + \expandafter\g@addto@macro\csname\bxjs@clsname.cls-h@@k\endcsname} +% \end{macrocode} +% \end{macro} +% +% 一時的な手続き用の制御綴。 +% \begin{macrocode} +\@onlypreamble\bxjs@tmpdo +\@onlypreamble\bxjs@tmpdo@a +\@onlypreamble\bxjs@tmpdo@b +\@onlypreamble\bxjs@tmpdo@c +\@onlypreamble\bxjs@tmpdo@d +% \end{macrocode} +% +% Lua\TeX の場合、原版のコード中のコントロールワード中に現れる +% 日本語文字のカテゴリコードを一時的に11に変更する。 +% クラス読込終了時点で元に戻される。 +% \Note 現在の{Lua\LaTeX}では、漢字のカテゴリコードは最初から11に +% なっているので、この処理は特段の意味を持たない。 +% しかし、昔は12になっていて、この場合、日本語文字の +% コントロールワードの命令を使用するには、カテゴリコードを11に +% 変更する必要がある。 +% \begin{macrocode} +\if l\jsEngine +\def\bxjs@tmpdo#1{% + \xdef\bxjs@pre@jadriver@hook{% + \bxjs@pre@jadriver@hook + \catcode`#1=\the\catcode`#1\relax}% + \catcode`#1=11\relax} +\@tfor\bxjs@tmpa:=和西暦\do + {\expandafter\bxjs@tmpdo\bxjs@tmpa} +\fi +% \end{macrocode} +% +% |\jsInhibitGlue| は |\inhibitglue| が定義されていればそれを +% 実行し、未定義ならば何もしない。 +% \begin{macrocode} +\bxjs@robust@def\jsInhibitGlue{% + \ifx\inhibitglue\@undefined\else \inhibitglue \fi} +% \end{macrocode} +% +% 万が一「2.09互換モード」になっていた場合は、 +% これ以上進むと危険なので強制終了させる。 +% \begin{macrocode} +\if@compatibility + \ClassError\bxjs@clsname + {Something went chaotic!\MessageBreak + (How come '\string\documentstyle' is there?)\MessageBreak + I cannot go a single step further...} + {If the chant of '\string\documentstyle' was just a blunder of yours,\MessageBreak + then there'll still be hope....} + \expandafter\@firstofone +\else \expandafter\@gobble +\fi{\typeout{Farewell!}\endinput\@@end} +% \end{macrocode} +% +% \end{ZRnote} +% +% \section{オプション} +% +% これらのクラスは |\documentclass{jsarticle}| +% あるいは |\documentclass[オプション]{jsarticle}| +% のように呼び出します。 +% +% まず,オプションに関連するいくつかのコマンドやスイッチ(論理変数)を定 +% 義します。 +% +% \begin{macro}{\if@restonecol} +% +% 段組のときに真になる論理変数です。 +% +% \begin{macrocode} +\newif\if@restonecol +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\if@titlepage} +% +% これを真にすると表題,概要を独立したページに出力します。 +% +% \begin{macrocode} +\newif\if@titlepage +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\if@openright} +% +% |\chapter|,|\part| を右ページ起こしにするかどうかです。 +% 横組の書籍では真が標準で,要するに片起こし,奇数ページ起こしになります。 +% +% \begin{macrocode} +%<book|report>\newif\if@openright +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\if@openleft} +% +% [2017-02-24] |\chapter|,|\part| を左ページ起こしにするかどうかです。 +% +% \begin{macrocode} +%<book|report>\newif\if@openleft +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\if@mainmatter} +% +% 真なら本文,偽なら前付け・後付けです。 +% 偽なら |\chapter| で章番号が出ません。 +% +% \begin{ZRnote} +% BXJSではreport系でも定義されることに注意。 +% \end{ZRnote} +% \begin{macrocode} +%<book|report>\newif\if@mainmatter \@mainmattertrue +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\if@enablejfam} +% +% 和文フォントを数式フォントとして登録するかどうかを示すスイッチです。 +% +% \begin{ZRnote} +% JSクラスと異なり、初期値は偽とする。 +% \end{ZRnote} +% \begin{macrocode} +\newif\if@enablejfam \@enablejfamfalse +% \end{macrocode} +% \end{macro} +% +% 以下で各オプションを宣言します。 +% +% \paragraph{用紙サイズ} +% +% JISやISOのA0判は面積 $1\,\mathrm{m}^2$,縦横比 $1:\sqrt{2}$ +% の長方形の辺の長さを mm 単位に切り捨てたものです。 +% これを基準として順に半截しては mm 単位に切り捨てたものがA1,A2,…です。 +% +% B判はJISとISOで定義が異なります。 +% JISではB0判の面積が $1.5\,\mathrm{m}^2$ ですが, +% ISOではB1判の辺の長さがA0判とA1判の辺の長さの幾何平均です。 +% したがってISOのB0判は $1000\,\mathrm{mm} \times 1414\,\mathrm{mm}$ です。 +% このため,\LaTeXe の \texttt{b5paper} +% は $250\,\mathrm{mm} \times 176\,\mathrm{mm}$ ですが, +% \pLaTeXe の \texttt{b5paper} +% は $257\,\mathrm{mm} \times 182\,\mathrm{mm}$ になっています。 +% ここでは\pLaTeXe にならってJISに従いました。 +% +% デフォルトは \texttt{a4paper} です。 +% +% \texttt{b5var}(B5変形,182mm×230mm), +% \texttt{a4var}(A4変形,210mm×283mm)を追加しました。 +% +% \begin{ZRnote} +% BXJSクラスではページレイアウト設定に |geometry| パッケージを用いる。 +% 用紙サイズ設定は |geometry| に渡すオプションの指定と扱われる。 +% \begin{macrocode} +\@onlypreamble\bxjs@setpaper +\def\bxjs@setpaper#1{\def\bxjs@param@paper{#1}} +\DeclareOption{a3paper}{\bxjs@setpaper{a3paper}} +\DeclareOption{a4paper}{\bxjs@setpaper{a4paper}} +\DeclareOption{a5paper}{\bxjs@setpaper{a5paper}} +\DeclareOption{a6paper}{\bxjs@setpaper{a6paper}} +\DeclareOption{b4paper}{\bxjs@setpaper{{257truemm}{364truemm}}} +\DeclareOption{b5paper}{\bxjs@setpaper{{182truemm}{257truemm}}} +\DeclareOption{b6paper}{\bxjs@setpaper{{128truemm}{182truemm}}} +\DeclareOption{a4j}{\bxjs@setpaper{a4paper}} +\DeclareOption{a5j}{\bxjs@setpaper{a5paper}} +\DeclareOption{b4j}{\bxjs@setpaper{{257truemm}{364truemm}}} +\DeclareOption{b5j}{\bxjs@setpaper{{182truemm}{257truemm}}} +\DeclareOption{a4var}{\bxjs@setpaper{{210truemm}{283truemm}}} +\DeclareOption{b5var}{\bxjs@setpaper{{182truemm}{230truemm}}} +% \end{macrocode} +% \Note |...var| をPandocで使えるように後ろに |paper| をつけた形を用意する。 +% \begin{macrocode} +\DeclareOption{a4varpaper}{\bxjs@setpaper{{210truemm}{283truemm}}} +\DeclareOption{b5varpaper}{\bxjs@setpaper{{182truemm}{230truemm}}} +\DeclareOption{letterpaper}{\bxjs@setpaper{letterpaper}} +\DeclareOption{legalpaper}{\bxjs@setpaper{legalpaper}} +\DeclareOption{executivepaper}{\bxjs@setpaper{executivepaper}} +% \end{macrocode} +% \end{ZRnote} +% +% \paragraph{横置き} +% +% 用紙の縦と横の長さを入れ換えます。 +% +% \begin{macrocode} +\newif\if@landscape +\@landscapefalse +\DeclareOption{landscape}{\@landscapetrue} +% \end{macrocode} +% +% \paragraph{slide} +% +% オプション \texttt{slide} を新設しました。 +% +% [2016-10-08] \texttt{slide} オプションは article 以外では使い物にならなかったので, +% 簡単のため article のみで使えるオプションとしました。 +% +% \begin{macrocode} +\newif\if@slide +% \end{macrocode} +% +% \begin{ZRnote} +% BXJSではスライド用のクラス |bxjsslide| を用意しているので、 +% 本来はこのスイッチは不要なはずである。 +% しかし、JSクラスの一部のコードをそのまま使うために保持している。 +% \Note この |\if@slide| という制御綴は、ユニークでないにも関わらず、 +% 衝突した場合に正常動作が保たれない、という問題を抱えている。 +% \begin{macrocode} +%<!slide>\@slidefalse +%<slide>\@slidetrue +% \end{macrocode} +% \end{ZRnote} +% +% \paragraph{サイズオプション} +% +% 10pt,11pt,12pt のほかに,8pt,9pt,14pt,17pt,21pt,25pt,30pt,36pt,43pt を追加しました。 +% これは等比数列になるように選んだものです(従来の 20pt も残しました)。 +% |\@ptsize| の定義が変だったのでご迷惑をおかけしましたが, +% 標準的なドキュメントクラスと同様にポイント数から10を引いたものに直しました。 +% +% [2003-03-22] 14Qオプションを追加しました。 +% +% [2003-04-18] 12Qオプションを追加しました。 +% +% [2016-07-08] |\mag| を使わずに各種寸法をスケールさせるためのオプション \texttt{nomag} を新設しました。 +% \texttt{usemag} オプションの指定で従来通りの動作となります。デフォルトは \texttt{usemag} です。 +% +% [2016-07-24] オプティカルサイズを調整するためにNFSSへパッチを当てるオプション \texttt{nomag*} を新設しました。 +% +% \begin{ZRnote} +% |\@ptsize| は |10pt|, |11pt|, |12pt| が指定された時のみ従来と同じ値とし、 +% それ以外は |\jsUnusualPtSize|(= $-20$)にする。 +% +% \begin{macrocode} +\newcommand{\@ptsize}{0} +\def\bxjs@param@basefontsize{10pt} +\def\jsUnusualPtSize{-20} +% \end{macrocode} +% +% \begin{macro}{\bxjs@setbasefontsize} +% 基底フォントサイズを実際に変更する。 +% \begin{macrocode} +\def\bxjs@setbasefontsize#1{% +% \end{macrocode} +% Q単位の長さ指定をサポートするため |\jsSetQHLength| を使う。 +% \Note クラスオプションのトークン列の中に展開可能なトークンが +% ある場合、{\LaTeX}はクラスファイルの読込の前にそれを展開しようとする。 +% このため、この位置で |\jQ| をサポートすることは +% 原理的に不可能である。 +% \begin{macrocode} + \jsSetQHLength\@tempdima{#1}% + \edef\bxjs@param@basefontsize{\the\@tempdima}% + \ifdim\@tempdima=10pt \long\def\@ptsize{0}% + \else\ifdim\@tempdima=10.95pt \long\def\@ptsize{1}% + \else\ifdim\@tempdima=12pt \long\def\@ptsize{2}% + \else \long\edef\@ptsize{\jsUnusualPtSize}\fi\fi\fi} +% \end{macrocode} +% \end{macro} +% +% |\ifjsc@mag| は「|\mag| を使うか」を表すスイッチ。 +% +% |\ifjsc@mag@xreal| は「NFSSにパッチを当てるか」を表すスイッチ。 +% \begin{macrocode} +\newif\ifjsc@mag +\newif\ifjsc@mag@xreal +%\let\jsc@magscale\@undefined +% \end{macrocode} +% +% \begin{macrocode} +\DeclareOption{8pt}{\bxjs@setbasefontsize{8pt}} +\DeclareOption{9pt}{\bxjs@setbasefontsize{9pt}} +\DeclareOption{10pt}{\bxjs@setbasefontsize{10pt}} +\DeclareOption{11pt}{\bxjs@setbasefontsize{10.95pt}} +\DeclareOption{12pt}{\bxjs@setbasefontsize{12pt}} +\DeclareOption{14pt}{\bxjs@setbasefontsize{14.4pt}} +\DeclareOption{17pt}{\bxjs@setbasefontsize{17.28pt}} +\DeclareOption{20pt}{\bxjs@setbasefontsize{20pt}} +\DeclareOption{21pt}{\bxjs@setbasefontsize{20.74pt}} +\DeclareOption{25pt}{\bxjs@setbasefontsize{24.88pt}} +\DeclareOption{30pt}{\bxjs@setbasefontsize{29.86pt}} +\DeclareOption{36pt}{\bxjs@setbasefontsize{35.83pt}} +\DeclareOption{43pt}{\bxjs@setbasefontsize{43pt}} +\DeclareOption{12Q}{\bxjs@setjbasefontsize{3mm}} +\DeclareOption{14Q}{\bxjs@setjbasefontsize{3.5mm}} +\DeclareOption{10ptj}{\bxjs@setjbasefontsize{10pt}} +\DeclareOption{10.5ptj}{\bxjs@setjbasefontsize{10.5pt}} +\DeclareOption{11ptj}{\bxjs@setjbasefontsize{11pt}} +\DeclareOption{12ptj}{\bxjs@setjbasefontsize{12pt}} +% \end{macrocode} +% +% JSクラス互換のmagstyle設定オプション。 +% \begin{macrocode} +\DeclareOption{usemag}{\let\bxjs@magstyle\bxjs@magstyle@usemag} +\DeclareOption{nomag}{\let\bxjs@magstyle\bxjs@magstyle@nomag} +\DeclareOption{nomag*}{\let\bxjs@magstyle\bxjs@magstyle@xreal} +% \end{macrocode} +% +% \end{ZRnote} +% +% \paragraph{トンボオプション} +% +% トンボ(crop marks)を出力します。 +% 実際の処理は\pLaTeXe 本体で行います(\texttt{plcore.dtx} 参照)。 +% オプション \texttt{tombow} で日付付きのトンボ, +% オプション \texttt{tombo} で日付なしのトンボを出力します。 +% これらはアスキー版のままです。 +% カウンタ |\hour|,|\minute| はp\LaTeXe 本体で宣言されています。 +% +% \begin{ZRnote} +% 取りあえず、{\pTeX}系の場合に限り、JSクラスのトンボ関連の +% コードをそのまま活かしておく。 +% 正常に動作する保証はない。 +% \end{ZRnote} +% \begin{macrocode} +\if j\jsEngine +\hour\time \divide\hour by 60\relax +\@tempcnta\hour \multiply\@tempcnta 60\relax +\minute\time \advance\minute-\@tempcnta +\DeclareOption{tombow}{% + \tombowtrue \tombowdatetrue + \setlength{\@tombowwidth}{.1\p@}% + \@bannertoken{% + \jobname\space(\number\year-\two@digits\month-\two@digits\day + \space\two@digits\hour:\two@digits\minute)}% + \maketombowbox} +\DeclareOption{tombo}{% + \tombowtrue \tombowdatefalse + \setlength{\@tombowwidth}{.1\p@}% + \maketombowbox} +\fi +% \end{macrocode} +% +% \paragraph{面付け} +% +% オプション \texttt{mentuke} で幅ゼロのトンボを出力します。 +% 面付けに便利です。これもアスキー版のままです。 +% +% \begin{macrocode} +\if j\jsEngine +\DeclareOption{mentuke}{% + \tombowtrue \tombowdatefalse + \setlength{\@tombowwidth}{\z@}% + \maketombowbox} +\fi +% \end{macrocode} +% +% \paragraph{両面,片面オプション} +% +% \texttt{twoside} で奇数ページ・偶数ページのレイアウトが変わります。 +% +% [2003-04-29] \texttt{vartwoside} でどちらのページも傍注が右側になります。 +% +% \begin{macrocode} +\DeclareOption{oneside}{\@twosidefalse \@mparswitchfalse} +\DeclareOption{twoside}{\@twosidetrue \@mparswitchtrue} +\DeclareOption{vartwoside}{\@twosidetrue \@mparswitchfalse} +% \end{macrocode} +% +% \paragraph{二段組} +% +% \texttt{twocolumn} で二段組になります。 +% +% \begin{macrocode} +\DeclareOption{onecolumn}{\@twocolumnfalse} +\DeclareOption{twocolumn}{\@twocolumntrue} +% \end{macrocode} +% +% \paragraph{表題ページ} +% +% \texttt{titlepage} で表題・概要を独立したページに出力します。 +% +% \begin{macrocode} +\DeclareOption{titlepage}{\@titlepagetrue} +\DeclareOption{notitlepage}{\@titlepagefalse} +% \end{macrocode} +% +% \paragraph{右左起こし} +% +% 書籍では章は通常は奇数ページ起こしになりますが,横組ではこれを +% \texttt{openright} と表すことにしてあります。 +% \texttt{openany} で偶数ページからでも始まるようになります。 +% +% [2017-02-24] \texttt{openright} は横組では奇数ページ起こし,縦組では +% 偶数ページ起こしを表します。ややこしいですが,これは\LaTeX の標準クラスが +% 西欧の横組事情しか考慮せずに,奇数ページ起こしと右起こしを一緒にしてしまっ +% たせいです。縦組での奇数ページ起こしと横組での偶数ページ起こしも表現したい +% ので,jsclassesでは新たに \texttt{openleft} も追加しました。 +% +% \begin{macrocode} +%<book|report>\DeclareOption{openright}{\@openrighttrue\@openleftfalse} +%<book|report>\DeclareOption{openleft}{\@openlefttrue\@openrightfalse} +%<book|report>\DeclareOption{openany}{\@openrightfalse\@openleftfalse} +% \end{macrocode} +% +% \paragraph{eqnarray環境と数式の位置} +% +% 森本さんのご教示にしたがって前に移動しました。 +% +% \begin{environment}{eqnarray} +% +% \LaTeX の |eqnarray| 環境では |&| でできるアキが大きすぎる +% ようですので,少し小さくします。 +% また,中央の要素も |\displaystyle| にします。 +% +% \begin{macrocode} +\def\eqnarray{% + \stepcounter{equation}% + \def\@currentlabel{\p@equation\theequation}% + \global\@eqnswtrue + \m@th + \global\@eqcnt\z@ + \tabskip\@centering + \let\\\@eqncr + $$\everycr{}\halign to\displaywidth\bgroup + \hskip\@centering$\displaystyle\tabskip\z@skip{##}$\@eqnsel + &\global\@eqcnt\@ne \hfil$\displaystyle{{}##{}}$\hfil + &\global\@eqcnt\tw@ $\displaystyle{##}$\hfil\tabskip\@centering + &\global\@eqcnt\thr@@ \hb@xt@\z@\bgroup\hss##\egroup + \tabskip\z@skip + \cr} +% \end{macrocode} +% \end{environment} +% +% \texttt{leqno} で数式番号が左側になります。 +% \texttt{fleqn} で数式が本文左端から一定距離のところに出力されます。 +% 森本さんにしたがって訂正しました。 +% +% \begin{macrocode} +\DeclareOption{leqno}{\input{leqno.clo}} +\DeclareOption{fleqn}{\input{fleqn.clo}% +% fleqn用のeqnarray環境の再定義 + \def\eqnarray{% + \stepcounter{equation}% + \def\@currentlabel{\p@equation\theequation}% + \global\@eqnswtrue\m@th + \global\@eqcnt\z@ + \tabskip\mathindent + \let\\=\@eqncr + \setlength\abovedisplayskip{\topsep}% + \ifvmode + \addtolength\abovedisplayskip{\partopsep}% + \fi + \addtolength\abovedisplayskip{\parskip}% + \setlength\belowdisplayskip{\abovedisplayskip}% + \setlength\belowdisplayshortskip{\abovedisplayskip}% + \setlength\abovedisplayshortskip{\abovedisplayskip}% + $$\everycr{}\halign to\linewidth% $$ + \bgroup + \hskip\@centering$\displaystyle\tabskip\z@skip{##}$\@eqnsel + &\global\@eqcnt\@ne \hfil$\displaystyle{{}##{}}$\hfil + &\global\@eqcnt\tw@ + $\displaystyle{##}$\hfil \tabskip\@centering + &\global\@eqcnt\thr@@ \hb@xt@\z@\bgroup\hss##\egroup + \tabskip\z@skip\cr + }} +% \end{macrocode} +% +% \paragraph{文献リスト} +% +% 文献リストをopen形式(著者名や書名の後に改行が入る)で出力します。 +% これは使われることはないのでコメントアウトしてあります。 +% +% \begin{macrocode} +% \DeclareOption{openbib}{% +% \AtEndOfPackage{% +% \renewcommand\@openbib@code{% +% \advance\leftmargin\bibindent +% \itemindent -\bibindent +% \listparindent \itemindent +% \parsep \z@}% +% \renewcommand\newblock{\par}}} +% \end{macrocode} +% +% \paragraph{数式フォントとして和文フォントを登録しないオプション} +% +% 数式中では16通りのフォントしか使えません。 +% AMSFontsや \texttt{mathptmx} パッケージを使って数式フォントを +% たくさん使うと ``Too many math alphabets \ldots'' というエラーが +% 起こってしまいます。\texttt{disablejfam} オプションを付ければ, +% 明朝・ゴシックを数式用フォントとして登録するのをやめますので, +% 数式用フォントが二つ節約できます。 +% いずれにしても |\textmc| や |\mbox| や \texttt{amsmath} +% パッケージの |\text| を使えば数式中で和文フォントが使えますので, +% この新ドキュメントクラスでは標準で和文フォントを数式用に登録 +% しないことにしていたのですが,従来のドキュメントクラスの仕様に +% 合わせることにしました。 +% +% \begin{ZRnote} +% \begin{macro}{\bxjs@enablejfam} +% 〔暗黙文字トークン〕 +% |enablejfam| オプションの状態: +% \begin{macrocode} +%\let\bxjs@enablejfam\@undefined +% \end{macrocode} +% \end{macro} +% +% |enablejfam| オプションの処理。 +% \begin{macrocode} +\def\bxjs@kv@enablejfam@true{\let\bxjs@enablejfam=t} +\def\bxjs@kv@enablejfam@false{\let\bxjs@enablejfam=f} +\def\bxjs@kv@enablejfam@default{\let\bxjs@enablejfam\@undefined} +\define@key{bxjs}{enablejfam}[true]{% + \bxjs@set@keyval{enablejfam}{#1}{}} +% \end{macrocode} +% +% JSクラスとの互換のため |disablejfam| オプションを定義する。 +% \begin{macrocode} +\DeclareOption{disablejfam}{\let\bxjs@enablejfam=f} +% \end{macrocode} +% +% \Note 実際に何らかの設定を行うのは和文ドライバである。 +% 和文ドライバとエンジンの組合せにより、|enablejfam| が |default| である +% 場合に「数式和文ファミリ」が有効と無効の選択は異なるし、またそもそも +% 有効と無効の一方しか選択できない場合もある。 +% +% \end{ZRnote} +% +% \paragraph{ドラフト} +% +% \texttt{draft} でoverfull boxの起きた行末に5ptの罫線を引きます。 +% +% [2016-07-13] |\ifdraft| を定義するのをやめました。 +% +% \begin{ZRnote} +% \begin{macro}{\ifjsDraft} +% JSクラスは |\ifdraft| という公開名のスイッチを用いているが、 +% これは |ifdraft| パッケージと衝突するので、代わりに |\ifjsDraft| +% の名前を用い、本文開始時に |\ifdraft| が未定義の場合に限り、 +% |\ifjsDraft| を |\ifdraft| にコピーする処理にする。 +% \Note JSクラスの |\ifdraft| が廃止されたので、 +% |\ifdraft| は2.0版で廃止を予定する。 +% \begin{macrocode} +\let\ifjsDraft\iffalse +\@onlypreamble\bxjs@draft +\def\bxjs@draft#1{% + \expandafter\let\expandafter\ifjsDraft\csname if#1\endcsname} +\DeclareOption{draft}{\bxjs@draft{true}\setlength\overfullrule{5pt}} +\DeclareOption{final}{\bxjs@draft{false}\setlength\overfullrule{0pt}} +\g@addto@macro\bxjs@begin@document@hook{% + \expandafter\ifx\csname ifdraft\endcsname\relax + \expandafter\let\csname ifdraft\expandafter\endcsname + \csname ifjsDraft\endcsname + \fi} +% \end{macrocode} +% \end{macro} +% \end{ZRnote} +% +% \paragraph{和文フォントメトリックの選択} +% +% このクラスファイルでは,和文TFMとして東京書籍印刷の小林肇さんの +% 作られたJISフォントメトリック(\texttt{jis},\texttt{jisg}) +% を標準で使うことにしますが, +% 従来の \texttt{min10},\texttt{goth10} などを使いたいときは +% \texttt{mingoth} というオプションを指定します。 +% また,\texttt{winjis} オプションで \texttt{winjis} メトリック +% (OTFパッケージと同じpsitauさん作;ソースに書かれたWindowsの +% 機種依存文字がdvips, dvipdfmxなどで出力出来るようになる)が使えます。 +% +% [2018-02-04] \texttt{winjis} オプションはコッソリ削除しました。 +% 代替として,同等なものをパッケージ化(winjis.sty)して, +% GitHubにはコッソリ置いておきます。 +% +% \begin{ZRnote} +% BXJSクラスではここは和文ドライバの管轄。 +% \end{ZRnote} +% +% \paragraph{papersizeスペシャルの利用} +% +% dvipsやdvioutで用紙設定を自動化するには +% オプション \texttt{papersize} を与えます。 +% +% \begin{ZRnote} +% BXJSクラスでは |geometry| パッケージがこの処理を行う。 +% +% \begin{macro}{\ifbxjs@papersize} +% 〔スイッチ〕 papersizeスペシャルを出力するか。 +% 既定で有効であるが、|nopapersize| オプションで無効にできる。 +% \Note JSクラスでは |\ifpapersize| という制御綴だが、これは採用しない。 +% \begin{macrocode} +\newif\ifbxjs@papersize +\bxjs@papersizetrue +\DeclareOption{nopapersize}{\bxjs@papersizefalse} +\DeclareOption{papersize}{\bxjs@papersizetrue} +% \end{macrocode} +% \end{macro} +% \end{ZRnote} +% +% \paragraph{英語化} +% +% オプション \texttt{english} を新設しました。 +% +% \begin{ZRnote} +% \Note |\if@english| は非ユニークで衝突耐性がない。 +% \end{ZRnote} +% +% \begin{macrocode} +\newif\if@english +\@englishfalse +\DeclareOption{english}{\@englishtrue} +% \end{macrocode} +% +% \paragraph{jsbookをjsreportもどきに} +% +% オプション \texttt{report} を新設しました。 +% +% [2017-02-13] 従来は「jsreport相当」をjsbookの \texttt{report} オプションで提供して +% いましたが,新しくjsreportクラスも作りました。どちらでもお好きな方を使ってください。 +% +% \begin{ZRnote} +% BXJSでは当初から |bxjsreport| クラスが用意されている。 +% \end{ZRnote} +% +% \paragraph{\texttt{jslogo}パッケージの読み込み} +% +% \LaTeX 関連のロゴを再定義する\texttt{jslogo}パッケージを +% 読み込まないオプション\texttt{nojslogo}を新設しました。 +% \texttt{jslogo}オプションの指定で従来どおりの動作となります。 +% デフォルトは\texttt{jslogo}で,すなわちパッケージを読み込みます。 +% +% \begin{ZRnote} +% BXJSクラスでは、|nojslogo| を既定とする。 +% \end{ZRnote} +% \begin{macrocode} +\newif\if@jslogo \@jslogofalse +\DeclareOption{jslogo}{\@jslogotrue} +\DeclareOption{nojslogo}{\@jslogofalse} +% \end{macrocode} +% +% \paragraph{複合設定オプション \ZRX} +% \mbox{} +% \TODO |\bxjs@invscale| を書く場所を決める。 +% (JSクラスと同じにはできなそう。) +% \begin{macro}{\bxjs@invscale} +% |\bxjs@invscale| は{\TeX}における「長さのスケール」の逆関数を求めるもの。 +% 例えば |\bxjs@invscale\dimX{1.3}| は |\dimX=1.3\dimX| の +% 逆の演算を行う。 +% \Note 局所化の |\begingroup|~|\endgroup| について、 +% 以前は |\group|~|\egroup| を使っていたが、これだと数式モード中では +% 空のサブ数式を生み出してしまうため修正した。 +% \Note 元の長さが128\,pt以上の場合でも動作するように修正した。 +% \begin{macrocode} +\mathchardef\bxjs@isc@ll=128 +\mathchardef\bxjs@isc@sl=259 +\def\bxjs@isc@sl@h{65539 } +\def\bxjs@invscale#1#2{% + \begingroup \@tempdima=#1\relax \@tempdimb#2\p@\relax + \ifdim\@tempdima<\bxjs@isc@ll\p@ + \@tempcnta\@tempdima \multiply\@tempcnta\@cclvi + \divide\@tempcnta\@tempdimb \multiply\@tempcnta\@cclvi + \else + \@tempcnta\@tempdima \divide\@tempcnta\@tempdimb + \multiply\@tempcnta\p@ \let\bxjs@isc@sl\bxjs@isc@sl@h + \fi + \@tempcntb\p@ \divide\@tempcntb\@tempdimb + \advance\@tempcnta-\@tempcntb \advance\@tempcnta-\tw@ + \@tempdimb\@tempcnta\@ne + \advance\@tempcnta\@tempcntb \advance\@tempcnta\@tempcntb + \advance\@tempcnta\bxjs@isc@sl \@tempdimc\@tempcnta\@ne + \@whiledim\@tempdimb<\@tempdimc\do{% + \@tempcntb\@tempdimb \advance\@tempcntb\@tempdimc + \advance\@tempcntb\@ne \divide\@tempcntb\tw@ + \ifdim #2\@tempcntb>\@tempdima + \advance\@tempcntb\m@ne \@tempdimc=\@tempcntb\@ne + \else \@tempdimb=\@tempcntb\@ne \fi}% + \xdef\bxjs@gtmpa{\the\@tempdimb}% + \endgroup #1=\bxjs@gtmpa\relax} +% \end{macrocode} +% \end{macro} +% +% \begin{ZRnote} +% 複合設定オプションとは、 +% 「エンジンやドライバや和文ドライバの設定を含む、 +% 複数の設定を一度に行うオプション」 +% のことである。 +% ある特定の設定を短く書く必要性が高いと判断される場合に +% 用意される。 +% +% |pandoc| オプションは、Pandocで{\LaTeX}用の既定テンプレートを +% 用いて他形式から{\LaTeX}(およびPDF)形式に変換する用途に +% 最適化した設定を与える。 +% \begin{macrocode} +\DeclareOption{pandoc}{% +% \end{macrocode} +% 和文ドライバを |pandoc| に、エンジン指定を |autodetect-engine| に +% 変更する。 +% \Note 実際の和文ドライバ・エンジン設定より優先される。 +% \begin{macrocode} + \g@addto@macro\bxjs@post@option@hook{% + \bxjs@oldfontcommandstrue + \setkeys{bxjs}{ja=pandoc}% + \let\bxjs@engine@given=*}% +% \end{macrocode} +% ドライバオプションを |dvi=dvipdfmx| 相当に変更する。 +% \Note これは実際のドライバ設定で上書きできる +% (オプション宣言順に注意)。 +% \TODO できない気がする…。 +% \begin{macrocode} + \def\bxjs@driver@opt{dvipdfmx}% + \bxjs@dvi@opttrue} +% \end{macrocode} +% +% \end{ZRnote} +% +% \paragraph{エンジン・ドライバオプション \ZRX} +% \mbox{} +% \begin{ZRnote} +% \begin{macro}{\bxjs@engine@given} +% オプションで明示されたエンジンの種別。 +% \begin{macrocode} +%\let\bxjs@engine@given\@undefined +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\bxjs@engine@opt} +% 明示されたエンジンのオプション名。 +% \begin{macrocode} +%\let\bxjs@engine@opt\@undefined +% \end{macrocode} +% \end{macro} +% +% エンジン明示指定のオプションの処理。 +% \Note 0.9pre版の暫定仕様と異なり、エンジン名は |...latex| +% に限定する。 +% |xetex| や |pdftex| は一般的な{\LaTeX}の慣習に従って +% 「ドライバの指定」とみなすべきだから。 +% +% \begin{macrocode} +\DeclareOption{autodetect-engine}{% + \let\bxjs@engine@given=*} +\DeclareOption{latex}{% + \def\bxjs@engine@opt{latex}% + \let\bxjs@engine@given=n} +\DeclareOption{platex}{% + \def\bxjs@engine@opt{platex}% + \let\bxjs@engine@given=j} +\DeclareOption{uplatex}{% + \def\bxjs@engine@opt{uplatex}% + \let\bxjs@engine@given=u} +\DeclareOption{xelatex}{% + \def\bxjs@engine@opt{xelatex}% + \let\bxjs@engine@given=x} +\DeclareOption{pdflatex}{% + \def\bxjs@engine@opt{pdflatex}% + \let\bxjs@engine@given=p} +\DeclareOption{lualatex}{% + \def\bxjs@engine@opt{lualatex}% + \let\bxjs@engine@given=l} +\DeclareOption{platex-ng}{% + \def\bxjs@engine@opt{platex-ng}% + \let\bxjs@engine@given=g} +\DeclareOption{platex-ng*}{% + \def\bxjs@engine@opt{platex-ng*}% + \let\bxjs@platexng@nodrv=t% + \let\bxjs@engine@given=g} +% \end{macrocode} +% +% \begin{macro}{\bxjs@driver@given} +% オプションで明示されたドライバの種別。 +% \begin{macrocode} +%\let\bxjs@driver@given\@undefined +\let\bxjs@driver@@dvimode=0 +\let\bxjs@driver@@dvipdfmx=1 +\let\bxjs@driver@@pdfmode=2 +\let\bxjs@driver@@xetex=3 +\let\bxjs@driver@@dvips=4 +\let\bxjs@driver@@none=5 +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\bxjs@driver@opt} +% 明示された「ドライバ指定」のオプション名。 +% \begin{macrocode} +%\let\bxjs@driver@opt\@undefined +% \end{macrocode} +% \end{macro} +% +% \begin{macrocode} +\DeclareOption{dvips}{% + \def\bxjs@driver@opt{dvips}% + \let\bxjs@driver@given\bxjs@driver@@dvips} +\DeclareOption{dviout}{% + \def\bxjs@driver@opt{dviout}% + \let\bxjs@driver@given\bxjs@driver@@dvimode} +\DeclareOption{xdvi}{% + \def\bxjs@driver@opt{xdvi}% + \let\bxjs@driver@given\bxjs@driver@@dvimode} +\DeclareOption{dvipdfmx}{% + \def\bxjs@driver@opt{dvipdfmx}% + \let\bxjs@driver@given\bxjs@driver@@dvipdfmx} +\DeclareOption{nodvidriver}{% + \def\bxjs@driver@opt{nodvidriver}% + \let\bxjs@driver@given\bxjs@driver@@none} +\DeclareOption{pdftex}{% + \def\bxjs@driver@opt{pdftex}% + \let\bxjs@driver@given\bxjs@driver@@pdfmode} +\DeclareOption{luatex}{% + \def\bxjs@driver@opt{luatex}% + \let\bxjs@driver@given\bxjs@driver@@pdfmode} +\DeclareOption{xetex}{% + \def\bxjs@driver@opt{xetex}% + \let\bxjs@driver@given\bxjs@driver@@xetex} +% \end{macrocode} +% +% 「もしDVIモードであればドライバを |dvipdfmx| にする」 +% というオプション。 +% \Note 1.2版で |dvi| オプションが新設されたが、互換性のため +% このオプションも残す。 +% \begin{macrocode} +\DeclareOption{dvipdfmx-if-dvi}{% + \setkeys{bxjs}{dvi=dvipdfmx}} +% \end{macrocode} +% +% \end{ZRnote} +% +% \paragraph{その他のBXJS独自オプション \ZRX} +% \mbox{} +% \begin{ZRnote} +% \TODO 互換用オプションを分離する(2.0版で?)。 +% \begin{macro}{\ifbxjs@bigcode} +% {\upTeX}で有効化するToUnicode CMapとして +% 「|UTF8-UCS2|」の代わりに「|UTF8-UTF16|」を使うか。 +% BMP外の文字に対応できる「|UTF8-UTF16|」の方が望ましいのであるが、 +% このファイルが利用可能かの確実な判定が困難であるため、 +% オプションで指定することとする。 +% \begin{macrocode} +\newif\ifbxjs@bigcode \bxjs@bigcodefalse +% \end{macrocode} +% その上で、「{\TeX}環境がある程度新しければ利用可能であろう」 +% と判断し |bxjs@bigcode| の既定値を真とする。 +% 具体的な判断基準として、 +% 「{\TeX}のバージョンが3.14159265(2014年1月)以上であるか」 +% を採用する。 +% \begin{macrocode} +\edef\bxjs@tmpa{\expandafter\noexpand\csname\endcsname} +\def\bxjs@tmpb#1 #2#3\@nil{% + \ifx1#2\bxjs@bigcodetrue \fi} +\expandafter\bxjs@tmpb\meaning\bxjs@tmpa1 0\@nil +% \end{macrocode} +% \end{macro} +% +% |nobigcode|/|bigcode| オプションの定義。 +% \begin{macrocode} +\DeclareOption{nobigcode}{% + \bxjs@bigcodefalse} +\DeclareOption{bigcode}{% + \bxjs@bigcodetrue} +% \end{macrocode} +% +% \begin{macro}{\ifbxjs@oldfontcommands} +% |\allowoldfontcommands| を既定で有効にするか。 +% \begin{macrocode} +\newif\ifbxjs@oldfontcommands +% \end{macrocode} +% \end{macro} +% +% |nooldfontcommands|、|oldfontcommands| オプションの定義。 +% \Note |oldfontcommands| オプションの名前は\Pkg{memoir}クラスに倣った。 +% ちなみに\Pkg{KOMA-Script}では |enabledeprecatedfontcommands| であるが +% これはチョットアレなので避けた。 +% \begin{macrocode} +\DeclareOption{nooldfontcommands}{% + \bxjs@oldfontcommandsfalse} +\DeclareOption{oldfontcommands}{% + \bxjs@oldfontcommandstrue} +% \end{macrocode} +% +% \end{ZRnote} +% +% \paragraph{keyval型のオプション \ZRX} +% \mbox{} +% \begin{ZRnote} +% その他のオプションは |keyval| の機構を用いて処理する。 +% \begin{macrocode} +\DeclareOption*{% + \def\bxjs@next{\bxjs@safe@setkeys{bxjs}}% + \expandafter\bxjs@next\expandafter{\CurrentOption}} +% \end{macrocode} +% +% \begin{macro}{\bxjs@safe@setkeys} +% 未知のキーに対してエラー無しで無視する |\setkeys|。 +% \Note ネスト不可。 +% \begin{macrocode} +\def\bxjs@safe@setkeys#1#2{% + \let\bxjs@save@KV@errx\KV@errx \let\KV@errx\@gobble + \setkeys{#1}{#2}% + \let\KV@errx\bxjs@save@KV@errx} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\bxjs@declare@enum@option} +% |\bxjs@declare@enum@option{|\Meta{オプション名}|}{|\Meta{enum名}|}|\par +% “\Meta{オプション名}|=|\Meta{値}”のオプション指定に対して、 +% |\|[|bxjs@|\Meta{enum名}] を |\|[|bxjs@|\Meta{enum名}|@@|\Meta{値}] に +% 等値する(後者の制御綴が未定義の場合はエラー)、という動作を規定する。 +% \begin{macrocode} +\@onlypreamble\bxjs@declare@enum@option +\def\bxjs@declare@enum@option#1#2{% + \define@key{bxjs}{#1}{% + \expandafter\ifx\csname bxjs@#2@@##1\endcsname\relax + \bxjs@error@keyval{#1}{##1}% + \else \bxjs@csletcs{bxjs@#2}{bxjs@#2@@##1}% + \fi}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\bxjs@declare@bool@option} +% |\bxjs@declare@bool@option{|\Meta{オプション名}|}{|\Meta{スイッチ名}|}|\par +% “\Meta{オプション名}|=|\Meta{真偽値}”のオプション指定に対して、 +% |\if|[|bxjs@|\Meta{スイッチ名}] を設定する、という動作を規定する。 +% \begin{macrocode} +\@onlypreamble\bxjs@declare@bool@option +\def\bxjs@declare@bool@option#1#2{% + \define@key{bxjs}{#1}[true]{% + \expandafter\ifx\csname bxjs@#2##1\endcsname\relax + \bxjs@error@keyval{#1}{##1}% + \else \@nameuse{bxjs@#2##1}% + \fi}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\bxjs@set@keyval} +% |\bxjs@set@keyval{|\meta{key}|}{|\meta{value}|}{|\meta{error}|}|\par +% |\bxjs@kv@|\meta{key}|@|\meta{value} が定義済ならそれを実行し、 +% 未定義ならエラーを出す。 +% \begin{macrocode} +\def\bxjs@set@keyval#1#2#3{% + \expandafter\let\expandafter\bxjs@next\csname bxjs@kv@#1@#2\endcsname + \ifx\bxjs@next\relax + \bxjs@error@keyval{#1}{#2}% + #3% + \else \bxjs@next + \fi} +\@onlypreamble\bxjs@error@keyval +\def\bxjs@error@keyval#1#2{% + \ClassError\bxjs@clsname + {Invalid value '#2' for option #1}\@ehc} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\jsScale} +% 〔実数値マクロ〕 +% 和文スケール値。 +% \begin{macrocode} +\def\jsScale{0.924715} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\bxjs@base@opt} +% 明示された |base| オプションの値。 +% \begin{macrocode} +%\let\bxjs@base@opt\@undefined +% \end{macrocode} +% \end{macro} +% +% |base| オプションの処理。 +% \begin{macrocode} +\define@key{bxjs}{base}{% + \edef\bxjs@base@opt{#1}% + \bxjs@setbasefontsize{#1}} +\define@key{bxjs}{fontsize}{\setkeys{bxjs}{base=#1}} +% \end{macrocode} +% +% \begin{macro}{\bxjs@jbase@opt} +% 明示された |jbase| オプションの値。 +% \begin{macrocode} +%\let\bxjs@jbase@opt\@undefined +% \end{macrocode} +% \end{macro} +% +% |jbase| オプションの処理。 +% \begin{macrocode} +\define@key{bxjs}{jbase}{\edef\bxjs@jbase@opt{#1}} +\define@key{bxjs}{jafontsize}{\setkeys{bxjs}{jbase=#1}} +% \end{macrocode} +% +% \begin{macro}{\bxjs@scale@opt} +% 明示された |scale| オプションの値。 +% \begin{macrocode} +%\let\bxjs@scale@opt\@undefined +% \end{macrocode} +% \end{macro} +% +% |scale| オプションの処理。 +% \begin{macrocode} +\define@key{bxjs}{scale}{% + \edef\bxjs@scale@opt{#1}% + \let\jsScale\bxjs@scale@opt} +\define@key{bxjs}{jafontscale}{\setkeys{bxjs}{scale=#1}} +% \end{macrocode} +% +% |noscale| オプションの処理。 +% \begin{macrocode} +\DeclareOption{noscale}{\setkeys{bxjs}{scale=1}} +% \end{macrocode} +% +% \begin{macro}{\bxjs@param@mag} +% |mag| オプションの値。 +% \begin{macrocode} +\let\bxjs@param@mag\relax +% \end{macrocode} +% \end{macro} +% +% |mag| オプションの処理。 +% \begin{macrocode} +\define@key{bxjs}{mag}{\edef\bxjs@param@mag{#1}} +% \end{macrocode} +% +% |paper| オプションの処理。 +% \begin{macrocode} +\define@key{bxjs}{paper}{\edef\bxjs@param@paper{#1}} +% \end{macrocode} +% +% \begin{macro}{\bxjs@jadriver} +% 和文ドライバの名前。 +% \begin{macrocode} +\let\bxjs@jadriver\relax +%\let\bxjs@jadriver@opt\@undefined +% \end{macrocode} +% \end{macro} +% +% |ja| オプションの処理。 +% \Note |jadriver| は0.9版で用いられた旧称。 +% \Note 単なる |ja| という指定は無視される(Pandoc 対策)。 +% \begin{macrocode} +\define@key{bxjs}{jadriver}{\edef\bxjs@jadriver@opt{#1}} +\define@key{bxjs}{ja}[\relax]{% + \ifx\relax#1\else\edef\bxjs@jadriver@opt{#1}\fi} +% \end{macrocode} +% +% \begin{macro}{\jsJaFont} +% 和文フォント設定の名前。 +% \begin{macrocode} +\let\jsJaFont\@empty +% \end{macrocode} +% \end{macro} +% +% |jafont| オプションの処理。 +% \begin{macrocode} +\define@key{bxjs}{jafont}{\edef\jsJaFont{#1}} +% \end{macrocode} +% +% \begin{macro}{\jsJaParam} +% 和文ドライバパラメタの文字列。 +% \begin{macrocode} +\let\jsJaParam\@empty +% \end{macrocode} +% \end{macro} +% +% |japaram| オプションの処理。 +% \begin{macrocode} +\define@key{bxjs}{japaram}{\edef\jsJaParam{#1}} +% \end{macrocode} +% +% \begin{macro}{\bxjs@magstyle} +% magstyle設定値。(古いイマイチな名前。) +% \begin{macrocode} +\let\bxjs@magstyle@mag=m +\let\bxjs@magstyle@real=r +\let\bxjs@magstyle@xreal=x +% \end{macrocode} +% (新しい素敵な名前。) +% \Note ただし制御綴としては、|*|付の名前は扱い難いので、|\bxjs@magstyle@xreal| +% の方を優先させる。 +% \begin{macrocode} +\let\bxjs@magstyle@usemag\bxjs@magstyle@mag +\let\bxjs@magstyle@nomag\bxjs@magstyle@real +\expandafter\let\csname bxjs@magstyle@nomag*\endcsname\bxjs@magstyle@xreal +% \end{macrocode} +% |\bxjs@magstyle@default| は既定の値を表す。 +% \begin{macrocode} +\let\bxjs@magstyle@default\bxjs@magstyle@usemag +\ifx l\jsEngine \ifnum\luatexversion>86 + \let\bxjs@magstyle@default\bxjs@magstyle@xreal +\fi\fi +\ifjsWithpTeXng + \let\bxjs@magstyle@default\bxjs@magstyle@xreal +\fi +\let\bxjs@magstyle\bxjs@magstyle@default +% \end{macrocode} +% \end{macro} +% +% |magstyle| オプションの処理。 +% \begin{macrocode} +\define@key{bxjs}{magstyle}{% + \expandafter\let\expandafter\bxjs@magstyle\csname + bxjs@magstyle@#1\endcsname + \ifx\bxjs@magstyle\relax + \ClassError\bxjs@clsname + {Invalid value '#1' for option magstyle}\@ehc + \let\bxjs@magstyle\bxjs@magstyle@default + \fi} +% \end{macrocode} +% +% \begin{macro}{\bxjs@geometry} +% |geometry| オプションの値。 +% \begin{macrocode} +\let\bxjs@geometry@class=c +\let\bxjs@geometry@user=u +\let\bxjs@geometry\bxjs@geometry@class +% \end{macrocode} +% \end{macro} +% +% |geometry| オプションの処理。 +% \begin{macrocode} +\define@key{bxjs}{geometry}{% + \expandafter\let\expandafter\bxjs@geometry\csname + bxjs@geometry@#1\endcsname + \ifx\bxjs@geometry\relax + \ClassError\bxjs@clsname + {Invalid value '#1' for option geometry}\@ehc + \let\bxjs@geometry\bxjs@geometry@class + \fi} +% \end{macrocode} +% +% \begin{macro}{\ifbxjs@fancyhdr} +% 〔スイッチ〕 +% |fancyhdr| パッケージに対する調整を行うか。 +% \begin{macrocode} +\newif\ifbxjs@fancyhdr \bxjs@fancyhdrtrue +% \end{macrocode} +% \end{macro} +% +% |fancyhdr| オプションの処理。 +% \begin{macrocode} +\let\bxjs@kv@fancyhdr@true\bxjs@fancyhdrtrue +\let\bxjs@kv@fancyhdr@false\bxjs@fancyhdrfalse +\define@key{bxjs}{fancyhdr}[true]{% + \bxjs@set@keyval{fancyhdr}{#1}{}} +% \end{macrocode} +% +% \begin{macro}{\ifbxjs@dvi@opt} +% |dvi| オプションが指定されたか。 +% \begin{macrocode} +\newif\ifbxjs@dvi@opt +% \end{macrocode} +% \end{macro} +% +% DVIモードのドライバとドライバ種別との対応。 +% \begin{macrocode} +\let\bxjs@dvidriver@@dvipdfmx=\bxjs@driver@@dvipdfmx +\let\bxjs@dvidriver@@dvips=\bxjs@driver@@dvips +\let\bxjs@dvidriver@@dviout=\bxjs@driver@@dvimode +\let\bxjs@dvidriver@@xdvi=\bxjs@driver@@dvimode +\let\bxjs@dvidriver@@nodvidriver=\bxjs@driver@@none +% \end{macrocode} +% +% |dvi| オプションの処理。 +% \begin{macrocode} +\define@key{bxjs}{dvi}{% + \expandafter\let\expandafter\bxjs@tmpa\csname + bxjs@dvidriver@@#1\endcsname + \ifx\bxjs@tmpa\relax + \ClassError\bxjs@clsname + {Invalid value '#1' for option dvi}\@ehc + \else +% \end{macrocode} +% |\bxjs@driver@given| を未定義にしていることに注意。 +% \begin{macrocode} + \def\bxjs@driver@opt{#1}% + \let\bxjs@driver@given\@undefined + \bxjs@dvi@opttrue + \fi} +% \end{macrocode} +% +% \begin{macro}{\ifbxjs@layout@buggyhmargin} +% 〔スイッチ〕 +% |bxjsbook| の左右マージンがアレか。 +% \Note |layout| が |v1| の場合はアレになる。 +% \begin{macrocode} +\newif\ifbxjs@layout@buggyhmargin +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\ifbxjs@force@chapterabstract} +% 〔スイッチ〕 +% abstract環境をchapterabstractにするか。 +% \Note |bxjsbook| では常に真。 +% |bxjsreport| では |layout| が |v1| の場合に真になる。 +% \begin{macrocode} +\newif\ifbxjs@force@chapterabstract +%<book>\bxjs@force@chapterabstracttrue +% \end{macrocode} +% \end{macro} +% +% |layout| オプションの処理。 +% \begin{macrocode} +\@namedef{bxjs@kv@layout@v1}{% +%<book>\bxjs@layout@buggyhmargintrue +%<report>\bxjs@force@chapterabstracttrue +} +\@namedef{bxjs@kv@layout@v2}{% +%<book>\bxjs@layout@buggyhmarginfalse +%<report>\bxjs@force@chapterabstractfalse +} +\define@key{bxjs}{layout}{% + \bxjs@set@keyval{layout}{#1}{}} +% \end{macrocode} +% +% \begin{macro}{\bxjs@textwidth@limit} +% |textwidth-limit| の指定値。 +% \begin{macrocode} +%\let\bxjs@textwidth@limit@opt\@undefined +\define@key{bxjs}{textwidth-limit}{% + \edef\bxjs@textwidth@limit@opt{#1}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\bxjs@textwidth@opt} +% |textwidth| の指定値。 +% \begin{macrocode} +%\let\bxjs@textwidth@opt\@undefined +\define@key{bxjs}{textwidth}{\edef\bxjs@textwidth@opt{#1}} +\define@key{bxjs}{line_length}{\setkeys{bxjs}{textwidth=#1}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\bxjs@number@of@lines@opt} +% |number-of-lines| の指定値。 +% \begin{macrocode} +%\let\bxjs@number@of@lines@opt\@undefined +\define@key{bxjs}{number-of-lines}{\edef\bxjs@number@of@lines@opt{#1}} +\define@key{bxjs}{number_of_lines}{\setkeys{bxjs}{number-of-lines=#1}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\bxjs@paragraph@mark} +% |paragraph-mark| の指定値。 +% パラグラフのマーク。 +% \begin{macrocode} +%\let\bxjs@paragraph@mark\@undefined +\define@key{bxjs}{paragraph-mark}{% + \edef\bxjs@paragraph@mark{#1}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\ifbxjs@whole@zw@lines} +% 〔スイッチ〕 |whole-zw-lines| の指定値。 +% \begin{macrocode} +\newif\ifbxjs@whole@zw@lines \bxjs@whole@zw@linestrue +\let\bxjs@kv@wholezwlines@true\bxjs@whole@zw@linestrue +\let\bxjs@kv@wholezwlines@false\bxjs@whole@zw@linesfalse +\define@key{bxjs}{whole-zw-lines}[true]{\bxjs@set@keyval{wholezwlines}{#1}{}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\ifbxjs@jaspace@cmd} +% 〔スイッチ〕 |jaspace-cmd| の指定値。 +% \begin{macrocode} +\newif\ifbxjs@jaspace@cmd \bxjs@jaspace@cmdtrue +\let\bxjs@kv@jaspacecmd@true\bxjs@jaspace@cmdtrue +\let\bxjs@kv@jaspacecmd@false\bxjs@jaspace@cmdfalse +\define@key{bxjs}{jaspace-cmd}[true]{\bxjs@set@keyval{jaspacecmd}{#1}{}} +\define@key{bxjs}{xkanjiskip-cmd}[true]{\bxjs@set@keyval{jaspacecmd}{#1}{}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\ifbxjs@fix@at@cmd} +% 〔スイッチ〕 |fix-at-cmd| の指定値。 +% \begin{macrocode} +\newif\ifbxjs@fix@at@cmd \bxjs@fix@at@cmdtrue +\let\bxjs@kv@fixatcmd@true\bxjs@fix@at@cmdtrue +\let\bxjs@kv@fixatcmd@false\bxjs@fix@at@cmdfalse +\define@key{bxjs}{fix-at-cmd}[true]{\bxjs@set@keyval{fixatcmd}{#1}{}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\ifbxjs@hyperref@enc} +% 〔スイッチ〕 |hyperref-enc| の指定値。 +% \begin{macrocode} +\newif\ifbxjs@hyperref@enc \bxjs@hyperref@enctrue +\let\bxjs@kv@hyperrefenc@true\bxjs@hyperref@enctrue +\let\bxjs@kv@hyperrefenc@false\bxjs@hyperref@encfalse +\define@key{bxjs}{hyperref-enc}[true]{\bxjs@set@keyval{hyperrefenc}{#1}{}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\bxjs@everyparhook} +% |everyparhook| の指定値。 +% \begin{macrocode} +\chardef\bxjs@everyparhook@none=0 +\chardef\bxjs@everyparhook@compat=1 +\chardef\bxjs@everyparhook@modern=2 +\if j\jsEngine + \let\bxjs@everyparhook\bxjs@everyparhook@compat +\else + \let\bxjs@everyparhook\bxjs@everyparhook@modern +\fi +\def\bxjs@kv@everyparhook@none{\let\bxjs@everyparhook\bxjs@everyparhook@none} +\def\bxjs@kv@everyparhook@compat{\let\bxjs@everyparhook\bxjs@everyparhook@compat} +\def\bxjs@kv@everyparhook@modern{\let\bxjs@everyparhook\bxjs@everyparhook@modern} +\define@key{bxjs}{everyparhook}{\bxjs@set@keyval{everyparhook}{#1}{}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\bxjs@label@section} +% |label-section| の指定値。 +% \begin{macrocode} +\chardef\bxjs@label@section@none=0 +\chardef\bxjs@label@section@compat=1 +\chardef\bxjs@label@section@modern=2 +\let\bxjs@label@section\bxjs@label@section@compat +\def\bxjs@kv@labelsection@none{\let\bxjs@label@section\bxjs@label@section@none} +\def\bxjs@kv@labelsection@compat{\let\bxjs@label@section\bxjs@label@section@compat} +\def\bxjs@kv@labelsection@modern{\let\bxjs@label@section\bxjs@label@section@modern} +\define@key{bxjs}{label-section}{\bxjs@set@keyval{labelsection}{#1}{}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\ifbxjs@usezw} +% 〔スイッチ〕 |use-zw| の指定値。 +% \begin{macrocode} +\newif\ifbxjs@usezw \bxjs@usezwtrue +\bxjs@declare@bool@option{use-zw}{usezw} +\DeclareOption{nozw}{\setkeys{bxjs}{use-zw=false}} +\DeclareOption{zw}{\setkeys{bxjs}{use-zw=true}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\ifbxjs@disguise@js} +% 〔スイッチ〕 |disguise-js| の指定値。 +% \begin{macrocode} +\newif\ifbxjs@disguise@js \bxjs@disguise@jstrue +\bxjs@declare@bool@option{disguise-js}{disguise@js} +\DeclareOption{nojs}{\setkeys{bxjs}{disguise-js=false}} +\DeclareOption{js}{\setkeys{bxjs}{disguise-js=true}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\ifbxjs@precisetext} +% 〔スイッチ〕 |precise-text| の指定値。 +% \begin{macrocode} +\newif\ifbxjs@precisetext +\bxjs@declare@bool@option{precise-text}{precisetext} +\DeclareOption{noprecisetext}{\setkeys{bxjs}{precise-text=false}} +\DeclareOption{precisetext}{\setkeys{bxjs}{precise-text=true}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\ifbxjs@simplejasetup} +% 〔スイッチ〕 |simple-ja-setup| の指定値。 +% \begin{macrocode} +\newif\ifbxjs@simplejasetup \bxjs@simplejasetuptrue +\bxjs@declare@bool@option{simple-ja-setup}{simplejasetup} +\DeclareOption{nosimplejasetup}{\setkeys{bxjs}{simple-ja-setup=false}} +\DeclareOption{simplejasetup}{\setkeys{bxjs}{simple-ja-setup=true}} +% \end{macrocode} +% \end{macro} +% +% \end{ZRnote} +% +% \paragraph{オプションの実行} +% \mbox{} +% \begin{ZRnote} +% {\LaTeX}の実装では、クラスやパッケージのオプションのトークン列の +% 中に |{ }| が含まれると正常に処理ができない。 +% これに対処する為 |\@removeelement| の実装に少し手を加える +% (仕様は変わらない)。 +% \Note クラスに |\DeclareOption*| がある場合は |\@unusedoptions| +% は常に空のままであることを利用している。 +% \begin{macrocode} +\let\bxjs@org@removeelement\@removeelement +\def\@removeelement#1#2#3{% + \def\reserved@a{#2}% + \ifx\reserved@a\@empty \let#3\@empty + \else \bxjs@org@removeelement{#1}{#2}{#3}% + \fi} +% \end{macrocode} +% +% \end{ZRnote} +% +% デフォルトのオプションを実行します。 +% |multicols| や |url| を |\RequirePackage| するのはやめました。 +% +% \begin{macrocode} +%<article>\ExecuteOptions{a4paper,oneside,onecolumn,notitlepage,final} +%<book>\ExecuteOptions{a4paper,twoside,onecolumn,titlepage,openright,final} +%<report>\ExecuteOptions{a4paper,oneside,onecolumn,titlepage,openany,final} +%<slide>\ExecuteOptions{36pt,a4paper,landscape,oneside,onecolumn,titlepage,final} +\ProcessOptions\relax +\bxjs@post@option@hook +% \end{macrocode} +% +% 後処理 +% +% \begin{macrocode} +\if@slide + \def\maybeblue{\@ifundefined{ver@color.sty}{}{\color{blue}}} +\fi +\if@landscape + \setlength\@tempdima {\paperheight} + \setlength\paperheight{\paperwidth} + \setlength\paperwidth {\@tempdima} +\fi +% \end{macrocode} +% +% \paragraph{グローバルオプションの整理 \ZRX} +% \mbox{} +% \begin{ZRnote} +% +% グローバルオプションのトークン列に |{ }| が含まれていると、 +% やはり後のパッケージの読込処理で不具合を起こすようである +% (|\ProcessOptions*| がエラーになる)。 +% 従って、このようなオプションは除外することにする。 +% \begin{macrocode} +\def\bxjs@tmpdo{% + \def\bxjs@tmpa{\@gobble}% + \expandafter\bxjs@tmpdo@a\@classoptionslist,\@nil,% + \let\@classoptionslist\bxjs@tmpa} +\def\bxjs@tmpdo@a#1,{% + \ifx\@nil#1\relax\else + \bxjs@tmpdo@b#1{}\@nil + \if@tempswa \edef\bxjs@tmpa{\bxjs@tmpa,#1}\fi + \expandafter\bxjs@tmpdo@a + \fi} +\def\bxjs@tmpdo@b#1#{\bxjs@tmpdo@c} +\def\bxjs@tmpdo@c#1\@nil{% + \ifx\@nil#1\@nil \@tempswatrue \else \@tempswafalse \fi} +\bxjs@tmpdo +% \end{macrocode} +% +% |papersize|、|10pt|、|noscale| の各オプションは他のパッケージと衝突を +% 起こす可能性があるため、グローバルオプションから外す。 +% +% \begin{macrocode} +\@expandtwoargs\@removeelement + {papersize}\@classoptionslist\@classoptionslist +\@expandtwoargs\@removeelement + {10pt}\@classoptionslist\@classoptionslist +\@expandtwoargs\@removeelement + {noscale}\@classoptionslist\@classoptionslist +% \end{macrocode} +% +% \end{ZRnote} +% +% \paragraph{使用エンジンの検査・自動判定} +% +% ユーザが |uplatex| オプションの有無により指定したエンジンが,実際に +% 使われているものと一致しているかを検査し,一致しない場合はエラー +% メッセージを表示します。 +% +% [2016-11-09] p\LaTeX / up\LaTeX を自動判別するオプション |autodetect-engine| を新設しました。 +% up\LaTeX の場合は,グローバルオプションに |uplatex| を追加することで, +% 自動判定に応じて |otf| パッケージにも |uplatex| オプションが渡るようにします。 +% +% \begin{ZRnote} +% ここのコードを削除。 +% \end{ZRnote} +% +% [2016-11-11] p\LaTeX の場合は,オプション |uplatex| が指定されていれば必ずエラーを出します。 +% |autodetect-engine| が有効になっていてもエラーを出しますが,これは |otf| パッケージに +% |uplatex| オプションが渡ってしまうのを防ぐためです。 +% +% \begin{ZRnote} +% +% 正規化前の和文ドライバの値を |\bxjs@jadriver| に設定する。 +% \begin{macrocode} +\ifx\bxjs@jadriver@opt\@undefined\else + \let\bxjs@jadriver\bxjs@jadriver@opt +\fi +% \end{macrocode} +% +% エンジン明示指定のオプションが与えられた場合は、 +% それが実際のエンジンと一致するかを検査する。 +% \begin{macrocode} +\let\bxjs@tmpb\jsEngine +\ifx j\bxjs@tmpb\ifjsWithpTeXng + \let\bxjs@tmpb=g +\fi\fi +\ifx j\bxjs@tmpb\ifjsWithupTeX + \let\bxjs@tmpb=u +\fi\fi +\ifx p\bxjs@tmpb\ifjsInPdfMode\else + \let\bxjs@tmpb=n +\fi\fi +% \end{macrocode} +% (この時点で |\bxjs@tmpb| は |\bxjs@engine@given| と +% 同じ規則で分類したコードをもっている。) +% \begin{macrocode} +\ifx *\bxjs@engine@given + \let\bxjs@engine@given\bxjs@tmpb +% \end{macrocode} +% エンジン指定が |autodetect-engine| であり、かつ実際のエンジンが +% {(u)\pLaTeX}だった場合は、本来のエンジンオプションを +% グローバルオプションに加える。 +% \begin{macrocode} + \ifx j\bxjs@engine@given + \g@addto@macro\@classoptionslist{,platex} + \else\ifx u\bxjs@engine@given + \g@addto@macro\@classoptionslist{,uplatex} + \fi\fi +\fi +\ifx\bxjs@engine@given\@undefined\else + \ifx\bxjs@engine@given\bxjs@tmpb\else + \ClassError\bxjs@clsname + {Option '\bxjs@engine@opt' used on wrong engine}\@ehc + \fi +\fi +% \end{macrocode} +% +% エンジンが{\pTeX-ng}の場合、グローバルオプションに |uplatex| を +% 追加する。 +% \begin{macrocode} +\ifjsWithpTeXng + \g@addto@macro\@classoptionslist{,uplatex} +\fi +% \end{macrocode} +% +% \paragraph{ドライバ指定 \ZRX} +% +% ドライバ指定のオプションが与えられた場合は、 +% それがエンジンと整合するかを検査する。 +% \begin{macrocode} +\@tempswatrue +\ifx \bxjs@driver@given\@undefined\else + \ifjsInPdfMode + \ifx\bxjs@driver@given\bxjs@driver@@pdfmode\else + \@tempswafalse + \fi + \else\ifx x\jsEngine + \ifx\bxjs@driver@given\bxjs@driver@@xetex\else + \@tempswafalse + \fi + \else + \ifx\bxjs@driver@given\bxjs@driver@@pdfmode + \@tempswafalse + \else\ifx\bxjs@driver@given\bxjs@driver@@xetex + \@tempswafalse + \fi\fi + \ifjsWithpTeXng\ifx\bxjs@driver@given\bxjs@driver@@dvipdfmx\else + \@tempswafalse + \fi\fi + \fi\fi +\fi +\if@tempswa\else + \ClassError\bxjs@clsname + {Option '\bxjs@driver@opt' used on wrong engine}\@ehc +\fi +% \end{macrocode} +% +% DVI出力のエンジンである場合の追加処理。 +% \begin{macrocode} +\ifjsInPdfMode \@tempswafalse +\else\ifx x\jsEngine \@tempswafalse +\else\ifjsWithpTeXng \@tempswafalse +\else \@tempswatrue +\fi\fi\fi +\if@tempswa +% \end{macrocode} +% ドライバオプションがない場合は警告を出す。 +% \Note ただし |ja| 非指定の場合はスキップする +% (0.3 版との互換性のため)。 +% \begin{macrocode} + \ifx\bxjs@driver@opt\@undefined \ifx\bxjs@jadriver@opt\@undefined\else + \ClassWarningNoLine\bxjs@clsname + {No driver option is given} + \fi\fi +% \end{macrocode} +% |dvi=XXX| が指定されていた場合は、 +% |XXX| が指定された時と同じ動作にする。 +% (グローバルオプションに |XXX| を追加する。) +% \begin{macrocode} + \ifbxjs@dvi@opt + \edef\bxjs@next{% + \let\noexpand\bxjs@driver@given + \csname bxjs@dvidriver@@\bxjs@driver@opt\endcsname + \noexpand\g@addto@macro\noexpand\@classoptionslist + {,\bxjs@driver@opt}% + }\bxjs@next + \fi +\fi +% \end{macrocode} +% +% エンジンが{\pTeX-ng}の場合、グローバルオプションに |dvipdfmx| +% を追加する。 +% ただし、エンジンオプションが |platex-ng*|(|*|付)の場合、および +% 既に |dvipdfmx| が指定されている場合を除く。 +% \begin{macrocode} +\ifjsWithpTeXng + \ifx\bxjs@driver@given\bxjs@driver@@dvipdfmx + \let\bxjs@platexng@nodrv\@undefined + \else\ifx t\bxjs@platexng@nodrv\else + \g@addto@macro\@classoptionslist{,dvipdfmx} + \fi\fi +\fi +% \end{macrocode} +% +% ドライバが |nodvidriver| であった場合の処理。 +% DVIウェア依存の処理を全て無効化する。 +% \begin{macrocode} +\ifx\bxjs@driver@given\bxjs@driver@@none + \bxjs@papersizefalse +\fi +% \end{macrocode} +% +% \paragraph{その他のBXJS特有の後処理 \ZRX} +% +% |\bxjs@jadriver| の正規化。 +% 値が未指定の場合は |minimal| に変える。 +% ただしエンジンが{(u)\pTeX}である場合は |standard| +% に変える。 +% \begin{macrocode} +\def\bxjs@@minimal{minimal} +\ifx\bxjs@jadriver\relax + \ifx j\jsEngine + \def\bxjs@jadriver{standard} + \else + \let\bxjs@jadriver\bxjs@@minimal + \fi +\fi +% \end{macrocode} +% +% エンジンオプションがない場合はエラーを出す。 +% \Note ただし |ja| 非指定の場合はスキップする。 +% \begin{macrocode} +\ifx\bxjs@jadriver@opt\@undefined\else + \ifx\bxjs@engine@given\@undefined + \ClassError\bxjs@clsname + {An engine option must be explicitly given}% + {When you use a Japanese-driver you must specify a correct\MessageBreak + engine option.\MessageBreak\@ehc} +\fi\fi +% \end{macrocode} +% +% 新しいLua{\TeX}(0.87版以降)ではmagがアレなので、 +% |magstyle=usemag| が指定されていた場合はエラーを出す。 +% (この場合の既定値は |nomag*| であり、 +% エラーの場合は既定値に置き換えられる。) +% \begin{macrocode} +\ifx\bxjs@magstyle@default\bxjs@magstyle@mag\else + \ifx\bxjs@magstyle\bxjs@magstyle@mag + \let\bxjs@magstyle\bxjs@magstyle@default + \ClassError\bxjs@clsname + {The engine does not support 'magstyle=usemag'}% + {LuaTeX v0.87 or later no longer supports the "mag" feature of TeX.\MessageBreak + The default value 'nomag*' is used instead.\MessageBreak \@ehc} + \fi +\fi +% \end{macrocode} +% +% |base|、|jbase|、|scale| の値を用いて和文スケール値を解決する。 +% \Note |\bxjs@param@basefontsize| と |\jsScale| へのオプション値の反映は +% 既に実施されていることに注意。 +% |jbase| 非指定の場合はこのままでよい。 +% \begin{macrocode} +\ifx\bxjs@jbase@opt\@undefined\else + \ifx\bxjs@base@opt\@undefined +% \end{macrocode} +% |jbase| 指定済で |base| 未指定の場合は、|\jsScale| の値を採用して +% 和文基底サイズを決定する。 +% \begin{macrocode} + \jsSetQHLength\@tempdima{\bxjs@jbase@opt}% + \bxjs@invscale\@tempdima\jsScale + \bxjs@setbasefontsize{\@tempdima}% + \else +% \end{macrocode} +% |jbase| と |base| がともに指定済の場合は、それらの値から +% 和文スケール値を決定する。 +% \begin{macrocode} + \ifx\bxjs@scale@opt\@undefined\else + \ClassWarningNoLine\bxjs@clsname + {Redundant 'scale' option is ignored}% + \fi + \jsSetQHLength\@tempdima{\bxjs@jbase@opt}% + \@tempdimb=\bxjs@param@basefontsize\relax + \edef\jsScale{\strip@pt\@tempdimb}% + \bxjs@invscale\@tempdima\jsScale + \edef\jsScale{\strip@pt\@tempdima}% + \fi +\fi +% \end{macrocode} +% +% \begin{macro}{\Cjascale} +% 和文クラス共通仕様(※ただしZR氏提唱)における、 +% 和文スケール値の変数。 +% \begin{macrocode} +\let\Cjascale\jsScale +% \end{macrocode} +% \end{macro} +% +% \end{ZRnote} +% \begin{ZRnote} +% +% 8bit欧文{\TeX}の場合は、高位バイトをアクティブ化しておく。 +% (和文を含むマクロ定義を通用させるため。) +% \begin{macrocode} +\if \if p\jsEngine T\else\if n\jsEngine T\else F\fi\fi T + \@tempcnta="80 \loop \ifnum\@tempcnta<"100 + \catcode\@tempcnta\active + \advance\@tempcnta\@ne + \repeat +\fi +% \end{macrocode} +% +% |js| オプション指定時は、jsarticle(または jsbook)クラスを +% 読込済のように振舞う。 +% \Note 「2つのクラスを読み込んだ状態」は |\LoadClass| を使用した +% 場合に出現するので、別に異常ではない。 +% \begin{macrocode} +\ifbxjs@disguise@js +%<book|report>\def\bxjs@js@clsname{jsbook} +%<!book&!report>\def\bxjs@js@clsname{jsarticle} + \@namedef{ver@\bxjs@js@clsname.cls}{2001/01/01 (bxjs)} +\fi +% \end{macrocode} +% +% |color|/|graphics| パッケージが持つ出力用紙サイズ設定の機能は、 +% BXJSクラスでは余計なので無効にしておく。 +% このため、グローバルで |nosetpagesize| を設定しておく。 +% \begin{macrocode} +\g@addto@macro\@classoptionslist{,nosetpagesize} +% \end{macrocode} +% +% |oldfontcommands| オプション指定時は |\allowoldfontcommands| +% 命令を実行する。 +% \begin{macrocode} +\ifbxjs@oldfontcommands + \AtEndOfClass{\allowoldfontcommands} +\fi +% \end{macrocode} +% \end{ZRnote} +% +% \paragraph{papersizeスペシャルの出力} +% +% |dvi| ファイルの先頭にdvipsのpapersize specialを書き込むことで, +% 出力用紙サイズを設定します。これはdvipdfmxや最近のdvioutにも有効です。 +% どうやらpapersize specialにはtrue付の単位は許されず,かつ単位は +% 常にtrueなものと扱われるようです。 +% そこで,後で出てくる(☆)の部分,「|\mag|にあわせてスケール」よりも +% 手前で実行しておくことになります。 +% +% トンボの付いたときの用紙サイズは無意味ですが, +% いわゆる「ノビ」サイズという縦横1インチずつ長い用紙に出力することを考えて, +% 1インチずつ加えました。 +% ところが\pLaTeXe はトンボ出力幅を両側に1インチとっていますので, +% dvips使用時に +% \begin{quote} +% |-O -0.5in,-0.5in| +% \end{quote} +% というオプションを与えて両側0.5インチのトンボにするといいでしょう。 +% +% [2003-05-17] トンボをプレビューに使うことを考えて1インチを2インチにしました。 +% +% [2016-07-11] memoirクラスのマニュアルによると,トンボを含めた用紙の寸法は +% |\stockwidth|,|\stockheight|と呼ぶようですので,これを使うことにしました。 +% +% [2017-01-11] トンボオプションが指定されているとき「だけ」|\stockwidth|, +% |\stockheight|を定義するようにしました。 +% +% \begin{ZRnote} +% BXJSでは出力用紙サイズ記録は |geometry| パッケージが行う。 +% +% また、JSクラスと異なり、|\stockwidth|、|\stockheight| は常に定義される。 +% \end{ZRnote} +% \begin{macrocode} +\newdimen\stockwidth \newdimen\stockheight +\begingroup\expandafter\expandafter\expandafter\endgroup +\expandafter\ifx\csname iftombow\expandafter\endcsname\csname iftrue\endcsname +% \newdimen\stockwidth \newdimen\stockheight + \setlength{\stockwidth}{\paperwidth} + \setlength{\stockheight}{\paperheight} + \advance \stockwidth 2in + \advance \stockheight 2in +\fi +% \end{macrocode} +% +% \paragraph{基準となる行送り} +% +% \begin{macro}{\n@baseline} +% +% 基準となる行送りをポイント単位で表したものです。 +% +% \begin{macrocode} +%<slide>\def\n@baseline{13}% +%<!slide>\ifdim\bxjs@param@basefontsize<10pt \def\n@baseline{15}% +%<!slide>\else \def\n@baseline{16}\fi +% \end{macrocode} +% \end{macro} +% +% \paragraph{拡大率の設定} +% \mbox{} +% \begin{ZRnote} +% |\bxjs@magstyle| の値に応じてスイッチ |jsc@mag| と |jsc@mag@xreal| を +% 設定する。 +% \begin{macrocode} +\ifx\bxjs@magstyle\bxjs@magstyle@mag + \jsc@magtrue +\else\ifx\bxjs@magstyle\bxjs@magstyle@xreal + \jsc@mag@xrealtrue +\fi\fi +% \end{macrocode} +% \end{ZRnote} +% +% サイズの変更は\TeX のプリミティブ |\mag| を使って行います。 +% 9ポイントについては行送りも若干縮めました。 +% サイズについては全面的に見直しました。 +% +% [2008-12-26] 1000 / |\mag| に相当する |\inv@mag| を定義しました。 +% |truein| を使っていたところを |\inv@mag in| に直しましたので, +% |geometry| パッケージと共存できると思います。 +% なお,新ドキュメントクラス側で |10pt| 以外にする場合の注意: +% \begin{itemize} +% \item |geometry| 側でオプション |truedimen| を指定してください。 +% \item |geometry| 側でオプション |mag| は使えません。 +% \end{itemize} +% +% \begin{ZRnote} +% 設定すべき |\mag| 値を (基底サイズ)/(10\,pt) $\times$ 1000 と算出。 +% BXJSクラスでは、|\mag| を直接指定したい場合は、|geometry| 側では +% なくクラスのオプションで行うものとする。 +% \begin{macrocode} +\ifx\bxjs@param@mag\relax + \@tempdima=\bxjs@param@basefontsize + \advance\@tempdima.001pt \multiply\@tempdima25 + \divide\@tempdima16384\relax \@tempcnta\@tempdima\relax + \edef\bxjs@param@mag{\the\@tempcnta} +\else +% mag値が直接指定された場合 + \bxjs@gset@tempcnta{\bxjs@param@mag} + \ifnum\@tempcnta<\z@ \@tempcnta=\z@ \fi +% 有効なmag値の範囲は1--32768 + \edef\bxjs@param@mag{\the\@tempcnta} + \advance\@tempcnta100000 + \def\bxjs@tmpa#1#2#3#4#5\@nil{\@tempdima=#2#3#4.#5\p@} + \expandafter\bxjs@tmpa\the\@tempcnta\@nil + \edef\bxjs@param@basefontsize{\the\@tempdima} +\fi +\@tempcnta\bxjs@param@mag \advance\@tempcnta100000 +\def\bxjs@tmpa#1#2#3#4\@nil{\@tempdima=#2#3.#4\p@} +\expandafter\bxjs@tmpa\the\@tempcnta\@nil +\edef\jsc@magscale{\strip@pt\@tempdima} +\let\jsBaseFontSize\bxjs@param@basefontsize +% \end{macrocode} +% \end{ZRnote} +% +% [2016-07-08] |\jsc@mpt| および |\jsc@mmm| に,それぞれ1ptおよび1mmを拡大させた値を格納します。 +% 以降のレイアウト指定ではこちらを使います。 +% +% \begin{ZRnote} +% |\mag| する場合(現状はこれが既定)にコードの変更を低減するために、 +% 以下では必要に応じて、|\jsc@mpt| を |\p@?| と書く。 +% その上で、|\mag| する場合は |?| を無視して |\p@| と解釈させ、 +% |\mag| しない場合は |?| を英字扱いにして |\p@?| という制御綴を +% |\jsc@mpt| と同値にする。 +% \Note (多分2.0版あたりで)JSクラスに合わせるため |\p@?| 表記を +% 止める予定。 +% \begin{macrocode} +\newdimen\jsc@mpt +\newdimen\jsc@mmm +\ifjsc@mag + \jsc@mpt=1\p@ + \jsc@mmm=1mm + \catcode`\?=9 % \p@? read as \p@ +\else + \jsc@mpt=\jsc@magscale\p@ + \jsc@mmm=\jsc@magscale mm + \catcode`\?=11 \let\p@?\jsc@mpt +\fi +\chardef\bxjs@qmcc=\catcode`\?\relax +\g@addto@macro\bxjs@pre@jadriver@hook{\catcode`\?=12\relax} +% \end{macrocode} +% +% ここで{p\TeX}のzwに相当する単位として用いる長さ変数 |\jsZw| を作成する。 +% 約束により、これは |\jsScale| $\times$ (指定フォントサイズ) に等しい。 +% +% |nozw| 非指定時は |\zw| を |\jsZw| と同義にする。 +% \begin{macrocode} +\newdimen\jsZw +\jsZw=10\jsc@mpt \jsZw=\jsScale\jsZw +\ifbxjs@usezw + \providecommand*\zw{\jsZw} +\fi +% \end{macrocode} +% +% \begin{macro}{\zwspace} +% 全角幅の水平空き。 +% \begin{macrocode} +\def\zwspace{\hskip\jsZw\relax} +% \end{macrocode} +% \end{macro} +% +% そして、magstyle が |nomag*| の場合は、NFSSにパッチを当てる。 +% \begin{macrocode} +\ifjsc@mag@xreal + \RequirePackage{type1cm} + \let\jsc@invscale\bxjs@invscale +% \end{macrocode} +% ムニャムニャムニャ……。 +% \end{ZRnote} +% \begin{macrocode} + \ifbxjs@TUenc + \expandafter\let\csname TU/lmr/m/n/10\endcsname\relax + \else + \expandafter\let\csname OT1/cmr/m/n/10\endcsname\relax + \fi + \expandafter\let\csname OMX/cmex/m/n/10\endcsname\relax + \let\jsc@get@external@font\get@external@font + \def\get@external@font{% + \jsc@preadjust@extract@font + \jsc@get@external@font} + \def\jsc@fstrunc#1{% + \edef\jsc@tmpa{\strip@pt#1}% + \expandafter\jsc@fstrunc@a\jsc@tmpa.****\@nil} + \def\jsc@fstrunc@a#1.#2#3#4#5#6\@nil{% + \if#5*\else + \edef\jsc@tmpa{#1% + \ifnum#2#3>\z@ .#2\ifnum#3>\z@ #3\fi\fi}% + \fi} + \def\jsc@preadjust@extract@font{% + \let\jsc@req@size\f@size + \dimen@\f@size\p@ \jsc@invscale\dimen@\jsc@magscale + \advance\dimen@.005pt\relax \jsc@fstrunc\dimen@ + \let\jsc@ref@size\jsc@tmpa + \let\f@size\jsc@ref@size} + \def\execute@size@function#1{% + \let\jsc@cref@size\f@size + \let\f@size\jsc@req@size + \csname s@fct@#1\endcsname} + \let\jsc@DeclareErrorFont\DeclareErrorFont + \def\DeclareErrorFont#1#2#3#4#5{% + \@tempdimc#5\p@ \@tempdimc\jsc@magscale\@tempdimc + \edef\jsc@tmpa{{#1}{#2}{#3}{#4}{\strip@pt\@tempdimc}} + \expandafter\jsc@DeclareErrorFont\jsc@tmpa} + \def\gen@sfcnt{% + \edef\mandatory@arg{\mandatory@arg\jsc@cref@size}% + \empty@sfcnt} + \def\genb@sfcnt{% + \edef\mandatory@arg{% + \mandatory@arg\expandafter\genb@x\jsc@cref@size..\@@}% + \empty@sfcnt} + \ifbxjs@TUenc\else + \DeclareErrorFont{OT1}{cmr}{m}{n}{10} + \fi +\fi +% \end{macrocode} +% +% [2016-11-16] latex.ltx (ltspace.dtx)で定義されている |\smallskip| の, +% 単位 |pt| を |\jsc@mpt| に置き換えた |\jsc@smallskip| を定義します。 +% これは |\maketitle| で用いられます。 +% |\jsc@medskip| と |\jsc@bigskip| は必要ないのでコメントアウトしています。 +% +% \begin{macro}{\jsc@smallskip} +% \begin{macro}{\jsc@medskip} +% \begin{macro}{\jsc@bigskip} +% \begin{macrocode} +\def\jsc@smallskip{\vspace\jsc@smallskipamount} +%\def\jsc@medskip{\vspace\jsc@medskipamount} +%\def\jsc@bigskip{\vspace\jsc@bigskipamount} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\jsc@smallskipamount} +% \begin{macro}{\jsc@medskipamount} +% \begin{macro}{\jsc@bigskipamount} +% \begin{macrocode} +\newskip\jsc@smallskipamount +\jsc@smallskipamount=3\jsc@mpt plus 1\jsc@mpt minus 1\jsc@mpt +%\newskip\jsc@medskipamount +%\jsc@medskipamount =6\jsc@mpt plus 2\jsc@mpt minus 2\jsc@mpt +%\newskip\jsc@bigskipamount +%\jsc@bigskipamoun =12\jsc@mpt plus 4\jsc@mpt minus 4\jsc@mpt +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% |\paperwidth|,|\paperheight|を|\mag|にあわせてスケールしておきます(☆)。 +% +% [2016-07-11] 新しく追加した|\stockwidth|,|\stockheight|も|\mag|にあわせて +% スケールします。 +% +% [2017-01-11] トンボオプションが指定されているとき「だけ」|\stockwidth|, +% |\stockheight|が定義されています。 +% +% \begin{macrocode} +% \end{macrocode} +% +% \paragraph{pagesizeスペシャルの出力} +% +% [2003-05-17] dvipdfm(x)のpagesizeスペシャルを出力します。 +% +% [2004-08-08] 今のdvipdfmxはdvips用スペシャルを理解するようなので外しました。 +% +% \begin{macrocode} +% \ifpapersize +% \setlength{\@tempdima}{\paperwidth} +% \setlength{\@tempdimb}{\paperheight} +% \iftombow +% \advance \@tempdima 2truein +% \advance \@tempdimb 2truein +% \fi +% \AtBeginDvi{\special{pdf: pagesize width \the\@tempdima\space height \the\@tempdimb}} +% \fi +% \end{macrocode} +% +% \section{和文フォントの変更} +% +% \begin{ZRnote} +% 和文フォントの設定は和文ドライバの管轄。 +% \end{ZRnote} +% +% \begin{macro}{\@} +% +% 欧文といえば,\LaTeX の |\def\@{\spacefactor\@m}| という定義(|\@m| は1000) +% では |I watch TV\@.| と書くと V とピリオドのペアカーニングが効かなくなります。 +% そこで,次のような定義に直し,|I watch TV.\@| と書くことにします。 +% +% [2016-07-14] 2015-01-01の\LaTeX で,auxiliary filesに書き出されたときに +% スペースが食われないようにする修正が入りました。これに合わせて |{}| を補いました。 +% +% \begin{ZRnote} +% BXJSクラスでの変更点: +% \begin{itemize} +% \item |fix-at-cmd| オプションが偽の場合は再定義しない。 +% \item 固定の3000でなく実際のピリオドのsfcode値を使う。 +% \item 「防御的な |\@|」での不具合を防ぐため、大文字直後の |\@| +% は標準と同等の動作にする。 +% \end{itemize} +% \end{ZRnote} +% +% \begin{macrocode} +\chardef\bxjs@periodchar=`\. +\bxjs@protected\def\bxjs@SE{% + \ifnum\spacefactor<\@m \spacefactor\@m + \else \spacefactor\sfcode\bxjs@periodchar + \fi} +\ifbxjs@fix@at@cmd + \def\@{\bxjs@SE{}} +\fi +% \end{macrocode} +% \end{macro} +% +% \section{フォントサイズ} +% +% フォントサイズを変える命令(|\normalsize|,|\small| など) +% の実際の挙動の設定は,三つの引数をとる命令 |\@setfontsize| を使って, +% たとえば +% \begin{quote} +% |\@setfontsize{\normalsize}{10}{16}| +% \end{quote} +% のようにして行います。これは +% \begin{quote} +% |\normalsize| は10ポイントのフォントを使い,行送りは16ポイントである +% \end{quote} +% という意味です。 +% ただし,処理を速くするため, +% 以下では10と同義の\LaTeX の内部命令 |\@xpt| を使っています。 +% この |\@xpt| の類は次のものがあり,\LaTeX 本体で定義されています。 +%\begin{verbatim} +% \@vpt 5 \@vipt 6 \@viipt 7 +% \@viiipt 8 \@ixpt 9 \@xpt 10 +% \@xipt 10.95 \@xiipt 12 \@xivpt 14.4 +%\end{verbatim} +% +%^^A\begin{macro}{\@setfontsize} +% +% ここでは |\@setfontsize| の定義を少々変更して, +% 段落の字下げ |\parindent|, +% 和文文字間のスペース |\kanjiskip|, +% 和文・欧文間のスペース |\xkanjiskip| を変更しています。 +% +% |\kanjiskip| は\pLaTeXe で |0pt plus .4pt minus .5pt| に設定していますが, +% これはそもそも文字サイズの変更に応じて変わるべきものです。 +% それに,プラスになったりマイナスになったりするのは, +% 追い出しと追い込みの混在が生じ,統一性を欠きます。 +% なるべく追い出しになるようにプラスの値だけにしたいところですが, +% ごくわずかなマイナスは許すことにしました。 +% +% |\xkanjiskip| については,四分つまり全角の1/4を標準として, +% 追い出すために三分あるいは二分まで延ばすのが一般的ですが, +% ここではTimesやPalatinoのスペースがほぼ四分であることに着目して, +% これに一致させています。これなら書くときにスペースを空けても +% 空けなくても同じ出力になります。 +% +% |\parindent| については,0(以下)でなければ全角幅(1zw)に直します。 +% +% [2008-02-18] |english| オプションで |\parindent| を 1em にしました。 +% +% \begin{ZRnote} +% \begin{macro}{\set@fontsize} +% |\fontsize| 命令(|\large| 等でなく)でフォントサイズ変更した場合 +% にもフックが実行されるように、|\@setfontsize| では +% なく |\set@fontsize| に対してパッチを当てるように変更。 +% \begin{macrocode} +\def\bxjs@tmpa{\def\set@fontsize##1##2##3} +\expandafter\bxjs@tmpa\expandafter{% + \set@fontsize{#1}{#2}{#3}% +% 末尾にコードを追加 + \expandafter\def\expandafter\size@update\expandafter{% + \size@update + \jsFontSizeChanged}% +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\jsFontSizeChanged} +% フォントサイズ変更時に呼ばれるフック。 +% |\jsZw| を再設定している。 +% その後でユーザ定義用のフック |\jsResetDimen| を実行する。 +% \begin{macrocode} +\newcommand*\jsFontSizeChanged{% + \jsZw=\f@size\p@ + \jsZw=\jsScale \jsZw + \ifdim\parindent>\z@ + \if@english \parindent=1em + \else \parindent=1\jsZw + \fi + \fi\relax + \jsResetDimen} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\jsResetDimen} +% ユーザ定義用のフック。 +% \begin{macrocode} +\newcommand*\jsResetDimen{} +% \end{macrocode} +% \end{macro} +% \end{ZRnote} +% +% \begin{macro}{\jsc@setfontsize} +% クラスファイルの内部では,拡大率も考慮した |\jsc@setfontsize| を +% |\@setfontsize| の変わりに用いることにします。 +% \begin{macrocode} +\ifjsc@mag + \let\jsc@setfontsize\@setfontsize +\else + \def\jsc@setfontsize#1#2#3{% + \@setfontsize#1{#2\jsc@mpt}{#3\jsc@mpt}} +% microtype対策 + \ifjsWitheTeX\if j\jsEngine\else + \def\jsc@setfontsize#1#2#3{% + \edef\bxjs@sfs@next{% + \unexpanded{\@setfontsize#1}% + {\the\dimexpr#2\jsc@mpt\relax}{\the\dimexpr#3\jsc@mpt\relax}% + }\bxjs@sfs@next} + \fi\fi +\fi +% \end{macrocode} +% \end{macro} +% +% これらのグルーをもってしても行分割ができない場合は, +% |\emergencystretch| に訴えます。 +% +% \begin{ZRnote} +% これはフォントサイズ非依存なので |\Cwd| で書くのが適当だが、 +% |\Cwd| はまだ定義されていない。 +% \end{ZRnote} +% \begin{macrocode} +\emergencystretch 3\jsZw +% \end{macrocode} +% +% \begin{macro}{\ifnarrowbaselines} +% \begin{macro}{\narrowbaselines} +% \begin{macro}{\widebaselines} +% +% 欧文用に行間を狭くする論理変数と,それを真・偽にするためのコマンドです。 +% +% [2003-06-30] 数式に入るところで |\narrowbaselines| +% を実行しているので |\abovedisplayskip| 等が初期化 +% されてしまうというshintokさんのご指摘に対して, +% しっぽ愛好家さんが次の修正を教えてくださいました。 +% +% [2008-02-18] |english| オプションで最初の段落のインデントをしないようにしました。 +% +% TODO: Hasumiさん [qa:54539] のご指摘は考慮中です。 +% +% \begin{ZRnote} +% 別行立て数式に入るときに |\narrowbaselines| が呼ばれるが、 +% このコードでは「数式中で |\normalsize| などのサイズ命令 +% (|\@currsize| の実体)が呼ばれた」ことになり警告が出る。 +% JSクラスでは、|\@setfontsize| 中の |\@nomath| 実行を消して +% 「そもそもサイズ命令で警告が出ない」ようにしている。 +% 警告が常に出ないのも望ましくないので、BXJSクラスの実装では、 +% |\narrowbaselines| の時だけ警告が出ないようにする。 +% \end{ZRnote} +% +% \begin{macrocode} +\newif\ifnarrowbaselines +\if@english + \narrowbaselinestrue +\fi +\def\narrowbaselines{% + \narrowbaselinestrue + \skip0=\abovedisplayskip + \skip2=\abovedisplayshortskip + \skip4=\belowdisplayskip + \skip6=\belowdisplayshortskip +% 一時的に警告を無効化する + \let\bxjs@save@nomath\@nomath + \let\@nomath\@gobble + \@currsize\selectfont + \let\@nomath\bxjs@save@nomath + \abovedisplayskip=\skip0 + \abovedisplayshortskip=\skip2 + \belowdisplayskip=\skip4 + \belowdisplayshortskip=\skip6\relax} +\def\widebaselines{\narrowbaselinesfalse\@currsize\selectfont} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{ZRnote} +% |microtype| パッケージを読み込んだ場合、|\normalsize| 等の +% フォントサイズ変更命令の定義の中にif文が使われていると、 +% 不可解なエラーが発生する。 +% これは |microtype| が邪悪なトリックを使用しているせいなのだが、 +% 一応こちら側で対策をとることにする。 +% \begin{macrocode} +\def\bxjs@if@narrowbaselines{% + \ifnarrowbaselines\expandafter\@firstoftwo + \else \expandafter\@secondoftwo + \fi +} +% \end{macrocode} +% \end{ZRnote} +% +% \begin{macro}{\normalsize} +% +% 標準のフォントサイズと行送りを選ぶコマンドです。 +% +% 本文10ポイントのときの行送りは, +% 欧文の標準クラスファイルでは12ポイント, +% アスキーの和文クラスファイルでは15ポイントになっていますが, +% ここでは16ポイントにしました。 +% ただし |\narrowbaselines| で欧文用の12ポイントになります。 +% +% 公称10ポイントの和文フォントが約9.25ポイント +% (アスキーのものの0.961倍)であることもあり, +% 行送りがかなりゆったりとしたと思います。 +% 実際,$16/9.25 \approx 1.73$ であり, +% 和文の推奨値の一つ「二分四分」(1.75) +% に近づきました。 +% +% \begin{ZRnote} +% |microtype| 対策のためif文を避ける。 +% \end{ZRnote} +% \begin{macrocode} +\renewcommand{\normalsize}{% + \bxjs@if@narrowbaselines{% + \jsc@setfontsize\normalsize\@xpt\@xiipt + }{%else + \jsc@setfontsize\normalsize\@xpt{\n@baseline}% + }% +% \end{macrocode} +% +% 数式の上のアキ(|\abovedisplayskip|), +% 短い数式の上のアキ(|\abovedisplayshortskip|), +% 数式の下のアキ(|\belowdisplayshortskip|)の設定です。 +% +% [2003-02-16] ちょっと変えました。 +% +% [2009-08-26] \TeX\ Q\,\&\,A 52569から始まる議論について逡巡して +% いましたが,結局,微調節してみることにしました。 +% +% \begin{macrocode} + \abovedisplayskip 11\p@? \@plus3\p@? \@minus4\p@? + \abovedisplayshortskip \z@ \@plus3\p@? + \belowdisplayskip 9\p@? \@plus3\p@? \@minus4\p@? + \belowdisplayshortskip \belowdisplayskip +% \end{macrocode} +% +% 最後に,リスト環境のトップレベルのパラメータ |\@listI| を, +% |\@listi| にコピーしておきます。|\@listI| の設定は後で出てきます。 +% +% \begin{macrocode} + \let\@listi\@listI} +% \end{macrocode} +% +% ここで実際に標準フォントサイズで初期化します。 +% +% \begin{macrocode} +\normalsize +% \end{macrocode} +% +% \end{macro} +% +% \begin{macro}{\Cht} +% \begin{macro}{\Cdp} +% \begin{macro}{\Cwd} +% \begin{macro}{\Cvs} +% \begin{macro}{\Chs} +% +% 基準となる長さの設定をします。 +% \pLaTeXe カーネル(\texttt{plfonts.dtx})で宣言されている +% パラメータに実際の値を設定します。 +% たとえば |\Cwd| は |\normalfont| の全角幅(1zw)です。 +% +% [2017-08-31] 基準とする文字を「全角空白」(EUCコード\texttt{0xA1A1})から +% 「漢」(JISコード\texttt{0x3441})へ変更しました。 +% +% \begin{ZRnote} +% |\Cwd| 等の変数は{\pTeX}系以外では未定義なのでここで定義する。 +% \begin{macrocode} +\ifx\Cht\@undefined \newdimen\Cht \fi +\ifx\Cdp\@undefined \newdimen\Cdp \fi +\ifx\Cwd\@undefined \newdimen\Cwd \fi +\ifx\Cvs\@undefined \newdimen\Cvs \fi +\ifx\Chs\@undefined \newdimen\Chs \fi +% \end{macrocode} +% +% 規約上、現在の |\jsZw| の値が |\Cwd| である。 +% BXJSでは |\Cht| と |\Cdp| は単純に |\Cwd| の88\%と12\%の値とする。 +% \end{ZRnote} +% \begin{macrocode} +\setlength\Cht{0.88\jsZw} +\setlength\Cdp{0.12\jsZw} +\setlength\Cwd{1\jsZw} +\setlength\Cvs{\baselineskip} +\setlength\Chs{1\jsZw} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\small} +% +% |\small| も |\normalsize| と同様に設定します。 +% 行送りは,|\normalsize| が16ポイントなら, +% 割合からすれば$16 \times 0.9 = 14.4$ポイントになりますが, +% |\small| の使われ方を考えて,ここでは和文13ポイント, +% 欧文11ポイントとします。 +% また,|\topsep| と |\parsep| は,元はそれぞれ$4 \pm 2$,$2 \pm 1$ +% ポイントでしたが,ここではゼロ(|\z@|)にしました。 +% +% \begin{ZRnote} +% |microtype| 対策のためif文を避ける。 +% 後の |\footnotesize| も同様。 +% \end{ZRnote} +% \begin{macrocode} +\newcommand{\small}{% + \bxjs@if@narrowbaselines{% +%<!kiyou> \jsc@setfontsize\small\@ixpt{11}% +%<kiyou> \jsc@setfontsize\small{8.8888}{11}% + }{%else +%<!kiyou> \jsc@setfontsize\small\@ixpt{13}% +%<kiyou> \jsc@setfontsize\small{8.8888}{13.2418}% + }% + \abovedisplayskip 9\p@? \@plus3\p@? \@minus4\p@? + \abovedisplayshortskip \z@ \@plus3\p@? + \belowdisplayskip \abovedisplayskip + \belowdisplayshortskip \belowdisplayskip + \def\@listi{\leftmargin\leftmargini + \topsep \z@ + \parsep \z@ + \itemsep \parsep}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\footnotesize} +% +% |\footnotesize| も同様です。 +% |\topsep| と |\parsep| は,元はそれぞれ$3 \pm 1$,$2 \pm 1$ +% ポイントでしたが,ここではゼロ(|\z@|)にしました。 +% +% \begin{macrocode} +\newcommand{\footnotesize}{% + \bxjs@if@narrowbaselines{% +%<!kiyou> \jsc@setfontsize\footnotesize\@viiipt{9.5}% +%<kiyou> \jsc@setfontsize\footnotesize{8.8888}{11}% + }{%else +%<!kiyou> \jsc@setfontsize\footnotesize\@viiipt{11}% +%<kiyou> \jsc@setfontsize\footnotesize{8.8888}{13.2418}% + }% + \abovedisplayskip 6\p@? \@plus2\p@? \@minus3\p@? + \abovedisplayshortskip \z@ \@plus2\p@? + \belowdisplayskip \abovedisplayskip + \belowdisplayshortskip \belowdisplayskip + \def\@listi{\leftmargin\leftmargini + \topsep \z@ + \parsep \z@ + \itemsep \parsep}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\scriptsize} +% \begin{macro}{\tiny} +% \begin{macro}{\large} +% \begin{macro}{\Large} +% \begin{macro}{\LARGE} +% \begin{macro}{\huge} +% \begin{macro}{\Huge} +% \begin{macro}{\HUGE} +% +% それ以外のサイズは,本文に使うことがないので, +% 単にフォントサイズと行送りだけ変更します。 +% 特に注意すべきは |\large| で, +% これは二段組のときに節見出しのフォントとして使い, +% 行送りを |\normalsize| と同じにすることによって, +% 節見出しが複数行にわたっても段間で行が揃うようにします。 +% +% [2004-11-03] |\HUGE| を追加。 +% +% \begin{macrocode} +\newcommand{\scriptsize}{\jsc@setfontsize\scriptsize\@viipt\@viiipt} +\newcommand{\tiny}{\jsc@setfontsize\tiny\@vpt\@vipt} +\if@twocolumn +%<!kiyou> \newcommand{\large}{\jsc@setfontsize\large\@xiipt{\n@baseline}} +%<kiyou> \newcommand{\large}{\jsc@setfontsize\large{11.111}{\n@baseline}} +\else +%<!kiyou> \newcommand{\large}{\jsc@setfontsize\large\@xiipt{17}} +%<kiyou> \newcommand{\large}{\jsc@setfontsize\large{11.111}{17}} +\fi +%<!kiyou>\newcommand{\Large}{\jsc@setfontsize\Large\@xivpt{21}} +%<kiyou>\newcommand{\Large}{\jsc@setfontsize\Large{12.222}{21}} +\newcommand{\LARGE}{\jsc@setfontsize\LARGE\@xviipt{25}} +\newcommand{\huge}{\jsc@setfontsize\huge\@xxpt{28}} +\newcommand{\Huge}{\jsc@setfontsize\Huge\@xxvpt{33}} +\newcommand{\HUGE}{\jsc@setfontsize\HUGE{30}{40}} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% 別行立て数式の中では |\narrowbaselines| にします。 +% 和文の行送りのままでは,行列や場合分けの行送り, +% 連分数の高さなどが不釣合いに大きくなるためです。 +% +% 本文中の数式の中では |\narrowbaselines| にしていません。 +% 本文中ではなるべく行送りが変わるような大きいものを使わず, +% 行列は |amsmath| の |smallmatrix| 環境を使うのがいいでしょう。 +% +% \begin{macrocode} +\everydisplay=\expandafter{\the\everydisplay \narrowbaselines} +% \end{macrocode} +% +% しかし,このおかげで別行数式の上下のスペースが少し違ってしまいました。 +% とりあえず |amsmath| の |equation| 関係は |okumacro| のほうで逃げていますが, +% もっとうまい逃げ道があればお教えください。 +% +% 見出し用のフォントは |\bfseries| 固定ではなく,|\headfont| +% という命令で定めることにします。 +% これは太ゴシックが使えるときは |\sffamily| |\bfseries| +% でいいと思いますが,通常の中ゴシックでは単に |\sffamily| +% だけのほうがよさそうです。 +% 『p\LaTeXe 美文書作成入門』(1997年)では |\sffamily| +% |\fontseries{sbc}| として新ゴMと合わせましたが, +% |\fontseries{sbc}| はちょっと幅が狭いように感じました。 +% +% \begin{macrocode} +% \newcommand{\headfont}{\bfseries} +\newcommand{\headfont}{\sffamily} +% \newcommand{\headfont}{\sffamily\fontseries{sbc}\selectfont} +% \end{macrocode} +% +% \section{レイアウト} +% +% \paragraph{二段組} +% +% \begin{macro}{\columnsep} +% \begin{macro}{\columnseprule} +% +% |\columnsep| は二段組のときの左右の段間の幅です。 +% 元は10ptでしたが,2zwにしました。 +% このスペースの中央に |\columnseprule| の幅の罫線が引かれます。 +% +% \begin{macrocode} +%<!kiyou>\setlength\columnsep{2\Cwd} +%<kiyou>\setlength\columnsep{28truebp} +\setlength\columnseprule{\z@} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \paragraph{段落} +% +% \begin{macro}{\lineskip} +% \begin{macro}{\normallineskip} +% \begin{macro}{\lineskiplimit} +% \begin{macro}{\normallineskiplimit} +% +% 上下の行の文字が |\lineskiplimit| より接近したら, +% |\lineskip| より近づかないようにします。 +% 元は0ptでしたが1ptに変更しました。 +% \texttt{normal...} の付いた方は保存用です。 +% +% \begin{macrocode} +\setlength\lineskip{1\jsc@mpt} +\setlength\normallineskip{1\jsc@mpt} +\setlength\lineskiplimit{1\jsc@mpt} +\setlength\normallineskiplimit{1\jsc@mpt} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\baselinestretch} +% +% 実際の行送りが |\baselineskip| の何倍かを表すマクロです。たとえば +% \begin{quote} +% |\renewcommand{\baselinestretch}{2}| +% \end{quote} +% とすると,行送りが通常の2倍になります。ただし, +% これを設定すると,たとえ |\baselineskip| が伸縮するように +% 設定しても,行送りの伸縮ができなくなります。 +% 行送りの伸縮はしないのが一般的です。 +% +% \begin{macrocode} +\renewcommand{\baselinestretch}{} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\parskip} +% \begin{macro}{\parindent} +% +% |\parskip| は段落間の追加スペースです。 +% 元は 0pt plus 1pt になっていましたが,ここではゼロにしました。 +% |\parindent| は段落の先頭の字下げ幅です。 +% +% \begin{macrocode} +\setlength\parskip{\z@} +\if@slide + \setlength\parindent{0\p@} +\else + \setlength\parindent{1\Cwd} +\fi +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\@lowpenalty} +% \begin{macro}{\@medpenalty} +% \begin{macro}{\@highpenalty} +% +% |\nopagebreak|,|\nolinebreak| は引数に応じて次のペナルティ値 +% のうちどれかを選ぶようになっています。 +% ここはオリジナル通りです。 +% +% \begin{macrocode} +\@lowpenalty 51 +\@medpenalty 151 +\@highpenalty 301 +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\interlinepenalty} +% +% 段落中の改ページのペナルティです。デフォルトは 0 です。 +% +% \begin{macrocode} +% \interlinepenalty 0 +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\brokenpenalty} +% +% ページの最後の行がハイフンで終わる際のペナルティです。 +% デフォルトは100です。 +% +% \begin{macrocode} +% \brokenpenalty 100 +% \end{macrocode} +% \end{macro} +% +% \subsection{ページレイアウト} +% +% \begin{ZRnote} +% BXJSではページレイアウトの処理は |geometry| パッケージが担当している。 +% \end{ZRnote} +% +% \paragraph{準備 \ZRX} +% \mbox{} +% \begin{ZRnote} +% +% \begin{macro}{\bxjs@bd@pre@geometry@hook} +% begin-documentフックのコード内で、|geometry| パッケージが挿入する +% コードの直前で実行されるフック。 +% \begin{macrocode} +\@onlypreamble\bxjs@bd@pre@geometry@hook +\let\bxjs@bd@pre@geometry@hook\@empty +% \end{macrocode} +% \end{macro} +% +% 現状ではここで |\mag| を設定している。\par +% |\topskip| も指定する。 +% \begin{macrocode} +\ifjsc@mag +\mag=\bxjs@param@mag +\fi +\setlength{\topskip}{10\p@?} +% \end{macrocode} +% +% |\jsSetQHLength| のための和文単位の定義。 +% \begin{macrocode} +\def\bxjs@unit@trueQ{0.25truemm}\let\bxjs@unit@trueH\bxjs@unit@trueQ +\def\bxjs@unit@zw{\jsZw}\let\bxjs@unit@zh\bxjs@unit@zw +% \end{macrocode} +% +% |\bxjs@param@paper| が長さ指定(|{W}{H}|)の場合、 +% |geometry| の形式(|papersize={W,H}|)に変換する。 +% \begin{macrocode} +\def\bxjs@tmpdo{\futurelet\bxjs@tmpa\bxjs@tmpdo@a} +\def\bxjs@tmpdo@a{% + \ifx\bxjs@tmpa\bgroup \expandafter\bxjs@tmpdo@b + \else \expandafter\bxjs@tmpdo@c \fi} +\def\bxjs@tmpdo@b#1#2#3\@nil{\edef\bxjs@param@paper{papersize={#1,#2}}} +\def\bxjs@tmpdo@c#1\@nil{\bxjs@tmpdo@d#1,,\@nil} +\def\bxjs@tmpdo@d#1,#2,#3\@nil{% + \ifx\@nil#3\@nil\else \edef\bxjs@param@paper{papersize={#1,#2}}\fi} +\expandafter\bxjs@tmpdo\bxjs@param@paper\@empty\@empty\@nil +% \end{macrocode} +% +% \begin{macro}{\bxjs@layout@paper} +% |geometry| の用紙設定のオプション。 +% \begin{macrocode} +\edef\bxjs@layout@paper{% + \ifjsc@mag truedimen,\fi + \if@landscape landscape,\fi + \bxjs@param@paper} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\bxjs@layout} +% |geometry| のページレイアウトのオプション列。 +% 文書クラス毎に異なる。 +% \begin{macrocode} +%<*article|report> +\def\bxjs@layout@base{% + headheight=\topskip,footskip=0.03367\paperheight,% + headsep=\footskip-\topskip,includeheadfoot,% +} +\edef\bxjs@layout{\bxjs@layout@base + hscale=0.76,hmarginratio=1:1,% + vscale=0.83,vmarginratio=1:1,% +} +%</article|report> +%<*book> +\def\bxjs@layout@base{% + headheight=\topskip,headsep=6\jsc@mmm,nofoot,includeheadfoot,% +} +\ifbxjs@layout@buggyhmargin %--- +% アレ +\edef\bxjs@layout{\bxjs@layout@base + hmargin=36\jsc@mmm,hmarginratio=1:1,% + vscale=0.83,vmarginratio=1:1,% +} +\else %--- +% 非アレ +\edef\bxjs@layout{\bxjs@layout@base + hmargin=18\jsc@mmm,% + vscale=0.83,vmarginratio=1:1,% +} +\fi %--- +%</book> +%<*slide> +\def\bxjs@layout@base{% + noheadfoot,% +} +\edef\bxjs@layout{\bxjs@layout@base + hscale=0.9,hmarginratio=1:1,% + vscale=0.944,vmarginratio=1:1,% +} +%</slide> +% \end{macrocode} +% \end{macro} +% +% |textwidth| オプションの設定を反映する。 +% \begin{macrocode} +%<*!book> +\ifx\bxjs@textwidth@opt\@undefined\else + \jsSetQHLength\@tempdima{\bxjs@textwidth@opt} + \edef\bxjs@layout{\bxjs@layout width=\the\@tempdima,} +\fi +%</!book> +\ifx\bxjs@number@of@lines@opt\@undefined\else + \bxjs@gset@tempcnta{\bxjs@number@of@lines@opt} + \edef\bxjs@layout{\bxjs@layout lines=\the\@tempcnta,} +\fi +% \end{macrocode} +% +% \begin{macro}{\fullwidth} +% 〔寸法レジスタ〕 +% ヘッダ・フッタ領域の横幅。 +% \begin{macrocode} +\newdimen\fullwidth +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\bxjs@textwidth@limit} +% 〔寸法値マクロ〕 +% |bxjsbook| における、|\textwidth| 上限の値。 +% +% \begin{macro}{\jsTextWidthLimit} +% 〔実数値マクロ〕 +% |\bxjs@textwidth@limit| の全角(|\Cwd|)単位での値。 +% \begin{macrocode} +%<*book> +\newcommand\jsTextWidthLimit{40} +\@tempdima=\jsTextWidthLimit\Cwd +\ifx\bxjs@textwidth@limit@opt\@undefined\else + \bxjs@gset@tempcnta{\bxjs@textwidth@limit@opt} + \@tempdima=\@tempcnta\Cwd +\fi +\ifx\bxjs@textwidth@opt\@undefined\else + \jsSetQHLength\@tempdima{\bxjs@textwidth@opt} +\fi +\edef\bxjs@textwidth@limit{\the\@tempdima} +\ifdim\@tempdima=\jsTextWidthLimit\Cwd\else + \bxjs@invscale\@tempdima{\strip@pt\Cwd} + \long\edef\jsTextWidthLimit{\strip@pt\@tempdima} +\fi +%</book> +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\bxjs@preproc@layout} +% |geometry| の前処理。 +% +% |geometry| は |\topskip| が標準の行高(|\ht\strutbox|)より小さくならない +% ようにする自動調整を行うが、これをどうするかは未検討。 +% 今のところ、単純に回避(無効化)している。 +% \begin{macrocode} +\def\bxjs@preproc@layout{% + \edef\bxjs@save@ht@strutbox{\the\ht\strutbox}\ht\strutbox=10\jsc@mpt} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\bxjs@postproc@layout} +% |geometry| の後処理。 +% \begin{macrocode} +\def\bxjs@postproc@layout{% +% \end{macrocode} +% |geometry| のドライバを再設定する。 +% \begin{macrocode} + \ifx\bxjs@geometry@driver\relax\else + \let\Gm@driver\bxjs@geometry@driver + \fi +% \end{macrocode} +% |\ht\strutbox| の値を元に戻す。 +% \begin{macrocode} + \ht\strutbox=\bxjs@save@ht@strutbox\relax +% \end{macrocode} +% |\textwidth| の値を補正する。 +% \begin{macrocode} + \ifbxjs@whole@zw@lines + \@tempdimb=\textwidth + \if@twocolumn \@tempdima=2\Cwd \else \@tempdima=1\Cwd \fi + \advance\textwidth.005pt\relax + \divide\textwidth\@tempdima \multiply\textwidth\@tempdima + \advance\@tempdimb-\textwidth + \advance\oddsidemargin 0.5\@tempdimb + \advance\evensidemargin 0.5\@tempdimb + \fi + \fullwidth=\textwidth +% \end{macrocode} +% |bxjsbook| の場合は、|geometry| が設定した |\textwidth| は |\fullwidth| と +% して扱い、その値から実際の |\textwidth| を導出する。 +% \begin{macrocode} +%<*book> + \@tempdima=\bxjs@textwidth@limit\relax + \ifbxjs@whole@zw@lines + \advance\@tempdima.005pt\relax + \divide\@tempdima\Cwd \multiply\@tempdima\Cwd + \fi + \ifdim\textwidth>\@tempdima + \textwidth=\@tempdima + \addtolength\evensidemargin{\fullwidth-\textwidth} + \fi +%</book> +% \end{macrocode} +% |\textheight| 関連の調整。 +% \begin{macrocode} + \@tempdimb=\textheight + \advance\textheight-\topskip + \advance\textheight.005pt\relax + \divide\textheight\baselineskip \multiply\textheight\baselineskip + \advance\textheight\topskip + \advance\@tempdimb-\textheight + \advance\topmargin0.5\@tempdimb +% \end{macrocode} +% |\headheight| 関連の調整。 +% \begin{macrocode} + \@tempdima=\topskip + \advance\headheight\@tempdima + \advance\topmargin-\@tempdima +% \end{macrocode} +% marginpar関連の調整。 +% \begin{macrocode} + \setlength\marginparsep{\columnsep} + \setlength\marginparpush{\baselineskip} + \setlength\marginparwidth{\paperwidth-\oddsidemargin-1truein% + -\textwidth-10\jsc@mmm-\marginparsep} + \ifbxjs@whole@zw@lines + \divide\marginparwidth\Cwd \multiply\marginparwidth\Cwd + \fi +% \end{macrocode} +% 連動する変数。 +% \begin{macrocode} + \maxdepth=.5\topskip + \stockwidth=\paperwidth + \stockheight=\paperheight +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\jsGeometryOptions} +% |geometry|パッケージに渡すオプションのリスト。 +% \Note |geometry=user| 指定時にユーザが利用することを想定している。 +% \begin{macrocode} +\edef\jsGeometryOptions{% + \bxjs@layout@paper,\bxjs@layout} +% \end{macrocode} +% \end{macro} +% \end{ZRnote} +% +% \paragraph{geometry パッケージを読み込む \ZRX} +% \mbox{} +% \begin{ZRnote} +% |geoemtry=class| の場合に、実際に |geometry| パッケージを読みこむ。 +% \begin{macrocode} +\ifx\bxjs@geometry\bxjs@geometry@class +% \end{macrocode} +% +% |geometry| のドライバオプション指定。 +% |nopapersize| 指定時は、special命令出力を抑止するために +% ドライバを |none| にする。 +% そうでない場合は、クラスで指定したドライバオプションが引き継がれる +% ので何もしなくてよいが、例外として、ドライバが |dvipdfmx| の +% 時は、現状の |geometry| は |dvipdfm| を指定する必要がある。 +% \begin{macrocode} +\ifbxjs@papersize + \ifx\bxjs@driver@given\bxjs@driver@@dvipdfmx + \PassOptionsToPackage{dvipdfm}{geometry} + \else\ifx\bxjs@driver@given\bxjs@driver@@dvimode + \PassOptionsToPackage{dvipdfm}{geometry} + \fi\fi + \let\bxPapersizeSpecialDone=t +\else + \PassOptionsToPackage{driver=none}{geometry} +\fi +% \end{macrocode} +% +% ここで |geometry| を読み込む。 +% \Note |geometry| のbegin-documentフックにおいて、Lua{\TeX}の +% 旧版互換を有効にする。 +% \begin{macrocode} +\AtBeginDocument{\bxjs@bd@pre@geometry@hook} +\AtBeginDocument{\ImposeOldLuaTeXBehavior} +\bxjs@preproc@layout +\edef\bxjs@next{% + \noexpand\RequirePackage[\bxjs@layout@paper,\bxjs@layout]{geometry}% +}\bxjs@next +\AtBeginDocument{\RevokeOldLuaTeXBehavior} +% \end{macrocode} +% +% \begin{macro}{\bxjs@geometry@driver} +% |geometry| が用いるドライバの名前。 +% \Note この値は一度決めた後は変わってほしくないので、 +% |\bxjs@postproc@layout| において書き戻す処理を入れている。 +% \begin{macrocode} +\let\bxjs@geometry@driver\Gm@driver +\bxjs@postproc@layout +% \end{macrocode} +% \end{macro} +% +% |geometry| のドライバ自動判別に対する前処理。 +% \begin{macrocode} +\g@addto@macro\bxjs@bd@pre@geometry@hook{% +% \end{macrocode} +% |geometry| の4.x版に関する対策。 +% \Note |geometry| の4.x版の使用はBXJS 1.2版より非推奨とし、 +% 2.0版でサポートを廃止する予定。 +% \begin{macrocode} + \@ifpackagelater{geometry}{2010/02/12}{}{%else + \PackageWarningNoLine\bxjs@clsname + {The 'geometry' package installed\MessageBreak + is too old (< v5.0)}% + \if x\jsEngine \ifnum\mag=\@m\else + \def\bxjs@Gm@driver{pdftex} + \ifx\pdfhorigin\@undefined \newdimen\pdfhorigin \fi + \ifx\pdfvorigin\@undefined \newdimen\pdfvorigin \fi + \fi\fi}% +% \end{macrocode} +% エンジンが |platex-ng| の時は |geometry| のドライバを |pdftex| にする。 +% \begin{macrocode} + \ifjsWithpTeXng + \ifx\Gm@driver\@empty + \def\Gm@driver{pdftex}% + \fi + \fi} +% \end{macrocode} +% +% \begin{macro}{\setpagelayout} +% ページレイアウト設定のためのユーザ命令。 +% \begin{macrocode} +\def\setpagelayout{% + \bxjs@ifplus{\bxjs@setpagelayout@a\tw@}{%else + \@ifstar{\bxjs@setpagelayout@a\@ne}{\bxjs@setpagelayout@a\z@}}} +\def\bxjs@setpagelayout@a#1#2{% + \ifcase#1% modify + \def\bxjs@next{\ifjsc@mag truedimen,\fi #2}% + \or% reset(*) + \def\bxjs@next{reset,\bxjs@layout@paper,#2}% + \or% semireset(+) + \def\bxjs@next{reset,\bxjs@layout@paper,\bxjs@layout@base,#2}% + \fi + \bxjs@preproc@layout + \edef\bxjs@next{% + \noexpand\geometry{\bxjs@next}% + }\bxjs@next + \bxjs@postproc@layout} +% \end{macrocode} +% \end{macro} +% +% \end{ZRnote} +% +% \paragraph{geometry パッケージを読み込まない \ZRX} +% \mbox{} +% \begin{ZRnote} +% |geometry=user|の場合の処理。 +% \begin{macrocode} +\else\ifx\bxjs@geometry\bxjs@geometry@user +% \end{macrocode} +% +% この場合はユーザが何らかの方法(例えば |geometry| を読み込む) +% でページレイアウトを設定する必要がある。 +% もし、本体開始時に |\textwidth| がカーネル設定の値(|.5\maxdimen|) +% のままになっている場合はエラーを出す。 +% \Note |\jsUseMinimalPageLayout| は動作テスト用。 +% \begin{macrocode} +\g@addto@macro\bxjs@begin@document@hook{% + \ifdim\textwidth=.5\maxdimen + \ClassError\bxjs@clsname + {Page layout is not properly set}% + {\@ehd}% + \fi} +\def\jsUseMinimalPageLayout{% + \setlength{\textwidth}{6.5in}% + \setlength{\textheight}{8in}} +% \end{macrocode} +% +% |\setpagelayout| はとりあえず無効にしておく。 +% \begin{macrocode} +\let\bxjs@geometry@driver\relax +\def\setpagelayout{% + \bxjs@ifplus{\bxjs@pagelayout@a}{%else + \@ifstar{\bxjs@pagelayout@a}{\bxjs@pagelayout@a}}} +\def\bxjs@pagelayout@a#1{% + \ClassError\bxjs@clsname + {Command '\string\setpagelayout' is not supported,\MessageBreak + because 'geometry' value is not 'class'}\@eha} +% +\fi\fi +% \end{macrocode} +% \end{ZRnote} +% +% \paragraph{JSクラスと共通処理の開始 \ZRX} +% \mbox{} +% \begin{ZRnote} +% ここからのコードは以下の点を除いて JS クラスのものを踏襲する。 +% \begin{itemize} +% \item zw の代わりに |\jsZw| を用いる。 +% \item article/report/book/slide の切り分けの処理が異なる。 +% \end{itemize} +% \Note diffが崩壊するのを避けるためオリジナルのコードを無効化した状態で +% 挿入しておく。 +% \end{ZRnote} +% \begin{macrocode} +%<*jsclasses> +% \end{macrocode} +% +% \paragraph{縦方向のスペース} +% +% \begin{macro}{\headheight} +% \begin{macro}{\topskip} +% +% |\topskip| は本文領域上端と本文1行目のベースラインとの距離です。 +% あまりぎりぎりの値にすると,本文中に $\int$ のような高い文字が +% 入ったときに1行目のベースラインが他のページより下がってしまいます。 +% ここでは本文の公称フォントサイズ(10pt)にします。 +% +% [2003-06-26] |\headheight| はヘッダの高さで, +% 元は12ptでしたが,新ドキュメントクラスでは |\topskip| +% と等しくしていました。ところが,|fancyhdr| パッケージ +% で |\headheight| が小さいとおかしいことになるようです +% ので,2倍に増やしました。代わりに,版面の上下揃えの +% 計算では |\headheight| ではなく |\topskip| を使う +% ことにしました。 +% +% [2016-08-17] 圏点やルビが一行目に来た場合に下がるのを防ぐた +% め,|\topskip| を10ptから1.38zwに増やしました。 +% |\headheight| は従来と同じ20ptのままとします。 +% +% \begin{macrocode} +\setlength\topskip{1.38zw}%% from 10\jsc@mpt (2016-08-17) +\if@slide + \setlength\headheight{0\jsc@mpt} +\else + \setlength\headheight{20\jsc@mpt}%% from 2\topskip (2016-08-17); from \topskip (2003-06-26) +\fi +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\footskip} +% +% |\footskip| は本文領域下端とフッタ下端との距離です。 +% 標準クラスファイルでは,book で0.35in(約8.89mm), +% book 以外で30pt(約10.54mm)となっていましたが, +% ここではA4判のときちょうど1cmとなるように, +% |\paperheight| の0.03367倍(最小 |\baselineskip|)としました。 +% 書籍については,フッタは使わないことにして,ゼロにしました。 +% +% \begin{macrocode} +%<*article|kiyou> +\if@slide + \setlength\footskip{0pt} +\else + \setlength\footskip{0.03367\paperheight} + \ifdim\footskip<\baselineskip + \setlength\footskip{\baselineskip} + \fi +\fi +%</article|kiyou> +%<jspf>\setlength\footskip{9\jsc@mmm} +%<*book> +\if@report + \setlength\footskip{0.03367\paperheight} + \ifdim\footskip<\baselineskip + \setlength\footskip{\baselineskip} + \fi +\else + \setlength\footskip{0pt} +\fi +%</book> +%<*report> +\setlength\footskip{0.03367\paperheight} +\ifdim\footskip<\baselineskip + \setlength\footskip{\baselineskip} +\fi +%</report> +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\headsep} +% +% |\headsep| はヘッダ下端と本文領域上端との距離です。 +% 元は book で18pt(約6.33mm), +% それ以外で25pt(約8.79mm)になっていました。 +% ここでは article は |\footskip| $-$ |\topskip| としました。 +% +% [2016-10-08] article の \texttt{slide} のとき, +% および book の非 \texttt{report} と kiyou のときに |\headsep| を +% 減らしそこねていたのを修正しました(2016-08-17での修正漏れ)。 +% +% \begin{macrocode} +%<*article> +\if@slide + \setlength\headsep{0\jsc@mpt} + \addtolength\headsep{-\topskip}%% added (2016-10-08) + \addtolength\headsep{10\jsc@mpt}%% added (2016-10-08) +\else + \setlength\headsep{\footskip} + \addtolength\headsep{-\topskip} +\fi +%</article> +%<*book> +\if@report + \setlength\headsep{\footskip} + \addtolength\headsep{-\topskip} +\else + \setlength\headsep{6\jsc@mmm} + \addtolength\headsep{-\topskip}%% added (2016-10-08) + \addtolength\headsep{10\jsc@mpt}%% added (2016-10-08) +\fi +%</book> +%<*report> +\setlength\headsep{\footskip} +\addtolength\headsep{-\topskip} +%</report> +%<*jspf> +\setlength\headsep{9\jsc@mmm} +\addtolength\headsep{-\topskip} +%</jspf> +%<*kiyou> +\setlength\headheight{0\jsc@mpt} +\setlength\headsep{0\jsc@mpt} +\addtolength\headsep{-\topskip}%% added (2016-10-08) +\addtolength\headsep{10\jsc@mpt}%% added (2016-10-08) +%</kiyou> +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\maxdepth} +% +% |\maxdepth| は本文最下行の最大の深さで, +% plain \TeX や\LaTeX~2.09では4ptに固定でした。 +% \LaTeX2e では |\maxdepth| $+$ |\topskip| を本文フォントサイズ +% の1.5倍にしたいのですが,|\topskip| は本文フォントサイズ +% (ここでは10pt)に等しいので,結局 |\maxdepth| は |\topskip| +% の半分の値(具体的には5pt)にします。 +% +% \begin{macrocode} +\setlength\maxdepth{.5\topskip} +% \end{macrocode} +% \end{macro} +% +% \paragraph{本文の幅と高さ} +% +% \begin{macro}{\fullwidth} +% +% 本文の幅が全角40文字を超えると読みにくくなります。 +% そこで,書籍の場合に限って, +% 紙の幅が広いときは外側のマージンを余分にとって全角40文字に押え, +% ヘッダやフッタは本文領域より広く取ることにします。 +% このときヘッダやフッタの幅を表す |\fullwidth| という長さを定義します。 +% +% \begin{macrocode} +\newdimen\fullwidth +% \end{macrocode} +% +% この |\fullwidth| は article では紙幅 |\paperwidth|の0.76倍を超えない +% 全角幅の整数倍(二段組では全角幅の偶数倍)にします。0.76倍という数値は +% A4縦置きの場合に紙幅から約2インチを引いた値になるように選びました。 +% book では紙幅から36ミリを引いた値にしました。 +% +% \begin{macro}{\textwidth} +% +% 書籍以外では本文領域の幅 |\textwidth| は |\fullwidth| と等しくします。 +% |article| ではA4縦置きで49文字となります。 +% 某学会誌スタイルでは50zw(25文字×2段)+段間8mmとします。 +% +% \begin{macrocode} +%<*article> +\if@slide + \setlength\fullwidth{0.9\paperwidth} +\else + \setlength\fullwidth{0.76\paperwidth} +\fi +\if@twocolumn \@tempdima=2zw \else \@tempdima=1zw \fi +\divide\fullwidth\@tempdima \multiply\fullwidth\@tempdima +\setlength\textwidth{\fullwidth} +%</article> +%<*book> +\if@report + \setlength\fullwidth{0.76\paperwidth} +\else + \setlength\fullwidth{\paperwidth} + \addtolength\fullwidth{-36\jsc@mmm} +\fi +\if@twocolumn \@tempdima=2zw \else \@tempdima=1zw \fi +\divide\fullwidth\@tempdima \multiply\fullwidth\@tempdima +\setlength\textwidth{\fullwidth} +\if@report \else + \if@twocolumn \else + \ifdim \fullwidth>40zw + \setlength\textwidth{40zw} + \fi + \fi +\fi +%</book> +%<*report> +\setlength\fullwidth{0.76\paperwidth} +\if@twocolumn \@tempdima=2zw \else \@tempdima=1zw \fi +\divide\fullwidth\@tempdima \multiply\fullwidth\@tempdima +\setlength\textwidth{\fullwidth} +%</report> +%<*jspf> +\setlength\fullwidth{50zw} +\addtolength\fullwidth{8\jsc@mmm} +\setlength\textwidth{\fullwidth} +%</jspf> +%<*kiyou> +\setlength\fullwidth{48zw} +\addtolength\fullwidth{\columnsep} +\setlength\textwidth{\fullwidth} +%</kiyou> +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\textheight} +% +% 紙の高さ |\paperheight| は,1インチと |\topmargin| +% と |\headheight| と |\headsep| と |\textheight| +% と |\footskip| とページ下部の余白を加えたものです。 +% +% 本文部分の高さ |\textheight| は, +% 紙の高さ |\paperheight| の0.83倍から, +% ヘッダの高さ,ヘッダと本文の距離,本文とフッタ下端の距離, +% |\topskip| を引き, +% それを |\baselineskip| の倍数に切り捨て, +% 最後に |\topskip| を加えます。 +% 念のため0.1ポイント余分に加えておきます。 +% 0.83倍という数値は,A4縦置きの場合に紙の高さから +% 上下マージン各約1インチを引いた値になるように選びました。 +% +% 某学会誌スタイルでは44行にします。 +% +% [2003-06-26] |\headheight| を |\topskip| に直しました。 +% 以前はこの二つは値が同じであったので,変化はないはずです。 +% +% [2016-08-26] |\topskip| を10ptから1.38zwに増やしましたので, +% その分 |\textheight| を増やします(2016-08-17での修正漏れ)。 +% +% [2016-10-08] article の slide のときに |\headheight| はゼロ +% なので,さらに修正しました(2016-08-17での修正漏れ)。 +% +% \begin{macrocode} +%<*article|book|report> +\if@slide + \setlength{\textheight}{0.95\paperheight} +\else + \setlength{\textheight}{0.83\paperheight} +\fi +\addtolength{\textheight}{-10\jsc@mpt}%% from -\topskip (2016-10-08); from -\headheight (2003-06-26) +\addtolength{\textheight}{-\headsep} +\addtolength{\textheight}{-\footskip} +\addtolength{\textheight}{-\topskip} +\divide\textheight\baselineskip +\multiply\textheight\baselineskip +%</article|book|report> +%<jspf>\setlength{\textheight}{51\baselineskip} +%<kiyou>\setlength{\textheight}{47\baselineskip} +\addtolength{\textheight}{\topskip} +\addtolength{\textheight}{0.1\jsc@mpt} +%<jspf>\setlength{\mathindent}{10\jsc@mmm} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\flushbottom} +% +% [2016-07-18] |\textheight| に念のため0.1ポイント余裕を持たせて +% いるのと同様に,|\flushbottom| にも余裕を持たせます。 +% 元の\LaTeXe での完全な |\flushbottom| の定義は +%\begin{verbatim} +% \def\flushbottom{% +% \let\@textbottom\relax \let\@texttop\relax} +%\end{verbatim} +% ですが,次のようにします。 +% +% \begin{macrocode} +\def\flushbottom{% + \def\@textbottom{\vskip \z@ \@plus.1\jsc@mpt}% + \let\@texttop\relax} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\marginparsep} +% \begin{macro}{\marginparpush} +% +% |\marginparsep| は欄外の書き込みと本文との間隔です。 +% |\marginparpush| は欄外の書き込みどうしの最小の間隔です。 +% +% \begin{macrocode} +\setlength\marginparsep{\columnsep} +\setlength\marginparpush{\baselineskip} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\oddsidemargin} +% \begin{macro}{\evensidemargin} +% +% それぞれ奇数ページ,偶数ページの左マージンから1インチ引いた値です。 +% 片面印刷では |\oddsidemargin| が使われます。 +% \TeX は上・左マージンに |1truein| を挿入しますが, +% トンボ関係のオプションが指定されるとp\LaTeXe (|plcore.ltx|) +% はトンボの内側に |1in| のスペース(|1truein| ではなく)を挿入するので, +% 場合分けしています。 +% +% \begin{macrocode} +\setlength{\oddsidemargin}{\paperwidth} +\addtolength{\oddsidemargin}{-\fullwidth} +\setlength{\oddsidemargin}{.5\oddsidemargin} +\iftombow + \addtolength{\oddsidemargin}{-1in} +\else + \addtolength{\oddsidemargin}{-\inv@mag in} +\fi +\setlength{\evensidemargin}{\oddsidemargin} +\if@mparswitch + \addtolength{\evensidemargin}{\fullwidth} + \addtolength{\evensidemargin}{-\textwidth} +\fi +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\marginparwidth} +% +% |\marginparwidth| は欄外の書き込みの横幅です。 +% 外側マージンの幅(|\evensidemargin| $+$ 1インチ)から1センチを引き, +% さらに |\marginparsep|(欄外の書き込みと本文のアキ)を引いた値に +% しました。最後に1\,zwの整数倍に切り捨てます。 +% +% \begin{macrocode} +\setlength\marginparwidth{\paperwidth} +\addtolength\marginparwidth{-\oddsidemargin} +\addtolength\marginparwidth{-\inv@mag in} +\addtolength\marginparwidth{-\textwidth} +\addtolength\marginparwidth{-10\jsc@mmm} +\addtolength\marginparwidth{-\marginparsep} +\@tempdima=1zw +\divide\marginparwidth\@tempdima +\multiply\marginparwidth\@tempdima +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\topmargin} +% +% 上マージン(紙の上端とヘッダ上端の距離) +% から1インチ引いた値です。 +% +% [2003-06-26] |\headheight| を |\topskip| に直しました。 +% 以前はこの二つは値が同じであったので,変化はないはずです。 +% +% [2016-08-17] |\topskip| を10ptから1.38zwに直しましたが, +% |\topmargin| は従来の値から変わらないように調節しました。 +% …のつもりでしたが,|\textheight| を増やし忘れていたので +% 変わってしまっていました(2016-08-26修正済み)。 +% +% \begin{macrocode} +\setlength\topmargin{\paperheight} +\addtolength\topmargin{-\textheight} +\if@slide + \addtolength\topmargin{-\headheight} +\else + \addtolength\topmargin{-10\jsc@mpt}%% from -\topskip (2016-10-08); from -\headheight (2003-06-26) +\fi +\addtolength\topmargin{-\headsep} +\addtolength\topmargin{-\footskip} +\setlength\topmargin{0.5\topmargin} +%<kiyou>\setlength\topmargin{81truebp} +\iftombow + \addtolength\topmargin{-1in} +\else + \addtolength\topmargin{-\inv@mag in} +\fi +% \end{macrocode} +% \end{macro} +% +% \begin{macrocode} +%</jsclasses> +% \end{macrocode} +% +% \paragraph{脚注} +% +% \begin{macro}{\footnotesep} +% +% 各脚注の頭に入る支柱(strut)の高さです。 +% 脚注間に余分のアキが入らないように, +% |\footnotesize| の支柱の高さ(行送りの0.7倍)に等しくします。 +% +% \begin{ZRnote} +% ここは元々は +%\begin{verbatim} +%{\footnotesize\global\setlength\footnotesep{\baselineskip}} +%\end{verbatim} +% としていたが、そもそも |\global||\setlength|~ は\Pkg{calc}使用時には +% 有意義な動作をしない。 +% |\global||\footnotesep| だと所望の値が得られるが、 +% 同時に |\footnotesize| のフォントを固定させてしまうという副作用をもつ。 +% なので、実際の設定値を直接使うことにする。 +% \end{ZRnote} +% \begin{macrocode} +\footnotesep=11\p@? \footnotesep=0.7\footnotesep +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\footins} +% +% |\skip\footins| は本文の最終行と最初の脚注との間の距離です。 +% 標準の10ポイントクラスでは 9 plus 4 minus 2 ポイントになっていますが, +% 和文の行送りを考えてもうちょっと大きくします。 +% +% \begin{macrocode} +\setlength{\skip\footins}{16\p@? \@plus 5\p@? \@minus 2\p@?} +% \end{macrocode} +% \end{macro} +% +% \paragraph{フロート関連} +% +% フロート(図,表)関連のパラメータは\LaTeXe 本体で定義されていますが, +% ここで設定変更します。本文ページ(本文とフロートが共存するページ) +% とフロートだけのページで設定が異なります。 +% ちなみに,カウンタは内部では |\c@| を名前に冠したマクロになっています。 +% +% \begin{macro}{\c@topnumber} +% +% |topnumber| カウンタは本文ページ上部のフロートの最大数です。 +% +% [2003-08-23] ちょっと増やしました。 +% +% \begin{macrocode} +\setcounter{topnumber}{9} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\topfraction} +% +% 本文ページ上部のフロートが占有できる最大の割合です。 +% フロートが入りやすいように,元の値 0.7 を 0.8 [2003-08-23: 0.85] に変えてあります。 +% +% \begin{macrocode} +\renewcommand{\topfraction}{.85} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\c@bottomnumber} +% +% |bottomnumber| カウンタは本文ページ下部のフロートの最大数です。 +% +% [2003-08-23] ちょっと増やしました。 +% +% \begin{macrocode} +\setcounter{bottomnumber}{9} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\bottomfraction} +% +% 本文ページ下部のフロートが占有できる最大の割合です。元は 0.3 でした。 +% +% \begin{macrocode} +\renewcommand{\bottomfraction}{.8} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\c@totalnumber} +% +% |totalnumber| カウンタは本文ページに入りうるフロートの最大数です。 +% +% [2003-08-23] ちょっと増やしました。 +% +% \begin{macrocode} +\setcounter{totalnumber}{20} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\textfraction} +% +% 本文ページに最低限入らなければならない本文の割合です。 +% フロートが入りやすいように元の 0.2 を 0.1 に変えました。 +% +% \begin{macrocode} +\renewcommand{\textfraction}{.1} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\floatpagefraction} +% +% フロートだけのページでのフロートの最小割合です。 +% これも 0.5 を 0.8 に変えてあります。 +% +% \begin{macrocode} +\renewcommand{\floatpagefraction}{.8} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\c@dbltopnumber} +% +% 二段組のとき本文ページ上部に出力できる +% 段抜きフロートの最大数です。 +% +% [2003-08-23] ちょっと増やしました。 +% +% \begin{macrocode} +\setcounter{dbltopnumber}{9} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\dbltopfraction} +% +% 二段組のとき本文ページ上部に出力できる +% 段抜きフロートが占めうる最大の割合です。 +% 0.7 を 0.8 に変えてあります。 +% +% \begin{macrocode} +\renewcommand{\dbltopfraction}{.8} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\dblfloatpagefraction} +% +% 二段組のときフロートだけのページに入るべき +% 段抜きフロートの最小割合です。 +% 0.5 を 0.8 に変えてあります。 +% +% \begin{macrocode} +\renewcommand{\dblfloatpagefraction}{.8} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\floatsep} +% \begin{macro}{\textfloatsep} +% \begin{macro}{\intextsep} +% +% |\floatsep| はページ上部・下部のフロート間の距離です。 +% |\textfloatsep| はページ上部・下部のフロートと本文との距離です。 +% |\intextsep| は本文の途中に出力されるフロートと本文との距離です。 +% +% \begin{macrocode} +\setlength\floatsep {12\p@? \@plus 2\p@? \@minus 2\p@?} +\setlength\textfloatsep{20\p@? \@plus 2\p@? \@minus 4\p@?} +\setlength\intextsep {12\p@? \@plus 2\p@? \@minus 2\p@?} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\dblfloatsep} +% \begin{macro}{\dbltextfloatsep} +% +% 二段組のときの段抜きのフロートについての値です。 +% +% \begin{macrocode} +\setlength\dblfloatsep {12\p@? \@plus 2\p@? \@minus 2\p@?} +\setlength\dbltextfloatsep{20\p@? \@plus 2\p@? \@minus 4\p@?} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\@fptop} +% \begin{macro}{\@fpsep} +% \begin{macro}{\@fpbot} +% +% フロートだけのページに入るグルーです。 +% |\@fptop| はページ上部, +% |\@fpbot| はページ下部, +% |\@fpsep| はフロート間に入ります。 +% +% \begin{macrocode} +\setlength\@fptop{0\p@? \@plus 1fil} +\setlength\@fpsep{8\p@? \@plus 2fil} +\setlength\@fpbot{0\p@? \@plus 1fil} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\@dblfptop} +% \begin{macro}{\@dblfpsep} +% \begin{macro}{\@dblfpbot} +% +% 段抜きフロートについての値です。 +% +% \begin{macrocode} +\setlength\@dblfptop{0\p@? \@plus 1fil} +\setlength\@dblfpsep{8\p@? \@plus 2fil} +\setlength\@dblfpbot{0\p@? \@plus 1fil} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \section{改ページ(日本語\TeX{}開発コミュニティ版のみ)}\label{sec:cleardoublepage} +% +% \begin{macro}{\pltx@cleartorightpage} +% \begin{macro}{\pltx@cleartoleftpage} +% \begin{macro}{\pltx@cleartooddpage} +% \begin{macro}{\pltx@cleartoevenpage} +% [2017-02-24] コミュニティ版\pLaTeX の標準クラス2017/02/15に合わせて, +% 同じ命令を追加しました。 +% \begin{enumerate} +% \item|\pltx@cleartorightpage|:右ページになるまでページを繰る命令 +% \item|\pltx@cleartoleftpage|:左ページになるまでページを繰る命令 +% \item|\pltx@cleartooddpage|:奇数ページになるまでページを繰る命令 +% \item|\pltx@cleartoevenpage|:偶数ページになるまでページを繰る命令 +% \end{enumerate} +% となっています。 +% +% \begin{macrocode} +%\def\pltx@cleartorightpage{\clearpage\if@twoside +% \ifodd\c@page +% \iftdir +% \hbox{}\thispagestyle{empty}\newpage +% \if@twocolumn\hbox{}\newpage\fi +% \fi +% \else +% \ifydir +% \hbox{}\thispagestyle{empty}\newpage +% \if@twocolumn\hbox{}\newpage\fi +% \fi +% \fi\fi} +%\def\pltx@cleartoleftpage{\clearpage\if@twoside +% \ifodd\c@page +% \ifydir +% \hbox{}\thispagestyle{empty}\newpage +% \if@twocolumn\hbox{}\newpage\fi +% \fi +% \else +% \iftdir +% \hbox{}\thispagestyle{empty}\newpage +% \if@twocolumn\hbox{}\newpage\fi +% \fi +% \fi\fi} +\def\pltx@cleartooddpage{\clearpage\if@twoside + \ifodd\c@page\else + \hbox{}\thispagestyle{empty}\newpage + \if@twocolumn\hbox{}\newpage\fi + \fi\fi} +\def\pltx@cleartoevenpage{\clearpage\if@twoside + \ifodd\c@page + \hbox{}\thispagestyle{empty}\newpage + \if@twocolumn\hbox{}\newpage\fi + \fi\fi} +% \end{macrocode} +% +% \begin{ZRnote} +% BXJSクラスでは |\iftdir| 等が使えないので、 +% 横組を仮定した定義を用いる。 +% \begin{macrocode} +\let\pltx@cleartorightpage\pltx@cleartooddpage +\let\pltx@cleartoleftpage\pltx@cleartoevenpage +% \end{macrocode} +% \end{ZRnote} +% +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\cleardoublepage} +% [2017-02-24] コミュニティ版\pLaTeX の標準クラス2017/02/15に合わせて, +% reportとbookクラスの場合に|\cleardoublepage|を再定義します。 +% \begin{macrocode} +%<*book|report> +\if@openleft + \let\cleardoublepage\pltx@cleartoleftpage +\else\if@openright + \let\cleardoublepage\pltx@cleartorightpage +\fi\fi +%</book|report> +% \end{macrocode} +% \end{macro} +% +% \section{ページスタイル}\label{sec:pagestyle} +% +% ページスタイルとして,\LaTeXe (欧文版)の標準クラス +% では |empty|,|plain|,|headings|,|myheadings| があります。 +% このうち |empty|,|plain| スタイルは\LaTeXe 本体 +% で定義されています。 +% +% アスキーのクラスファイルでは |headnombre|,|footnombre|, +% |bothstyle|,|jpl@in| が追加されていますが, +% ここでは欧文標準のものだけにしました。 +% +% ページスタイルは |\ps@...| の形のマクロで定義されています。 +% +% \begin{macro}{\@evenhead} +% \begin{macro}{\@oddhead} +% \begin{macro}{\@evenfoot} +% \begin{macro}{\@oddfoot} +% +% |\@oddhead|,|\@oddfoot|,|\@evenhead|,|\@evenfoot| は +% 偶数・奇数ページの柱(ヘッダ,フッタ)を出力する命令です。 +% これらは |\fullwidth| 幅の |\hbox| の中で呼び出されます。 +% |\ps@...| の中で定義しておきます。 +% +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% 柱の内容は,|\chapter| が呼び出す |\chaptermark{何々}|, +% |\section| が呼び出す |\sectionmark{何々}| で設定します。 +% 柱を扱う命令には次のものがあります。 +% +% \begin{quote} +% \begin{tabbing} +% |\markboth{左}{右} | \= 両方の柱を設定します。\\ +% |\markright{右}| \> 右の柱を設定します。\\ +% |\leftmark| \> 左の柱を出力します。\\ +% |\rightmark| \> 右の柱を出力します。 +% \end{tabbing} +% \end{quote} +% +% 柱を設定する命令は,右の柱が左の柱の下位にある場合は十分まともに +% 動作します。たとえば左マークを |\chapter|,右マークを |\section| +% で変更する場合がこれにあたります。 +% しかし,同一ページに複数の |\markboth| があると, +% おかしな結果になることがあります。 +% +% |\tableofcontents| のような命令で使われる |\@mkboth| は, +% |\ps@...| コマンド中で |\markboth| か |\@gobbletwo|(何もしない) +% に |\let| されます。 +% +% \begin{macro}{\ps@empty} +% +% |empty| ページスタイルの定義です。 +% \LaTeX 本体で定義されているものをコメントアウトした形で +% 載せておきます。 +% +% \begin{macrocode} +% \def\ps@empty{% +% \let\@mkboth\@gobbletwo +% \let\@oddhead\@empty +% \let\@oddfoot\@empty +% \let\@evenhead\@empty +% \let\@evenfoot\@empty} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\ps@plainhead} +% \begin{macro}{\ps@plainfoot} +% \begin{macro}{\ps@plain} +% +% |plainhead| はシンプルなヘッダだけのページスタイルです。 +% +% |plainfoot| はシンプルなフッタだけのページスタイルです。 +% +% |plain| は |book| では |plainhead|,それ以外では |plainfoot| になります。 +% +% \begin{macrocode} +\def\ps@plainfoot{% + \let\@mkboth\@gobbletwo + \let\@oddhead\@empty + \def\@oddfoot{\normalfont\hfil\thepage\hfil}% + \let\@evenhead\@empty + \let\@evenfoot\@oddfoot} +\def\ps@plainhead{% + \let\@mkboth\@gobbletwo + \let\@oddfoot\@empty + \let\@evenfoot\@empty + \def\@evenhead{% + \if@mparswitch \hss \fi + \hbox to \fullwidth{\textbf{\thepage}\hfil}% + \if@mparswitch\else \hss \fi}% + \def\@oddhead{% + \hbox to \fullwidth{\hfil\textbf{\thepage}}\hss}} +%<book>\let\ps@plain\ps@plainhead +%<!book>\let\ps@plain\ps@plainfoot +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\ps@headings} +% +% |headings| スタイルはヘッダに見出しとページ番号を出力します。 +% ここではヘッダにアンダーラインを引くようにしてみました。 +% +% まず article の場合です。 +% +% \begin{macrocode} +%<*article|slide> +\if@twoside + \def\ps@headings{% + \let\@oddfoot\@empty + \let\@evenfoot\@empty + \def\@evenhead{\if@mparswitch \hss \fi + \underline{\hbox to \fullwidth{\textbf{\thepage}\hfil\leftmark}}% + \if@mparswitch\else \hss \fi}% + \def\@oddhead{% + \underline{% + \hbox to \fullwidth{{\rightmark}\hfil\textbf{\thepage}}}\hss}% + \let\@mkboth\markboth + \def\sectionmark##1{\markboth{% + \ifnum \c@secnumdepth >\z@ \bxjs@label@sect{section}\hskip1\jsZw\fi + ##1}{}}% + \def\subsectionmark##1{\markright{% + \ifnum \c@secnumdepth >\@ne \bxjs@label@sect{subsection}\hskip1\jsZw\fi + ##1}}% + } +\else % if not twoside + \def\ps@headings{% + \let\@oddfoot\@empty + \def\@oddhead{% + \underline{% + \hbox to \fullwidth{{\rightmark}\hfil\textbf{\thepage}}}\hss}% + \let\@mkboth\markboth + \def\sectionmark##1{\markright{% + \ifnum \c@secnumdepth >\z@ \bxjs@label@sect{section}\hskip1\jsZw\fi + ##1}}} +\fi +%</article|slide> +% \end{macrocode} +% +% 次は book および report の場合です。 +% [2011-05-10] しっぽ愛好家さん [qa:6370] のパッチを取り込ませていただきました +% (北見さん [qa:55896] のご指摘ありがとうございます)。 +% +% \begin{ZRnote} +% |\autoxspacing| は未定義の可能性があるため、 +% 「|\autoxspacing| が定義済なら実行する」マクロ |\bxjs@maybe@autoxspacing| を +% 代わりに用いる。 +% \end{ZRnote} +% +% \begin{macrocode} +%<*book|report> +\def\bxjs@maybe@autoxspacing{% + \ifx\autoxspacing\@undefined\else \autoxspacing \fi} +\newif\if@omit@number +\def\ps@headings{% + \let\@oddfoot\@empty + \let\@evenfoot\@empty + \def\@evenhead{% + \if@mparswitch \hss \fi + \underline{\hbox to \fullwidth{\bxjs@maybe@autoxspacing + \textbf{\thepage}\hfil\leftmark}}% + \if@mparswitch\else \hss \fi}% + \def\@oddhead{\underline{\hbox to \fullwidth{\bxjs@maybe@autoxspacing + {\if@twoside\rightmark\else\leftmark\fi}\hfil\textbf{\thepage}}}\hss}% + \let\@mkboth\markboth + \def\chaptermark##1{\markboth{% + \ifnum \c@secnumdepth >\m@ne + \if@mainmatter + \if@omit@number\else + \@chapapp\thechapter\@chappos\hskip1\jsZw + \fi + \fi + \fi + ##1}{}}% + \def\sectionmark##1{\markright{% + \ifnum \c@secnumdepth >\z@ \bxjs@label@sect{section}\hskip1\jsZw\fi + ##1}}}% +%</book|report> +% \end{macrocode} +% +% 最後は学会誌の場合です。 +% +% \begin{macrocode} +%<*jspf> +\def\ps@headings{% + \def\@oddfoot{\normalfont\hfil\thepage\hfil} + \def\@evenfoot{\normalfont\hfil\thepage\hfil} + \def\@oddhead{\normalfont\hfil \@title \hfil} + \def\@evenhead{\normalfont\hfil プラズマ・核融合学会誌\hfil}} +%</jspf> +% \end{macrocode} +% +% \end{macro} +% +% \begin{macro}{\ps@myheadings} +% +% |myheadings| ページスタイルではユーザが |\markboth| や |\markright| で +% 柱を設定するため,ここでの定義は非常に簡単です。 +% +% [2004-01-17] 渡辺徹さんのパッチを適用しました。 +% +% \begin{macrocode} +\def\ps@myheadings{% + \let\@oddfoot\@empty\let\@evenfoot\@empty + \def\@evenhead{% + \if@mparswitch \hss \fi% + \hbox to \fullwidth{\thepage\hfil\leftmark}% + \if@mparswitch\else \hss \fi}% + \def\@oddhead{% + \hbox to \fullwidth{\rightmark\hfil\thepage}\hss}% + \let\@mkboth\@gobbletwo +%<book|report> \let\chaptermark\@gobble + \let\sectionmark\@gobble +%<!book&!report> \let\subsectionmark\@gobble +} +% \end{macrocode} +% \end{macro} +% +% \section{文書のマークアップ} +% +% \subsection{表題} +% +% \begin{macro}{\title} +% \begin{macro}{\author} +% \begin{macro}{\date} +% +% これらは\LaTeX 本体で次のように定義されています。 +% ここではコメントアウトした形で示します。 +% +% \begin{macrocode} +% \newcommand*{\title}[1]{\gdef\@title{#1}} +% \newcommand*{\author}[1]{\gdef\@author{#1}} +% \newcommand*{\date}[1]{\gdef\@date{#1}} +% \date{\today} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{ZRnote} +% \begin{macro}{\subtitle} +% \begin{macro}{\jsSubtitle} +% 副題を設定する。 +% \Note プレアンブルにおいて |\newcommand*{\subtitle}{...}| が +% 行われることへの対策として、 +% |\subtitle| の定義を |\title| の実行まで遅延させることにする。 +% もしどうしても主題より前に副題を設定したい場合は、 +% |\jsSubtitle| 命令を直接用いればよい。 +% +% 本体を |\jsSubtitle| として定義する。 +% \begin{macrocode} +\newcommand*{\jsSubtitle}[1]{\gdef\bxjs@subtitle{#1}} +%\let\bxjs@subtitle\@undefined +% \end{macrocode} +% +% |\title| にフックを入れる。 +% \begin{macrocode} +\renewcommand*{\title}[1]{\bxjs@decl@subtitle\gdef\@title{#1}} +\AtBeginDocument{\bxjs@decl@subtitle} +\def\bxjs@decl@subtitle{% + \global\let\bxjs@decl@subtitle\relax + \ifx\subtitle\@undefined + \global\let\subtitle\jsSubtitle + \fi} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\bxjs@annihilate@subtitle} +% |\subtitle| 命令を無効化する。 +% \Note 独自の |\subtitle| が使われている場合は無効化しない。 +% \begin{macrocode} +\def\bxjs@annihilate@subtitle{% + \ifx\subtitle\jsSubtitle \global\let\subtitle\relax \fi + \global\let\jsSubtitle\relax} +% \end{macrocode} +% \end{macro} +% +% \end{ZRnote} +% +% \begin{macro}{\etitle} +% \begin{macro}{\eauthor} +% \begin{macro}{\keywords} +% +% 某学会誌スタイルで使う英語のタイトル,英語の著者名,キーワード,メールアドレスです。 +% +% \begin{macrocode} +%<*jspf> +\newcommand*{\etitle}[1]{\gdef\@etitle{#1}} +\newcommand*{\eauthor}[1]{\gdef\@eauthor{#1}} +\newcommand*{\keywords}[1]{\gdef\@keywords{#1}} +\newcommand*{\email}[1]{\gdef\authors@mail{#1}} +\newcommand*{\AuthorsEmail}[1]{\gdef\authors@mail{author's e-mail:\ #1}} +%</jspf> +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\plainifnotempty} +% +% 従来の標準クラスでは,文書全体のページスタイルを |empty| に +% しても表題のあるページだけ |plain| になってしまうことが +% ありました。これは |\maketitle| の定義中 +% に |\thispagestyle|\hspace{0pt}|{plain}| が入っている +% ためです。この問題を解決するために, +% 「全体のページスタイルが |empty| でないなら +% このページのスタイルを |plain| にする」という次の +% 命令を作ることにします。 +% +% \begin{macrocode} +\def\plainifnotempty{% + \ifx \@oddhead \@empty + \ifx \@oddfoot \@empty + \else + \thispagestyle{plainfoot}% + \fi + \else + \thispagestyle{plainhead}% + \fi} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\maketitle} +% +% 表題を出力します。 +% 著者名を出力する部分は,欧文の標準クラスファイルでは |\large|, +% 和文のものでは |\Large| になっていましたが,ここでは |\large| +% にしました。 +% +% [2016-11-16] 新設された \texttt{nomag} および \texttt{nomag*} オプション +% の場合をデフォルト(\texttt{usemag} 相当)に合わせるため,|\smallskip| を +% |\jsc@smallskip| に置き換えました。|\smallskip| のままでは +% \texttt{nomag(*)} の場合にスケールしなくなり,レイアウトが変わってしまいます。 +% +% \begin{macrocode} +%<*article|book|report|slide> +\if@titlepage + \newcommand{\maketitle}{% + \begin{titlepage}% + \let\footnotesize\small + \let\footnoterule\relax + \let\footnote\thanks + \null\vfil + \if@slide + {\footnotesize \@date}% + \begin{center} + \mbox{} \\[1\jsZw] + \large + {\maybeblue\hrule height0\p@? depth2\p@?\relax}\par + \jsc@smallskip + \@title + \ifx\bxjs@subtitle\@undefined\else + \par\vskip\z@ + {\small \bxjs@subtitle\par} + \fi + \jsc@smallskip + {\maybeblue\hrule height0\p@? depth2\p@?\relax}\par + \vfill + {\small \@author}% + \end{center} + \else + \vskip 60\p@? + \begin{center}% + {\LARGE \@title \par}% + \ifx\bxjs@subtitle\@undefined\else + \vskip5\p@? + {\normalsize \bxjs@subtitle\par} + \fi + \vskip 3em% + {\large + \lineskip .75em + \begin{tabular}[t]{c}% + \@author + \end{tabular}\par}% + \vskip 1.5em + {\large \@date \par}% + \end{center}% + \fi + \par + \@thanks\vfil\null + \end{titlepage}% + \setcounter{footnote}{0}% + \global\let\thanks\relax + \global\let\maketitle\relax + \global\let\@thanks\@empty + \global\let\@author\@empty + \global\let\@date\@empty + \global\let\@title\@empty + \global\let\title\relax + \global\let\author\relax + \global\let\date\relax + \global\let\and\relax + \bxjs@annihilate@subtitle + }% +\else + \newcommand{\maketitle}{\par + \begingroup + \renewcommand\thefootnote{\@fnsymbol\c@footnote}% + \def\@makefnmark{\rlap{\@textsuperscript{\normalfont\@thefnmark}}}% + \long\def\@makefntext##1{\advance\leftskip 3\jsZw + \parindent 1\jsZw\noindent + \llap{\@textsuperscript{\normalfont\@thefnmark}\hskip0.3\jsZw}##1}% + \if@twocolumn + \ifnum \col@number=\@ne + \@maketitle + \else + \twocolumn[\@maketitle]% + \fi + \else + \newpage + \global\@topnum\z@ % Prevents figures from going at top of page. + \@maketitle + \fi + \plainifnotempty + \@thanks + \endgroup + \setcounter{footnote}{0}% + \global\let\thanks\relax + \global\let\maketitle\relax + \global\let\@thanks\@empty + \global\let\@author\@empty + \global\let\@date\@empty + \global\let\@title\@empty + \global\let\title\relax + \global\let\author\relax + \global\let\date\relax + \global\let\and\relax + \bxjs@annihilate@subtitle + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@maketitle} +% +% 独立した表題ページを作らない場合の表題の出力形式です。 +% +% \begin{macrocode} + \def\@maketitle{% + \newpage\null + \vskip 2em + \begin{center}% + \let\footnote\thanks + {\LARGE \@title \par}% + \ifx\bxjs@subtitle\@undefined\else + \vskip3\p@? + {\normalsize \bxjs@subtitle\par} + \fi + \vskip 1.5em + {\large + \lineskip .5em + \begin{tabular}[t]{c}% + \@author + \end{tabular}\par}% + \vskip 1em + {\large \@date}% + \end{center}% + \par\vskip 1.5em +%<article|slide> \ifvoid\@abstractbox\else\centerline{\box\@abstractbox}\vskip1.5em\fi + } +\fi +%</article|book|report|slide> +%<*jspf> +\newcommand{\maketitle}{\par + \begingroup + \renewcommand\thefootnote{\@fnsymbol\c@footnote}% + \def\@makefnmark{\rlap{\@textsuperscript{\normalfont\@thefnmark}}}% + \long\def\@makefntext##1{\advance\leftskip 3\jsZw + \parindent 1\jsZw\noindent + \llap{\@textsuperscript{\normalfont\@thefnmark}\hskip0.3\jsZw}##1}% + \twocolumn[\@maketitle]% + \plainifnotempty + \@thanks + \endgroup + \setcounter{footnote}{0}% + \global\let\thanks\relax + \global\let\maketitle\relax + \global\let\@thanks\@empty + \global\let\@author\@empty + \global\let\@date\@empty +% \global\let\@title\@empty % \@title は柱に使う + \global\let\title\relax + \global\let\author\relax + \global\let\date\relax + \global\let\and\relax + \ifx\authors@mail\@undefined\else{% + \def\@makefntext{\advance\leftskip 3\jsZw \parindent -3\jsZw}% + \footnotetext[0]{\itshape\authors@mail}% + }\fi + \global\let\authors@mail\@undefined} +\def\@maketitle{% + \newpage\null + \vskip 6em % used to be 2em + \begin{center} + \let\footnote\thanks + \ifx\@title\@undefined\else{\LARGE\headfont\@title\par}\fi + \lineskip .5em + \ifx\@author\@undefined\else + \vskip 1em + \begin{tabular}[t]{c}% + \@author + \end{tabular}\par + \fi + \ifx\@etitle\@undefined\else + \vskip 1em + {\large \@etitle \par}% + \fi + \ifx\@eauthor\@undefined\else + \vskip 1em + \begin{tabular}[t]{c}% + \@eauthor + \end{tabular}\par + \fi + \vskip 1em + \@date + \end{center} + \vskip 1.5em + \centerline{\box\@abstractbox} + \ifx\@keywords\@undefined\else + \vskip 1.5em + \centerline{\parbox{157\jsc@mmm}{\textsf{Keywords:}\\ \small\@keywords}} + \fi + \vskip 1.5em} +%</jspf> +% \end{macrocode} +% \end{macro} +% +% \subsection{章・節} +% +% \begin{ZRnote} +% ムニャムニャ……。 +% \begin{macro}{\bxjs@label@sect} +% 節付 |#1| の番号を出力する。 +% 節付 |XXX| に対して、|\labelXXX| が定義済ならそれが出力書式を表す。 +% 未定義ならばカウンタの出力書式 |\theXXX| が使われる。 +% \begin{macrocode} +\def\bxjs@label@sect#1{% + \expandafter\ifx\csname label#1\endcsname\relax + \csname the#1\endcsname + \else \csname label#1\endcsname + \fi} +\def\@seccntformat#1{\bxjs@label@sect{#1}\quad} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\@secapp} +% 節番号の接頭辞。 +% \begin{macro}{\@secpos} +% 節番号の接尾辞。 +% \begin{macrocode} +\ifnum\bxjs@label@section=\bxjs@label@section@compat\else +\def\@secapp{\presectionname} +\def\@secpos{\postsectionname} +\fi +% \end{macrocode} +% \end{macro} +% \end{macro} +% \begin{macro}{\labelsection} +% 節番号の出力書式。 +% \begin{macrocode} +\ifnum\bxjs@label@section=\bxjs@label@section@modern +\def\labelsection{\@secapp\thesection\@secpos} +\fi +% \end{macrocode} +% \end{macro} +% +% \end{ZRnote} +% +% \paragraph{構成要素} +% +% |\@startsection| マクロは6個の必須引数と,オプションとして |*| と +% 1個のオプション引数と1個の必須引数をとります。 +% +% \begin{quote} +% |\@startsection{名}{レベル}{字下げ}{前アキ}{後アキ}{スタイル}| \\ +% | *[別見出し]{見出し}| +% \end{quote} +% +% それぞれの引数の意味は次の通りです。 +% +% \begin{description} +% \item[名] ユーザレベルコマンドの名前です(例: section)。 +% \item[レベル] 見出しの深さを示す数値です +% (chapter=1, section=2, \ldots )。 +% この数値が |secnumdepth| 以下のとき見出し番号を出力します。 +% \item[字下げ] 見出しの字下げ量です。 +% \item[前アキ] この値の絶対値が見出し上側の空きです。 +% 負の場合は,見出し直後の段落をインデントしません。 +% \item[後アキ] 正の場合は,見出しの下の空きです。 +% 負の場合は,絶対値が見出しの右の空きです +% (見出しと同じ行から本文を始めます)。 +% \item[スタイル] 見出しの文字スタイルの設定です。 +% \item[\texttt{*}] この \texttt{*} 印がないと,見出し番号を付け, +% 見出し番号のカウンタに1を加算します。 +% \item[別見出し] 目次や柱に出力する見出しです。 +% \item[見出し] 見出しです。 +% \end{description} +% +% 見出しの命令は通常 |\@startsection| とその最初の6個の引数として +% 定義されます。 +% +% 次は |\@startsection| の定義です。 +% 情報処理学会論文誌スタイルファイル(\texttt{ipsjcommon.sty}) +% を参考にさせていただきましたが,完全に行送りが |\baselineskip| +% の整数倍にならなくてもいいから前の行と重ならないようにしました。 +% +% \begin{macrocode} +\def\@startsection#1#2#3#4#5#6{% + \if@noskipsec \leavevmode \fi + \par +% 見出し上の空きを \@tempskipa にセットする + \@tempskipa #4\relax +% \@afterindent は見出し直後の段落を字下げするかどうかを表すスイッチ + \if@english \@afterindentfalse \else \@afterindenttrue \fi +% 見出し上の空きが負なら見出し直後の段落を字下げしない + \ifdim \@tempskipa <\z@ + \@tempskipa -\@tempskipa \@afterindentfalse + \fi + \if@nobreak +% \everypar{\everyparhook}% これは間違い + \everypar{}% + \else + \addpenalty\@secpenalty +% 次の行は削除 +% \addvspace\@tempskipa +% 次の \noindent まで追加 + \ifdim \@tempskipa >\z@ + \if@slide\else + \null + \vspace*{-\baselineskip}% + \fi + \vskip\@tempskipa + \fi + \fi + \noindent +% 追加終わり + \@ifstar + {\@ssect{#3}{#4}{#5}{#6}}% + {\@dblarg{\@sect{#1}{#2}{#3}{#4}{#5}{#6}}}} +% \end{macrocode} +% +% |\@sect| と |\@xsect| は, +% 前のアキがちょうどゼロの場合にもうまくいくように,多少変えてあります。 +% |\everyparhook| も挿入しています。 +% +% \begin{ZRnote} +% |\everyparhook| の挿入は |everyparhook=compat| の時のみ行う。 +% \begin{macro}{\bxjs@if@ceph} +% |everyparhook=compat| である場合にのみ直後のトークンを実行する。 +% \begin{macrocode} +\ifnum\bxjs@everyparhook=\bxjs@everyparhook@compat + \let\bxjs@if@ceph\@firstofone +\else \let\bxjs@if@ceph\@gobble +\fi +% \end{macrocode} +% \end{macro} +% \end{ZRnote} +% +% \begin{macrocode} +\def\@sect#1#2#3#4#5#6[#7]#8{% + \ifnum #2>\c@secnumdepth + \let\@svsec\@empty + \else + \refstepcounter{#1}% + \protected@edef\@svsec{\@seccntformat{#1}\relax}% + \fi +% 見出し後の空きを \@tempskipa にセット + \@tempskipa #5\relax +% 条件判断の順序を入れ換えました + \ifdim \@tempskipa<\z@ + \def\@svsechd{% + #6{\hskip #3\relax + \@svsec #8}% + \csname #1mark\endcsname{#7}% + \addcontentsline{toc}{#1}{% + \ifnum #2>\c@secnumdepth \else + \protect\numberline{\bxjs@label@sect{#1}}% + \fi + #7}}% 目次にフルネームを載せるなら #8 + \else + \begingroup + \interlinepenalty \@M % 下から移動 + #6{% + \@hangfrom{\hskip #3\relax\@svsec}% +% \interlinepenalty \@M % 上に移動 + #8\@@par}% + \endgroup + \csname #1mark\endcsname{#7}% + \addcontentsline{toc}{#1}{% + \ifnum #2>\c@secnumdepth \else + \protect\numberline{\bxjs@label@sect{#1}}% + \fi + #7}% 目次にフルネームを載せるならここは #8 + \fi + \@xsect{#5}} +% \end{macrocode} +% +% 二つ挿入した |\everyparhook| のうち後者が |\paragraph| 類の後で2回実行され, +% それ以降は前者が実行されます。 +% +% [2016-07-28] \texttt{slide}オプションと\texttt{twocolumn}オプションを +% 同時に指定した場合の罫線の位置を微調整しました。 +% +% \begin{macrocode} +\def\@xsect#1{% +% 見出しの後ろの空きを \@tempskipa にセット + \@tempskipa #1\relax +% 条件判断の順序を変えました + \ifdim \@tempskipa<\z@ + \@nobreakfalse + \global\@noskipsectrue + \everypar{% + \if@noskipsec + \global\@noskipsecfalse + {\setbox\z@\lastbox}% + \clubpenalty\@M + \begingroup \@svsechd \endgroup + \unskip + \@tempskipa #1\relax + \hskip -\@tempskipa + \else + \clubpenalty \@clubpenalty + \everypar\expandafter{\bxjs@if@ceph\everyparhook}% + \fi\bxjs@if@ceph\everyparhook}% + \else + \par \nobreak + \vskip \@tempskipa + \@afterheading + \fi + \if@slide + {\vskip\if@twocolumn-5\jsc@mpt\else-6\jsc@mpt\fi + \maybeblue\hrule height0\jsc@mpt depth1\jsc@mpt + \vskip\if@twocolumn 4\jsc@mpt\else 7\jsc@mpt\fi\relax}% + \fi + \par % 2000-12-18 + \ignorespaces} +\def\@ssect#1#2#3#4#5{% + \@tempskipa #3\relax + \ifdim \@tempskipa<\z@ + \def\@svsechd{#4{\hskip #1\relax #5}}% + \else + \begingroup + #4{% + \@hangfrom{\hskip #1}% + \interlinepenalty \@M #5\@@par}% + \endgroup + \fi + \@xsect{#3}} +% \end{macrocode} +% +% \paragraph{柱関係の命令} +% +% \begin{macro}{\chaptermark} +% \begin{macro}{\sectionmark} +% \begin{macro}{\subsectionmark} +% \begin{macro}{\subsubsectionmark} +% \begin{macro}{\paragraphmark} +% \begin{macro}{\subparagraphmark} +% +% |\...mark| の形の命令を初期化します(第\ref{sec:pagestyle}節参照)。 +% |\chaptermark| 以外は\LaTeX 本体で定義済みです。 +% +% \begin{macrocode} +\newcommand*\chaptermark[1]{} +% \newcommand*{\sectionmark}[1]{} +% \newcommand*{\subsectionmark}[1]{} +% \newcommand*{\subsubsectionmark}[1]{} +% \newcommand*{\paragraphmark}[1]{} +% \newcommand*{\subparagraphmark}[1]{} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \paragraph{カウンタの定義} +% +% \begin{macro}{\c@secnumdepth} +% +% |secnumdepth| は第何レベルの見出しまで +% 番号を付けるかを決めるカウンタです。 +% +% \begin{macrocode} +%<!book&!report>\setcounter{secnumdepth}{3} +%<book|report>\setcounter{secnumdepth}{2} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\c@chapter} +% \begin{macro}{\c@section} +% \begin{macro}{\c@subsection} +% \begin{macro}{\c@subsubsection} +% \begin{macro}{\c@paragraph} +% \begin{macro}{\c@subparagraph} +% +% 見出し番号のカウンタです。 +% |\newcounter| の第1引数が新たに作るカウンタです。 +% これは第2引数が増加するたびに 0 に戻されます。 +% 第2引数は定義済みのカウンタです。 +% +% \begin{macrocode} +\newcounter{part} +%<book|report>\newcounter{chapter} +%<book|report>\newcounter{section}[chapter] +%<!book&!report>\newcounter{section} +\newcounter{subsection}[section] +\newcounter{subsubsection}[subsection] +\newcounter{paragraph}[subsubsection] +\newcounter{subparagraph}[paragraph] +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\thepart} +% \begin{macro}{\thechapter} +% \begin{macro}{\thesection} +% \begin{macro}{\thesubsection} +% \begin{macro}{\thesubsubsection} +% \begin{macro}{\theparagraph} +% \begin{macro}{\thesubparagraph} +% +% カウンタの値を出力する命令 |\the何々| を定義します。 +% +% カウンタを出力するコマンドには次のものがあります。 +% +% \begin{quote} +% |\arabic{COUNTER} | 1, 2, 3, \ldots \\ +% |\roman{COUNTER} | i, ii, iii, \ldots \\ +% |\Roman{COUNTER} | I, II, III, \ldots \\ +% |\alph{COUNTER} | a, b, c, \ldots \\ +% |\Alph{COUNTER} | A, B, C, \ldots \\ +% |\kansuji{COUNTER} | 一, 二, 三, \ldots +% \end{quote} +% +% 以下ではスペース節約のため |@| の付いた内部表現を多用しています。 +% +% \begin{macrocode} +\renewcommand{\thepart}{\@Roman\c@part} +%<*!book&!report> +\ifnum\bxjs@label@section=\bxjs@label@section@compat +\renewcommand{\thesection}{\presectionname\@arabic\c@section\postsectionname} +\renewcommand{\thesubsection}{\@arabic\c@section.\@arabic\c@subsection} +\else +\renewcommand{\thesection}{\@arabic\c@section} +\renewcommand{\thesubsection}{\thesection.\@arabic\c@subsection} +\fi +%</!book&!report> +%<*book|report> +\renewcommand{\thechapter}{\@arabic\c@chapter} +\renewcommand{\thesection}{\thechapter.\@arabic\c@section} +\renewcommand{\thesubsection}{\thesection.\@arabic\c@subsection} +%</book|report> +\renewcommand{\thesubsubsection}{% + \thesubsection.\@arabic\c@subsubsection} +\renewcommand{\theparagraph}{% + \thesubsubsection.\@arabic\c@paragraph} +\renewcommand{\thesubparagraph}{% + \theparagraph.\@arabic\c@subparagraph} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\@chapapp} +% \begin{macro}{\@chappos} +% +% |\@chapapp| の初期値は |\prechaptername|(第)です。 +% +% |\@chappos| の初期値は |\postchaptername|(章)です。 +% +% |\appendix| は |\@chapapp| を |\appendixname| に, +% |\@chappos| を空に再定義します。 +% +% [2003-03-02] |\@secapp| は外しました。 +% +% \begin{macrocode} +%<book|report>\newcommand{\@chapapp}{\prechaptername} +%<book|report>\newcommand{\@chappos}{\postchaptername} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \paragraph{前付,本文,後付} +% +% 本のうち章番号があるのが「本文」, +% それ以外が「前付」「後付」です。 +% +% \begin{macro}{\frontmatter} +% +% ページ番号をローマ数字にし,章番号を付けないようにします。 +% +% [2017-03-05] |\frontmatter| と |\mainmatter| の2つの命令は, +% 改丁または改ページした後で |\pagenumbering{...}| でノンブルを1に +% リセットします。長い間 |\frontmatter| は \texttt{openany} のときに +% 単なる改ページとしていましたが,これではノンブルをリセットする際に +% 偶奇逆転が起こる場合がありました。\texttt{openany} かどうかに依らず +% 奇数ページまで繰るように修正することで,問題を解消しました。 +% 実は,\LaTeX の標準クラスでは1998年に修正されていた問題です +% (コミュニティ版\pLaTeX の標準クラス2017/03/05も参照)。 +% +% \begin{macrocode} +%<*book|report> +\newcommand\frontmatter{% + \pltx@cleartooddpage + \@mainmatterfalse + \pagenumbering{roman}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\mainmatter} +% +% ページ番号を算用数字にし,章番号を付けるようにします。 +% +% \begin{macrocode} +\newcommand\mainmatter{% + \pltx@cleartooddpage + \@mainmattertrue + \pagenumbering{arabic}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\backmatter} +% +% 章番号を付けないようにします。ページ番号の付け方は変わりません。 +% +% \begin{macrocode} +\newcommand\backmatter{% + \if@openleft + \cleardoublepage + \else\if@openright + \cleardoublepage + \else + \clearpage + \fi\fi + \@mainmatterfalse} +%</book|report> +% \end{macrocode} +% \end{macro} +% +% \paragraph{部} +% +% \begin{macro}{\part} +% +% 新しい部を始めます。 +% +% |\secdef| を使って見出しを定義しています。 +% このマクロは二つの引数をとります。 +% +% \begin{quote} +% |\secdef{星なし}{星あり}| +% \end{quote} +% +% \begin{description} +% \item[星なし] \texttt{*} のない形の定義です。 +% \item[星あり] \texttt{*} のある形の定義です。 +% \end{description} +% +% |\secdef| は次のようにして使います。 +% +%\begin{verbatim} +% \def\chapter { ... \secdef \CMDA \CMDB } +% \def\CMDA [#1]#2{....} % \chapter[...]{...} の定義 +% \def\CMDB #1{....} % \chapter*{...} の定義 +%\end{verbatim} +% +% まず |book| と |report| のクラス以外です。 +% +% \begin{macrocode} +%<*!book&!report> +\newcommand\part{% + \if@noskipsec \leavevmode \fi + \par + \addvspace{4ex}% + \if@english \@afterindentfalse \else \@afterindenttrue \fi + \secdef\@part\@spart} +%</!book&!report> +% \end{macrocode} +% +% |book| および |report| クラスの場合は,少し複雑です。 +% +% \begin{macrocode} +%<*book|report> +\newcommand\part{% + \if@openleft + \cleardoublepage + \else\if@openright + \cleardoublepage + \else + \clearpage + \fi\fi + \thispagestyle{empty}% 欧文用標準スタイルでは plain + \if@twocolumn + \onecolumn + \@restonecoltrue + \else + \@restonecolfalse + \fi + \null\vfil + \secdef\@part\@spart} +%</book|report> +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@part} +% +% 部の見出しを出力します。 +% |\bfseries| を |\headfont| に変えました。 +% +% |book| および |report| クラス以外では |secnumdepth| が $-1$ より大きいとき +% 部番号を付けます。 +% +% \begin{macrocode} +%<*!book&!report> +\def\@part[#1]#2{% + \ifnum \c@secnumdepth >\m@ne + \refstepcounter{part}% + \addcontentsline{toc}{part}{% + \prepartname\thepart\postpartname\hspace{1\jsZw}#1}% + \else + \addcontentsline{toc}{part}{#1}% + \fi + \markboth{}{}% + {\parindent\z@ + \raggedright + \interlinepenalty \@M + \normalfont + \ifnum \c@secnumdepth >\m@ne + \Large\headfont\prepartname\thepart\postpartname + \par\nobreak + \fi + \huge \headfont #2% + \markboth{}{}\par}% + \nobreak + \vskip 3ex + \@afterheading} +%</!book&!report> +% \end{macrocode} +% +% |book| および |report| クラスでは |secnumdepth| が $-2$ より大きいとき部番号を付けます。 +% +% \begin{macrocode} +%<*book|report> +\def\@part[#1]#2{% + \ifnum \c@secnumdepth >-2\relax + \refstepcounter{part}% + \addcontentsline{toc}{part}{% + \prepartname\thepart\postpartname\hspace{1\jsZw}#1}% + \else + \addcontentsline{toc}{part}{#1}% + \fi + \markboth{}{}% + {\centering + \interlinepenalty \@M + \normalfont + \ifnum \c@secnumdepth >-2\relax + \huge\headfont \prepartname\thepart\postpartname + \par\vskip20\p@? + \fi + \Huge \headfont #2\par}% + \@endpart} +%</book|report> +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@spart} +% +% 番号を付けない部です。 +% +% \begin{macrocode} +%<*!book&!report> +\def\@spart#1{{% + \parindent \z@ \raggedright + \interlinepenalty \@M + \normalfont + \huge \headfont #1\par}% + \nobreak + \vskip 3ex + \@afterheading} +%</!book&!report> +%<*book|report> +\def\@spart#1{{% + \centering + \interlinepenalty \@M + \normalfont + \Huge \headfont #1\par}% + \@endpart} +%</book|report> +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@endpart} +% +% |\@part| と |\@spart| の最後で実行されるマクロです。 +% 両面印刷のときは白ページを追加します。 +% 二段組のときには,二段組に戻します。 +% +% [2016-12-13] \texttt{openany} のときには白ページが追加されるのは変なので, +% その場合は追加しないようにしました。このバグは\LaTeX では +% classes.dtx v1.4b (2000/05/19) +% で修正されています。 +% +% \begin{macrocode} +%<*book|report> +\def\@endpart{\vfil\newpage + \if@twoside + \if@openleft %% added (2017/02/24) + \null\thispagestyle{empty}\newpage + \else\if@openright %% added (2016/12/13) + \null\thispagestyle{empty}\newpage + \fi\fi %% added (2016/12/13, 2017/02/24) + \fi + \if@restonecol + \twocolumn + \fi} +%</book|report> +% \end{macrocode} +% \end{macro} +% +% \paragraph{章} +% +% \begin{macro}{\chapter} +% +% 章の最初のページスタイルは,全体が |empty| でなければ |plain| に +% します。 +% また,|\@topnum| を 0 にして, +% 章見出しの上に図や表が来ないようにします。 +% +% \begin{macrocode} +%<*book|report> +\newcommand{\chapter}{% + \if@openleft\cleardoublepage\else + \if@openright\cleardoublepage\else\clearpage\fi\fi + \plainifnotempty % 元: \thispagestyle{plain} + \global\@topnum\z@ + \if@english \@afterindentfalse \else \@afterindenttrue \fi + \secdef + {\@omit@numberfalse\@chapter}% + {\@omit@numbertrue\@schapter}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@chapter} +% +% 章見出しを出力します。 +% |secnumdepth| が0以上かつ |\@mainmatter| が真のとき章番号を出力します。 +% +% \begin{macrocode} +\def\@chapter[#1]#2{% + \ifnum \c@secnumdepth >\m@ne + \if@mainmatter + \refstepcounter{chapter}% + \typeout{\@chapapp\thechapter\@chappos}% + \addcontentsline{toc}{chapter}% + {\protect\numberline +% %{\if@english\thechapter\else\@chapapp\thechapter\@chappos\fi}% + {\@chapapp\thechapter\@chappos}% + #1}% + \else\addcontentsline{toc}{chapter}{#1}\fi + \else + \addcontentsline{toc}{chapter}{#1}% + \fi + \chaptermark{#1}% + \addtocontents{lof}{\protect\addvspace{10\jsc@mpt}}% + \addtocontents{lot}{\protect\addvspace{10\jsc@mpt}}% + \if@twocolumn + \@topnewpage[\@makechapterhead{#2}]% + \else + \@makechapterhead{#2}% + \@afterheading + \fi} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@makechapterhead} +% +% 実際に章見出しを組み立てます。 +% |\bfseries| を |\headfont| に変えました。 +% +% \begin{macrocode} +\def\@makechapterhead#1{% + \vspace*{2\Cvs}% 欧文は50pt + {\parindent \z@ \raggedright \normalfont + \ifnum \c@secnumdepth >\m@ne + \if@mainmatter + \huge\headfont \@chapapp\thechapter\@chappos + \par\nobreak + \vskip \Cvs % 欧文は20pt + \fi + \fi + \interlinepenalty\@M + \Huge \headfont #1\par\nobreak + \vskip 3\Cvs}} % 欧文は40pt +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@schapter} +% +% |\chapter*{...}| コマンドの本体です。 +% |\chaptermark| を補いました。 +% +% \begin{macrocode} +\def\@schapter#1{% + \chaptermark{#1}% + \if@twocolumn + \@topnewpage[\@makeschapterhead{#1}]% + \else + \@makeschapterhead{#1}\@afterheading + \fi} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@makeschapterhead} +% +% 番号なしの章見出しです。 +% +% \begin{macrocode} +\def\@makeschapterhead#1{% + \vspace*{2\Cvs}% 欧文は50pt + {\parindent \z@ \raggedright + \normalfont + \interlinepenalty\@M + \Huge \headfont #1\par\nobreak + \vskip 3\Cvs}} % 欧文は40pt +%</book|report> +% \end{macrocode} +% \end{macro} +% +% \paragraph{下位レベルの見出し} +% +% \begin{macro}{\section} +% +% 欧文版では |\@startsection| の第4引数を負にして最初の段落の +% 字下げを禁止していますが, +% 和文版では正にして字下げするようにしています。 +% +% 段組のときはなるべく左右の段が狂わないように工夫しています。 +% +% \begin{macrocode} +\if@twocolumn + \newcommand{\section}{% +%<jspf>\ifx\maketitle\relax\else\maketitle\fi + \@startsection{section}{1}{\z@}% +%<!kiyou> {0.6\Cvs}{0.4\Cvs}% +%<kiyou> {\Cvs}{0.5\Cvs}% +% {\normalfont\large\headfont\@secapp}} + {\normalfont\large\headfont\raggedright}} +\else + \newcommand{\section}{% + \if@slide\clearpage\fi + \@startsection{section}{1}{\z@}% + {\Cvs \@plus.5\Cdp \@minus.2\Cdp}% 前アキ + {.5\Cvs \@plus.3\Cdp}% 後アキ +% {\normalfont\Large\headfont\@secapp}} + {\normalfont\Large\headfont\raggedright}} +\fi +% \end{macrocode} +% +% \end{macro} +% +% \begin{macro}{\subsection} +% +% 同上です。 +% +% \begin{macrocode} +\if@twocolumn + \newcommand{\subsection}{\@startsection{subsection}{2}{\z@}% + {\z@}{\if@slide .4\Cvs \else \z@ \fi}% + {\normalfont\normalsize\headfont}} +\else + \newcommand{\subsection}{\@startsection{subsection}{2}{\z@}% + {\Cvs \@plus.5\Cdp \@minus.2\Cdp}% 前アキ + {.5\Cvs \@plus.3\Cdp}% 後アキ + {\normalfont\large\headfont}} +\fi +% \end{macrocode} +% +% \end{macro} +% +% \begin{macro}{\subsubsection} +% +% [2016-07-22] \texttt{slide}オプション指定時に |\subsubsection| の文字列 +% と罫線が重なる問題に対処しました(forum:1982)。 +% +% \begin{macrocode} +\if@twocolumn + \newcommand{\subsubsection}{\@startsection{subsubsection}{3}{\z@}% + {\z@}{\if@slide .4\Cvs \else \z@ \fi}% + {\normalfont\normalsize\headfont}} +\else + \newcommand{\subsubsection}{\@startsection{subsubsection}{3}{\z@}% + {\Cvs \@plus.5\Cdp \@minus.2\Cdp}% + {\if@slide .5\Cvs \@plus.3\Cdp \else \z@ \fi}% + {\normalfont\normalsize\headfont}} +\fi +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\paragraph} +% % \begin{macro}{\jsParagraphMark} +% +% 見出しの後ろで改行されません。 +% +% [2016-11-16] 従来は |\paragraph| の最初に出るマークを「■」に固定して +% いましたが,このマークを変更可能にするため |\jsParagraphMark| というマクロ +% に切り出しました。これで,たとえば +%\begin{verbatim} +% \renewcommand{\jsParagraphMark}{★} +%\end{verbatim} +% とすれば「★」に変更できますし,マークを空にすることも容易です。 +% なお,某学会クラスでは従来どおりマークは付きません。 +% +% \begin{ZRnote} +% +% \Note BXJSクラスでは、1.1版[2016-02-14]から |\jsParagraphMark| を +% サポートしている。 +% +% 段落のマーク(■)が必ず和文フォントで出力されるようにする。 +% +% |\jsJaChar| はstandard和文ドライバが読み込まれた場合は\ +% |\jachar| と同義になるが、それ以外は何もしない。 +% \end{ZRnote} +% \begin{macrocode} +\newcommand\jsParagraphMark{\relax\jsJaChar{■}} +\let\bxjs@org@paragraph@mark\jsParagraphMark +\ifx\bxjs@paragraph@mark\@empty + \let\jsParagraphMark\@empty +\else\ifx\bxjs@paragraph@mark\@undefined\else + \long\edef\jsParagraphMark{\noexpand\jsJaChar{\bxjs@paragraph@mark}} +\fi\fi +\let\jsJaChar\@empty +\if@twocolumn + \newcommand{\paragraph}{\@startsection{paragraph}{4}{\z@}% + {\z@}{\if@slide .4\Cvs \else -1\jsZw\fi}% 改行せず 1\jsZw のアキ +%<jspf> {\normalfont\normalsize\headfont}} +%<!jspf> {\normalfont\normalsize\headfont\jsParagraphMark}} +\else + \newcommand{\paragraph}{\@startsection{paragraph}{4}{\z@}% + {0.5\Cvs \@plus.5\Cdp \@minus.2\Cdp}% + {\if@slide .5\Cvs \@plus.3\Cdp \else -1\jsZw\fi}% 改行せず 1\jsZw のアキ +%<jspf> {\normalfont\normalsize\headfont}} +%<!jspf> {\normalfont\normalsize\headfont\jsParagraphMark}} +\fi +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\subparagraph} +% +% 見出しの後ろで改行されません。 +% +% \begin{macrocode} +\if@twocolumn + \newcommand{\subparagraph}{\@startsection{subparagraph}{5}{\z@}% + {\z@}{\if@slide .4\Cvs \@plus.3\Cdp \else -1\jsZw\fi}% + {\normalfont\normalsize\headfont}} +\else + \newcommand{\subparagraph}{\@startsection{subparagraph}{5}{\z@}% + {\z@}{\if@slide .5\Cvs \@plus.3\Cdp \else -1\jsZw\fi}% + {\normalfont\normalsize\headfont}} +\fi +% \end{macrocode} +% \end{macro} +% +% \subsection{リスト環境} +% +% 第 $k$ レベルのリストの初期化をするのが |\@list|$k$ です +% ($k = \mathtt{i}, \mathtt{ii}, \mathtt{iii}, \mathtt{iv}$)。 +% |\@list|$k$ は |\leftmargin| を |\leftmargin|$k$ に設定します。 +% +% \begin{macro}{\leftmargini} +% +% 二段組であるかないかに応じてそれぞれ 2em,2.5em でしたが, +% ここでは全角幅の2倍にしました。 +% +% [2002-05-11] 3zw に変更しました。 +% +% [2005-03-19] 二段組は 2zw に戻しました。 +% +% \begin{macrocode} +\if@slide + \setlength\leftmargini{1\jsZw} +\else + \if@twocolumn + \setlength\leftmargini{2\jsZw} + \else + \setlength\leftmargini{3\jsZw} + \fi +\fi +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\leftmarginii} +% \begin{macro}{\leftmarginiii} +% \begin{macro}{\leftmarginiv} +% \begin{macro}{\leftmarginv} +% \begin{macro}{\leftmarginvi} +% +% |ii|,|iii|,|iv| は |\labelsep| と +% それぞれ `(m)',`vii.',`M.' の幅との和より大きくする +% ことになっています。ここでは全角幅の整数倍に丸めました。 +% +% \begin{macrocode} +\if@slide + \setlength\leftmarginii {1\jsZw} + \setlength\leftmarginiii{1\jsZw} + \setlength\leftmarginiv {1\jsZw} + \setlength\leftmarginv {1\jsZw} + \setlength\leftmarginvi {1\jsZw} +\else + \setlength\leftmarginii {2\jsZw} + \setlength\leftmarginiii{2\jsZw} + \setlength\leftmarginiv {2\jsZw} + \setlength\leftmarginv {1\jsZw} + \setlength\leftmarginvi {1\jsZw} +\fi +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\labelsep} +% \begin{macro}{\labelwidth} +% +% |\labelsep| はラベルと本文の間の距離です。 +% |\labelwidth| はラベルの幅です。 +% これは二分に変えました。 +% +% \begin{macrocode} +\setlength \labelsep {0.5\jsZw} % .5em +\setlength \labelwidth{\leftmargini} +\addtolength\labelwidth{-\labelsep} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\partopsep} +% +% リスト環境の前に空行がある場合, +% |\parskip| と |\topsep| に |\partopsep| を +% 加えた値だけ縦方向の空白ができます。 +% 0 に改変しました。 +% +% \begin{macrocode} +\setlength\partopsep{\z@} % {2\p@ \@plus 1\p@ \@minus 1\p@} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@beginparpenalty} +% \begin{macro}{\@endparpenalty} +% \begin{macro}{\@itempenalty} +% +% リストや段落環境の前後,リスト項目間に挿入されるペナルティです。 +% +% \begin{macrocode} +\@beginparpenalty -\@lowpenalty +\@endparpenalty -\@lowpenalty +\@itempenalty -\@lowpenalty +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\@listi} +% \begin{macro}{\@listI} +% +% |\@listi| は |\leftmargin|,|\parsep|,|\topsep|,|\itemsep| などの +% トップレベルの定義をします。 +% この定義は,フォントサイズコマンドによって変更されます +% (たとえば |\small| の中では小さい値に設定されます)。 +% このため,|\normalsize| がすべてのパラメータを戻せるように, +% |\@listI| で |\@listi| のコピーを保存します。 +% 元の値はかなり複雑ですが,ここでは簡素化してしまいました。 +% 特に最初と最後に行送りの半分の空きが入るようにしてあります。 +% アスキーの標準スタイルでは +% トップレベルの |itemize|,|enumerate| 環境でだけ +% 最初と最後に行送りの半分の空きが入るようになっていました。 +% +% [2004-09-27] |\topsep| のグルー $_{-0.1}^{+0.2}$ |\baselineskip| +% を思い切って外しました。 +% +% \begin{macrocode} +\def\@listi{\leftmargin\leftmargini + \parsep \z@ + \topsep 0.5\baselineskip + \itemsep \z@ \relax} +\let\@listI\@listi +% \end{macrocode} +% +% 念のためパラメータを初期化します(実際には不要のようです)。 +% +% \begin{macrocode} +\@listi +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\@listii} +% \begin{macro}{\@listiii} +% \begin{macro}{\@listiv} +% \begin{macro}{\@listv} +% \begin{macro}{\@listvi} +% +% 第2\zrWDash6レベルのリスト環境のパラメータの設定です。 +% +% \begin{macrocode} +\def\@listii{\leftmargin\leftmarginii + \labelwidth\leftmarginii \advance\labelwidth-\labelsep + \topsep \z@ + \parsep \z@ + \itemsep\parsep} +\def\@listiii{\leftmargin\leftmarginiii + \labelwidth\leftmarginiii \advance\labelwidth-\labelsep + \topsep \z@ + \parsep \z@ + \itemsep\parsep} +\def\@listiv {\leftmargin\leftmarginiv + \labelwidth\leftmarginiv + \advance\labelwidth-\labelsep} +\def\@listv {\leftmargin\leftmarginv + \labelwidth\leftmarginv + \advance\labelwidth-\labelsep} +\def\@listvi {\leftmargin\leftmarginvi + \labelwidth\leftmarginvi + \advance\labelwidth-\labelsep} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \paragraph{enumerate環境} +% +% |enumerate| 環境はカウンタ |enumi|,|enumii|,|enumiii|, +% |enumiv| を使います。|enum|$n$ は第 $n$ レベルの番号です。 +% +% \begin{macro}{\theenumi} +% \begin{macro}{\theenumii} +% \begin{macro}{\theenumiii} +% \begin{macro}{\theenumiv} +% +% 出力する番号の書式を設定します。 +% これらは\LaTeX 本体(\texttt{ltlists.dtx} 参照)で定義済みですが, +% ここでは表し方を変えています。 +% |\@arabic|,|\@alph|,|\@roman|,|\@Alph| はそれぞれ +% 算用数字,小文字アルファベット,小文字ローマ数字,大文字アルファベット +% で番号を出力する命令です。 +% +% \begin{macrocode} +\renewcommand{\theenumi}{\@arabic\c@enumi} +\renewcommand{\theenumii}{\@alph\c@enumii} +\renewcommand{\theenumiii}{\@roman\c@enumiii} +\renewcommand{\theenumiv}{\@Alph\c@enumiv} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\labelenumi} +% \begin{macro}{\labelenumii} +% \begin{macro}{\labelenumiii} +% \begin{macro}{\labelenumiv} +% +% |enumerate| 環境の番号を出力する命令です。 +% 第2レベル以外は最後に欧文のピリオドが付きますが, +% これは好みに応じて取り払ってください。 +% 第2レベルの番号のかっこは和文用に換え, +% その両側に入る余分なグルーを |\inhibitglue| で +% 取り除いています。 +% \begin{ZRnote} +% 和文の括弧で囲むための補助命令 |\jsInJaParen| を +% 定義して |\labelenumii| でそれを用いている。 +% \Note 現状の |zxjatype| の |\inhibitglue| の実装には +% 「前後のグルーを消してしまう」という不備があって、 +% そのため |enumii| の出力が異常になるという不具合があった。 +% |zxjatype| を修正するまでの回避策として、サイズがゼロの +% 罫(|\bxjs@dust|)でガードしておく。 +% \end{ZRnote} +% +% \begin{macrocode} +\def\bxjs@dust{\vrule\@width\z@\@height\z@\@depth\z@} +\newcommand*{\jsInJaParen}[1]{% + \bxjs@dust\jsInhibitGlue (#1)\jsInhibitGlue\bxjs@dust} +\newcommand{\labelenumi}{\theenumi.} +\newcommand{\labelenumii}{\jsInJaParen{\theenumii}} +\newcommand{\labelenumiii}{\theenumiii.} +\newcommand{\labelenumiv}{\theenumiv.} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\p@enumii} +% \begin{macro}{\p@enumiii} +% \begin{macro}{\p@enumiv} +% +% |\p@enum|$n$ は |\ref| コマンドで |enumerate| 環境の第 $n$ レベルの +% 項目が参照されるときの書式です。 +% これも第2レベルは和文用かっこにしました。 +% +% \begin{macrocode} +\renewcommand{\p@enumii}{\theenumi} +\renewcommand{\p@enumiii}{\theenumi\jsInhibitGlue (\theenumii )} +\renewcommand{\p@enumiv}{\p@enumiii\theenumiii} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \paragraph{itemize環境} +% +% \begin{macro}{\labelitemi} +% \begin{macro}{\labelitemii} +% \begin{macro}{\labelitemiii} +% \begin{macro}{\labelitemiv} +% |itemize| 環境の第 $n$ レベルのラベルを作るコマンドです。 +% \begin{macrocode} +\newcommand\labelitemi{\textbullet} +\newcommand\labelitemii{\normalfont\bfseries \textendash} +\newcommand\labelitemiii{\textasteriskcentered} +\newcommand\labelitemiv{\textperiodcentered} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \paragraph{description環境} +% +% \begin{environment}{description} +% +% 本来の |description| 環境では,項目名が短いと,説明部分の頭が +% それに引きずられて左に出てしまいます。 +% これを解決した新しい |description| の実装です。 +% +% \begin{macrocode} +\newenvironment{description}{% + \list{}{% + \labelwidth=\leftmargin + \labelsep=1\jsZw + \advance \labelwidth by -\labelsep + \let \makelabel=\descriptionlabel}}{\endlist} +% \end{macrocode} +% \end{environment} +% +% \begin{macro}{\descriptionlabel} +% +% |description| 環境のラベルを出力するコマンドです。 +% 好みに応じて |#1| の前に適当な空き +% (たとえば |\hspace{1\jsZw}|)を入れるのもいいと思います。 +% +% \begin{macrocode} +\newcommand*\descriptionlabel[1]{\normalfont\headfont #1\hfil} +% \end{macrocode} +% \end{macro} +% +% \paragraph{概要} +% +% \begin{environment}{abstract} +% +% 概要(要旨,梗概)を出力する環境です。 +% |book| クラスでは各章の初めにちょっとしたことを書くのに使います。 +% |titlepage| オプション付きの |article| クラスでは, +% 独立したページに出力されます。 +% |abstract| 環境は元は |quotation| 環境で作られていましたが, +% |quotation| 環境の右マージンをゼロにしたので, +% |list| 環境で作り直しました。 +% +% JSPFスタイルでは実際の出力は |\maketitle| で行われます。 +% +% \begin{ZRnote} +% |bxjsreport| クラスのabstract環境は: +% \begin{itemize} +% \item |layout=v1| の場合は |jsbook|\,+\,|report| の動作を継承する。 +% つまり |jsbook| と同じになる。 +% \item |layout=v2| の場合は新設の |jsreport| の動作を継承する。 +% つまり |jsarticle|(+\,|titlapage|)と同じになる。 +% \end{itemize} +% +% \begin{environment}{chapterabstract} +% |jsbook| のabstract環境 +% (「各章の初めにちょっとしたことを書く」ためのもの) +% をchapterabstractと呼ぶことにする。 +% \begin{macrocode} +%<*book|report> +\newenvironment{chapterabstract}{% + \begin{list}{}{% + \listparindent=1\jsZw + \itemindent=\listparindent + \rightmargin=0pt + \leftmargin=5\jsZw}\item[]}{\end{list}\vspace{\baselineskip}} +%</book|report> +% \end{macrocode} +% \end{environment} +% +% “普通の”abstract環境の定義。 +% \begin{macrocode} +%<*article|report|slide> +\newbox\@abstractbox +\if@titlepage + \newenvironment{abstract}{% + \titlepage + \null\vfil + \@beginparpenalty\@lowpenalty + \begin{center}% + \headfont \abstractname + \@endparpenalty\@M + \end{center}% +% \end{macrocode} +% BXJSクラスでは、 +% 概要の最初の段落に段落下げが入るようにする。 +% \begin{macrocode} + \par}% + {\par\vfil\null\endtitlepage} +\else + \newenvironment{abstract}{% + \if@twocolumn + \ifx\maketitle\relax + \section*{\abstractname}% + \else + \global\setbox\@abstractbox\hbox\bgroup + \begin{minipage}[b]{\textwidth} + \small\parindent1\jsZw + \begin{center}% + {\headfont \abstractname\vspace{-.5em}\vspace{\z@}}% + \end{center}% + \list{}{% + \listparindent\parindent + \itemindent \listparindent + \rightmargin \leftmargin}% + \item\relax + \fi + \else + \small + \begin{center}% + {\headfont \abstractname\vspace{-.5em}\vspace{\z@}}% + \end{center}% + \list{}{% + \listparindent\parindent + \itemindent \listparindent + \rightmargin \leftmargin}% + \item\relax + \fi}{\if@twocolumn + \ifx\maketitle\relax + \else + \endlist\end{minipage}\egroup + \fi + \else + \endlist + \fi} +\fi +%</article|report|slide> +%<*jspf> +\newbox\@abstractbox +\newenvironment{abstract}{% + \global\setbox\@abstractbox\hbox\bgroup + \begin{minipage}[b]{157\jsc@mmm}{\sffamily Abstract}\par + \small + \if@english \parindent6\jsc@mmm \else \parindent1\jsZw \fi}% + {\end{minipage}\egroup} +%</jspf> +% \end{macrocode} +% +% |bxjs@force@chapterabstract| が真の場合は、abstract環境を +% chapterabstract環境と等価にする。 +% \begin{macrocode} +%<*book|report> +\ifbxjs@force@chapterabstract + \let\abstract\chapterabstract + \let\endabstract\endchapterabstract +\fi +%</book|report> +% \end{macrocode} +% \end{ZRnote} +% +% \end{environment} +% +% \paragraph{キーワード} +% +% \begin{environment}{keywords} +% +% キーワードを準備する環境です。 +% 実際の出力は |\maketitle| で行われます。 +% +% \begin{macrocode} +%<*jspf> +%\newbox\@keywordsbox +%\newenvironment{keywords}{% +% \global\setbox\@keywordsbox\hbox\bgroup +% \begin{minipage}[b]{1570\jsc@mmm}{\sffamily Keywords:}\par +% \small\parindent0\jsZw}% +% {\end{minipage}\egroup} +%</jspf> +% \end{macrocode} +% \end{environment} +% +% \paragraph{verse環境} +% +% \begin{environment}{verse} +% +% 詩のための |verse| 環境です。 +% +% \begin{macrocode} +\newenvironment{verse}{% + \let \\=\@centercr + \list{}{% + \itemsep \z@ + \itemindent -2\jsZw % 元: -1.5em + \listparindent\itemindent + \rightmargin \z@ + \advance\leftmargin 2\jsZw}% 元: 1.5em + \item\relax}{\endlist} +% \end{macrocode} +% \end{environment} +% +% \paragraph{quotation環境} +% +% \begin{environment}{quotation} +% +% 段落の頭の字下げ量を1.5emから |\parindent| に変えました。 +% また,右マージンを 0 にしました。 +% +% \begin{macrocode} +\newenvironment{quotation}{% + \list{}{% + \listparindent\parindent + \itemindent\listparindent + \rightmargin \z@}% + \item\relax}{\endlist} +% \end{macrocode} +% \end{environment} +% +% \paragraph{quote環境} +% +% \begin{environment}{quote} +% +% |quote| 環境は,段落がインデントされないことを除き, +% |quotation| 環境と同じです。 +% +% \begin{macrocode} +\newenvironment{quote}% + {\list{}{\rightmargin\z@}\item\relax}{\endlist} +% \end{macrocode} +% \end{environment} +% +% \paragraph{定理など} +% +% |ltthm.dtx| 参照。たとえば次のように定義します。 +%\begin{verbatim} +% \newtheorem{definition}{定義} +% \newtheorem{axiom}{公理} +% \newtheorem{theorem}{定理} +%\end{verbatim} +% +% [2001-04-26] 定理の中はイタリック体になりましたが, +% これでは和文がゴシック体になってしまうので, +% |\itshape| を削除しました。 +% +% [2009-08-23] |\bfseries| を |\headfont| に直し, +% |\labelsep| を 1\,zw にし,括弧を全角にしました。 +% +% \begin{macrocode} +\def\@begintheorem#1#2{\trivlist\labelsep=1\jsZw + \item[\hskip \labelsep{\headfont #1\ #2}]} +\def\@opargbegintheorem#1#2#3{\trivlist\labelsep=1\jsZw + \item[\hskip \labelsep{\headfont #1\ #2(#3)}]} +% \end{macrocode} +% +% \begin{environment}{titlepage} +% +% タイトルを独立のページに出力するのに使われます。 +% +% [2017-02-24] コミュニティ版\pLaTeX の標準クラス2017/02/15に合わせて, +% bookクラスでタイトルを必ず奇数ページに送るようにしました。といっても, +% 横組クラスしかありませんでしたので,従来の挙動は何も変わっていません。 +% また,book以外の場合のページ番号のリセットもコミュニティ版\pLaTeX の +% 標準クラス2017/02/15に合わせましたが,こちらも片面印刷あるいは +% 独立のタイトルページを作らないクラスばかりでしたので,従来の挙動は +% 何も変わらずに済みました。 +% +% \begin{macrocode} +\newenvironment{titlepage}{% +%<book> \pltx@cleartooddpage %% 2017-02-24 + \if@twocolumn + \@restonecoltrue\onecolumn + \else + \@restonecolfalse\newpage + \fi + \thispagestyle{empty}% + \ifodd\c@page\setcounter{page}\@ne\else\setcounter{page}\z@\fi %% 2017-02-24 + }% + {\if@restonecol\twocolumn \else \newpage \fi + \if@twoside\else + \setcounter{page}\@ne + \fi} +% \end{macrocode} +% \end{environment} +% +% \paragraph{付録} +% +% \begin{macro}{\appendix} +% +% 本文と付録を分離するコマンドです。 +% +% \begin{macrocode} +%<*!book&!report> +\newcommand{\appendix}{\par + \setcounter{section}{0}% + \setcounter{subsection}{0}% + \ifnum\bxjs@label@section=\bxjs@label@section@compat + \gdef\presectionname{\appendixname}% + \gdef\postsectionname{}% +% \gdef\thesection{\@Alph\c@section}% [2003-03-02] + \gdef\thesection{\presectionname\@Alph\c@section\postsectionname}% + \gdef\thesubsection{\@Alph\c@section.\@arabic\c@subsection}% + \else + \gdef\@secapp{\appendixname}% + \gdef\@secpos{}% + \gdef\thesection{\@Alph\c@section}% + \fi} +%</!book&!report> +%<*book|report> +\newcommand{\appendix}{\par + \setcounter{chapter}{0}% + \setcounter{section}{0}% + \gdef\@chapapp{\appendixname}% + \gdef\@chappos{}% + \gdef\thechapter{\@Alph\c@chapter}} +%</book|report> +% \end{macrocode} +% \end{macro} +% +% \subsection{パラメータの設定} +% +% \paragraph{arrayとtabular環境} +% +% \begin{macro}{\arraycolsep} +% +% |array| 環境の列間には |\arraycolsep| の2倍の幅の空きが入ります。 +% +% \begin{macrocode} +\setlength\arraycolsep{5\p@?} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\tabcolsep} +% +% |tabular| 環境の列間には |\tabcolsep| の2倍の幅の空きが入ります。 +% +% \begin{macrocode} +\setlength\tabcolsep{6\p@?} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\arrayrulewidth} +% +% |array|,|tabular| 環境内の罫線の幅です。 +% +% \begin{macrocode} +\setlength\arrayrulewidth{.4\p@} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\doublerulesep} +% +% |array|,|tabular| 環境での二重罫線間のアキです。 +% +% \begin{macrocode} +\setlength\doublerulesep{2\p@} +% \end{macrocode} +% \end{macro} +% +% \paragraph{tabbing環境} +% +% \begin{macro}{\tabbingsep} +% +% |\'| コマンドで入るアキです。 +% +% \begin{macrocode} +\setlength\tabbingsep{\labelsep} +% \end{macrocode} +% \end{macro} +% +% \paragraph{minipage環境} +% +% \begin{macro}{\@mpfootins} +% +% |minipage| 環境の脚注の |\skip|\hspace{0pt}|\@mpfootins| +% は通常のページの |\skip|\hspace{0pt}|\footins| +% と同じ働きをします。 +% +% \begin{macrocode} +\skip\@mpfootins = \skip\footins +% \end{macrocode} +% \end{macro} +% +% \paragraph{framebox環境} +% +% \begin{macro}{\fboxsep} +% +% |\fbox|,|\framebox| で内側のテキストと枠との間の空きです。 +% +% \begin{macro}{\fboxrule} +% +% |\fbox|,|\framebox| の罫線の幅です。 +% +% \begin{macrocode} +\setlength\fboxsep{3\p@?} +\setlength\fboxrule{.4\p@} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \paragraph{equationとeqnarray環境} +% +% \begin{macro}{\theequation} +% +% 数式番号を出力するコマンドです。 +% +% \begin{macrocode} +%<!book&!report>\renewcommand \theequation {\@arabic\c@equation} +%<*book|report> +\@addtoreset{equation}{chapter} +\renewcommand\theequation + {\ifnum \c@chapter>\z@ \thechapter.\fi \@arabic\c@equation} +%</book|report> +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\jot} +% +% |eqnarray| の行間に余分に入るアキです。 +% デフォルトの値をコメントアウトして示しておきます。 +% +% \begin{macrocode} +% \setlength\jot{3pt} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@eqnnum} +% +% 数式番号の形式です。 +% デフォルトの値をコメントアウトして示しておきます。 +% +% |\jsInhibitGlue (\theequation )\jsInhibitGlue| のように和文かっこ +% を使うことも可能です。 +% +% \begin{macrocode} +% \def\@eqnnum{(\theequation)} +% \end{macrocode} +% \end{macro} +% +% |amsmath| パッケージを使う場合は |\tagform@| を次のように修正します。 +% +% \begin{macrocode} +% \def\tagform@#1{\maketag@@@{(\ignorespaces#1\unskip\@@italiccorr )}} +% \end{macrocode} +% +% \subsection{フロート} +% +% タイプ \texttt{TYPE} のフロートオブジェクトを +% 扱うには,次のマクロを定義します。 +% \begin{description} +% \item[\texttt{\bslash fps@TYPE}] +% フロートを置く位置(float placement specifier)です。 +% \item[\texttt{\bslash ftype@TYPE}] +% フロートの番号です。2の累乗(1,2,4,\ldots )でなければなりません。 +% \item[\texttt{\bslash ext@TYPE}] +% フロートの目次を出力するファイルの拡張子です。 +% \item[\texttt{\bslash fnum@TYPE}] +% キャプション用の番号を生成するマクロです。 +% \item[\texttt{\bslash @makecaption}{\meta{num}}{\meta{text}}] +% キャプションを出力するマクロです。 +% \meta{num} は |\fnum@...| の生成する番号, +% \meta{text} はキャプションのテキストです。 +% テキストは適当な幅の |\parbox| に入ります。 +% \end{description} +% +% \paragraph{figure環境} +% +% \begin{macro}{\c@figure} +% +% 図番号のカウンタです。 +% +% \begin{macro}{\thefigure} +% +% 図番号を出力するコマンドです。 +% +% \begin{macrocode} +%<*!book&!report> +\newcounter{figure} +\renewcommand \thefigure {\@arabic\c@figure} +%</!book&!report> +%<*book|report> +\newcounter{figure}[chapter] +\renewcommand \thefigure + {\ifnum \c@chapter>\z@ \thechapter.\fi \@arabic\c@figure} +%</book|report> +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\fps@figure} +% \begin{macro}{\ftype@figure} +% \begin{macro}{\ext@figure} +% \begin{macro}{\fnum@figure} +% +% |figure| のパラメータです。 +% |\figurename| の直後に |~| が入っていましたが, +% ここでは外しました。 +% +% \begin{macrocode} +\def\fps@figure{tbp} +\def\ftype@figure{1} +\def\ext@figure{lof} +\def\fnum@figure{\figurename\nobreak\thefigure} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{environment}{figure} +% \begin{environment}{figure*} +% +% |*| 形式は段抜きのフロートです。 +% +% \begin{macrocode} +\newenvironment{figure}% + {\@float{figure}}% + {\end@float} +\newenvironment{figure*}% + {\@dblfloat{figure}}% + {\end@dblfloat} +% \end{macrocode} +% \end{environment} +% \end{environment} +% +% \paragraph{table環境} +% +% \begin{macro}{\c@table} +% \begin{macro}{\thetable} +% +% 表番号カウンタと表番号を出力するコマンドです。 +% アスキー版では |\thechapter.| が |\thechapter{}・| になっていますが, +% ここではオリジナルのままにしています。 +% +% \begin{macrocode} +%<*!book&!report> +\newcounter{table} +\renewcommand\thetable{\@arabic\c@table} +%</!book&!report> +%<*book|report> +\newcounter{table}[chapter] +\renewcommand \thetable + {\ifnum \c@chapter>\z@ \thechapter.\fi \@arabic\c@table} +%</book|report> +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\fps@table} +% \begin{macro}{\ftype@table} +% \begin{macro}{\ext@table} +% \begin{macro}{\fnum@table} +% +% |table| のパラメータです。 +% |\tablename| の直後に |~| が入っていましたが, +% ここでは外しました。 +% +% \begin{macrocode} +\def\fps@table{tbp} +\def\ftype@table{2} +\def\ext@table{lot} +\def\fnum@table{\tablename\nobreak\thetable} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{environment}{table} +% \begin{environment}{table*} +% +% |*| は段抜きのフロートです。 +% +% \begin{macrocode} +\newenvironment{table}% + {\@float{table}}% + {\end@float} +\newenvironment{table*}% + {\@dblfloat{table}}% + {\end@dblfloat} +% \end{macrocode} +% \end{environment} +% \end{environment} +% +% \subsection{キャプション} +% +% \begin{macro}{\@makecaption} +% +% |\caption| コマンドにより呼び出され, +% 実際にキャプションを出力するコマンドです。 +% 第1引数はフロートの番号, +% 第2引数はテキストです。 +% +% \begin{macro}{\abovecaptionskip} +% \begin{macro}{\belowcaptionskip} +% +% それぞれキャプションの前後に挿入されるスペースです。 +% |\belowcaptionskip| が0になっていましたので, +% キャプションを表の上につけた場合にキャプションと表が +% くっついてしまうのを直しました。 +% +% \begin{macrocode} +\newlength\abovecaptionskip +\newlength\belowcaptionskip +\setlength\abovecaptionskip{5\p@?} % 元: 10\p@ +\setlength\belowcaptionskip{5\p@?} % 元: 0\p@ +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% 実際のキャプションを出力します。 +% オリジナルと異なり,文字サイズを |\small| にし, +% キャプションの幅を2cm狭くしました。 +% +% [2003-11-05] ロジックを少し変えてみました。 +% +% \begin{macrocode} +%<*!jspf> +% \long\def\@makecaption#1#2{{\small +% \advance\leftskip10\jsc@mmm +% \advance\rightskip10\jsc@mmm +% \vskip\abovecaptionskip +% \sbox\@tempboxa{#1\hskip1\jsZw\relax #2}% +% \ifdim \wd\@tempboxa >\hsize +% #1\hskip1\jsZw\relax #2\par +% \else +% \global \@minipagefalse +% \hb@xt@\hsize{\hfil\box\@tempboxa\hfil}% +% \fi +% \vskip\belowcaptionskip}} +\long\def\@makecaption#1#2{{\small + \advance\leftskip .0628\linewidth + \advance\rightskip .0628\linewidth + \vskip\abovecaptionskip + \sbox\@tempboxa{#1\zwspace#2}% + \ifdim \wd\@tempboxa <\hsize \centering \fi + #1\zwspace#2\par + \vskip\belowcaptionskip}} +%</!jspf> +%<*jspf> +\long\def\@makecaption#1#2{% + \vskip\abovecaptionskip + \sbox\@tempboxa{\small\sffamily #1\quad #2}% + \ifdim \wd\@tempboxa >\hsize + {\small\sffamily + \list{#1}{% + \renewcommand{\makelabel}[1]{##1\hfil} + \itemsep \z@ + \itemindent \z@ + \labelsep \z@ + \labelwidth 11\jsc@mmm + \listparindent\z@ + \leftmargin 11\jsc@mmm}\item\relax #2\endlist} + \else + \global \@minipagefalse + \hb@xt@\hsize{\hfil\box\@tempboxa\hfil}% + \fi + \vskip\belowcaptionskip} +%</jspf> +% \end{macrocode} +% \end{macro} +% +% \section{フォントコマンド} +% +% ここでは\LaTeX~2.09で使われていたコマンドを定義します。 +% これらはテキストモードと数式モードのどちらでも動作します。 +% これらは互換性のためのもので, +% できるだけ |\text...| と |\math...| を使ってください。 +% +% [2016-07-15] KOMA-Script中の |\scr@DeclareOldFontCommand| に倣い、 +% これらの命令を使うときには警告を発することにしました。 +% +% [2016-07-16] 警告を最初の一回だけ発することにしました。また, +% 例外的に警告を出さないようにするスイッチも付けます。 +% +% \begin{macro}{\if@jsc@warnoldfontcmd} +% \begin{macro}{\if@jsc@warnoldfontcmdexception} +% \begin{ZRnote} +% |\if@jsc@warnoldfontcmd| はBXJSクラスでは不使用。\par +% |\if@jsc@warnoldfontcmdexception| は |\allow/disallowoldfontcommands| +% の状態を表す。 +% \end{ZRnote} +% \begin{macrocode} +\newif\if@jsc@warnoldfontcmd +\@jsc@warnoldfontcmdtrue +\newif\if@jsc@warnoldfontcmdexception +\@jsc@warnoldfontcmdexceptionfalse +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\jsc@DeclareOldFontCommand} +% \begin{macrocode} +\newcommand*{\jsc@DeclareOldFontCommand}[3]{% + \g@addto@macro\bxjs@oldfontcmd@list{\do#1}% + \DeclareOldFontCommand{#1}{% + \bxjs@oldfontcmd{#1}#2% + }{% + \bxjs@oldfontcmd{#1}#3% + }% +} +\DeclareRobustCommand*{\jsc@warnoldfontcmd}[1]{% + \ClassInfo\bxjs@clsname + {Old font command '\string#1' is used!!\MessageBreak + The first occurrence is}% +} +% \end{macrocode} +% \end{macro} +% +% \begin{ZRnote} +% +% \begin{macro}{\allowoldfontcommands} +% “二文字フォント命令”の使用を許可する(警告しない)。 +% \begin{macro}{\disallowoldfontcommands} +% “二文字フォント命令”の使用に対して警告を出す。 +% \begin{macrocode} +\newcommand*{\allowoldfontcommands}{% + \@jsc@warnoldfontcmdexceptiontrue} +\newcommand*{\disallowoldfontcommands}{% + \@jsc@warnoldfontcmdexceptionfalse} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macrocode} +\let\bxjs@oldfontcmd@list\@empty +\def\bxjs@oldfontcmd#1{% + \expandafter\bxjs@oldfontcmd@a\csname bxjs@ofc/\string#1\endcsname#1} +\def\bxjs@oldfontcmd@a#1#2{% + \if@jsc@warnoldfontcmdexception\else + \global\@jsc@warnoldfontcmdfalse + \ifx#1\relax + \global\let#1=t% + \jsc@warnoldfontcmd{#2}% + \fi + \fi} +\def\bxjs@warnoldfontcmd@final{% +% \par + \global\let\bxjs@warnoldfontcmd@final\@empty + \let\@tempa\@empty + \def\do##1{% + \expandafter\ifx\csname bxjs@ofc/\string##1\endcsname\relax\else + \edef\@tempa{\@tempa \space\string##1}\fi} + \bxjs@oldfontcmd@list + \ifx\@tempa\@empty\else + \ClassWarningNoLine\bxjs@clsname + {Some old font commands were used in text:\MessageBreak + \space\@tempa\MessageBreak + You should note, that since 1994 LaTeX2e provides a\MessageBreak + new font selection scheme called NFSS2 with several\MessageBreak + new, combinable font commands. The + class provides\MessageBreak + the old font commands only for compatibility} + \fi} +% \end{macrocode} +% 単純に |\AtEndDocument| のフックの中で |\bxjs@warnoldfontcmd@final| を +% 実行した場合、最終ページのヘッダ・フッタの中にある二文字フォント命令は +% それより後に実行されるため捕捉できない。 +% これに対処するため、|\end{document}| 中に実行される |\clearpage| の処理の +% 直後に |\bxjs....final| が呼ばれるようにする。 +% \begin{macrocode} +\def\bxjs@warnoldfontcmd@kick@final{% + \g@addto@macro\clearpage{\bxjs@warnoldfontcmd@final}} +\AtEndDocument{\bxjs@warnoldfontcmd@kick@final} +% \end{macrocode} +% +% \end{ZRnote} +% +% \begin{macro}{\mc} +% \begin{macro}{\gt} +% \begin{macro}{\rm} +% \begin{macro}{\sf} +% \begin{macro}{\tt} +% +% フォントファミリを変更します。 +% +% \begin{macrocode} +\jsc@DeclareOldFontCommand{\mc}{\normalfont\mcfamily}{\mathmc} +\jsc@DeclareOldFontCommand{\gt}{\normalfont\gtfamily}{\mathgt} +\jsc@DeclareOldFontCommand{\rm}{\normalfont\rmfamily}{\mathrm} +\jsc@DeclareOldFontCommand{\sf}{\normalfont\sffamily}{\mathsf} +\jsc@DeclareOldFontCommand{\tt}{\normalfont\ttfamily}{\mathtt} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\bf} +% +% ボールドシリーズにします。通常のミーディアムシリーズに戻す +% コマンドは |\mdseries| です。 +% +% \begin{macrocode} +\jsc@DeclareOldFontCommand{\bf}{\normalfont\bfseries}{\mathbf} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\it} +% \begin{macro}{\sl} +% \begin{macro}{\sc} +% +% フォントシェイプを変えるコマンドです。 +% 斜体とスモールキャップスは数式中では何もしません +% (警告メッセージを出力します)。 +% 通常のアップライト体に戻すコマンドは |\upshape| です。 +% +% \begin{macrocode} +\jsc@DeclareOldFontCommand{\it}{\normalfont\itshape}{\mathit} +\jsc@DeclareOldFontCommand{\sl}{\normalfont\slshape}{\@nomath\sl} +\jsc@DeclareOldFontCommand{\sc}{\normalfont\scshape}{\@nomath\sc} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\cal} +% \begin{macro}{\mit} +% +% 数式モード以外では何もしません(警告を出します)。 +% +% \begin{macrocode} +\DeclareRobustCommand*{\cal}{\@fontswitch\relax\mathcal} +\DeclareRobustCommand*{\mit}{\@fontswitch\relax\mathnormal} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \section{相互参照} +% +% \subsection{目次の類} +% +% |\section| コマンドは |.toc| ファイルに次のような行を出力します。 +% \begin{quote} +% |\contentsline{section}{タイトル}{ページ}| +% \end{quote} +% たとえば |\section| に見出し番号が付く場合,上の「タイトル」は +% \begin{quote} +% |\numberline{番号}{見出し}| +% \end{quote} +% となります。 +% この「番号」は |\thesection| コマンドで生成された見出し番号です。 +% +% |figure| 環境の |\caption| コマンドは |.lof| ファイルに +% 次のような行を出力します。 +% \begin{quote} +% |\contentsline{figure}{\numberline{番号}{キャプション}{ページ}| +% \end{quote} +% この「番号」は |\thefigure| コマンドで生成された図番号です。 +% +% |table| 環境も同様です。 +% +% |\contentsline{...}| は |\l@...| というコマンドを実行するので, +% あらかじめ |\l@chapter|,|\l@section|,|\l@figure| などを +% 定義しておかなければなりません。 +% これらの多くは |\@dottedtocline| コマンドを使って定義します。 +% これは +% \begin{quote} +% |\@dottedtocline{レベル}{インデント}{幅}{タイトル}{ページ}| +% \end{quote} +% という書式です。 +% \begin{description} +% \item[レベル] この値が |tocdepth| 以下のときだけ出力されます。 +% |\chapter| はレベル0,|\section| はレベル1,等々です。 +% \item[インデント] 左側の字下げ量です。 +% \item[幅] 「タイトル」に |\numberline| コマンドが含まれる場合, +% 節番号が入る箱の幅です。 +% \end{description} +% +% \begin{macro}{\@pnumwidth} +% +% ページ番号の入る箱の幅です。 +% +% \begin{macro}{\@tocrmarg} +% +% 右マージンです。 +% |\@tocrmarg| $\ge$ |\@pnumwidth| とします。 +% +% \begin{macro}{\@dotsep} +% +% 点の間隔です(単位 mu)。 +% +% \begin{macro}{\c@tocdepth} +% +% 目次ページに出力する見出しレベルです。 +% 元は \texttt{article} で3,その他で2でしたが, +% ここでは一つずつ減らしています。 +% +% \begin{macrocode} +\newcommand\@pnumwidth{1.55em} +\newcommand\@tocrmarg{2.55em} +\newcommand\@dotsep{4.5} +%<!book&!report>\setcounter{tocdepth}{2} +%<book|report>\setcounter{tocdepth}{1} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \paragraph{目次} +% +% \begin{macro}{\tableofcontents} +% +% 目次を生成します。 +% +% \begin{macro}{\jsc@tocl@width} +% +% [2013-12-30] |\prechaptername| などから見積もった目次のラベルの長さです。(by ts) +% +% \begin{macrocode} +\newdimen\jsc@tocl@width +\newcommand{\tableofcontents}{% +%<*book|report> + \settowidth\jsc@tocl@width{\headfont\prechaptername\postchaptername}% + \settowidth\@tempdima{\headfont\appendixname}% + \ifdim\jsc@tocl@width<\@tempdima \setlength\jsc@tocl@width{\@tempdima}\fi + \ifdim\jsc@tocl@width<2\jsZw \divide\jsc@tocl@width by 2 \advance\jsc@tocl@width 1\jsZw\fi + \if@twocolumn + \@restonecoltrue\onecolumn + \else + \@restonecolfalse + \fi + \chapter*{\contentsname}% + \@mkboth{\contentsname}{}% +%</book|report> +%<*!book&!report> + \settowidth\jsc@tocl@width{\headfont\presectionname\postsectionname}% + \settowidth\@tempdima{\headfont\appendixname}% + \ifdim\jsc@tocl@width<\@tempdima\relax\setlength\jsc@tocl@width{\@tempdima}\fi + \ifdim\jsc@tocl@width<2\jsZw \divide\jsc@tocl@width by 2 \advance\jsc@tocl@width 1\jsZw\fi + \section*{\contentsname}% + \@mkboth{\contentsname}{\contentsname}% +%</!book&!report> + \@starttoc{toc}% +%<book|report> \if@restonecol\twocolumn\fi +} +% \end{macrocode} +% \end{macro}\end{macro} +% +% \begin{macro}{\l@part} +% +% 部の目次です。 +% +% \begin{macrocode} +\newcommand*{\l@part}[2]{% + \ifnum \c@tocdepth >-2\relax +%<!book&!report> \addpenalty\@secpenalty +%<book|report> \addpenalty{-\@highpenalty}% + \addvspace{2.25em \@plus\p@?}% + \begingroup + \parindent \z@ +% \@pnumwidth should be \@tocrmarg +% \rightskip \@pnumwidth + \rightskip \@tocrmarg + \parfillskip -\rightskip + {\leavevmode + \large \headfont + \setlength\@lnumwidth{4\jsZw}% + #1\hfil \hb@xt@\@pnumwidth{\hss #2}}\par + \nobreak +%<book|report> \global\@nobreaktrue +%<book|report> \everypar{\global\@nobreakfalse\everypar{}}% + \endgroup + \fi} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\l@chapter} +% +% 章の目次です。|\@lnumwidth| を4.683zwに増やしました。 +% +% [2013-12-30] |\@lnumwidth| を |\jsc@tocl@width| から +% 決めるようにしてみました。(by ts) +% +% \begin{macrocode} +%<*book|report> +\newcommand*{\l@chapter}[2]{% + \ifnum \c@tocdepth >\m@ne + \addpenalty{-\@highpenalty}% + \addvspace{1.0em \@plus\p@?} +% \vskip 1.0em \@plus\p@ % book.clsでは↑がこうなっている + \begingroup + \parindent\z@ +% \rightskip\@pnumwidth + \rightskip\@tocrmarg + \parfillskip-\rightskip + \leavevmode\headfont +% % \if@english\setlength\@lnumwidth{5.5em}\else\setlength\@lnumwidth{4.683\jsZw}\fi + \setlength\@lnumwidth{\jsc@tocl@width}\advance\@lnumwidth 2.683\jsZw + \advance\leftskip\@lnumwidth \hskip-\leftskip + #1\nobreak\hfil\nobreak\hbox to\@pnumwidth{\hss#2}\par + \penalty\@highpenalty + \endgroup + \fi} +%</book|report> +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\l@section} +% +% 節の目次です。 +% +% \begin{macrocode} +%<*!book&!report> +\newcommand*{\l@section}[2]{% + \ifnum \c@tocdepth >\z@ + \addpenalty{\@secpenalty}% + \addvspace{1.0em \@plus\p@?}% + \begingroup + \parindent\z@ +% \rightskip\@pnumwidth + \rightskip\@tocrmarg + \parfillskip-\rightskip + \leavevmode\headfont +% % \setlength\@lnumwidth{4\jsZw}% 元1.5em [2003-03-02] + \setlength\@lnumwidth{\jsc@tocl@width}\advance\@lnumwidth 2\jsZw + \advance\leftskip\@lnumwidth \hskip-\leftskip + #1\nobreak\hfil\nobreak\hbox to\@pnumwidth{\hss#2}\par + \endgroup + \fi} +%</!book&!report> +% \end{macrocode} +% +% インデントと幅はそれぞれ1.5em,2.3emでしたが, +% 1zw,3.683zwに変えました。 +% \begin{macrocode} +%<book|report> % \newcommand*{\l@section}{\@dottedtocline{1}{1\jsZw}{3.683\jsZw}} +% \end{macrocode} +% +% [2013-12-30] 上のインデントは |\jsc@tocl@width| から決めるように +% しました。(by ts) +% +% \end{macro} +% +% \begin{macro}{\l@subsection} +% \begin{macro}{\l@subsubsection} +% \begin{macro}{\l@paragraph} +% \begin{macro}{\l@subparagraph} +% +% さらに下位レベルの目次項目の体裁です。 +% あまり使ったことがありませんので,要修正かもしれません。 +% +% [2013-12-30] ここも |\jsc@tocl@width| から決めるように +% してみました。(by ts) +% +% \begin{macrocode} +%<*!book&!report> +% \newcommand*{\l@subsection} {\@dottedtocline{2}{1.5em}{2.3em}} +% \newcommand*{\l@subsubsection}{\@dottedtocline{3}{3.8em}{3.2em}} +% \newcommand*{\l@paragraph} {\@dottedtocline{4}{7.0em}{4.1em}} +% \newcommand*{\l@subparagraph} {\@dottedtocline{5}{10em}{5em}} +% +% \newcommand*{\l@subsection} {\@dottedtocline{2}{1zw}{3zw}} +% \newcommand*{\l@subsubsection}{\@dottedtocline{3}{2\jsZw}{3\jsZw}} +% \newcommand*{\l@paragraph} {\@dottedtocline{4}{3\jsZw}{3\jsZw}} +% \newcommand*{\l@subparagraph} {\@dottedtocline{5}{4\jsZw}{3\jsZw}} +% +\newcommand*{\l@subsection}{% + \@tempdima\jsc@tocl@width \advance\@tempdima -1\jsZw + \@dottedtocline{2}{\@tempdima}{3\jsZw}} +\newcommand*{\l@subsubsection}{% + \@tempdima\jsc@tocl@width \advance\@tempdima 0\jsZw + \@dottedtocline{3}{\@tempdima}{4\jsZw}} +\newcommand*{\l@paragraph}{% + \@tempdima\jsc@tocl@width \advance\@tempdima 1\jsZw + \@dottedtocline{4}{\@tempdima}{5\jsZw}} +\newcommand*{\l@subparagraph}{% + \@tempdima\jsc@tocl@width \advance\@tempdima 2\jsZw + \@dottedtocline{5}{\@tempdima}{6\jsZw}} +%</!book&!report> +%<*book|report> +% \newcommand*{\l@subsection} {\@dottedtocline{2}{3.8em}{3.2em}} +% \newcommand*{\l@subsubsection}{\@dottedtocline{3}{7.0em}{4.1em}} +% \newcommand*{\l@paragraph} {\@dottedtocline{4}{10em}{5em}} +% \newcommand*{\l@subparagraph} {\@dottedtocline{5}{12em}{6em}} +\newcommand*{\l@section}{% + \@tempdima\jsc@tocl@width \advance\@tempdima -1\jsZw + \@dottedtocline{1}{\@tempdima}{3.683\jsZw}} +\newcommand*{\l@subsection}{% + \@tempdima\jsc@tocl@width \advance\@tempdima 2.683\jsZw + \@dottedtocline{2}{\@tempdima}{3.5\jsZw}} +\newcommand*{\l@subsubsection}{% + \@tempdima\jsc@tocl@width \advance\@tempdima 6.183\jsZw + \@dottedtocline{3}{\@tempdima}{4.5\jsZw}} +\newcommand*{\l@paragraph}{% + \@tempdima\jsc@tocl@width \advance\@tempdima 10.683\jsZw + \@dottedtocline{4}{\@tempdima}{5.5\jsZw}} +\newcommand*{\l@subparagraph}{% + \@tempdima\jsc@tocl@width \advance\@tempdima 16.183\jsZw + \@dottedtocline{5}{\@tempdima}{6.5\jsZw}} +%</book|report> +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\numberline} +% \begin{macro}{\@lnumwidth} +% +% 欧文版\LaTeX では |\numberline{...}| は幅 |\@tempdima| の箱に左詰め +% で出力する命令ですが, +% アスキー版では |\@tempdima| の代わりに |\@lnumwidth| という変数 +% で幅を決めるように再定義しています。 +% 後続文字が全角か半角かでスペースが変わらないように |\hspace| +% を入れておきました。 +% +% \begin{macrocode} +\newdimen\@lnumwidth +\def\numberline#1{\hb@xt@\@lnumwidth{#1\hfil}\hspace{0pt}} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\@dottedtocline} +% \begin{macro}{\jsTocLine} +% +% \LaTeX 本体(\texttt{ltsect.dtx} 参照)での定義と同じですが, +% |\@tempdima| を |\@lnumwidth| に変えています。 +% +% [2018-06-23] デフォルトでは\jsTocLine のようにベースラインになります。\par +% これを変更可能にするため,|\jsTocLine| というマクロに切り出しました。 +% 例えば,仮想ボディの中央 +% {\renewcommand{\jsTocLine}{\leaders \hbox {\hss ・\hss}\hfill}\jsTocLine} +% に変更したい場合は +%\begin{verbatim} +% \renewcommand{\jsTocLine}{\leaders \hbox {\hss ・\hss}\hfill} +%\end{verbatim} +% とします。 +% +% \begin{macrocode} +\def\jsTocLine{\leaders\hbox{% + $\m@th \mkern \@dotsep mu\hbox{.}\mkern \@dotsep mu$}\hfill} +\def\@dottedtocline#1#2#3#4#5{\ifnum #1>\c@tocdepth \else + \vskip \z@ \@plus.2\p@? + {\leftskip #2\relax \rightskip \@tocrmarg \parfillskip -\rightskip + \parindent #2\relax\@afterindenttrue + \interlinepenalty\@M + \leavevmode + \@lnumwidth #3\relax + \advance\leftskip \@lnumwidth \null\nobreak\hskip -\leftskip + {#4}\nobreak + \jsTocLine \nobreak\hb@xt@\@pnumwidth{% + \hfil\normalfont \normalcolor #5}\par}\fi} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \paragraph{図目次と表目次} +% +% \begin{macro}{\listoffigures} +% +% 図目次を出力します。 +% +% \begin{macrocode} +\newcommand{\listoffigures}{% +%<*book|report> + \if@twocolumn\@restonecoltrue\onecolumn + \else\@restonecolfalse\fi + \chapter*{\listfigurename}% + \@mkboth{\listfigurename}{}% +%</book|report> +%<*!book&!report> + \section*{\listfigurename}% + \@mkboth{\listfigurename}{\listfigurename}% +%</!book&!report> + \@starttoc{lof}% +%<book|report> \if@restonecol\twocolumn\fi +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\l@figure} +% +% 図目次の項目を出力します。 +% +% \begin{macrocode} +\newcommand*{\l@figure}{\@dottedtocline{1}{1\jsZw}{3.683\jsZw}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\listoftables} +% +% 表目次を出力します。 +% +% \begin{macrocode} +\newcommand{\listoftables}{% +%<*book|report> + \if@twocolumn\@restonecoltrue\onecolumn + \else\@restonecolfalse\fi + \chapter*{\listtablename}% + \@mkboth{\listtablename}{}% +%</book|report> +%<*!book&!report> + \section*{\listtablename}% + \@mkboth{\listtablename}{\listtablename}% +%</!book&!report> + \@starttoc{lot}% +%<book|report> \if@restonecol\twocolumn\fi +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\l@table} +% +% 表目次は図目次と同じです。 +% +% \begin{macrocode} +\let\l@table\l@figure +% \end{macrocode} +% \end{macro} +% +% \subsection{参考文献} +% +% \begin{macro}{\bibindent} +% +% オープンスタイルの参考文献で使うインデント幅です。 +% 元は 1.5em でした。 +% +% \begin{macrocode} +\newdimen\bibindent +\setlength\bibindent{2\jsZw} +% \end{macrocode} +% \end{macro} +% +% \begin{environment}{thebibliography} +% +% 参考文献リストを出力します。 +% +% [2016-07-16] \LaTeX~2.09で使われていたフォントコマンドの警告を, +% 文献スタイル(.bst)ではよく |\bf| がいまだに用いられることが多いため, +% |thebibliography| 環境内では例外的に出さないようにしました。 +% +% \begin{macrocode} +\newenvironment{thebibliography}[1]{% + \@jsc@warnoldfontcmdexceptiontrue + \global\let\presectionname\relax + \global\let\postsectionname\relax +%<article|slide> \section*{\refname}\@mkboth{\refname}{\refname}% +%<*kiyou> + \vspace{1.5\baselineskip} + \subsubsection*{\refname}\@mkboth{\refname}{\refname}% + \vspace{0.5\baselineskip} +%</kiyou> +%<book|report> \chapter*{\bibname}\@mkboth{\bibname}{}% +%<book|report> \addcontentsline{toc}{chapter}{\bibname}% + \list{\@biblabel{\@arabic\c@enumiv}}% + {\settowidth\labelwidth{\@biblabel{#1}}% + \leftmargin\labelwidth + \advance\leftmargin\labelsep + \@openbib@code + \usecounter{enumiv}% + \let\p@enumiv\@empty + \renewcommand\theenumiv{\@arabic\c@enumiv}}% +%<kiyou> \small + \sloppy + \clubpenalty4000 + \@clubpenalty\clubpenalty + \widowpenalty4000% + \sfcode`\.\@m} + {\def\@noitemerr + {\@latex@warning{Empty `thebibliography' environment}}% + \endlist} +% \end{macrocode} +% \end{environment} +% +% \begin{macro}{\newblock} +% +% |\newblock| はデフォルトでは小さなスペースを生成します。 +% +% \begin{macrocode} +\newcommand{\newblock}{\hskip .11em\@plus.33em\@minus.07em} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@openbib@code} +% +% |\@openbib@code| はデフォルトでは何もしません。 +% この定義は |openbib| オプションによって変更されます。 +% +% \begin{macrocode} +\let\@openbib@code\@empty +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@biblabel} +% +% |\bibitem[...]| のラベルを作ります。 +% \texttt{ltbibl.dtx} の定義の半角 [] を全角[]に変え, +% 余分なスペースが入らないように |\jsInhibitGlue| ではさみました。 +% とりあえずコメントアウトしておきますので,必要に応じて生かしてください。 +% +% \begin{macrocode} +% \def\@biblabel#1{\jsInhibitGlue [#1]\jsInhibitGlue} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\cite} +% \begin{macro}{\@cite} +% \begin{macro}{\@citex} +% +% 文献の番号を出力する部分は \texttt{ltbibl.dtx} で定義されていますが, +% コンマとかっこを和文フォントにするには次のようにします。 +% とりあえずコメントアウトしておきましたので,必要に応じて生かしてください。 +% かっこの前後に入るグルーを |\jsInhibitGlue| で取っていますので, +% オリジナル同様,\verb*+Knuth~\cite{knu} + のように半角空白 +% で囲んでください。 +% +% \begin{macrocode} +% \def\@citex[#1]#2{\leavevmode +% \let\@citea\@empty +% \@cite{\@for\@citeb:=#2\do +% {\@citea\def\@citea{,\inhibitglue\penalty\@m\ }% +% \edef\@citeb{\expandafter\@firstofone\@citeb\@empty}% +% \if@filesw\immediate\write\@auxout{\string\citation{\@citeb}}\fi +% \@ifundefined{b@\@citeb}{\mbox{\normalfont\bfseries ?}% +% \G@refundefinedtrue +% \@latex@warning +% {Citation `\@citeb' on page \thepage \space undefined}}% +% {\@cite@ofmt{\csname b@\@citeb\endcsname}}}}{#1}} +% \def\@cite#1#2{\jsInhibitGlue [{#1\if@tempswa ,#2\fi}]\jsInhibitGlue} +% \end{macrocode} +% +% 引用番号を上ツキの 1)のようなスタイルにするには次のようにします。 +% |\cite| の先頭に |\unskip| を付けて先行のスペース(\verb|~| も) +% を帳消しにしています。 +% +% \begin{macrocode} +% \DeclareRobustCommand\cite{\unskip +% \@ifnextchar [{\@tempswatrue\@citex}{\@tempswafalse\@citex[]}} +% \def\@cite#1#2{$^{\hbox{\scriptsize{#1\if@tempswa +% ,\jsInhibitGlue\ #2\fi})}}$} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \subsection{索引} +% +% \begin{environment}{theindex} +% +% 2\zrWDash3段組の索引を作成します。 +% 最後が偶数ページのときにマージンがずれる現象を直しました(Thanks: 藤村さん)。 +% +% \begin{macrocode} +\newenvironment{theindex}{% 索引を3段組で出力する環境 + \if@twocolumn + \onecolumn\@restonecolfalse + \else + \clearpage\@restonecoltrue + \fi + \columnseprule.4pt \columnsep 2\jsZw + \ifx\multicols\@undefined +%<book|report> \twocolumn[\@makeschapterhead{\indexname}% +%<book|report> \addcontentsline{toc}{chapter}{\indexname}]% +%<!book&!report> \def\presectionname{}\def\postsectionname{}% +%<!book&!report> \twocolumn[\section*{\indexname}]% + \else + \ifdim\textwidth<\fullwidth + \setlength{\evensidemargin}{\oddsidemargin} + \setlength{\textwidth}{\fullwidth} + \setlength{\linewidth}{\fullwidth} +%<book|report> \begin{multicols}{3}[\chapter*{\indexname}% +%<book|report> \addcontentsline{toc}{chapter}{\indexname}]% +%<!book&!report> \def\presectionname{}\def\postsectionname{}% +%<!book&!report> \begin{multicols}{3}[\section*{\indexname}]% + \else +%<book|report> \begin{multicols}{2}[\chapter*{\indexname}% +%<book|report> \addcontentsline{toc}{chapter}{\indexname}]% +%<!book&!report> \def\presectionname{}\def\postsectionname{}% +%<!book&!report> \begin{multicols}{2}[\section*{\indexname}]% + \fi + \fi +%<book|report> \@mkboth{\indexname}{}% +%<!book&!report> \@mkboth{\indexname}{\indexname}% + \plainifnotempty % \thispagestyle{plain} + \parindent\z@ + \parskip\z@ \@plus .3\p@?\relax + \let\item\@idxitem + \raggedright + \footnotesize\narrowbaselines + }{ + \ifx\multicols\@undefined + \if@restonecol\onecolumn\fi + \else + \end{multicols} + \fi + \clearpage + } +% \end{macrocode} +% \end{environment} +% +% \begin{macro}{\@idxitem} +% \begin{macro}{\subitem} +% \begin{macro}{\subsubitem} +% +% 索引項目の字下げ幅です。|\@idxitem| は |\item| の項目の字下げ幅です。 +% +% \begin{macrocode} +\newcommand{\@idxitem}{\par\hangindent 4\jsZw} % 元 40pt +\newcommand{\subitem}{\@idxitem \hspace*{2\jsZw}} % 元 20pt +\newcommand{\subsubitem}{\@idxitem \hspace*{3\jsZw}} % 元 30pt +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\indexspace} +% +% 索引で先頭文字ごとのブロックの間に入るスペースです。 +% +% \begin{macrocode} +\newcommand{\indexspace}{\par \vskip 10\p@? \@plus5\p@? \@minus3\p@?\relax} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\seename} +% \begin{macro}{\alsoname} +% +% 索引の |\see|,|\seealso| コマンドで出力されるものです。 +% デフォルトはそれぞれ \emph{see},\emph{see also} という英語ですが, +% ここではとりあえず両方とも「→」に変えました。 +% $\Rightarrow$(|$\Rightarrow$|)などでもいいでしょう。 +% +% \begin{macrocode} +\newcommand\seename{\if@english see\else →\fi} +\newcommand\alsoname{\if@english see also\else →\fi} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \subsection{脚注} +% +% \begin{macro}{\footnote} +% \begin{macro}{\footnotemark} +% +% 和文の句読点・閉じかっこ類の直後で用いた際に +% 余分なアキが入るのを防ぐため, +% |\inhibitglue| を入れることにします。 +% p\LaTeX の日付が2016/09/03より新しい場合は,このパッチが不要なのであてません。 +% +% \begin{ZRnote} +% パッチの必要性は「|\pltx@foot@penalty| が未定義か」で行う。 +% |\inhibitglue| の代わりに |\jsInhibitGlue| を使う。 +% \end{ZRnote} +% \begin{macrocode} +\ifx\pltx@foot@penalty\@undefined + \let\footnotes@ve=\footnote + \def\footnote{\jsInhibitGlue\footnotes@ve} + \let\footnotemarks@ve=\footnotemark + \def\footnotemark{\jsInhibitGlue\footnotemarks@ve} +\fi +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\@makefnmark} +% +% 脚注番号を付ける命令です。 +% ここでは脚注番号の前に記号 $*$ を付けています。 +% 「注1」の形式にするには |\textasteriskcentered| +% を |注\kern0.1em| にしてください。 +% |\@xfootnotenext| と合わせて, +% もし脚注番号が空なら記号も出力しないようにしてあります。 +% +% [2002-04-09] インプリメントの仕方を変えたため消しました。 +% +% [2013-04-23] 新しい\pTeX では脚注番号のまわりにスペースが入りすぎることを防ぐため, +% 北川さんのパッチ [qa:57090] を取り込みました。 +% +% [2013-05-14] plcore.ltx に倣った形に書き直しました(Thanks: 北川さん)。 +% +% [2016-07-11] コミュニティ版p\LaTeX の変更に追随しました(Thanks: 角藤さん)。 +% p\LaTeX の日付が2016/04/17より新しい場合は,このパッチが不要なのであてません。 +% +% \begin{ZRnote} +% {\pTeX}依存のコードなので、minimal和文ドライバ実装に移動。 +% \end{ZRnote} +% \end{macro} +% +% \begin{macro}{\thefootnote} +% +% 脚注番号に * 印が付くようにしました。 +% ただし,番号がゼロのときは * 印も脚注番号も付きません。 +% +% [2003-08-15] |\textasteriskcentered| ではフォントによって +% 下がりすぎるので変更しました。 +% +% [2016-10-08] TODO: 脚注番号が |newtxtext| や |newpxtext| の使用時に +% おかしくなってしまいます。これらのパッケージは内部で |\thefootnote| を +% 再定義していますので,気になる場合はパッケージを読み込むときに +% \texttt{defaultsups} オプションを付けてください(qa:57284, qa:57287)。 +% +% \begin{macrocode} +\def\thefootnote{\ifnum\c@footnote>\z@\leavevmode\lower.5ex\hbox{*}\@arabic\c@footnote\fi} +% \end{macrocode} +% +% 「注1」の形式にするには次のようにしてください。 +% +% \begin{macrocode} +% \def\thefootnote{\ifnum\c@footnote>\z@ 注\kern0.1\jsZw\@arabic\c@footnote\fi} +% \end{macrocode} +% +% \end{macro} +% +% \begin{macro}{\footnoterule} +% +% 本文と脚注の間の罫線です。 +% +% \begin{macrocode} +\renewcommand{\footnoterule}{% + \kern-2.6\p@? \kern-.4\p@ + \hrule width .4\columnwidth + \kern 2.6\p@?} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\c@footnote} +% +% 脚注番号は章ごとにリセットされます。 +% +% \begin{macrocode} +%<book|report>\@addtoreset{footnote}{chapter} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@footnotetext} +% +% 脚注で |\verb| が使えるように改変してあります。 +% Jeremy Gibbons, \textit{\TeX\ and TUG NEWS}, +% Vol.~2, No.~4 (1993), p.~9) +% +% [2016-08-25] コミュニティ版\pLaTeX の「閉じ括弧類の直後に +% |\footnotetext| が続く場合に改行が起きることがある問題に対処」 +% と同等のコードを追加しました。 +% +% [2016-09-08] コミュニティ版\pLaTeX のバグ修正に追随しました。 +% +% [2016-11-29] 古い\pLaTeX で使用された場合を考慮してコードを改良。 +% ^^A 脚注直後に改行を可能にするために|\null|を入れる場合, +% ^^A 同時にペナルティも考慮しなければ誤った改行が起きる可能性がある。 +% ^^A このため,|\ifhmode\null\fi|は +% ^^A |\ifx\pltx@foot@penalty\@undefined\else ... \fi| +% ^^A 条件の内側に置いておくのが安全。 +% +% [2018-03-11] |\next|などいくつかの内部命令を |\jsc@...| 付きの +% ユニークな名前にしました。 +% \begin{macrocode} +\long\def\@footnotetext{% + \insert\footins\bgroup + \normalfont\footnotesize + \interlinepenalty\interfootnotelinepenalty + \splittopskip\footnotesep + \splitmaxdepth \dp\strutbox \floatingpenalty \@MM + \hsize\columnwidth \@parboxrestore + \protected@edef\@currentlabel{% + \csname p@footnote\endcsname\@thefnmark + }% + \color@begingroup + \@makefntext{% + \rule\z@\footnotesep\ignorespaces}% + \futurelet\jsc@next\jsc@fo@t} +\def\jsc@fo@t{\ifcat\bgroup\noexpand\jsc@next \let\jsc@next\jsc@f@@t + \else \let\jsc@next\jsc@f@t\fi \jsc@next} +\def\jsc@f@@t{\bgroup\aftergroup\jsc@@foot\let\jsc@next} +\def\jsc@f@t#1{#1\jsc@@foot} +\def\jsc@@foot{\@finalstrut\strutbox\color@endgroup\egroup + \ifx\pltx@foot@penalty\@undefined\else + \ifhmode\null\fi + \ifnum\pltx@foot@penalty=\z@\else + \penalty\pltx@foot@penalty + \pltx@foot@penalty\z@ + \fi + \fi} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@makefntext} +% +% 実際に脚注を出力する命令です。 +% |\@makefnmark| は脚注の番号を出力する命令です。 +% ここでは脚注が左端から一定距離に来るようにしてあります。 +% +% \begin{macrocode} +\newcommand\@makefntext[1]{% + \advance\leftskip 3\jsZw + \parindent 1\jsZw + \noindent + \llap{\@makefnmark\hskip0.3\jsZw}#1} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@xfootnotenext} +% +% 最初の |\footnotetext{...}| は番号が付きません。 +% 著者の所属などを脚注の欄に書くときに便利です。 +% +% すでに |\footnote| を使った後なら |\footnotetext[0]{...}| +% とすれば番号を付けない脚注になります。 +% ただし,この場合は脚注番号がリセットされてしまうので, +% 工夫が必要です。 +% +% [2002-04-09] インプリメントの仕方を変えたため消しました。 +% +% \begin{macrocode} +% \def\@xfootnotenext[#1]{% +% \begingroup +% \ifnum#1>\z@ +% \csname c@\@mpfn\endcsname #1\relax +% \unrestored@protected@xdef\@thefnmark{\thempfn}% +% \else +% \unrestored@protected@xdef\@thefnmark{}% +% \fi +% \endgroup +% \@footnotetext} +% \end{macrocode} +% \end{macro} +% +% \begin{ZRnote} +% ここまでのコードは JS クラスを踏襲する。 +% \end{ZRnote} +% +% \section{段落の頭へのグルー挿入禁止} +% +% 段落頭のかぎかっこなどを見かけ1字半下げから全角1字下げに直します。 +% +% \begin{ZRnote} +% \begin{macro}{\jsInhibitGlueAtParTop} +% 「段落頭の括弧の空き補正」の処理を |\jsInhibitGlueAtParTop| +% という命令にして、これを再定義可能にした。 +% \begin{macrocode} +\let\jsInhibitGlueAtParTop\@empty +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\everyparhook} +% 全ての段落の冒頭で実行されるフック。 +% これの初期値を先述の |\jsInhibitGlueAtParTop| とする。 +% \begin{macrocode} +\def\everyparhook{\jsInhibitGlueAtParTop} +\ifnum\bxjs@everyparhook=\bxjs@everyparhook@compat +\g@addto@macro\bxjs@begin@document@hook{\everypar{\everyparhook}} +\fi +% \end{macrocode} +% \end{macro} +% \end{ZRnote} +% +% [2016-07-18] |\inhibitglue| の発行対象を |\inhibitxspcode| が2に +% 設定されているものすべてに拡大しました。 +% +% [2016-12-01] すぐ上の変更で |\@tempa| を使っていたのがよくなかった +% ので,プレフィックスを付けて |\jsc@tempa| にしました(forum:2085)。 +% +% [2017-02-13] |\jsc@tempa| は実はテンポラリではなく「この処理専用の +% ユニーク制御綴」である必要があります。間違って別の箇所で使う危険性が +% 高いので,専用の命令 |\jsc@ig@temp| に置き換えました(Issue \#54)。 +% +% \begin{ZRnote} +% 次の |\@inhibitglue| はJSクラスでの |\jsInhibitGlueAtParTop| の +% 実装である。 +% エンジンが |(u)platex| の場合はこれを採用する。 +% \end{ZRnote} +% \begin{macrocode} +\ifx j\jsEngine +\def\@inhibitglue{% + \futurelet\@let@token\@@inhibitglue} +\begingroup +\let\GDEF=\gdef +\let\CATCODE=\catcode +\let\ENDGROUP=\endgroup +\CATCODE`k=12 +\CATCODE`a=12 +\CATCODE`n=12 +\CATCODE`j=12 +\CATCODE`i=12 +\CATCODE`c=12 +\CATCODE`h=12 +\CATCODE`r=12 +\CATCODE`t=12 +\CATCODE`e=12 +\GDEF\KANJI@CHARACTER{kanji character } +\ENDGROUP +\def\@@inhibitglue{% + \expandafter\expandafter\expandafter\jsc@inhibitglue\expandafter\meaning\expandafter\@let@token\KANJI@CHARACTER\relax\jsc@end} +\expandafter\def\expandafter\jsc@inhibitglue\expandafter#\expandafter1\KANJI@CHARACTER#2#3\jsc@end{% + \def\jsc@ig@temp{#1}% + \ifx\jsc@ig@temp\@empty + \ifnum\the\inhibitxspcode`#2=2\relax + \inhibitglue + \fi + \fi} +\fi +% \end{macrocode} +% +% \begin{ZRnote} +% ここからしばらく +% 「(本物の)|\everypar| に追加した |\everyparhook| を保持する」 +% ためのパッチ処理が続く。 +% これは、|everyparhook=compat| の場合にのみ実行する。 +% \end{ZRnote} +% \begin{macrocode} +\ifnum\bxjs@everyparhook=\bxjs@everyparhook@compat +% \end{macrocode} +% +% これだけではいけないようです。あちこちに |\everypar| を初期化するコマンドが +% 隠されていました。 +% +% まず,環境の直後の段落です。 +% +% [2016-11-19] ltlists.dtx 2015/05/10 v1.0tの変更に追随して |\clubpenalty| の +% リセットを追加しました。 +% +% \begin{macrocode} +\def\@doendpe{% + \@endpetrue + \def\par{% + \@restorepar\clubpenalty\@clubpenalty\everypar{\everyparhook}\par\@endpefalse}% + \everypar{{\setbox\z@\lastbox}\everypar{\everyparhook}\@endpefalse\everyparhook}} +% \end{macrocode} +% +% [2017-08-31] minipage環境にも対策します。 +% +% \begin{macrocode} +\def\@setminipage{% + \@minipagetrue + \everypar{\@minipagefalse\everypar{\everyparhook}}% +} +% \end{macrocode} +% +% |\item| 命令の直後です。 +% +% \begin{macrocode} +\def\@item[#1]{% + \if@noparitem + \@donoparitem + \else + \if@inlabel + \indent \par + \fi + \ifhmode + \unskip\unskip \par + \fi + \if@newlist + \if@nobreak + \@nbitem + \else + \addpenalty\@beginparpenalty + \addvspace\@topsep + \addvspace{-\parskip}% + \fi + \else + \addpenalty\@itempenalty + \addvspace\itemsep + \fi + \global\@inlabeltrue + \fi + \everypar{% + \@minipagefalse + \global\@newlistfalse + \if@inlabel + \global\@inlabelfalse + {\setbox\z@\lastbox + \ifvoid\z@ + \kern-\itemindent + \fi}% + \box\@labels + \penalty\z@ + \fi + \if@nobreak + \@nobreakfalse + \clubpenalty \@M + \else + \clubpenalty \@clubpenalty + \everypar{\everyparhook}% + \fi + \everyparhook}% + \if@noitemarg + \@noitemargfalse + \if@nmbrlist + \refstepcounter\@listctr + \fi + \fi + \sbox\@tempboxa{\makelabel{#1}}% + \global\setbox\@labels\hbox{% + \unhbox\@labels + \hskip \itemindent + \hskip -\labelwidth + \hskip -\labelsep + \ifdim \wd\@tempboxa >\labelwidth + \box\@tempboxa + \else + \hbox to\labelwidth {\unhbox\@tempboxa}% + \fi + \hskip \labelsep}% + \ignorespaces} +% \end{macrocode} +% +% 二つ挿入した |\everyparhook| のうち後者が |\section| 類の直後に2回, +% 前者が3回目以降に実行されます。 +% +% \begin{macrocode} +\def\@afterheading{% + \@nobreaktrue + \everypar{% + \if@nobreak + \@nobreakfalse + \clubpenalty \@M + \if@afterindent \else + {\setbox\z@\lastbox}% + \fi + \else + \clubpenalty \@clubpenalty + \everypar{\everyparhook}% + \fi\everyparhook}} +% \end{macrocode} +% +% \begin{ZRnote} +% 「|\everyparhook| 用のパッチ処理」はここまで。 +% \end{ZRnote} +% \begin{macrocode} +\fi +% \end{macrocode} +% +% |\@gnewline| についてはちょっと複雑な心境です。 +% もともとのp\LaTeXe は段落の頭にグルーが入る方で統一されていました。 +% しかし |\\| の直後にはグルーが入らず,不統一でした。 +% そこで |\\| の直後にもグルーを入れるように直していただいた経緯があります。 +% しかし,ここでは逆にグルーを入れない方で統一したいので, +% また元に戻してしまいました。 +% +% しかし単に戻すだけでも駄目みたいなので,ここでも最後にグルーを消しておきます。 +% +% \begin{ZRnote} +% \Note |luatexja| を読みこんだ場合に lltjcore.sty によって上書きされる +% のを防ぐため遅延させる。 +% \end{ZRnote} +% \begin{macrocode} +\ifnum\bxjs@everyparhook=\bxjs@everyparhook@none\else +\AtEndOfPackage{% +\def\@gnewline #1{% + \ifvmode + \@nolnerr + \else + \unskip \reserved@e {\reserved@f#1}\nobreak \hfil \break \null + \jsInhibitGlue \ignorespaces + \fi} +} +\fi +% \end{macrocode} +% +% \section{いろいろなロゴ} +% +% \LaTeX 関連のロゴを作り直します。 +% +% [2016-07-14] ロゴの定義は\texttt{jslogo}パッケージに移転しました。 +% 後方互換のため,\texttt{jsclasses}ではデフォルトでこれを読み込みます。 +% \texttt{nojslogo}オプションが指定されている場合は読み込みません。 +% +% \begin{ZRnote} +% BXJSクラスでも |jslogo| オプション指定の場合に jslogo パッケージを +% 読み込むようにした。 +% ただしJSクラスと異なり、既定では読み込まない。 +% \Note |\小|、|\上小| の制御綴は定義しない。 +% \end{ZRnote} +% \begin{macrocode} +\if@jslogo + \IfFileExists{jslogo.sty}{% + \RequirePackage{jslogo}% + }{% + \ClassWarningNoLine\bxjs@clsname + {The package 'jslogo' is not installed.\MessageBreak + It is included in the recent release of\MessageBreak + the 'jsclasses' bundle} + } +\fi +% \end{macrocode} +% +% \section{\texttt{amsmath} との衝突の回避} +% +% \begin{macro}{\ltx@ifnextchar} +% \begin{macro}{\ProvidesFile} +% +% \texttt{amsmath} パッケージでは行列中で |\@ifnextchar| +% を再定義していますが,これが\LaTeX の |\ProvidesFile| +% で悪さをする例がFTeXで報告されています。 +% これを避けるためのtDBさんのフィックスを挿入しておきます。 +% 副作用がありましたらお知らせください。 +% +% この現象については私のTeX掲示板 4273〜,16058〜 で議論がありました。 +% なお,AMS関係のパッケージを読み込む際に psamsfonts オプションを +% 与えても回避できます(Thanks: しっぽ愛好家さん)。 +% +% [2016-11-19] 本家の ltclass.dtx 2004/01/28 v1.1g で修正されているので +% コメントアウトしました。 +% +% \begin{macrocode} +%\let\ltx@ifnextchar\@ifnextchar +%\def\ProvidesFile#1{% +% \begingroup +% \catcode`\ 10 % +% \ifnum \endlinechar<256 % +% \ifnum \endlinechar>\m@ne +% \catcode\endlinechar 10 % +% \fi +% \fi +% \@makeother\/% +% \@makeother\&% +% \ltx@ifnextchar[{\@providesfile{#1}}{\@providesfile{#1}[]}} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \section{初期設定} +% +% \paragraph{いろいろな語} +% +% \begin{macro}{\prepartname} +% \begin{macro}{\postpartname} +% \begin{macro}{\prechaptername} +% \begin{macro}{\postchaptername} +% \begin{macro}{\presectionname} +% \begin{macro}{\postsectionname} +% \begin{macrocode} +\newcommand{\prepartname}{\if@english Part~\else 第\fi} +\newcommand{\postpartname}{\if@english\else 部\fi} +%<book|report>\newcommand{\prechaptername}{\if@english Chapter~\else 第\fi} +%<book|report>\newcommand{\postchaptername}{\if@english\else 章\fi} +\newcommand{\presectionname}{}% 第 +\newcommand{\postsectionname}{}% 節 +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\contentsname} +% \begin{macro}{\listfigurename} +% \begin{macro}{\listtablename} +% \begin{macrocode} +\newcommand{\contentsname}{\if@english Contents\else 目次\fi} +\newcommand{\listfigurename}{\if@english List of Figures\else 図目次\fi} +\newcommand{\listtablename}{\if@english List of Tables\else 表目次\fi} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\refname} +% \begin{macro}{\bibname} +% \begin{macro}{\indexname} +% \begin{macrocode} +\newcommand{\refname}{\if@english References\else 参考文献\fi} +\newcommand{\bibname}{\if@english Bibliography\else 参考文献\fi} +\newcommand{\indexname}{\if@english Index\else 索引\fi} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\figurename} +% \begin{macro}{\tablename} +% \begin{macrocode} +%<!jspf>\newcommand{\figurename}{\if@english Fig.~\else 図\fi} +%<jspf>\newcommand{\figurename}{Fig.~} +%<!jspf>\newcommand{\tablename}{\if@english Table~\else 表\fi} +%<jspf>\newcommand{\tablename}{Table~} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\appendixname} +% \begin{macro}{\abstractname} +% \begin{macrocode} +% \newcommand{\appendixname}{\if@english Appendix~\else 付録\fi} +\newcommand{\appendixname}{\if@english \else 付録\fi} +%<!book>\newcommand{\abstractname}{\if@english Abstract\else 概要\fi} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \paragraph{今日の日付} +% +% \LaTeX で処理した日付を出力します。 +% |jarticle| などと違って,標準を西暦にし,余分な空白が入らないように改良しました。 +% 和暦にするには |\和暦| と書いてください。 +% +% \begin{ZRnote} +% 環境変数 |SOURCE_DATE_EPOCH|/|FORCE_SOURCE_DATE| が +% 設定されている場合は“今日”が過去・未来の日付になる可能性がある。 +% BXJSクラスでは、和暦の扱いは |bxwareki| パッケージに任せることを +% 原則とする。 +% ただし、|bxwareki| が使えない場合は自前で処理する。 +% \end{ZRnote} +% +% \begin{macrocode} +\@onlypreamble\bxjs@decl@Seireki@cmds +\@tempswafalse +\if p\jsEngine \@tempswatrue \fi +\if n\jsEngine \@tempswatrue \fi +\if@tempswa \expandafter\@firstoftwo +\else \expandafter\@secondoftwo +\fi +{% +% 欧文8bitTeXの場合 +\newif\ifjsSeireki \jsSeirekitrue +\def\bxjs@decl@Seireki@cmds{% + \def\西暦{\jsSeirekitrue}% + \def\和暦{\jsSeirekifalse}} +\def\Seireki{\jsSeirekitrue} +\def\Wareki{\jsSeirekifalse} +\def\bxjs@if@use@seireki{% + \ifjsSeireki \expandafter\@firstoftwo + \else \expandafter\@secondoftwo \fi} +}{% +\newif\if西暦 \西暦true +\def\bxjs@decl@Seireki@cmds{% + \def\西暦{\西暦true}% + \def\和暦{\西暦false}} +\def\Seireki{\西暦true} +\def\Wareki{\西暦false} +\def\bxjs@if@use@seireki{% + \if西暦 \expandafter\@firstoftwo + \else \expandafter\@secondoftwo \fi} +} +\bxjs@decl@Seireki@cmds +\let\bxjs@unxp\@firstofone \let\bxjs@onxp\@firstofone +\bxjs@test@engine\unexpanded{\let\bxjs@unxp\unexpanded + \def\bxjs@onxp{\unexpanded\expandafter}} +\if \if p\jsEngine T\else\if n\jsEngine T\else F\fi\fi T + \def\bxjs@iai{\noexpand~} +\else \def\bxjs@iai{} +\fi +% \end{macrocode} +% +% \begin{macro}{\ifbxjs@bxwareki@avail} +% |bxwareki| パッケージが使用できるか。 +% \begin{macrocode} +\newif\ifbxjs@bxwareki@avail +\IfFileExists{bxwareki.sty}{% + \RequirePackage{bxwareki}[]% + \bxjs@bxwareki@availtrue}{} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\jayear} +% 和暦における年の表記(元号+年数)。 +% \begin{macro}{\heisei} +% 年数を表す整数レジスタで、 +% 元号が「平成」である場合にのみ定義される。 +% \begin{macrocode} +\ifbxjs@bxwareki@avail + \let\jayear\warekiyear + \def\bxjs@tmpa{H}\ifx\bxjs@tmpa\warekigengoinitial + \newcount\heisei \heisei=\value{warekiyear} + \fi +% \end{macrocode} +% |bxwareki| が使えない場合のフォールバック処理。 +% 平成のみに対応する。 +% \begin{macrocode} +\else + \@tempcnta=\the\year\two@digits\month\two@digits\day\relax + \ifnum\@tempcnta<19890108 \else \ifnum\@tempcnta<20190501 + \newcount\heisei \heisei\year \advance\heisei-1988\relax + \fi\fi + \ifnum \ifx\heisei\@undefined\z@\else\heisei\fi >\@ne + \edef\jayear{\bxjs@unxp{平成}\bxjs@iai \the\heisei \bxjs@iai} + \else \edef\jayear{\the\year \bxjs@iai} + \fi +\fi +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\today} +% 英語、西暦、和暦で場合分けをする。 +% \begin{macrocode} +\let\bxjs@next\relax +\ifbxjs@bxwareki@avail + \ifx\warekigengo\@empty\else + \def\bxjs@next{\bxjs@onxp{\warekitoday}} + \fi +\else\ifnum \ifx\heisei\@undefined\z@\else\heisei\fi >\@ne + \def\bxjs@next{% + \bxjs@unxp{平成}\bxjs@iai\number\heisei\bxjs@iai\bxjs@unxp{年}% + \bxjs@iai\number\month\bxjs@iai\bxjs@unxp{月}% + \bxjs@iai\number\day\bxjs@iai\bxjs@unxp{日}} +\fi\fi +\edef\bxjs@today{% + \if@english + \ifcase\month\or + January\or February\or March\or April\or May\or June\or + July\or August\or September\or October\or November\or December\fi + \space\number\day, \number\year + \else + \ifx\bxjs@next\relax \expandafter\@firstoftwo + \else \noexpand\bxjs@if@use@seireki + \fi {% + \number\year\bxjs@iai\bxjs@unxp{年}% + \bxjs@iai\number\month\bxjs@iai\bxjs@unxp{月}% + \bxjs@iai\number\day\bxjs@iai\bxjs@unxp{日}% + }{\bxjs@next}% + \fi} +\let\today\bxjs@today +% \end{macrocode} +% \end{macro} +% +% \begin{ZRnote} +% texjporg版の日本語用Babel定義ファイル(|japanese.ldf|)が読み込まれた +% 場合に影響を受けないようにする。 +% \begin{macrocode} +\g@addto@macro\bxjs@begin@document@hook{% + \ifx\bbl@jpn@Seirekitrue\@undefined\else + \bxjs@decl@Seireki@cmds + \g@addto@macro\datejapanese{% + \let\today\bxjs@today}% + \fi} +% \end{macrocode} +% \end{ZRnote} +% +% \paragraph{ハイフネーション例外} +% +% \TeX のハイフネーションルールの補足です(ペンディング:eng-lish) +% +% \begin{macrocode} +\hyphenation{ado-be post-script ghost-script phe-nom-e-no-log-i-cal man-u-script} +% \end{macrocode} +% +% \paragraph{ページ設定} +% +% ページ設定の初期化です。 +% +% \begin{macrocode} +%<slide>\pagestyle{empty}% +%<article|report>\pagestyle{plain}% +%<book>\pagestyle{headings}% +\pagenumbering{arabic} +\if@twocolumn + \twocolumn + \sloppy + \flushbottom +\else + \onecolumn + \raggedbottom +\fi +%<*slide> + \renewcommand\familydefault{\sfdefault} + \raggedright +%</slide> +% \end{macrocode} +% +% \paragraph{BXJS独自の追加処理 \ZRX} +% \mbox{} +% \begin{ZRnote} +% +% フックを実行する。 +% \begin{macrocode} +\bxjs@pre@jadriver@hook +% \end{macrocode} +% 和文ドライバのファイルを読み込む。 +% \begin{macrocode} +\input{bxjsja-\bxjs@jadriver.def} +% \end{macrocode} +% +% おしまい。 +% \begin{macrocode} +%</cls> +% \end{macrocode} +% +% \end{ZRnote} +% +% 以上です。 +% +%^^A//////////////////////////////////////////////////////// +% \clearpage +% \appendix +%^^A======================================================== +% \section{和文ドライバの仕様 \ZRX} +% +% 次の命令がBXJSクラス本体と和文ドライバの連携のために +% 用意されている。 +% このうち、★印を付けたものは“書込”が許されるものである。 +% +% \begin{itemize} +% \item |\jsDocClass| \zrNote{文字トークンの let}\quad +% 文書クラスの種類を示し、次のいずれかと一致する +% (|\if| で判定可能)。 +% \begin{quote}\begin{tabular}{l@{\qquad}l} +% |\jsArticle| & |bxjsarticle| クラス\\ +% |\jsBook| & |bxjsbook| クラス\\ +% |\jsReport| & |bxjsreport| クラス\\ +% |\jsSlide| & |bxjsslide| クラス +% \end{tabular}\end{quote} +% \item |\jsEngine| \zrNote{文字トークンの let}\quad +% 使用されているエンジンの種別。 +% (|\if| で判定可能)。 +% \begin{quote}\begin{tabular}{l@{\qquad}l} +% |p| & pdf{\TeX}(DVIモードも含む)\\ +% |l| & Lua{\TeX}(〃)\\ +% |x| & {\XeTeX}\\ +% |j| & {\pTeX}または{\upTeX}\\ +% |n| & 以上の何れでもない +% \end{tabular}\end{quote} +% \item |\ifjsWithupTeX| \zrNote{スイッチ}\quad +% 使用されているエンジンが{\upTeX}であるか。 +% \item |\ifjsWitheTeX| \zrNote{スイッチ}\quad +% 使用されているエンジンが{\eTeX}拡張であるか。 +% \item |\ifjsInPdfMode| \zrNote{スイッチ}\quad +% 使用されているエンジンが(pdf{\TeX}・Lua{\TeX}の) +% PDFモードであるか。 +% \item |\jsUnusualPtSize| \zrNote{整数定数を表す文字列のマクロ}\quad +% 基底フォントサイズが |10pt|、|11pt|、|12pt| のいずれでもない +% 場合の |\@ptsize| の値。 +% (|\@ptsize| 自体があまり有用でないと思われる。) +% \item |\jsScale| \zrNote{実数を表す文字列のマクロ}\quad +% 和文フォントサイズの要求サイズに対するスケール。 +% クラスオプション |scale| で指定される。 +% (既定値は0.924715。) +% \item |\jsJaFont| \zrNote{マクロ}\quad +% 和文フォント設定を表す文字列。 +% クラスオプション |jafont| で指定された値。 +% \item |\jsJaParam| \zrNote{マクロ}\quad +% 和文モジュールに渡すパラメタを表す文字列。 +% この値が何を表すかは決まってなくて、各々の和文モジュールが +% 独自に解釈する。 +% クラスオプション |japaram| で指定された値。 +% \item |\jsInhibitGlue| \zrNote{マクロ}\quad +% |\inhibitglue| という命令が定義されていればそれを実行し、 +% そうでなければ何もしない。 +% JSクラスで |\inhibitglue| を用いている箇所は +% 全て |\jsInhibitGlue| に置き換えられている。 +% 従って、|\inhibitglue| は未定義でも動作するが、その実装が +% ある場合はBXJSクラスはそれを活用する。 +% \item |\jsInhibitGlueAtParTop| \zrNote{マクロ}★\quad +% 段落先頭におけるカギ括弧の位置調整を行うマクロ。 +% 全ての段落先頭で呼び出される。 +% \item |\jsZw| \zrNote{内部寸法値}\quad +% 「現在の全角幅」を表す変数。 +% JSクラスでzw単位で設定されている長さパラメタはこの変数を単位と +% して設定されている。 +% この変数の値は実際に用いられる「和文フォント」のメトリックに +% 基づくのではなく、機械的に\ +% |\jsScale| $\times$(フォントサイズ) +% であると定められている +% (フォントサイズ変更の度に再設定される)。 +% 従って、「和文コンポーネント」はこの設定と辻褄が合うように +% 和文フォントサイズを調整する必要がある。 +% ほとんどの場合、和文フォントをNFSSで規定する際に |\jsScale| +% の値をスケール値として与えれば上手くいく。 +% \item |\jsFontSizeChanged| \zrNote{マクロ}\quad +% フォントサイズが変更された時に必ず呼び出されるマクロ。 +% \item |\jsResetDimen| \zrNote{マクロ}★\quad +% 上記 |\jsFontSizeChanged| の中で呼び出される、 +% ユーザ(和文モジュール)用のフック。 +% フォントサイズに依存するパラメタをここで設定することができる。 +% 既定の定義は空。 +% \end{itemize} +% +% 以下で標準で用意されている和文ドライバの実装を示す。 +% \begin{macrocode} +%<*drv> +% \end{macrocode} +% +%^^A======================================================== +% \section{和文ドライバ:minimal \ZRX} +% +% |jadriver| の指定が無い場合に適用されるドライバ。 +% また、standard ドライバはまずこのドライバファイルを +% 読み込んでいる。 +% +% このドライバでは、各エンジンについての必要最低限の処理だけを +% 行っている。 +% 日本語処理のためのパッケージ(xeCJK や Lua{\TeX}-ja 等) +% を自分で読み込んで適切な設定を行うという使用状況を想定している。 +% +% ただし、(u){\pTeX}エンジンについては例外で、和文処理機構の +% 選択の余地がないため、このドライバにおいて、 +% 「JSクラスと同等の指定」を完成させるためのコードを記述する。 +% +%^^A---------------- +% \subsection{補助マクロ} +% +% \begin{macrocode} +%<*minimal> +%% このファイルは日本語文字を含みます +% \end{macrocode} +% +% \begin{macro}{\DeclareJaTextFontCommand} +% 和文書体のための、「余計なこと」をしない |\DeclareTextFontCommand|。 +% \begin{macrocode} +\def\DeclareJaTextFontCommand#1#2{% + \DeclareRobustCommand#1[1]{% + \relax + \ifmmode \expandafter\nfss@text \fi + {#2##1}}% +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\DeclareJaMathFontCommand} +% 和文数式フォントが無効な場合に、それをエミュレートするもの。 +% \begin{macrocode} +\def\DeclareJaMathFontCommand#1#2{% + \DeclareRobustCommand#1[1]{% + \relax + \ifmmode\else \non@alpherr{#1\space}\fi + \nfss@text{\fontfamily\familydefault + \fontseries{m}\fontshape{n}\selectfont\relax + #2##1}% + }% +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\bxjs@if@sf@default} +% |\familydefault| の定義が“|\sfdefault|”である場合に +% 引数のコードを実行する。 +% \begin{macrocode} +\long\def\bxjs@@CSsfdefault{\sfdefault}% +\@onlypreamble\bxjs@if@sf@default +\def\bxjs@if@sf@default#1{% + \ifx\familydefault\bxjs@@CSsfdefault#1\fi + \g@addto@macro\bxjs@begin@document@hook{% + \ifx\familydefault\bxjs@@CSsfdefault#1\fi}% +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\jsInverseScale} +% |\jsScale| の逆数。 +% \Note |\CS=\jsInverseScale\CS| は |\bxjs@invscale\CS\jsScale| +% よりも精度が劣るが処理が軽い。 +% \begin{macrocode} +\@tempdima\p@ \bxjs@invscale\@tempdima\jsScale +\edef\jsInverseScale{\strip@pt\@tempdima} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\jsLetHeadChar} +% |\jsLetHeadChar\CS{|\Meta{トークン列}|}|\Means +% トークン列の先頭の文字を抽出し、|\CS| をその文字トークン +% (に展開されるマクロ)として定義する。 +% \Note 先頭にあるのが制御綴やグループである場合は |\CS| は |\relax| +% に等置される。 +% \Note 文字トークンは“|\the|-文字列”のカテゴリコードをもつ。 +% \Note 非Unicodeエンジンの場合は文字列がUTF-8で符号化されていると +% 見なし、先頭が高位バイトの場合は1文字分のバイト列(のトークン列) +% を抽出する。 +% この場合は元のカテゴリコードが保持される。 +% \begin{macrocode} +\def\jsLetHeadChar#1#2{% + \begingroup + \escapechar=`\\ % + \let\bxjs@tmpa={% brace-match-hack + \bxjs@let@hchar@exp#2}% + \endgroup + \let#1\bxjs@g@tmpa} +\def\bxjs@let@hchar@exp{% + \futurelet\@let@token\bxjs@let@hchar@exp@a} +\def\bxjs@let@hchar@exp@a{% + \bxjs@cond\ifcat\noexpand\@let@token\bgroup\fi{% 波括弧 + \bxjs@let@hchar@out\let\relax + }{\bxjs@cond\ifcat\noexpand\@let@token\@sptoken\fi{% 空白 + \bxjs@let@hchar@out\let\space% + }{\bxjs@cond\if\noexpand\@let@token\@backslashchar\fi{% バックスラッシュ + \bxjs@let@hchar@out\let\@backslashchar + }{\bxjs@let@hchar@exp@b}}}} +\def\bxjs@let@hchar@exp@b#1{% + \expandafter\bxjs@let@hchar@exp@c\string#1?\@nil#1} +\def\bxjs@let@hchar@exp@c#1#2\@nil{% +%\message{<#1#2>}% + \bxjs@cond\if#1\@backslashchar\fi{% 制御綴 + \bxjs@cond\expandafter\ifx\noexpand\@let@token\@let@token\fi{% + \bxjs@let@hchar@out\let\relax + }{%else + \expandafter\bxjs@let@hchar@exp + }% + }{%else + \bxjs@let@hchar@chr#1% + }} +\def\bxjs@let@hchar@chr#1{% + \bxjs@let@hchar@out\def{{#1}}} +\def\bxjs@let@hchar@out#1#2{% + \global#1\bxjs@g@tmpa#2\relax + \toks@\bgroup}% skip to right brace +% \end{macrocode} +% UTF-8のバイト列を扱うコード。 +% \begin{macrocode} +\chardef\bxjs@let@hchar@csta=128 +\chardef\bxjs@let@hchar@cstb=192 +\chardef\bxjs@let@hchar@cstc=224 +\chardef\bxjs@let@hchar@cstd=240 +\chardef\bxjs@let@hchar@cste=248 +\let\bxjs@let@hchar@chr@ue@a\bxjs@let@hchar@chr +\def\bxjs@let@hchar@chr@ue#1{% + \@tempcnta=`#1\relax +%\message{\the\@tempcnta}% + \bxjs@cond\ifnum\@tempcnta<\bxjs@let@hchar@csta\fi{% + \bxjs@let@hchar@chr@ue@a#1% + }{\bxjs@cond\ifnum\@tempcnta<\bxjs@let@hchar@cstb\fi{% + \bxjs@let@hchar@out\let\relax + }{\bxjs@cond\ifnum\@tempcnta<\bxjs@let@hchar@cstc\fi{% + \bxjs@let@hchar@chr@ue@b + }{\bxjs@cond\ifnum\@tempcnta<\bxjs@let@hchar@cstd\fi{% + \bxjs@let@hchar@chr@ue@c + }{\bxjs@cond\ifnum\@tempcnta<\bxjs@let@hchar@cste\fi{% + \bxjs@let@hchar@chr@ue@d + }{%else + \bxjs@let@hchar@out\let\relax + }}}}}} +\def\bxjs@let@hchar@chr@ue@a#1{% + \bxjs@let@hchar@out\def{{#1}}} +\def\bxjs@let@hchar@chr@ue@b#1#2{% + \bxjs@let@hchar@out\def{{#1#2}}} +\def\bxjs@let@hchar@chr@ue@c#1#2#3{% + \bxjs@let@hchar@out\def{{#1#2#3}}} +\def\bxjs@let@hchar@chr@ue@d#1#2#3#4{% + \bxjs@let@hchar@out\def{{#1#2#3#4}}} +% \end{macrocode} +% \end{macro} +% +%^^A---------------- +% \subsection{(u){\pTeX}用の設定} +% +% \begin{macrocode} +\ifx j\jsEngine +% \end{macrocode} +% +% 基本的に、JSクラスのコードの中で、「和文コンポーネントの管轄」 +% としてBXJSクラスで除外されている部分に相当するが、 +% 若干の変更が加えられている。 +% +% \paragraph{補助マクロ} +% +% |\jsLetHeadChar| を和文文字トークンに対応させる。 +% \begin{macrocode} +\def\bxjs@let@hchar@chr@pp#1#2{% + \expandafter\bxjs@let@hchar@chr@pp@a\meaning#2\relax#1#2} +\def\bxjs@let@hchar@chr@pp@a#1#2\relax#3#4{% +%\message{(\meaning#3:\meaning#4)}% + \bxjs@cond\if#1k\fi{% + \bxjs@let@hchar@out\def{{#4}}% + }{%else + \bxjs@let@hchar@chr@ue#3#4% + }} +\let\bxjs@let@hchar@chr\bxjs@let@hchar@chr@pp +% \end{macrocode} +% +% \paragraph{エンジン依存の定義} +% +% 最初にエンジン({\pTeX}かu{\pTeX}か)に依存する定義を行う。 +% |\ifjsWithupTeX| はBXJSにおいて定義されているスイッチで、 +% エンジンがu{\pTeX}であるかを表す。 +% +% |\jsc@JYn| および |\jsc@JTn| は標準の和文横書きおよび縦書き用 +% エンコーディングを表す。 +% \begin{macrocode} +\edef\jsc@JYn{\ifjsWithupTeX JY2\else JY1\fi} +\edef\jsc@JTn{\ifjsWithupTeX JT2\else JT1\fi} +\edef\jsc@pfx@{\ifjsWithupTeX u\fi} +% \end{macrocode} +% +% |\bxjs@declarefontshape| は標準の和文フォント宣言である。 +% 後で |\bxjs@scale| を求めるため一旦マクロにしておく。 +% |\bxjs@sizereference| は全角幅を測定する時に参照するフォント。 +% +% まずu{\pTeX}の場合の定義を示す。 +% JSクラスの |uplatex| オプション指定時の定義と同じである。 +% \begin{macrocode} +\@onlypreamble\bxjs@declarefontshape +\ifjsWithupTeX +\def\bxjs@declarefontshape{% +\DeclareFontShape{JY2}{mc}{m}{n}{<->s*[\bxjs@scale]upjpnrm-h}{}% +\DeclareFontShape{JY2}{gt}{m}{n}{<->s*[\bxjs@scale]upjpngt-h}{}% +\DeclareFontShape{JT2}{mc}{m}{n}{<->s*[\bxjs@scale]upjpnrm-v}{}% +\DeclareFontShape{JT2}{gt}{m}{n}{<->s*[\bxjs@scale]upjpngt-v}{}% +} +\def\bxjs@sizereference{upjisr-h} +% \end{macrocode} +% +% {\pTeX}の場合の定義を示す。 +% JSクラスのフォント種別オプション非指定時の定義と同じである。 +% \begin{macrocode} +\else +\def\bxjs@declarefontshape{% +\DeclareFontShape{JY1}{mc}{m}{n}{<->s*[\bxjs@scale]jis}{}% +\DeclareFontShape{JY1}{gt}{m}{n}{<->s*[\bxjs@scale]jisg}{}% +\DeclareFontShape{JT1}{mc}{m}{n}{<->s*[\bxjs@scale]tmin10}{}% +\DeclareFontShape{JT1}{gt}{m}{n}{<->s*[\bxjs@scale]tgoth10}{}% +} +\def\bxjs@sizereference{jis} +\fi +% \end{macrocode} +% +% 既に使用されている標準和文フォント定義がもしあれば取り消す。 +% \begin{macrocode} +\def\bxjs@next#1/#2/#3/#4/#5\relax{% + \def\bxjs@tmpb{#5}} +\ifjsWithpTeXng \def\bxjs@tmpb{10}% +\else +\expandafter\expandafter\expandafter\bxjs@next + \expandafter\string\the\jfont\relax +\fi +\@for\bxjs@tmpa:={\jsc@JYn/mc/m/n,\jsc@JYn/gt/m/n,% + \jsc@JTn/mc/m/n,\jsc@JTn/gt/m/n}\do + {\expandafter\let\csname\bxjs@tmpa/10\endcsname=\@undefined + \expandafter\let\csname\bxjs@tmpa/\bxjs@tmpb\endcsname=\@undefined} +% \end{macrocode} +% +% \paragraph{和文フォントスケールの補正} +% +% 実は、{\pTeX}の標準的な和文フォント(JFMのこと、例えば |jis|) +% では、指定された |\jsScale|(この値を $s$ とする)をそのまま +% 使って定義すると期待通りの大きさにならない。 +% これらのJFMでは1\,zwの大きさが指定されたサイズではなく +% 既にスケール(この値を $f$ とする;|jis| では0.962216倍) +% が掛けられた値になっているからである。 +% そのため、ここでは $s/f$ を求めてその値をマクロ |\bxjs@scale| +% に保存する。 +% \begin{macrocode} +\begingroup +% 参照用フォント(\bxjs@sizereference)の全角空白の幅を取得 + \font\bxjs@tmpa=\bxjs@sizereference\space at 10pt + \setbox\z@\hbox{\bxjs@tmpa\char\jis"2121\relax} +% 幅が丁度10ptなら補正は不要 + \ifdim\wd\z@=10pt + \global\let\bxjs@scale\jsScale + \else +% (10*s)/(10*f)として計算、\bxjs@invscaleはBXJSで定義 + \edef\bxjs@tmpa{\strip@pt\wd\z@} + \@tempdima=10pt \@tempdima=\jsScale\@tempdima + \bxjs@invscale\@tempdima\bxjs@tmpa + \xdef\bxjs@scale{\strip@pt\@tempdima} + \fi +\endgroup +%\typeout{\string\bxjs@scale : \bxjs@scale} +% \end{macrocode} +% +% \paragraph{和文フォント関連定義} +% +% |\bxjs@scale| が決まったので先に保存した標準和文フォント +% 宣言を実行する。 +% \begin{macrocode} +\bxjs@declarefontshape +% \end{macrocode} +% +% フォント代替の明示的定義。 +% \begin{macrocode} +\DeclareFontShape{\jsc@JYn}{mc}{m}{it}{<->ssub*mc/m/n}{} +\DeclareFontShape{\jsc@JYn}{mc}{m}{sl}{<->ssub*mc/m/n}{} +\DeclareFontShape{\jsc@JYn}{mc}{m}{sc}{<->ssub*mc/m/n}{} +\DeclareFontShape{\jsc@JYn}{gt}{m}{it}{<->ssub*gt/m/n}{} +\DeclareFontShape{\jsc@JYn}{gt}{m}{sl}{<->ssub*gt/m/n}{} +\DeclareFontShape{\jsc@JYn}{mc}{bx}{it}{<->ssub*gt/m/n}{} +\DeclareFontShape{\jsc@JYn}{mc}{bx}{sl}{<->ssub*gt/m/n}{} +\DeclareFontShape{\jsc@JYn}{gt}{bx}{it}{<->ssub*gt/m/n}{} +\DeclareFontShape{\jsc@JYn}{gt}{bx}{sl}{<->ssub*gt/m/n}{} +\DeclareFontShape{\jsc@JYn}{mc}{b}{n}{<->ssub*mc/bx/n}{} +\DeclareFontShape{\jsc@JYn}{mc}{b}{it}{<->ssub*mc/bx/n}{} +\DeclareFontShape{\jsc@JYn}{mc}{b}{sl}{<->ssub*mc/bx/n}{} +\DeclareFontShape{\jsc@JYn}{gt}{b}{n}{<->ssub*gt/bx/n}{} +\DeclareFontShape{\jsc@JYn}{gt}{b}{it}{<->ssub*gt/bx/n}{} +\DeclareFontShape{\jsc@JYn}{gt}{b}{sl}{<->ssub*gt/bx/n}{} +\DeclareFontShape{\jsc@JTn}{mc}{m}{it}{<->ssub*mc/m/n}{} +\DeclareFontShape{\jsc@JTn}{mc}{m}{sl}{<->ssub*mc/m/n}{} +\DeclareFontShape{\jsc@JTn}{mc}{m}{sc}{<->ssub*mc/m/n}{} +\DeclareFontShape{\jsc@JTn}{gt}{m}{it}{<->ssub*gt/m/n}{} +\DeclareFontShape{\jsc@JTn}{gt}{m}{sl}{<->ssub*gt/m/n}{} +\DeclareFontShape{\jsc@JTn}{mc}{bx}{it}{<->ssub*gt/m/n}{} +\DeclareFontShape{\jsc@JTn}{mc}{bx}{sl}{<->ssub*gt/m/n}{} +\DeclareFontShape{\jsc@JTn}{gt}{bx}{it}{<->ssub*gt/m/n}{} +\DeclareFontShape{\jsc@JTn}{gt}{bx}{sl}{<->ssub*gt/m/n}{} +\DeclareFontShape{\jsc@JTn}{mc}{b}{n}{<->ssub*mc/bx/n}{} +\DeclareFontShape{\jsc@JTn}{mc}{b}{it}{<->ssub*mc/bx/n}{} +\DeclareFontShape{\jsc@JTn}{mc}{b}{sl}{<->ssub*mc/bx/n}{} +\DeclareFontShape{\jsc@JTn}{gt}{b}{n}{<->ssub*gt/bx/n}{} +\DeclareFontShape{\jsc@JTn}{gt}{b}{it}{<->ssub*gt/bx/n}{} +\DeclareFontShape{\jsc@JTn}{gt}{b}{sl}{<->ssub*gt/bx/n}{} +% \end{macrocode} +% +% 欧文総称フォント命令で和文フォントが連動するように修正する。 +% その他の和文フォント関係の定義を行う。 +% \begin{macrocode} +\DeclareRobustCommand\rmfamily + {\not@math@alphabet\rmfamily\mathrm + \romanfamily\rmdefault\kanjifamily\mcdefault\selectfont} +\DeclareRobustCommand\sffamily + {\not@math@alphabet\sffamily\mathsf + \romanfamily\sfdefault\kanjifamily\gtdefault\selectfont} +\DeclareRobustCommand\ttfamily + {\not@math@alphabet\ttfamily\mathtt + \romanfamily\ttdefault\kanjifamily\gtdefault\selectfont} +\ifx\DeclareFixJFMCJKTextFontCommand\@undefined +\DeclareJaTextFontCommand{\textmc}{\mcfamily} +\DeclareJaTextFontCommand{\textgt}{\gtfamily} +\fi +\bxjs@if@sf@default{% + \renewcommand\kanjifamilydefault{\gtdefault}} +% \end{macrocode} +% +% 念のため。 +% \begin{macrocode} +\selectfont +% \end{macrocode} +% +% |\bxjs@parse@qh| の処理は{\pTeX}系では不要になるので無効化する +% (つまり |\jsSetQHLength| は |\setlength| と等価になる)。 +% \begin{macrocode} +\def\bxjs@parse@qh#1{\let\bxjs@tmpb\relax} +\let\bxjs@parse@qh@a\@undefined +\let\bxjs@parse@qh@b\@undefined +% \end{macrocode} +% +% \paragraph{パラメタの設定} +% +% \begin{macrocode} +\prebreakpenalty\jis"2147=10000 +\postbreakpenalty\jis"2148=10000 +\prebreakpenalty\jis"2149=10000 +\inhibitxspcode`!=1 +\inhibitxspcode`〒=2 +\xspcode`+=3 +\xspcode`\%=3 +% \end{macrocode} +% +% |"80|\zrWDash|"FF| の範囲の |\spcode| を3に変更。 +% \begin{macrocode} +\@tempcnta="80 \@whilenum\@tempcnta<"100 \do{% + \xspcode\@tempcnta=3\advance\@tempcnta\@ne} +% \end{macrocode} +% +% |\jsInhibitGlueAtParTop| の定義。 +% 「JSクラスでの定義」を利用する。 +% \begin{macrocode} +\let\jsInhibitGlueAtParTop\@inhibitglue +% \end{macrocode} +% +% |\jsResetDimen| は空のままでよい。 +% +% \paragraph{組方向依存の処理} +% +% 組方向判定のif-トークン(|\if?dir|)は{\pTeX}以外では未定義で +% あるため、そのままif文に入れることができない。 +% これを回避するため部分的に|!|をエスケープ文字に使う。 +% \begin{macrocode} +\begingroup +\catcode`\!=0 +% \end{macrocode} +% +% \begin{macro}{\bxjs@ptex@dir} +% 現在の組方向: |t|=縦、|y|=横、|?|=その他。 +% \begin{macrocode} +\gdef\bxjs@ptex@dir{% + !iftdir t% + !else!ifydir y% + !else ?% + !fi!fi} +% \end{macrocode} +% \end{macro} +% +% 新版の{\pTeX}で脚注番号の周囲の空きが過大になる現象への対処。 +% \Note 現在の{p\LaTeX}カーネルでは対処が既に行われている。 +% ここでは、|\@makefnmark| の定義が古いものであった場合に、 +% 新しいものに置き換える。 +% \begin{macrocode} +% 古い \@makefnmark の定義 +\long\def\bxjs@tmpa{\hbox{% + !ifydir \@textsuperscript{\normalfont\@thefnmark}% + !else\hbox{\yoko\@textsuperscript{\normalfont\@thefnmark}}!fi}} +\ifx\@makefnmark\bxjs@tmpa +\long\gdef\@makefnmark{% + !ifydir \hbox{}\hbox{\@textsuperscript{\normalfont\@thefnmark}}\hbox{}% + !else\hbox{\yoko\@textsuperscript{\normalfont\@thefnmark}}!fi} +\fi +% \end{macrocode} +% +% \begin{macrocode} +\endgroup +% \end{macrocode} +% +%^^A---------------- +% \subsection{pdf{\TeX}用の処理} +% +% \begin{macrocode} +\else\ifx p\jsEngine +% \end{macrocode} +% +% \begin{macrocode} +\let\bxjs@let@hchar@chr\bxjs@let@hchar@chr@ue +% \end{macrocode} +% +% \begin{macrocode} +\@onlypreamble\bxjs@cjk@loaded +\def\bxjs@cjk@loaded{% + \def\@footnotemark{% + \leavevmode + \ifhmode + \edef\@x@sf{\the\spacefactor}% + \ifdim\lastkern>\z@\ifdim\lastkern<5sp\relax + \unkern\unkern + \ifdim\lastskip>\z@ \unskip \fi + \fi\fi + \nobreak + \fi + \@makefnmark + \ifhmode \spacefactor\@x@sf \fi + \relax}% + \let\bxjs@cjk@loaded\relax +} +\g@addto@macro\bxjs@begin@document@hook{% + \@ifpackageloaded{CJK}{% + \bxjs@cjk@loaded + }{}% +} +% \end{macrocode} +% +%^^A---------------- +% \subsection{{\XeTeX}用の処理} +% +% \begin{macrocode} +\else\ifx x\jsEngine +% \end{macrocode} +% +% |\bxjs@let@hchar@chr| について、 +% 「BMP外の文字の文字トークンに対して |\string| を適用すると +% サロゲートペアに分解される」という問題に対する応急措置を施す。 +% \begin{macrocode} +\def\bxjs@let@hchar@chr#1{% + \@tempcnta`#1\relax \divide\@tempcnta"800\relax + \bxjs@cond\ifnum\@tempcnta=27 \fi{% + \bxjs@let@hchar@chr@xe + }{\bxjs@let@hchar@out\def{{#1}}}} +\def\bxjs@let@hchar@chr@xe#1{% + \lccode`0=`#1\relax + \lowercase{\bxjs@let@hchar@out\def{{0}}}} +% \end{macrocode} +% +% \begin{macro}{\bxjs@do@precisetext} +% |precisetext| オプションの処理。 +% \begin{macrocode} +\@onlypreamble\bxjs@do@precisetext +\ifx\XeTeXgenerateactualtext\@undefined\else + \def\bxjs@do@precisetext{% + \XeTeXgenerateactualtext=\@ne} +\fi +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\bxjs@do@simplejasetup} +% |simplejasetup| オプションの処理。 +% \begin{macrocode} +\@onlypreamble\bxjs@do@simplejasetup +\def\bxjs@do@simplejasetup{% + \ifnum\XeTeXinterchartokenstate>\z@ + \else\ifnum\strcmp{\the\XeTeXlinebreakskip}{\the\z@}=\z@ + \jsSimpleJaSetup + \ClassInfo\bxjs@clsname + {'\string\jsSimpleJaSetup' is applied\@gobble}% + \fi\fi} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\jsSimpleJaSetup} +% 日本語出力用の超簡易的な設定。 +% \begin{macrocode} +\newcommand*{\jsSimpleJaSetup}{% + \XeTeXlinebreaklocale "ja"\relax + \XeTeXlinebreakskip=0pt plus 1pt minus 0.1pt\relax + \XeTeXlinebreakpenalty=0\relax} +% \end{macrocode} +% \end{macro} +% +%^^A---------------- +% \subsection{後処理(エンジン共通)} +% \begin{macrocode} +\fi\fi\fi +% \end{macrocode} +% +% |simplejasetup| オプションの処理。 +% \begin{macrocode} +\ifx\bxjs@do@simplejasetup\@undefined\else + \g@addto@macro\bxjs@begin@document@hook{% + \ifbxjs@simplejasetup + \bxjs@do@simplejasetup + \fi} +\fi +% \end{macrocode} +% +% |precisetext| オプションの処理。 +% \begin{macrocode} +\ifbxjs@precisetext + \ifx\bxjs@do@precisetext\@undefined + \ClassWarning\bxjs@clsname + {The current engine does not support the\MessageBreak + 'precise-text' option\@gobble} + \else + \bxjs@do@precisetext + \fi +\fi +% \end{macrocode} +% +% \paragraph{段落頭でのグルー挿入禁止} +% +% 本体開始時において |\everyparhook| を検査して、 +% “結局何もしない”ことになっている場合は、 +% 副作用を完全に無くすために |\everyparhook| を空にする。 +% \begin{macrocode} +\g@addto@macro\bxjs@begin@document@hook{% + \ifx\jsInhibitGlueAtParTop\@empty + \def\bxjs@tmpa{\jsInhibitGlueAtParTop}% + \ifx\everyparhook\bxjs@tmpa + \let\everyparhook\@empty + \fi + \fi} +% \end{macrocode} +% +% |everyparhook=modern| の場合の、|\everyparhook| の有効化の実装。 +% \Note 本体開始時ではなく最初から有効化していることに注意。 +% \begin{macrocode} +\ifnum\bxjs@everyparhook=\bxjs@everyparhook@modern +% \end{macrocode} +% まず |\everypar| を“乗っ取る”処理を行う。 +% \begin{macrocode} + \let\bxjs@everypar\everypar + \newtoks\everypar + \everypar\bxjs@everypar +% \end{macrocode} +% そして本物の |\everypar| では、最後で常に |\everyparhook| が実行される +% ようにする。 +% \begin{macrocode} + \bxjs@everypar{\the\expandafter\everypar\everyparhook}% +\fi +% \end{macrocode} +% +% \paragraph{fancyhdr対策} +% |fancyhdr| オプションの値が |true| であり、 +% かつ |fancyhdr| が使用された場合に以下の対策を行う。 +% \begin{itemize} +% \item デフォルトの書式設定に含まれる“二文字フォント命令”を除去する。 +% \item bxjsbookにおいて、ヘッダ・フッタの横幅を |\fullwidth| に変える。 +% \end{itemize} +% +% \begin{macrocode} +\ifbxjs@fancyhdr +% \end{macrocode} +% +% \begin{macro}{\bxjs@adjust@fancyhdr} +% |fancyhdr| の初期設定に関する改変の処理。 +% |fancyhdr| 読込完了と |\pagestyle{fancy}| 実行の間で実行されるべき。 +% \begin{macrocode} +\@onlypreamble\bxjs@adjust@fancyhdr +\def\bxjs@adjust@fancyhdr{% +% \end{macrocode} +% ヘッダ・フッタの要素の書式について、それが既定のままであれば、 +% “二文字フォント命令”を除去したものに置き換える。 +% \Note 和文なので |\sl| は無い方がよいはず。 +% \begin{macrocode} + \def\bxjs@tmpa{\fancyplain{}{\sl\rightmark}\strut}% + \def\bxjs@tmpb{\fancyplain{}{\rightmark}\strut}% + \ifx\f@ncyelh\bxjs@tmpa \global\let\f@ncyelh\bxjs@tmpb \fi + \ifx\f@ncyerh\bxjs@tmpa \global\let\f@ncyerh\bxjs@tmpb \fi + \ifx\f@ncyolh\bxjs@tmpa \global\let\f@ncyolh\bxjs@tmpb \fi + \ifx\f@ncyorh\bxjs@tmpa \global\let\f@ncyorh\bxjs@tmpb \fi + \def\bxjs@tmpa{\fancyplain{}{\sl\leftmark}\strut}% + \def\bxjs@tmpb{\fancyplain{}{\leftmark}\strut}% + \ifx\f@ncyelh\bxjs@tmpa \global\let\f@ncyelh\bxjs@tmpb \fi + \ifx\f@ncyerh\bxjs@tmpa \global\let\f@ncyerh\bxjs@tmpb \fi + \ifx\f@ncyolh\bxjs@tmpa \global\let\f@ncyolh\bxjs@tmpb \fi + \ifx\f@ncyorh\bxjs@tmpa \global\let\f@ncyorh\bxjs@tmpb \fi + \def\bxjs@tmpa{\rm\thepage\strut}% + \def\bxjs@tmpb{\thepage\strut}% + \ifx\f@ncyecf\bxjs@tmpa \global\let\f@ncyecf\bxjs@tmpb \fi + \ifx\f@ncyocf\bxjs@tmpa \global\let\f@ncyocf\bxjs@tmpb \fi +% \end{macrocode} +% |\fullwidth| が(定義済で)|\textwidth| よりも大きい場合、 +% ヘッダ・フッタの横幅を |\fullwidth| に合わせる。 +% \begin{macrocode} + \ifx\fullwidth\@undefined\else \ifdim\textwidth<\fullwidth + \setlength{\@tempdima}{\fullwidth-\textwidth}% + \edef\bxjs@tmpa{\noexpand\fancyhfoffset[EL,OR]{\the\@tempdima}% + }\bxjs@tmpa + \fi\fi + \PackageInfo\bxjs@clsname + {Patch to fancyhdr is applied\@gobble}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\bxjs@pagestyle@hook} +% |\pagestyle| へのフックの本体。 +% \begin{macrocode} +\def\bxjs@pagestyle@hook{% + \@ifpackageloaded{fancyhdr}{% + \bxjs@adjust@fancyhdr + \global\let\bxjs@adjust@fancyhdr\relax + }{}} +% \end{macrocode} +% \end{macro} +% +% |\pagestyle| にフックを入れ込む。 +% \begin{macrocode} +\let\bxjs@org@pagestyle\pagestyle +\def\pagestyle{% + \bxjs@pagestyle@hook \bxjs@org@pagestyle} +% \end{macrocode} +% +% begin-document フック。 +% \Note これ以降に |fancyhdr| が読み込まれることはあり得ない。 +% \begin{macrocode} +\g@addto@macro\bxjs@begin@document@hook{% + \bxjs@pagestyle@hook + \global\let\bxjs@pagestyle@hook\relax} +% \end{macrocode} +% +% \paragraph{和文空白命令} +% \begin{macrocode} +\ifbxjs@jaspace@cmd +% \end{macrocode} +% +% \begin{macro}{\jaenspace} +% 半角幅の水平空き。 +% \begin{macrocode} + \def\jaenspace{\hskip.5\jsZw\relax} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\jathinspace} +% 和欧文間空白を入れるユーザ命令。 +% \Note minimalではダミー定義。 +% \begin{macrocode} + \def\jathinspace{\hskip\z@skip} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\_} +% 全角空白文字1つからなる名前の制御綴。 +% |\zwspace| と等価になる。 +% \begin{macrocode} + \def\ {\zwspace} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\jaspace} +% |jlreq| クラスと互換の命令。 +% \begin{macrocode} + \DeclareRobustCommand*{\jaspace}[1]{% + \expandafter\ifx\csname bxjs@jaspace@@#1\endcsname\relax + \ClassError\bxjs@clsname + {Unknown jaspace: #1}{\@eha}% + \else + \csname bxjs@jaspace@@#1\endcsname + \fi} + \def\bxjs@jaspace@@zenkaku{\hskip 1\jsZw\relax} + \def\bxjs@jaspace@@nibu{\hskip .5\jsZw\relax} + \def\bxjs@jaspace@@shibu{\hskip .25\jsZw\relax} +% \end{macrocode} +% \end{macro} +% +% \begin{macrocode} +\fi +% \end{macrocode} +% +% 終わり。 +% \begin{macrocode} +\fi +% \end{macrocode} +% +% 以上で終わり。 +% \begin{macrocode} +%</minimal> +% \end{macrocode} +% +%^^A======================================================== +% \section{和文ドライバ:standard \ZRX} +% +% 標準のドライバ。 +% +% \begin{itemize} +% \item |\rmfamily|/|\sffamily|/|\ttfamily| での +% 和文ファミリ連動 +% \item |\mcfamily|/|\gtfamily| +% \item |\textmc|/|\textgt| +% \item |\zw| +% \item |\jQ|/|\jH| +% \item |\trueQ|/|\trueH|/|\ascQ| +% \item |\setkanjiskip|/|\getkanjiskip| +% \item |\setxkanjiskip|/|\getxkanjiskip| +% \item |\autospacing|/|\noautospacing| +% \item |\autoxspacing|/|\noautoxspacing| +% \end{itemize} +% +% \paragraph{和文フォント指定の扱い} +% +% |standard| 和文ドライバでは |\jsJaFont| の値を和文フォントの +% “プリセット”の指定として用いる。 +% プリセットの値は、{\TeX} Liveの |kanji-config-updmap| コマンドで +% 使う“ファミリ”と同じにすることを想定する。 +% 特別な値として、|auto| は |kanji-config-updmap| で現在指定 +% されているファミリを表す。 +% +%^^A---------------- +% \subsection{共通処理(1)} +% +% まず minimal ドライバを読み込む。 +% \begin{macrocode} +%<*standard> +%% このファイルは日本語文字を含みます +\input{bxjsja-minimal.def} +% \end{macrocode} +% +% |simplejasetup| はstandardでは無効になる。 +% \begin{macrocode} +\bxjs@simplejasetupfalse +% \end{macrocode} +% +% \paragraph{japaramオプションの処理} +% +% |japaram| の値をkey-valueリストとして解釈する。 +% keyvalのファミリは |bxjsStd| とする。 +% +% \begin{macro}{\ifbxjs@jp@jismmiv} +% 2004JIS字形を優先させるか。 +% \begin{macrocode} +\newif\ifbxjs@jp@jismmiv +% \end{macrocode} +% \end{macro} +% +% |jis2004| オプションの処理。 +% \begin{macrocode} +\bxjs@cslet{bxjs@kv@jis2004@true}\bxjs@jp@jismmivtrue +\bxjs@cslet{bxjs@kv@jis2004@false}\bxjs@jp@jismmivfalse +\define@key{bxjsStd}{jis2004}[true]{% + \bxjs@set@keyval{jis2004}{#1}{}} +% \end{macrocode} +% +% \begin{macro}{\ifbxjs@jp@units} +% 和文用単位(|zw|、|zh|、|(true)Q|、|(true)H|)を +% 使えるようにするか。 +% \begin{macrocode} +\newif\ifbxjs@jp@units +% \end{macrocode} +% \end{macro} +% +% |units| オプションの処理。 +% \begin{macrocode} +\let\bxjs@kv@units@true\bxjs@jp@unitstrue +\let\bxjs@kv@units@false\bxjs@jp@unitsfalse +\define@key{bxjsStd}{units}[true]{% + \bxjs@set@keyval{units}{#1}{}} +% \end{macrocode} +% +% \begin{macro}{\bxjs@jp@font} +% フォントパッケージの追加オプション。 +% \begin{macrocode} +\let\bxjs@jp@font\@empty +% \end{macrocode} +% \end{macro} +% +% |font| オプションの処理。 +% \begin{macrocode} +\define@key{bxjsStd}{font}{% + \edef\bxjs@jp@font{#1}} +% \end{macrocode} +% +% 実際の |japaram| の値を適用する。 +% \begin{macrocode} +\def\bxjs@next#1{\bxjs@safe@setkeys{bxjsStd}{#1}} +\expandafter\bxjs@next\expandafter{\jsJaParam} +% \end{macrocode} +% +% \paragraph{jis2004パラメタ} +% +% |jis2004| パラメタが有効の場合は、グローバルオプションに |jis2004| +% を追加する。 +% \Note |otf| や |luatexja-preset| 等のパッケージがこのオプションを +% 利用する。 +% \begin{macrocode} +\ifbxjs@jp@jismmiv + \g@addto@macro\@classoptionslist{,jis2004} +% \@ifpackagewith 判定への対策 + \PassOptionsToPackage{jis2004}{otf} +\fi +% \end{macrocode} +% +% \paragraph{和文用単位のサポート} +% +% エンジンが{(u)\pTeX}の場合は |units| を無効にする。 +% \begin{macrocode} +\if j\jsEngine + \bxjs@jp@unitsfalse +\fi +% \end{macrocode} +% +% |units| パラメタが有効の場合は、|bxcalc| パッケージの |\usepTeXunits| 命令 +% を実行して和文用単位を有効化する。 +% \begin{macrocode} +\ifbxjs@jp@units + \IfFileExists{bxcalc.sty}{% + \RequirePackage{bxcalc}[2018/01/28]%v1.0a + \ifx\usepTeXunits\@undefined + \PackageWarningNoLine\bxjs@clsname + {Cannot support pTeX units (zw etc.), since\MessageBreak + the package 'bxcalc' is too old}% + \bxjs@jp@unitsfalse + \else \usepTeXunits + \fi + }{%else + \PackageWarningNoLine\bxjs@clsname + {Cannot support pTeX units (zw etc.), since\MessageBreak + the package 'bxcalc' is unavailable}% + \bxjs@jp@unitsfalse + } +\fi +% \end{macrocode} +% +% |bxcalc| で和文用単位をサポートした場合は、|\bxjs@parse@qh| の処理は不要に +% なるので無効化する。 +% \begin{macrocode} +\ifbxjs@jp@units +\def\bxjs@parse@qh#1{\let\bxjs@tmpb\relax} +\let\bxjs@parse@qh@a\@undefined +\let\bxjs@parse@qh@b\@undefined +\fi +% \end{macrocode} +% +% \begin{macro}{\bxjs@let@lenexpr} +% |\bxjs@let@lenexpr\CS{|\Meta{長さ式}|}|\Means +% 長さ式に |bxcalc| の展開を適用した結果のトークン列を |\CS| に代入する。 +% \begin{macrocode} +\ifbxjs@jp@units + \def\bxjs@let@lenexpr#1#2{% + \edef#1{#2}% + \expandafter\CUXParseExpr\expandafter#1\expandafter{#1}} +\else + \def\bxjs@let@lenexpr{\edef} +\fi +% \end{macrocode} +% \end{macro} +% +% \paragraph{共通命令の実装} +% +% |\jQ| 等の「単位」系の共通命令を実装する。 +% まず{$\varepsilon$-\TeX}拡張が使えるか検査する。 +% \begin{macrocode} +\ifjsWitheTeX +% \end{macrocode} +% 使える場合は、「|\dimexpr|外部寸法表記|\relax|」の形式 +% (これは内部値なので単位として使える)で各命令定義する。 +% +% \begin{macro}{\jQ} +% \begin{macro}{\jH} +% |\jQ| と |\jH| はともに0.25\,mmに等しい。 +% \begin{macrocode} + \@tempdima=0.25mm + \protected\edef\jQ{\dimexpr\the\@tempdima\relax} + \let\jH\jQ +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\trueQ} +% \begin{macro}{\trueH} +% |\trueQ| と |\trueH| はともに0.25\,true\,mmに等しい。 +% \begin{macrocode} + \ifjsc@mag + \@tempdimb=\jsBaseFontSize\relax + \edef\bxjs@tmpa{\strip@pt\@tempdimb}% + \@tempdima=2.5mm + \bxjs@invscale\@tempdima\bxjs@tmpa + \protected\edef\trueQ{\dimexpr\the\@tempdima\relax} + \@tempdima=10pt + \bxjs@invscale\@tempdima\bxjs@tmpa + \protected\edef\bxjs@truept{\dimexpr\the\@tempdima\relax} + \else \let\trueQ\jQ \let\bxjs@truept\p@ + \fi + \let\trueH\trueQ +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\ascQ} +% \begin{macro}{\ascpt} +% |\ascQ| は |\trueQ| を和文スケール値で割った値。 +% 例えば、|\fontsize{12\ascQ}{16\trueH}| とすると、 +% 和文が12Qになる。 +% +% 同様に、|\ascpt| は |truept| を和文スケールで割った値。 +% \begin{macrocode} + \@tempdima\trueQ \bxjs@invscale\@tempdima\jsScale + \protected\edef\ascQ{\dimexpr\the\@tempdima\relax} + \@tempdima\bxjs@truept \bxjs@invscale\@tempdima\jsScale + \protected\edef\ascpt{\dimexpr\the\@tempdima\relax} +\fi +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\jafontsize} +% |\jafontsize{|\Meta{フォントサイズ}|}{|\Meta{行送り}|}|\Means +% 和文フォント規準で、すなわち、1\,zwが\Meta{フォントサイズ}に +% 等しくなるようにフォントサイズを指定する。 +% この命令の引数では、|Q|/|H| の単位が使用できる。 +% \begin{macrocode} +\def\jafontsize#1#2{% + \begingroup + \bxjs@jafontsize@a{#1}% + \@tempdimb\jsInverseScale\@tempdima + \bxjs@jafontsize@a{#2}% + \xdef\bxjs@g@tmpa{% + \noexpand\fontsize{\the\@tempdimb}{\the\@tempdima}}% + \endgroup\bxjs@g@tmpa} +\def\bxjs@jafontsize@a#1{% + \bxjs@parse@qh{#1}% + \ifx\bxjs@tmpb\relax \def\bxjs@tmpb{#1}\fi + \@defaultunits\@tempdima\bxjs@tmpb pt\relax\@nnil} +% \end{macrocode} +% \end{macro} +% +% 続いて、和文間空白・和欧文間空白関連の命令を実装する。 +% (エンジン依存のコード。) +% +% \begin{macro}{\bxjs@kanjiskip} +% 和文間空白の量を表すテキスト。 +% \begin{macrocode} +\def\bxjs@kanjiskip{0pt} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\setkanjiskip} +% 和文間空白の量を設定する。 +% \begin{macrocode} +\newcommand*\setkanjiskip[1]{% + \bxjs@let@lenexpr\bxjs@kanjiskip{#1}% + \bxjs@reset@kanjiskip} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\getkanjiskip} +% 和文間空白の量を表すテキストに展開する。 +% \begin{macrocode} +\newcommand*\getkanjiskip{% + \bxjs@kanjiskip} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\ifbxjs@kanjiskip@enabled} +% 和文間空白の挿入が有効か。 +% ただし{\pTeX}では自身の |\(no)autospacing| での制御を +% 用いるのでこの変数は常に真とする。 +% \begin{macrocode} +\newif\ifbxjs@kanjiskip@enabled \bxjs@kanjiskip@enabledtrue +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\bxjs@enable@kanjiskip} +% \begin{macro}{\bxjs@disable@kanjiskip} +% 和文間空白の挿入を有効/無効にする。({\pTeX}以外) +% \begin{macrocode} +\bxjs@robust@def\bxjs@enable@kanjiskip{% + \bxjs@kanjiskip@enabledtrue + \bxjs@reset@kanjiskip} +\bxjs@robust@def\bxjs@disable@kanjiskip{% + \bxjs@kanjiskip@enabledfalse + \bxjs@reset@kanjiskip} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\bxjs@reset@kanjiskip} +% 現在の和文間空白の設定を実際にエンジンに反映させる。 +% \begin{macrocode} +\bxjs@robust@def\bxjs@reset@kanjiskip{% + \ifbxjs@kanjiskip@enabled + \setlength{\@tempskipa}{\bxjs@kanjiskip}% + \else \@tempskipa\z@ + \fi + \bxjs@apply@kanjiskip} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\bxjs@xkanjiskip} +% \begin{macro}{\setxkanjiskip} +% \begin{macro}{\getxkanjiskip} +% \begin{macro}{\ifbxjs@xkanjiskip@enabled} +% \begin{macro}{\bxjs@enable@xkanjiskip} +% \begin{macro}{\bxjs@disable@xkanjiskip} +% \begin{macro}{\bxjs@reset@xkanjiskip} +% 和欧文間空白について同様のものを用意する。 +% \begin{macrocode} +\def\bxjs@xkanjiskip{0pt} +\newcommand*\setxkanjiskip[1]{% + \bxjs@let@lenexpr\bxjs@xkanjiskip{#1}% + \bxjs@reset@xkanjiskip} +\newcommand*\getxkanjiskip{% + \bxjs@xkanjiskip} +\newif\ifbxjs@xkanjiskip@enabled \bxjs@xkanjiskip@enabledtrue +\bxjs@robust@def\bxjs@enable@xkanjiskip{% + \bxjs@xkanjiskip@enabledtrue + \bxjs@reset@xkanjiskip} +\bxjs@robust@def\bxjs@disable@xkanjiskip{% + \bxjs@xkanjiskip@enabledfalse + \bxjs@reset@xkanjiskip} +\bxjs@robust@def\bxjs@reset@xkanjiskip{% + \ifbxjs@xkanjiskip@enabled + \setlength{\@tempskipa}{\bxjs@xkanjiskip}% + \else \@tempskipa\z@ + \fi + \bxjs@apply@xkanjiskip} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% |\jsResetDimen| を用いて、フォントサイズが変更された時に +% 空白の量が追随するようにする。 +% \begin{macrocode} +\g@addto@macro\jsResetDimen{% + \bxjs@reset@kanjiskip + \bxjs@reset@xkanjiskip} +\let\bxjs@apply@kanjiskip\relax +\let\bxjs@apply@xkanjiskip\relax +% \end{macrocode} +% +% \paragraph{和文フォント指定の扱い} +% +% \begin{macro}{\bxjs@adjust@jafont} +% |\jsJaFont| に入っている和文フォント設定の値を“調整”して、 +% その結果を |\bxjs@tmpa| に返す。 +% |#1| が |f| の場合は“非埋込(|noEmbed|)”の設定が禁止される。 +% この禁止の場合も含め、何か異常がある場合は |\bxjs@tmpa| は空になる。 +% \begin{macrocode} +\@onlypreamble\bxjs@adjust@jafont +\def\bxjs@adjust@jafont#1{% + \ifx\jsJaFont\bxjs@@auto + \bxjs@get@kanjiEmbed + \ifx\bxjs@kanjiEmbed\relax + \let\bxjs@tmpa\@empty + \else + \let\bxjs@tmpa\bxjs@kanjiEmbed + \fi + \else + \let\bxjs@tmpa\jsJaFont + \fi + \if f#1\ifx\bxjs@tmpa\bxjs@@noEmbed + \ClassWarningNoLine\bxjs@clsname + {Option 'jafont=noEmbed' is ignored, because it is\MessageBreak + not available on the current situation}% + \let\bxjs@tmpa\@empty + \fi\fi +} +\def\bxjs@@auto{auto} +\def\bxjs@@noEmbed{noEmbed} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\bxjs@kanjiEmbed} +% 現在の |updmap| の |kanjiEmbed| パラメタの値。 +% |\bxjs@get@kanjiEmbed| により実際の設定値が取得されてここに設定される。 +% \begin{macrocode} +\let\bxjs@kanjiEmbed\relax +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\bxjs@get@kanjiEmbed} +% 現在の |updmap| の |kanjiEmbed| パラメタの値を取得する。 +% \begin{macrocode} +\@onlypreamble\bxjs@get@kanjiEmbed +\def\bxjs@get@kanjiEmbed{% + \begingroup\setbox\z@=\hbox{% + \global\let\bxjs@g@tmpa\relax + \endlinechar\m@ne + \let\do\@makeother\dospecials + \catcode32=10 \catcode12=10 %form-feed + \let\bxjs@tmpa\@empty + \openin\@inputcheck="|kpsewhich updmap.cfg"\relax + \ifeof\@inputcheck\else + \read\@inputcheck to\bxjs@tmpa + \closein\@inputcheck + \fi + \ifx\bxjs@tmpa\@empty\else + \openin\@inputcheck="\bxjs@tmpa"\relax + \@tempswatrue + \loop\if@tempswa + \read\@inputcheck to\bxjs@tmpa + \expandafter\bxjs@get@ke@a\bxjs@tmpa\@nil kanjiEmbed \@nil\@nnil + \ifx\bxjs@tmpb\relax\else + \global\let\bxjs@g@tmpa\bxjs@tmpb + \@tempswafalse + \fi + \expandafter\bxjs@get@ke@b\bxjs@tmpa\@nil jaEmbed \@nil\@nnil + \ifx\bxjs@tmpb\relax\else + \global\let\bxjs@g@tmpa\bxjs@tmpb + \@tempswafalse + \fi + \ifeof\@inputcheck \@tempswafalse \fi + \repeat + \fi + }\endgroup + \let\bxjs@kanjiEmbed\bxjs@g@tmpa +} +\@onlypreamble\bxjs@get@ke@a +\def\bxjs@get@ke@a#1kanjiEmbed #2\@nil#3\@nnil{% + \ifx$#1$\def\bxjs@tmpb{#2}% + \else \let\bxjs@tmpb\relax + \fi} +\@onlypreamble\bxjs@get@ke@b +\def\bxjs@get@ke@b#1jaEmbed #2\@nil#3\@nnil{% + \ifx$#1$\def\bxjs@tmpb{#2}% + \else \let\bxjs@tmpb\relax + \fi} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\jachar} +% |\jachar{|\meta{文字}|}|\Means +% 和文文字として出力する。 +% \begin{macrocode} +\newcommand*\jachar[1]{% + \begingroup +% \end{macrocode} +% |\jsLetHeadChar| で先頭の“文字”を拾って +% それを |\bxjs@jachar| に渡す。 +% \begin{macrocode} + \jsLetHeadChar\bxjs@tmpa{#1}% + \ifx\bxjs@tmpa\relax + \ClassWarningNoLine\bxjs@clsname + {Illegal argument given to \string\jachar}% + \else + \expandafter\bxjs@jachar\expandafter{\bxjs@tmpa}% + \fi + \endgroup} +% \end{macrocode} +% |\jsJaChar| を |\jachar| と等価にする。 +% \begin{macrocode} +\let\jsJaChar\jachar +% \end{macrocode} +% 下請けの |\bxjs@jachar| の実装はエンジンにより異なる。 +% \begin{macrocode} +\let\bxjs@jachar\@firstofone +% \end{macrocode} +% \end{macro} +% +% \paragraph{hyperref対策} +% +% 出力ページサイズに館する処理は |geometry| パッケージが行うので、 +% |hyperref| 側の処理は無効にしておく。 +% \begin{macrocode} +\PassOptionsToPackage{setpagesize=false}{hyperref} +% \end{macrocode} +% +% \begin{macro}{\bxjs@fix@hyperref@unicode} +% |hyperref| の |unicode| オプションの値を固定する。 +% \begin{macrocode} +\@onlypreamble\bxjs@fix@hyperref@unicode +\def\bxjs@fix@hyperref@unicode#1{% + \PassOptionsToPackage{bxjs/hook=#1}{hyperref}% + \@namedef{KV@Hyp@bxjs/hook}##1{% + \KV@Hyp@unicode{##1}% + \def\KV@Hyp@unicode####1{% + \expandafter\ifx\csname if##1\expandafter\endcsname + \csname if####1\endcsname\else + \ClassWarningNoLine\bxjs@clsname + {Blcoked hyperref option 'unicode=####1'}% + \fi + }% + }% +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\jsCheckHyperrefUnicode} +% 「|hyperref| の |unicode| オプションの値を検証する」ための +% 本体開始時のフック。 +% \begin{macrocode} +\@onlypreamble\jsCheckHyperrefUnicode +\let\jsCheckHyperrefUnicode\@empty +\g@addto@macro\bxjs@begin@document@hook{\jsCheckHyperrefUnicode} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\bxjs@check@hyperref@unicode} +% |hyperref| の |unicode| オプションの値を本体開始時に検証する。 +% \begin{macrocode} +\@onlypreamble\bxjs@check@hyperref@unicode +\def\bxjs@check@hyperref@unicode#1{% + \g@addto@macro\jsCheckHyperrefUnicode{% + \@tempswafalse + \begingroup + \expandafter\ifx\csname ifHy@unicode\endcsname\relax + \aftergroup\@tempswatrue \fi + \expandafter\ifx\csname ifHy@unicode\expandafter\endcsname + \csname if#1\endcsname + \aftergroup\@tempswatrue \fi + \endgroup + \if@tempswa\else + \ClassError\bxjs@clsname + {The value of hyperref 'unicode' key is not suitable\MessageBreak + for the present engine (must be #1)}% + {\@ehc}% + \fi}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\bxjs@urgent@special} +% DVIのなるべく早い位置にspecialを出力する。 +% \begin{macrocode} +\@onlypreamble\bxjs@urgent@special +\def\bxjs@urgent@special#1{% + \AtBeginDvi{\special{#1}}% + \g@addto@macro\bxjs@begin@document@hook{% + \@ifpackageloaded{atbegshi}{% + \begingroup + \toks\z@{\special{#1}}% + \toks\tw@\expandafter{\AtBegShi@HookFirst}% + \xdef\AtBegShi@HookFirst{\the\toks@\the\toks\tw@}% + \endgroup + }{}% + }% +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\bxjs@resolve@jafont@paren} +% |jafont|パラメタ値内の|()|を解決する。 +% |\bxjs@resolve@jafont@paren\CS| で、|\CS| の内容中の |(...)| +% を |\bxjs@jafont@paren{...}| に置き換える。 +% \begin{macrocode} +\@onlypreamble\bxjs@resolve@jafont@paren +\def\bxjs@resolve@jafont@paren#1{% + \def\bxjs@tmpb{\let#1}% + \expandafter\bxjs@resolve@jafont@paren@a#1\@nil()\@nil\relax} +\@onlypreamble\bxjs@resolve@jafont@paren@a +\def\bxjs@resolve@jafont@paren@a#1(#2)#3\@nil#4\relax{% + \ifx\relax#4\relax \bxjs@tmpb\jsJaFont + \else + \edef\bxjs@tmpa{#1\bxjs@jafont@paren{#2}#3}% + \bxjs@tmpb\bxjs@tmpa + \fi} +% \end{macrocode} +% \end{macro} +% +%^^A---------------- +% \subsection{{\pTeX}用設定} +% +% \begin{macrocode} +\if j\jsEngine +% \end{macrocode} +% +% \paragraph{共通命令の実装} +% +% \begin{macrocode} +\def\bxjs@apply@kanjiskip{% + \kanjiskip\@tempskipa} +\def\bxjs@apply@xkanjiskip{% + \xkanjiskip\@tempskipa} +% \end{macrocode} +% +% |\jaJaChar| のサブマクロ。 +% \begin{macrocode} +\def\bxjs@jachar#1{% + \bxjs@jachar@a#1....\@nil} +\def\bxjs@jachar@a#1#2#3#4#5\@nil{% +% \end{macrocode} +% 引数が単一トークンなら和文文字トークンが得られたと +% 見なしてそれをそのまま出力する。 +% \begin{macrocode} + \ifx.#2#1% +% \end{macrocode} +% 引数が複数トークンの場合は、UTF-8のバイト列であると見なし、 +% そのスカラー値を |\@tempcnta| に代入する。 +% \begin{macrocode} + \else\ifx.#3% + \@tempcnta`#1 \multiply\@tempcnta64 + \advance\@tempcnta`#2 \advance\@tempcnta-"3080 + \bxjs@jachar@b + \else\ifx.#4% + \@tempcnta`#1 \multiply\@tempcnta64 + \advance\@tempcnta`#2 \multiply\@tempcnta64 + \advance\@tempcnta`#3 \advance\@tempcnta-"E2080 + \bxjs@jachar@b + \else + \@tempcnta`#1 \multiply\@tempcnta64 + \advance\@tempcnta`#2 \multiply\@tempcnta64 + \advance\@tempcnta`#3 \multiply\@tempcnta64 + \advance\@tempcnta`#4 \advance\@tempcnta-"3C82080 + \bxjs@jachar@b + \fi\fi\fi} +% \end{macrocode} +% 符号値が |\@tempcnta| の和文文字を出力する処理。 +% \begin{macrocode} +\ifjsWithupTeX + \def\bxjs@jachar@b{\kchar\@tempcnta} +\else + \def\bxjs@jachar@b{% + \ifx\bxUInt\@undefined\else + \bxUInt{\@tempcnta}% + \fi} +\fi +% \end{macrocode} +% +% 和欧文間空白の命令 |\jathinspace| の実装。 +% \begin{macrocode} +\ifbxjs@jaspace@cmd + \def\jathinspace{\hskip\xkanjiskip} +\fi +% \end{macrocode} +% +% \paragraph{jis2004パラメタ} +% +% |pxchfon| と |pxbabel| では2004JISを指定するオプションの +% 名が |prefer2004jis| である。 +% \begin{macrocode} +\ifbxjs@jp@jismmiv + \PassOptionsToPackage{prefer2004jis}{pxchfon} + \PassOptionsToPackage{prefer2004jis}{pxbabel} +\fi +% \end{macrocode} +% +% \paragraph{和文フォント指定の扱い} +% +% {\pTeX}は既定で |kanji-config-updmap| の設定に従うため、 +% |\jsJaFont| が |auto| の場合は何もする必要がない。 +% 無指定でも |auto| でもない場合は、|\jsJaFont| をオプションに +% して |pxchfon| パッケージを読み込む。 +% ここで、和文ドライバパラメタ |font| が指定されいる場合は、 +% その値を |pxchfon| のオプションに追加する。 +% \begin{macrocode} +\let\bxjs@jafont@paren\@firstofone +\let\bxjs@tmpa\jsJaFont +\ifx\bxjs@tmpa\bxjs@@auto + \let\bxjs@tmpa\@empty +\else\ifx\bxjs@tmpa\bxjs@@noEmbed + \def\bxjs@tmpa{noembed} +\fi\fi +\bxjs@resolve@jafont@paren\bxjs@tmpa +\edef\bxjs@tmpa{\bxjs@catopt\bxjs@tmpa\bxjs@jp@font} +\ifx\bxjs@tmpa\@empty\else + \edef\bxjs@next{% + \noexpand\RequirePackage[\bxjs@tmpa]{pxchfon}[2010/05/12]% v0.5 + }\bxjs@next +\fi +% \end{macrocode} +% +% \paragraph{otfパッケージ対策} +% +% インストールされている |otf| パッケージが |scale| オプションに +% 対応している場合は |scale=(\jsScaleの値)| を事前に |otf| に渡す。 +% \Note |scale| 対応は1.7b6版 [2013/11/17] から。 +% \Note otf.sty の中に「|\RequirePackage{keyval}|」の行が存在する +% かにより判定している。 +% (もっといい方法はないのか……。) +% +% \begin{macrocode} +\begingroup + \global\let\bxjs@g@tmpa\relax + \catcode`\|=0 \catcode`\\=12 + |def|bxjs@tmpdo#1|@nil{% + |bxjs@tmpdo@a#1|@nil\RequirePackage|@nnil}% + |def|bxjs@tmpdo@a#1\RequirePackage#2|@nnil{% + |ifx$#1$|bxjs@tmpdo@b#2|@nil keyval|@nnil |fi}% + |catcode`|\=0 \catcode`\|=12 + \def\bxjs@tmpdo@b#1keyval#2\@nnil{% + \ifx$#2$\else + \xdef\bxjs@g@tmpa{% + \noexpand\PassOptionsToPackage{scale=\jsScale}{otf}}% + \fi} +\@firstofone{% + \catcode10=12 \endlinechar\m@ne + \let\do\@makeother \dospecials \catcode32=10 + \openin\@inputcheck=otf.sty\relax + \@tempswatrue + \loop\if@tempswa + \ifeof\@inputcheck \@tempswafalse \fi + \if@tempswa + \read\@inputcheck to\bxjs@next + \expandafter\bxjs@tmpdo\bxjs@next\@nil + \fi + \repeat + \closein\@inputcheck +\endgroup} +\bxjs@g@tmpa +% \end{macrocode} +% +% \paragraph{hyperref対策} +% +% |unicode| にしてはいけない。 +% \begin{macrocode} +\ifbxjs@hyperref@enc + \bxjs@check@hyperref@unicode{false} +\fi +% \end{macrocode} +% +% |tounicode| special命令を出力する。 +% \begin{macrocode} +\if \ifx\bxjs@driver@given\bxjs@driver@@dvipdfmx T% + \else\ifjsWithpTeXng T\else F\fi\fi T% + \ifnum\jis"2121="A1A1 %euc + \bxjs@urgent@special{pdf:tounicode EUC-UCS2} + \else\ifnum\jis"2121="8140 %sjis + \bxjs@urgent@special{pdf:tounicode 90ms-RKSJ-UCS2} + \else\ifnum\jis"2121="3000 %uptex + \ifbxjs@bigcode + \bxjs@urgent@special{pdf:tounicode UTF8-UTF16} + \PassOptionsToPackage{bigcode}{pxjahyper} + \else + \bxjs@urgent@special{pdf:tounicode UTF8-UCS2} + \fi + \fi\fi\fi + \let\bxToUnicodeSpecialDone=t +\fi +% \end{macrocode} +% +% \paragraph{和文数式ファミリ} +% +% 和文数式ファミリは既定で有効とする。 +% すなわち |enablejfam=false| 以外の場合は |@enablejfam| を真にする。 +% \begin{macrocode} +\ifx f\bxjs@enablejfam\else + \@enablejfamtrue +\fi +% \end{macrocode} +% +% 実際に和文用の数式ファミリの設定を行う。 +% \begin{macrocode} +\if@enablejfam + \DeclareSymbolFont{mincho}{\jsc@JYn}{mc}{m}{n} + \DeclareSymbolFontAlphabet{\mathmc}{mincho} + \SetSymbolFont{mincho}{bold}{\jsc@JYn}{gt}{m}{n} + \jfam\symmincho + \DeclareMathAlphabet{\mathgt}{\jsc@JYn}{gt}{m}{n} + \g@addto@macro\bxjs@begin@document@hook{% + \ifx\reDeclareMathAlphabet\@undefined\else + \reDeclareMathAlphabet{\mathrm}{\@mathrm}{\@mathmc}% + \reDeclareMathAlphabet{\mathbf}{\@mathbf}{\@mathgt}% + \reDeclareMathAlphabet{\mathsf}{\@mathsf}{\@mathgt}% + \fi} +\fi +% \end{macrocode} +% +%^^A---------------- +% \subsection{pdf{\TeX}用設定: CJK + bxcjkjatype} +% +% \begin{macrocode} +\else\if p\jsEngine +% \end{macrocode} +% +% \paragraph{bxcjkjatypeパッケージの読込} +% +% |\jsJaFont| が指定されている場合は、その値を |bxcjkjatype| の +% オプション(プリセット指定)に渡す。 +% (|auto| ならば |\bxjs@get@kanjiEmbed| を実行する。) +% スケール値(|\jsScale|)の反映は bxcjkjatype の側で行われる。 +% \Note Pandocモードでは |autotilde| を指定しない。 +% \begin{macrocode} +\bxjs@adjust@jafont{f} +\let\bxjs@jafont@paren\@firstofone +\bxjs@resolve@jafont@paren\bxjs@tmpa +\edef\bxjs@tmpa{\bxjs@catopt\bxjs@tmpa\bxjs@jp@font} +\edef\bxjs@tmpa{\bxjs@catopt\bxjs@tmpa{whole}} +\def\bxjs@tmpb{pandoc}\ifx\bxjs@tmpb\bxjs@jadriver\else + \edef\bxjs@tmpa{\bxjs@catopt\bxjs@tmpa{autotilde}} +\fi +\edef\bxjs@next{% + \noexpand\RequirePackage[\bxjs@tmpa]{bxcjkjatype}[2013/10/15]% v0.2c +}\bxjs@next +\bxjs@cjk@loaded +% \end{macrocode} +% +% \paragraph{hyperref対策} +% +% |bxcjkjatype| 使用時は |unicode| にするべき。 +% \Note 取りあえず固定はしない。 +% \begin{macrocode} +\ifbxjs@hyperref@enc + \PassOptionsToPackage{unicode}{hyperref} +\fi +% \end{macrocode} +% +% |\hypersetup| 命令で(|CJK*| 環境に入れなくても)日本語文字を +% 含む文書情報を設定できるようにするための細工。 +% \Note bxcjkjatype を |whole| 付きで使っていることが前提。 +% \Note パッケージオプションでの指定に対応するのは、 +% 「アクティブな高位バイトトークンがその場で展開されてしまう」 +% ため困難である。 +% \begin{macrocode} +\ifx\bxcjkjatypeHyperrefPatchDone\@undefined +\begingroup + \CJK@input{UTF8.bdg} +\endgroup +\g@addto@macro\pdfstringdefPreHook{% + \@nameuse{CJK@UTF8Binding}% +} +\fi +% \end{macrocode} +% +% |~| が和欧文間空白である場合はPDF文字列中で空白文字で +% なく空に展開させる。 +% \begin{macrocode} +\ifx\bxcjkjatypeHyperrefPatchDone\@undefined +\g@addto@macro\pdfstringdefPreHook{% + \ifx~\bxjs@@CJKtilde + \let\bxjs@org@LetUnexpandableSpace\HyPsd@LetUnexpandableSpace + \let\HyPsd@LetUnexpandableSpace\bxjs@LetUnexpandableSpace + \let~\@empty + \fi +} +\def\bxjs@@CJKtilde{\CJKecglue\ignorespaces} +\def\bxjs@@tildecmd{~} +\def\bxjs@LetUnexpandableSpace#1{% + \def\bxjs@tmpa{#1}\ifx\bxjs@tmpa\bxjs@@tildecmd\else + \bxjs@org@LetUnexpandableSpace#1% + \fi} +\fi +% \end{macrocode} +% +% \paragraph{共通命令の実装} +% +% \begin{macrocode} +\newskip\jsKanjiSkip +\newskip\jsXKanjiSkip +\ifx\CJKecglue\@undefined + \def\CJKtilde{\CJK@global\def~{\CJKecglue\ignorespaces}} +\fi +\let\autospacing\bxjs@enable@kanjiskip +\let\noautospacing\bxjs@disable@kanjiskip +\protected\def\bxjs@CJKglue{\hskip\jsKanjiSkip} +\def\bxjs@apply@kanjiskip{% + \jsKanjiSkip\@tempskipa + \let\CJKglue\bxjs@CJKglue} +\let\autoxspacing\bxjs@enable@xkanjiskip +\let\noautoxspacing\bxjs@disable@xkanjiskip +\protected\def\bxjs@CJKecglue{\hskip\jsXKanjiSkip} +\def\bxjs@apply@xkanjiskip{% + \jsXKanjiSkip\@tempskipa + \let\CJKecglue\bxjs@CJKecglue} +% \end{macrocode} +% +% |\jachar| のサブマクロの実装。 +% \begin{macrocode} +\def\bxjs@jachar#1{% + \CJKforced{#1}} +% \end{macrocode} +% +% 和欧文間空白の命令 |\jathinspace| の実装。 +% \begin{macrocode} +\ifbxjs@jaspace@cmd + \protected\def\jathinspace{\CJKecglue} +\fi +% \end{macrocode} +% +% \paragraph{和文数式ファミリ} +% +% CJKパッケージは(恐らく)数式文字としてCJK文字をサポートしていない。 +% 従って |@enablejfam| は常に偽になる。 +% \begin{macrocode} +\ifx t\bxjs@enablejfam + \ClassWarningNoLine\bxjs@clsname + {You cannot use 'enablejfam=true', since the\MessageBreak + CJK package does not support Japanese math} +\fi +% \end{macrocode} +% +%^^A---------------- +% \subsection{{\XeTeX}用設定: xeCJK + zxjatype} +% +% \begin{macrocode} +\else\if x\jsEngine +% \end{macrocode} +% +% \paragraph{zxjatypeパッケージの読込} +% +% スケール値(|\jsScale|)の反映は zxjatype の側で行われる。 +% \begin{macrocode} +\RequirePackage{zxjatype} +\PassOptionsToPackage{no-math}{fontspec}%! +\PassOptionsToPackage{xetex}{graphicx}%! +\PassOptionsToPackage{xetex}{graphics}%! +\ifx\zxJaFamilyName\@undefined + \ClassError\bxjs@clsname + {xeCJK or zxjatype is too old}\@ehc +\fi +% \end{macrocode} +% +% \paragraph{和文フォント定義} +% +% |\jsJaFont| が指定された場合は、その値をオプションと +% して |zxjafont| を読み込む。 +% 非指定の場合はIPAexフォントを使用する。 +% \begin{macrocode} +\bxjs@adjust@jafont{f} +\let\bxjs@jafont@paren\@gobble +\bxjs@resolve@jafont@paren\bxjs@tmpa +\edef\bxjs@tmpa{\bxjs@catopt\bxjs@tmpa\bxjs@jp@font} +\ifx\bxjs@tmpa\@empty + \setCJKmainfont[BoldFont=ipaexg.ttf]{ipaexm.ttf} + \setCJKsansfont[BoldFont=ipaexg.ttf]{ipaexg.ttf} +\else + \edef\bxjs@next{% + \noexpand\RequirePackage[\bxjs@tmpa]{zxjafont}[2013/01/28]% v0.2a + }\bxjs@next +\fi +% \end{macrocode} +% +% \paragraph{hyperref対策} +% +% |unicode| オプションの指定に関する話。 +% +% {\XeTeX}の場合は、xdvipdfmxがUTF-8→UTF-16の変換を行う機能を +% 持っているため、本来はspecial命令の文字列の文字コード変換は不要である。 +% ところが、|hyperref| での方針としては、{\XeTeX}の場合にも +% パッケージ側で文字コード変換を行う方が望ましいと考えている。 +% 実際、|unicode| を無効にしていると警告が出て強制的に有効化される。 +% 一方で、過去(r35125まで)^^A2014/09/20 +% のxdvipdfmxでは、文字列をUTF-16に変換した状態で与えるのは不正と +% 見なしていて警告が発生する。 +% +% これを踏まえて、ここでは、 +% 「{\XeTeX}のバージョンが0.99992以上の場合に |unicode| を既定で +% 有効にする」 +% ことにする。 +% \Note 取りあえず固定はしない。 +% \begin{macrocode} +\ifnum\strcmp{\the\XeTeXversion\XeTeXrevision}{0.99992}>\m@ne + \ifbxjs@hyperref@enc + \PassOptionsToPackage{unicode}{hyperref} + \fi +\fi +% \end{macrocode} +% +% \paragraph{段落頭でのグルー挿入禁止} +% +% どうやら、\Pkg{zxjatype}の |\inhibitglue| の実装が極めて杜撰なため、 +% 1.0版での実装では全く期待通りの動作をしていないし、 +% そもそも(少なくとも現状の)\Pkg{xeCJK}では、 +% 段落頭での |\inhibitglue| は実行しないほうがJSクラスの出力に +% 近いものが得られるらしい。 +% +% 従って、|\jsInhibitGlueAtParTop| は結局何もしないことにする。 +% +% 強制改行直後のグルー禁止処理、のような怪しげな何か。 +% +% \begin{macrocode} +\AtEndOfPackage{% +\def\@gnewline #1{% + \ifvmode \@nolnerr + \else + \unskip \reserved@e {\reserved@f#1}\nobreak \hfil \break \null + \nobreak \hskip-1sp\hskip1sp\relax + \ignorespaces + \fi} +} +% \end{macrocode} +% +% \paragraph{共通命令の実装} +% +% \begin{macrocode} +\newskip\jsKanjiSkip +\newskip\jsXKanjiSkip +\ifx\CJKecglue\@undefined + \def\CJKtilde{\CJK@global\def~{\CJKecglue\ignorespaces}} +\fi +\let\autospacing\bxjs@enable@kanjiskip +\let\noautospacing\bxjs@disable@kanjiskip +\protected\def\bxjs@CJKglue{\hskip\jsKanjiSkip} +\def\bxjs@apply@kanjiskip{% + \jsKanjiSkip\@tempskipa + \xeCJKsetup{CJKglue={\bxjs@CJKglue}}} +\let\autoxspacing\bxjs@enable@xkanjiskip +\let\noautoxspacing\bxjs@disable@xkanjiskip +\protected\def\bxjs@CJKecglue{\hskip\jsXKanjiSkip} +\def\bxjs@apply@xkanjiskip{% + \jsXKanjiSkip\@tempskipa + \xeCJKsetup{CJKecglue={\bxjs@CJKecglue}}} +% \end{macrocode} +% +% |\mcfamily|、|\gtfamily| は本来は zxjatype の方で定義すべき +% であろうが、現状は暫定的にここで定義する。 +% \begin{macrocode} +\ifx\mcfamily\@undefined + \protected\def\mcfamily{\CJKfamily{\CJKrmdefault}} + \protected\def\gtfamily{\CJKfamily{\CJKsfdefault}} +\fi +% \end{macrocode} +% +% |\jachar| のサブマクロの実装。 +% \begin{macrocode} +\def\bxjs@jachar#1{% + \xeCJKDeclareCharClass{CJK}{`#1}\relax + #1} +% \end{macrocode} +% +% |\jathinspace| の実装。 +% \begin{macrocode} +\ifbxjs@jaspace@cmd + \protected\def\jathinspace{\CJKecglue} +\fi +% \end{macrocode} +% +% \paragraph{和文数式ファミリ} +% +% 和文数式ファミリは既定で無効とする。 +% すなわち |enablejfam=true| の場合にのみ |@enablejfam| を真にする。 +% \begin{macrocode} +\ifx t\bxjs@enablejfam + \@enablejfamtrue +\fi +% \end{macrocode} +% +% 実際に和文用の数式ファミリの設定を行う。 +% \Note FIXME: 要検討。 +% \begin{macrocode} +\if@enablejfam + \xeCJKsetup{CJKmath=true} +\fi +% \end{macrocode} +% +%^^A---------------- +% \subsection{Lua{\TeX}用設定: Lua{\TeX}-ja} +% +% \begin{macrocode} +\else\if l\jsEngine +% \end{macrocode} +% +% \paragraph{Lua{\TeX}-jaパッケージの読込} +% +% |luatexja| とともに |luatexja-fontspec| パッケージを読み込む。 +% +% |luatexja| は自前の |\zw|(これは実際の現在和文フォントに +% 基づく値を返す)を定義するので、|\zw| の定義を消しておく。 +% なお、レイアウト定義の「全角幅」は「規定」に基づく |\jsZw| で +% あることに注意が必要。 +% +% \Note 1.0b版から +% 「graphicsパッケージに |pdftex| オプションを渡す」 +% 処理を行っていたが、1.4版で廃止された。 +% +% \begin{macrocode} +\let\zw\@undefined +\RequirePackage{luatexja} +\edef\bxjs@next{% + \noexpand\RequirePackage[scale=\jsScale]{luatexja-fontspec}[2015/08/26]% +}\bxjs@next +% \end{macrocode} +% +% フォント代替の明示的定義。 +% \begin{macrocode} +\DeclareFontShape{JY3}{mc}{m}{it}{<->ssub*mc/m/n}{} +\DeclareFontShape{JY3}{mc}{m}{sl}{<->ssub*mc/m/n}{} +\DeclareFontShape{JY3}{mc}{m}{sc}{<->ssub*mc/m/n}{} +\DeclareFontShape{JY3}{gt}{m}{it}{<->ssub*gt/m/n}{} +\DeclareFontShape{JY3}{gt}{m}{sl}{<->ssub*gt/m/n}{} +\DeclareFontShape{JY3}{mc}{bx}{it}{<->ssub*gt/m/n}{} +\DeclareFontShape{JY3}{mc}{bx}{sl}{<->ssub*gt/m/n}{} +\DeclareFontShape{JY3}{gt}{bx}{it}{<->ssub*gt/m/n}{} +\DeclareFontShape{JY3}{gt}{bx}{sl}{<->ssub*gt/m/n}{} +\DeclareFontShape{JY3}{mc}{b}{n}{<->ssub*mc/bx/n}{} +\DeclareFontShape{JY3}{mc}{b}{it}{<->ssub*mc/bx/n}{} +\DeclareFontShape{JY3}{mc}{b}{sl}{<->ssub*mc/bx/n}{} +\DeclareFontShape{JY3}{gt}{b}{n}{<->ssub*gt/bx/n}{} +\DeclareFontShape{JY3}{gt}{b}{it}{<->ssub*gt/bx/n}{} +\DeclareFontShape{JY3}{gt}{b}{sl}{<->ssub*gt/bx/n}{} +\DeclareFontShape{JT3}{mc}{m}{it}{<->ssub*mc/m/n}{} +\DeclareFontShape{JT3}{mc}{m}{sl}{<->ssub*mc/m/n}{} +\DeclareFontShape{JT3}{mc}{m}{sc}{<->ssub*mc/m/n}{} +\DeclareFontShape{JT3}{gt}{m}{it}{<->ssub*gt/m/n}{} +\DeclareFontShape{JT3}{gt}{m}{sl}{<->ssub*gt/m/n}{} +\DeclareFontShape{JT3}{mc}{bx}{it}{<->ssub*gt/m/n}{} +\DeclareFontShape{JT3}{mc}{bx}{sl}{<->ssub*gt/m/n}{} +\DeclareFontShape{JT3}{gt}{bx}{it}{<->ssub*gt/m/n}{} +\DeclareFontShape{JT3}{gt}{bx}{sl}{<->ssub*gt/m/n}{} +\DeclareFontShape{JT3}{mc}{b}{n}{<->ssub*mc/bx/n}{} +\DeclareFontShape{JT3}{mc}{b}{it}{<->ssub*mc/bx/n}{} +\DeclareFontShape{JT3}{mc}{b}{sl}{<->ssub*mc/bx/n}{} +\DeclareFontShape{JT3}{gt}{b}{n}{<->ssub*gt/bx/n}{} +\DeclareFontShape{JT3}{gt}{b}{it}{<->ssub*gt/bx/n}{} +\DeclareFontShape{JT3}{gt}{b}{sl}{<->ssub*gt/bx/n}{} +% \end{macrocode} +% +% \paragraph{和文フォント定義} +% +% |\jsJaFont| が指定された場合は、その値をオプションと +% して |luatexja-preset| を読み込む。 +% 非指定の場合は、|luatexja-preset| パッケージの |ipaex| +% オプション(IPAexフォント使用)と等価な設定を用いる +% (|luatexja-preset| は読み込まない)。 +% \begin{macrocode} +\bxjs@adjust@jafont{t} +\ifx\bxjs@tmpa\bxjs@@noEmbed + \def\bxjs@tmpa{noembed} +\fi +\let\bxjs@jafont@paren\@gobble +\bxjs@resolve@jafont@paren\bxjs@tmpa +\edef\bxjs@tmpa{\bxjs@catopt\bxjs@tmpa\bxjs@jp@font} +\ifx\bxjs@tmpa\@empty + \defaultjfontfeatures{ Kerning=Off } + \setmainjfont[BoldFont=IPAexGothic,JFM=ujis]{IPAexMincho} + \setsansjfont[BoldFont=IPAexGothic,JFM=ujis]{IPAexGothic} +\else + \edef\bxjs@next{% + \noexpand\RequirePackage[\bxjs@tmpa]{luatexja-preset}% + }\bxjs@next +\fi +% \end{macrocode} +% +% 欧文総称フォント命令で和文フォントが連動するように修正する。 +% その他の和文フォント関係の定義を行う。 +% \begin{macrocode} +\DeclareRobustCommand\rmfamily + {\not@math@alphabet\rmfamily\mathrm + \romanfamily\rmdefault\kanjifamily\mcdefault\selectfont} +\DeclareRobustCommand\sffamily + {\not@math@alphabet\sffamily\mathsf + \romanfamily\sfdefault\kanjifamily\gtdefault\selectfont} +\DeclareRobustCommand\ttfamily + {\not@math@alphabet\ttfamily\mathtt + \romanfamily\ttdefault\kanjifamily\gtdefault\selectfont} +\g@addto@macro\bxjs@begin@document@hook{% + \reDeclareMathAlphabet{\mathrm}{\mathrm}{\mathmc} + \reDeclareMathAlphabet{\mathbf}{\mathbf}{\mathgt}% + \reDeclareMathAlphabet{\mathsf}{\mathsf}{\mathgt}}% +\bxjs@if@sf@default{% + \renewcommand\kanjifamilydefault{\gtdefault}} +% \end{macrocode} +% +% \paragraph{和文パラメタの設定} +% +% \begin{macrocode} +% 次の3つは既定値の通り +%\ltjsetparameter{prebreakpenalty={`’,10000}} +%\ltjsetparameter{postbreakpenalty={`“,10000}} +%\ltjsetparameter{prebreakpenalty={`”,10000}} +\ltjsetparameter{jaxspmode={`!,1}} +\ltjsetparameter{jaxspmode={`〒,2}} +\ltjsetparameter{alxspmode={`+,3}} +\ltjsetparameter{alxspmode={`\%,3}} +% \end{macrocode} +% +% \paragraph{段落頭でのグルー挿入禁止} +% +% 基本的に現状の |ltjs*| クラスの処理に合わせる。 +% \Note |\jsInhibitGlueAtParTop| は使わない。 +% +% \begin{macro}{\ltjfakeparbegin} +% 現在の{\LuaTeX-ja}で定義されているマクロで、 +% 段落中で段落冒頭用の処理を発動する。 +% 未定義である場合にに備えて同等のものを用意する。 +% \begin{macrocode} +\ifx\ltjfakeparbegin\@undefined + \protected\def\ltjfakeparbegin{% + \ifhmode + \relax\directlua{% + luatexja.jfmglue.create_beginpar_node()}} + \fi} +\fi +% \end{macrocode} +% \end{macro} +% +% |ltjs*| クラスの定義と同等になるようにパッチを当てる。 +% \begin{macrocode} +\unless\ifnum\bxjs@everyparhook=\bxjs@everyparhook@none +\begingroup + \let\%\@percentchar \def\@#1{[[\detokenize{#1}]]} + \@gobble\if\def\bxjs@tmpa{\@{\everypar{}\fi}} + \ifnum\bxjs@everyparhook=\bxjs@everyparhook@compat + \@gobble\if\def\bxjs@tmpa{\@{\everypar{\everyparhook}\fi}}\fi + \directlua{ + local function patchcmd(cs, code, from, to) + tex.sprint(code:gsub(from:gsub("\%W", "\%\%\%0"), "\%0"..to) + :gsub("macro:", \@\gdef..cs, 1):gsub("->", "{", 1).."}") + end + patchcmd(\@\@xsect, [[\meaning\@xsect]], + \@{\hskip-\@tempskipa}, \@\ltjfakeparbegin) + patchcmd(\@\@item, [[\meaning\@item]], + \bxjs@tmpa, \@\ltjfakeparbegin)} +\endgroup +\fi +% \end{macrocode} +% +% \paragraph{hyperref対策} +% +% |unicode| にするべき。 +% \Note 1.6c版より、固定ではなく既定設定+検証に切り替えた。 +% \begin{macrocode} +\ifbxjs@hyperref@enc + \PassOptionsToPackage{unicode}{hyperref} + \bxjs@check@hyperref@unicode{true} +\fi +% \end{macrocode} +% +% \paragraph{共通命令の実装} +% +% \begin{macrocode} +\protected\def\autospacing{% + \ltjsetparameter{autospacing=true}} +\protected\def\noautospacing{% + \ltjsetparameter{autospacing=false}} +\protected\def\autoxspacing{% + \ltjsetparameter{autoxspacing=true}} +\protected\def\noautoxspacing{% + \ltjsetparameter{autoxspacing=false}} +\def\bxjs@apply@kanjiskip{% + \ltjsetparameter{kanjiskip={\@tempskipa}}} +\def\bxjs@apply@xkanjiskip{% + \ltjsetparameter{xkanjiskip={\@tempskipa}}} +% \end{macrocode} +% +% |\jachar| のサブマクロの実装。 +% \begin{macrocode} +\def\bxjs@jachar#1{% + \ltjjachar`#1\relax} +% \end{macrocode} +% +% |\jathinspace| の実装。 +% \begin{macrocode} +\ifbxjs@jaspace@cmd + \protected\def\jathinspace{% + \hskip\ltjgetparameter{xkanjiskip}\relax} +\fi +% \end{macrocode} +% +% \paragraph{和文数式ファミリ} +% +% Lua{\TeX}-jaでは和文数式ファミリは常に有効で、既にこの時点で必要な +% 設定は済んでいる。 +% 従って |@enablejfam| は常に真になる。 +% \begin{macrocode} +\ifx f\bxjs@enablejfam + \ClassWarningNoLine\bxjs@clsname + {You cannot use 'enablejfam=false', since the\MessageBreak + LuaTeX-ja always provides Japanese math families} +\fi +% \end{macrocode} +% +%^^A---------------- +% \subsection{共通処理(2)} +% +% \begin{macrocode} +\fi\fi\fi\fi +% \end{macrocode} +% +% \paragraph{共通命令の実装} +% \begin{macro}{\textmc} +% \begin{macro}{\textgt} +% minimal ドライバ実装中で定義した |\DeclareJaTextFontCommand| +% を利用する。 +% \begin{macrocode} +\ifx\DeclareFixJFMCJKTextFontCommand\@undefined +\DeclareJaTextFontCommand{\textmc}{\mcfamily} +\DeclareJaTextFontCommand{\textgt}{\gtfamily} +\fi +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\mathmc} +% \begin{macro}{\mathgt} +% この時点で未定義である場合に限り、 +% |\DeclareJaMathFontCommand| を利用したフォールバックの定義を行う。 +% \begin{macrocode} +\ifx\mathmc\@undefined + \DeclareJaMathFontCommand{\mathmc}{\mcfamily} + \DeclareJaMathFontCommand{\mathgt}{\gtfamily} +\fi +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \paragraph{和文空白命令} +% \begin{macro}{\>} +% 非数式中では |\jathinspace| と等価になるように再定義する。 +% \Note 数式中では従来通り(|\:| と等価)。 +% \begin{macrocode} +\ifbxjs@jaspace@cmd + \bxjs@protected\def\bxjs@choice@jathinspace{% + \relax\ifmmode \mskip\medmuskip + \else \jathinspace\ignorespaces + \fi} + \jsAtEndOfClass{% + \ifjsWitheTeX \let\>\bxjs@choice@jathinspace + \else \def\>{\protect\bxjs@choice@jathinspace}% + \fi} +\fi +% \end{macrocode} +% \end{macro} +% +% \paragraph{和文・和欧文間空白の初期値} +% +% \begin{macrocode} +\setkanjiskip{0pt plus.1\jsZw minus.01\jsZw} +\ifx\jsDocClass\jsSlide \setxkanjiskip{0.1em} +\else \setxkanjiskip{0.25em plus 0.15em minus 0.06em} +\fi +% \end{macrocode} +% +% 以上で終わり。 +% +% \begin{macrocode} +%</standard> +% \end{macrocode} +% +%^^A======================================================== +% \section{和文ドライバ:modern \ZRX} +% +% モダーンな設定。 +% +% standardドライバの設定を引き継ぐ。 +% \begin{macrocode} +%<*modern> +\input{bxjsja-standard.def} +% \end{macrocode} +% +%^^A---------------- +%\subsection{フォント設定} +% +% T1エンコーディングに変更する。 +% \Note 以下のコードは |\usepackage[T1]{fontenc}| と同等。 +% \begin{macrocode} +\ifnum0\if x\jsEngine1\fi\if l\jsEngine1\fi=\z@ +\def\encodingdefault{T1}% +\input{t1enc.def}% +\fontencoding\encodingdefault\selectfont +\fi +% \end{macrocode} +% +% 基本フォントをLatin Modernフォントファミリに変更する。 +% \Note 以下は |\usepackage[noamth]{lmodern}| と同じ。 +% ユーザは後で |lmodern| を好きなオプションを付けて読み込む +% ことができる。 +% \begin{macrocode} +\ifnum0\if x\jsEngine1\fi\if l\jsEngine1\fi=\z@ +\renewcommand{\rmdefault}{lmr} +\renewcommand{\sfdefault}{lmss} +\renewcommand{\ttdefault}{lmtt} +\fi +% \end{macrocode} +% +% 大型演算子用の数式フォントの設定。 +% \Note |amsfonts| パッケージと同等にする。 +% \begin{macrocode} +\DeclareFontShape{OMX}{cmex}{m}{n}{% + <-7.5>cmex7<7.5-8.5>cmex8% + <8.5-9.5>cmex9<9.5->cmex10}{}% +\expandafter\let\csname OMX/cmex/m/n/10\endcsname\relax +% \end{macrocode} +% |amsmath| 読込時に上書きされるのを防ぐ。 +% \begin{macrocode} +\def\cmex@opt{10} +% \end{macrocode} +% +%^^A---------------- +% \subsection{fixltx2e読込} +% +% \Note |fixltx2e| 廃止前の{\LaTeX}カーネルの場合。 +% \begin{macrocode} +\ifx\@IncludeInRelease\@undefined +\RequirePackage{fixltx2e} +\fi +% \end{macrocode} +% +%^^A---------------- +% \subsection{和文カテゴリコード} +% +% 和文カテゴリコード設定のための補助パッケージを読みこむ。 +% \begin{macrocode} +\RequirePackage{bxjscjkcat} +% \end{macrocode} +% +%^^A---------------- +% \subsection{完了} +% おしまい。 +% \begin{macrocode} +%</modern> +% \end{macrocode} +% +%^^A======================================================== +% \section{和文ドライバ:pandoc \ZRX} +% +% Pandoc用の何か。 +% +% standardドライバの設定を引き継ぐ。 +% \begin{macrocode} +%<*pandoc> +\input{bxjsja-standard.def} +% \end{macrocode} +% +% |bxjspandoc| パッケージを読み込む。 +% \begin{macrocode} +\RequirePackage{bxjspandoc} +% \end{macrocode} +% +% \begin{macro}{\bxjs@endpreamble@hook} +% |etoolbox| の |\AtEndPreamble| で実行されるBXJSクラス用のフック。 +% \Note {\eTeX}以外では無効になる。 +% (将来pandocの外に出す可能性あり。) +% \begin{macrocode} +\@onlypreamble\bxjs@endpreamble@hook +\let\bxjs@endpreamble@hook\@empty +\ifjsWitheTeX + \RequirePackage{etoolbox}[2010/08/21]% v2.0 + \AtEndPreamble{\bxjs@endpreamble@hook} +\fi +% \end{macrocode} +% \end{macro} +% +%^^A---------------- +%\subsection{duploadシステム} +% +% パッケージが重複して読み込まれたときに“option clash”の +% 検査をスキップする。 +% この時に何らかのコードを実行させることができる。 +% +% \begin{macro}{\bxjs@set@dupload@proc} +% |\bxjs@set@dupload@proc{|\Meta{ファイル名}|}{|\Meta{定義本体}|}| +% 特定のファイルの読込が |\@filewithoptions| で指示されて、しかも +% そのファイルが読込済である場合に、オプション重複検査をスキップして、 +% 代わりに\Meta{定義本体}のコードを実行する。 +% このコード中で |#1| は渡されたオプション列のテキストに置換される。 +% \begin{macrocode} +\@onlypreamble\bxjs@set@dupload@proc +\def\bxjs@set@dupload@proc#1{% + \expandafter\bxjs@set@dupload@proc@a\csname bxjs@dlp/#1\endcsname} +\@onlypreamble\bxjs@set@dupload@proc@a +\def\bxjs@set@dupload@proc@a#1{% + \@onlypreamble#1\def#1##1} +\def\bxjs@unset@dupload@proc#1{% + \expandafter\let\csname bxjs@dlp/#1\endcsname\@undefined} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@if@ptions} +% |\@if@ptions| の再定義。 +% \begin{macrocode} +\@onlypreamble\bxjs@org@if@ptions +\let\bxjs@org@if@ptions\@if@ptions +\@onlypreamble\bxjs@org@reset@ptions +\let\bxjs@org@reset@ptions\relax +\def\@if@ptions#1#2#3{% + \let\bxjs@next\@secondoftwo + \def\bxjs@tmpa{#1}\def\bxjs@tmpb{\@currext}% + \ifx\bxjs@tmpa\bxjs@tmpb + \expandafter\ifx\csname bxjs@dlp/#2.#1\endcsname\relax\else + \let\bxjs@next\@firstoftwo \fi + \fi + \bxjs@next\bxjs@do@dupload@proc\bxjs@org@if@ptions{#1}{#2}{#3}} +\g@addto@macro\bxjs@begin@document@hook{% + \let\@if@ptions\bxjs@org@if@ptions} +\@onlypreamble\bxjs@do@dupload@proc +\def\bxjs@do@dupload@proc#1#2#3{% + \ifx\bxjs@org@reset@ptions\relax + \let\bxjs@org@reset@ptions\@reset@ptions + \fi + \bxjs@csletcs{bxjs@next}{bxjs@dlp/#2.#1}% + \def\@reset@ptions{% + \let\@reset@ptions\bxjs@org@reset@ptions + \@reset@ptions + \bxjs@next{#3}}% + \@firstoftwo} +% \end{macrocode} +% \end{macro} +% +%^^A---------------- +%\subsection{lang変数} +% |lang=ja| という言語指定が行われると、 +% Pandocはこれに対応していないため +% 不完全なBabelやPolyglossiaの設定を出力してしまう。 +% これを防ぐための対策を行う。 +% +% \begin{macro}{\bxjs@polyglossia@options} +% Polyglossiaのオプション列のテキスト。 +% “実際には読み込まれていない”場合は |\relax| になる。 +% \begin{macrocode} +\let\bxjs@polyglossia@options\relax +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\bxjs@babel@options} +% Babelのオプション列のテキスト。 +% “実際には読み込まれていない”場合は |\relax| になる。 +% \begin{macrocode} +\let\bxjs@babel@options\relax +% \end{macrocode} +% \end{macro} +% +% \paragraph{Polyglossiaについて} +% つまり{\XeTeX}・{Lua\TeX}の場合。 +% \Note この場合 |etoolbox| が使用可能になっている。 +% \begin{macrocode} +\ifnum0\if x\jsEngine1\fi\if l\jsEngine1\fi>0 +% \end{macrocode} +% +% パッケージの読込を検知するため読込済のマークを付けて +% duploadの処理を仕込む。 +% \begin{macrocode} +\pandocSkipLoadPackage{polyglossia} +\bxjs@set@dupload@proc{polyglossia.sty}{% + \bxjs@unset@dupload@proc{polyglossia.sty}% + \ClassWarning\bxjs@clsname + {Package polyglossia is required}% + \def\bxjs@polyglossia@options{#1}% +% \end{macrocode} +% +% |polyglossia| の読込が指示された場合、 +% 直後に |\setmainlanguage| が実行されることを想定して、 +% フック用の |\setmainlanguage| を定義する。 +% \Note 先に |\setmainlanguage| 以外が実行された場合はエラーになる。 +% \begin{macrocode} + \newcommand*\setmainlanguage[2][]{% +% \end{macrocode} +% もし、言語名が空の |\setmainlanguage{}| が実行された場合は、 +% |lang=ja| が指定されたと見なす。 +% \begin{macrocode} + \ifblank{##2}{% + \ClassWarning\bxjs@clsname + {Main language is invalid, thus the fallback\MessageBreak + definitions will be employed}% + \bxjs@pandoc@lang@ja +% \end{macrocode} +% 言語名が非空ならば、本来の |polyglossia| の処理を実行する。 +% \begin{macrocode} + }{%else + \ClassWarning\bxjs@clsname + {Main language is valid (##2),\MessageBreak + thus polyglossia will be loaded}% + \csundef{ver@polyglossia.sty}% + \edef\bxjs@next{% + \noexpand\RequirePackage[\bxjs@polyglossia@options]{polyglossia}[]% + }\bxjs@next + \setmainlanguage[##1]{##2}% + }}} +% \end{macrocode} +% +% プレアンブルで |polyglossia| の読込が指示されなかった場合、 +% Polyglossiaと連携するパッケージの誤動作を防ぐため、 +% 読込済マークを外す。 +% \begin{macrocode} +\g@addto@macro\bxjs@endpreamble@hook{% + \ifx\bxjs@polyglossia@options\relax + \csundef{ver@polyglossia.sty}% + \fi} +% \end{macrocode} +% +% \begin{macro}{\bxjs@pandoc@lang@ja} +% Pandoc側で |lang=ja| が指定されていた場合の処理。 +% この場合はPolyglossiaの処理を無効化するためにダミーの定義を行う。 +% その時点でダミーの |\setotherlanguage(s)| を定義する。 +% \begin{macrocode} +\@onlypreamble\bxjs@pandoc@lang@ja +\def\bxjs@pandoc@lang@ja{% + \renewcommand*\setmainlanguage[2][]{}% + \newcommand*\setotherlanguage[2][]{% + \ifblank{##2}{}{%else + \cslet{##2}\@empty \cslet{end##2}\@empty + \cslet{text##2}\@firstofone}}% + \newcommand*\setotherlanguages[2][]{% + \@for\bxjs@tmpa:={##2}\do{% + \setotherlangauge{\bxjs@tmpa}}}% +% \end{macrocode} +% Polyglossiaの読込済マークは外れるようにしておく。 +% \begin{macrocode} + \let\bxjs@polyglossia@options\relax}% +% \end{macrocode} +% \end{macro} +% +% \begin{macrocode} +\fi +% \end{macrocode} +% +% \paragraph{Babelについて} +% {\XeTeX}以外の場合。 +% \Note Pandoc 2.6版において、Lua{\TeX}で用いられる多言語パッケージが +% PolyglossiaからBabelに変更された。 +% \begin{macrocode} +\if x\jsEngine\else +% \end{macrocode} +% +% パッケージの読込を検知するため読込済のマークを付けて +% duploadの処理を仕込む。 +% \begin{macrocode} +\pandocSkipLoadPackage{babel} +\bxjs@set@dupload@proc{babel.sty}{% + \bxjs@unset@dupload@proc{babel.sty}% + \ClassWarning\bxjs@clsname + {Package babel is required}% +% \end{macrocode} +% パッケージオプションに言語名が空の |main=| があるかを調べる。 +% ある場合は |lang=ja| 対策を実行する。 +% \Note |\bxjs@babel@options| には |main=| を除いたオプション列を +% 格納する。 +% \begin{macrocode} + \@tempswafalse \let\bxjs@babel@options\@empty + \def\bxjs@tmpb{main=}% + \@for\bxjs@tmpa:=#1\do{% + \ifx\bxjs@tmpa\bxjs@tmpb \@tempswatrue + \else \edef\bxjs@babel@options{\bxjs@babel@options,\bxjs@tmpa}% + \fi}% + \if@tempswa + \ClassWarning\bxjs@clsname + {Main language is invalid, so fallback\MessageBreak + definitions will be employed}% + \bxjs@pandoc@lang@ja +% \end{macrocode} +% ない場合は、本来の |babel| の処理を実行する。 +% \begin{macrocode} + \else + \ClassWarning\bxjs@clsname + {Main language is valid,\MessageBreak + thus babel will be loaded}% + \expandafter\let\csname ver@babel.sty\endcsname\@undefined + \RequirePackage[#1]{babel}[]% + \fi} +% \end{macrocode} +% +% プレアンブルで |babel| の読込が指示されなかった場合、 +% 読込済マークを外す。 +% \begin{macrocode} +\g@addto@macro\bxjs@endpreamble@hook{% + \ifx\bxjs@babel@options\relax + \expandafter\let\csname ver@babel.sty\endcsname\@undefined + \fi} +% \end{macrocode} +% +% \begin{macro}{\bxjs@pandoc@lang@ja} +% Pandoc側で |lang=ja| が指定されていた場合の処理。 +% \begin{macrocode} +\@onlypreamble\bxjs@pandoc@lang@ja +\def\bxjs@pandoc@lang@ja{% + \expandafter\let\csname ver@babel.sty\endcsname\@undefined + \edef\bxjs@next{% + \noexpand\RequirePackage[\bxjs@babel@options,english]{babel}[]% + }\bxjs@next + \if j\jsEngine + \RequirePackage[main=japanese]{pxbabel}[]% + \else + \RequirePackage{bxorigcapt}[]% + \fi} +% \end{macrocode} +% \end{macro} +% +% lang対策はこれで終わり。 +% \begin{macrocode} +\fi +% \end{macrocode} +% +%^^A---------------- +%\subsection{geometry変数} +% |geometry| を“再度読み込んだ”場合に、 +% そのパラメタで |\setpagelayout*| が呼ばれるようにする。 +% +% \begin{macrocode} +\bxjs@set@dupload@proc{geometry.sty}{% + \setpagelayout*{#1}} +% \end{macrocode} +% +%^^A---------------- +%\subsection{CJKmainfont変数} +% Lua{\TeX}(+ Lua{TeX}-ja)の場合に CJKmainfont 変数が +% 指定された場合は |\setmainjfont| の指定にまわす。 +% \begin{macrocode} +\if l\jsEngine + \pandocSkipLoadPackage{xeCJK} + \providecommand*{\setCJKmainfont}{\setmainjfont} +\fi +% \end{macrocode} +% +%^^A---------------- +%\subsection{paragraphのマーク} +% +% BXJSクラスでは |\paragraph| の見出しの前に |\jsParagraphMark| +% で指定したマークが付加され、既定ではこれは“■”である。 +% しかし、この規定は |\paragraph| が本来のレイアウトを保っている、 +% すなわち「行内見出しである」「節番号が付かない」ことが前提になって +% いると考えられる。 +% Pandocはこの規定を変更することがある +% (特に既定で |\paragraph| を別行見出しに再定義する) +% ため、変更された場合は |\jsParagraphMark| の既定値を空にする。 +% +% Pandocがプレアンブルで行う再定義の結果を調べるため、 +% begin-documentフックを利用する。 +% \begin{macrocode} +\g@addto@macro\bxjs@begin@document@hook{% + \@tempswafalse +% \end{macrocode} +% まず、マーク変更が必要かを調べる。 +% |\oldparagraph| という制御綴が定義済の場合、Pandocが |\paragraph| +% の様式を変更したということなので、マーク変更が必要である。 +% \begin{macrocode} + \ifx\oldparagraph\@undefined\else + \@tempswatrue + \fi +% \end{macrocode} +% |\paragraph| が番号付きの場合は、マーク変更が必要である。 +% \begin{macrocode} + \ifnum\c@secnumdepth>3 + \@tempswatrue + \fi +% \end{macrocode} +% 「マーク変更が必要」である場合、|\jsParagraphMark| が既定値のままで +% あれば空に変更する。 +% \begin{macrocode} + \if@tempswa\ifx\jsParagraphMark\bxjs@org@paragraph@mark + \let\jsParagraphMark\@empty + \fi\fi} +% \end{macrocode} +% +%^^A---------------- +%\subsection{全角空白文字} +% +% \begin{macrocode} +\ifnum0\if x\jsEngine1\fi\if l\jsEngine1\fi>\z@ + \catcode"3000=\active + \begingroup \catcode`\!=7 + \protected\gdef!!!!3000{\zwspace} + \endgroup +\else\ifx\DeclareUnicodeCharacter\@undefined\else + \DeclareUnicodeCharacter{3000}{\bxjs@zsp@char} + \bxjs@protected\def\bxjs@zsp@char{\zwspace} +\fi\fi +% \end{macrocode} +% +%^^A---------------- +% \paragraph{hyperref対策} +% +% |hyperref| の |unicode| オプションの固定を行う。 +% \begin{macrocode} +\if j\jsEngine + \bxjs@fix@hyperref@unicode{false} +\else + \bxjs@fix@hyperref@unicode{true} +\fi +% \end{macrocode} +% +%^^A---------------- +% \subsection{完了} +% おしまい。 +% \begin{macrocode} +%</pandoc> +% \end{macrocode} +% +% 和文ドライバ実装はここまで。 +% \begin{macrocode} +%</drv> +% \end{macrocode} +% +%^^A======================================================== +% \section{補助パッケージ一覧 \ZRX} +% +% BXJSクラスの機能を実現するために用意されたものだが、 +% 他のクラスの文書で読み込んで利用することもできる。 +% +% \begin{itemize} +% \item bxjscompat : ムニャムニャムニャ。 +% \item bxjscjkcat: modernドライバ用の和文カテゴリを適用する。 +% \item bxjspandoc : Pandoc用のナニカ。 +% \end{itemize} +% +% \begin{macrocode} +%<*anc> +% \end{macrocode} +% +%^^A======================================================== +% \section{補助パッケージ:bxjscompat \ZRX} +% +% ムニャムニャムニャ……。 +% +%^^A---------------- +% \subsection{準備} +% +% \begin{macrocode} +%<*compat> +\def\bxac@pkgname{bxjscompat} +% \end{macrocode} +% +% \begin{macro}{\bxjx@engine} +% エンジンの種別。 +% \begin{macrocode} +\let\bxac@engine=n +\def\bxac@do#1#2{% + \edef\bxac@tmpa{\string#1}% + \edef\bxac@tmpb{\meaning#1}% + \ifx\bxac@tmpa\bxac@tmpb #2\fi} +\bxac@do\XeTeXversion{\let\bxac@engine=x} +\bxac@do\luatexversion{\let\bxac@engine=l} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\bxac@delayed@if@bxjs} +% もしBXJSクラスの読込中でこのパッケージが読み込まれているならば、 +% BXJSのクラスの終わりまで実行を遅延する。 +% \begin{macrocode} +\ifx\jsAtEndOfClass\@undefined + \let\bxac@delayed@if@bxjs\@firstofone +\else \let\bxac@delayed@if@bxjs\jsAtEndOfClass +\fi +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\ImposeOldLuaTeXBehavior} +% \begin{macro}{\RevokeOldLuaTeXBehavior} +% ムニャムニャ。 +% \begin{macrocode} +\newif\ifbxac@in@old@behavior +\let\ImposeOldLuaTeXBehavior\relax +\let\RevokeOldLuaTeXBehavior\relax +% \end{macrocode} +% \end{macro} +% \end{macro} +% +%^^A---------------- +% \subsection{{\XeTeX}部分} +% \begin{macrocode} +\ifx x\bxac@engine +% \end{macrocode} +% +% {\XeTeX}文字クラスのムニャムニャ。 +% \begin{macrocode} +\@onlypreamble\bxac@adjust@charclass +\bxac@delayed@if@bxjs{% + \@ifpackageloaded{xeCJK}{}{%else + \ifx\xe@alloc@intercharclass\@undefined\else + \ifnum\xe@alloc@intercharclass=\z@ + \PackageInfo\bxac@pkgname + {Setting up interchar class for CJK...\@gobble}% + \InputIfFileExists{load-unicode-xetex-classes.tex}{% + \xe@alloc@intercharclass=3 + }{%else + \PackageWarning\bxac@pkgname + {Cannot find file 'load-unicode-xetex-classes.tex'% + \@gobble}% + }% + \fi\fi + \ifnum\XeTeXcharclass"3041=\z@ + \PackageInfo\bxac@pkgname + {Adjusting interchar class for CJK...\@gobble}% + \@for\bxac@x:={% + 3041,3043,3045,3047,3049,3063,3083,3085,3087,308E,% + 3095,3096,30A1,30A3,30A5,30A7,30A9,30C3,30E3,30E5,% + 30E7,30EE,30F5,30F6,30FC,31F0,31F1,31F2,31F3,31F4,% + 31F5,31F6,31F7,31F8,31F9,31FA,31FB,31FC,31FD,31FE,% + 31FF% + }\do{\XeTeXcharclass"\bxac@x=\@ne}% + \fi + }% +} +% \end{macrocode} +% 以上。 +% \begin{macrocode} +\fi +% \end{macrocode} +% +%^^A---------------- +% \subsection{Lua{\TeX}部分} +% \begin{macrocode} +\ifx l\bxac@engine +% \end{macrocode} +% +% ムニャムニャ。 +% \begin{macrocode} +\unless\ifnum\luatexversion<80 \ifnum\luatexversion<85 + \chardef\pdftexversion=200 + \def\pdftexrevision{0} + \let\pdftexbanner\luatexbanner +\fi\fi +% \end{macrocode} +% +% \begin{macro}{\ImposeOldLuaTeXBehavior} +% \begin{macro}{\RevokeOldLuaTeXBehavior} +% ムニャムニャ。 +% \begin{macrocode} +\begingroup\expandafter\expandafter\expandafter\endgroup +\expandafter\ifx\csname outputmode\endcsname\relax\else +\def\bxac@ob@list{% + \do{\let}\pdfoutput{\outputmode}% + \do{\let}\pdfpagewidth{\pagewidth}% + \do{\let}\pdfpageheight{\pageheight}% + \do{\protected\edef}\pdfhorigin{{\pdfvariable horigin}}% + \do{\protected\edef}\pdfvorigin{{\pdfvariable vorigin}}} +\def\bxac@ob@do#1#2{\begingroup + \expandafter\bxac@ob@do@a\csname bxac@\string#2\endcsname{#1}#2} +\def\bxac@ob@do@a#1#2#3#4{\endgroup + \ifbxac@in@old@behavior \let#1#3\relax #2#3#4\relax + \else \let#3#1\relax \let#1\@undefined + \fi} +\protected\def\ImposeOldLuaTeXBehavior{% + \unless\ifbxac@in@old@behavior + \bxac@in@old@behaviortrue + \let\do\bxac@ob@do \bxac@ob@list + \fi} +\protected\def\RevokeOldLuaTeXBehavior{% + \ifbxac@in@old@behavior + \bxac@in@old@behaviorfalse + \let\do\bxac@ob@do \bxac@ob@list + \fi} +\fi +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% 漢字および完成形ハングルのカテゴリコードのムニャムニャ。 +% \begin{macrocode} + \ifnum\luatexversion>64 \directlua{ + local function range(cs, ce, cc, ff) + if ff or not tex.getcatcode(cs) == cc then + local setcc = tex.setcatcode + for c = cs, ce do setcc(c, cc) end + end + end + range(0x3400, 0x4DB5, 11, false) + range(0x4DB5, 0x4DBF, 11, true) + range(0x4E00, 0x9FCC, 11, false) + range(0x9FCD, 0x9FFF, 11, true) + range(0xAC00, 0xD7A3, 11, false) + range(0x20000, 0x2A6D6, 11, false) + range(0x2A6D7, 0x2A6FF, 11, true) + range(0x2A700, 0x2B734, 11, false) + range(0x2B735, 0x2B73F, 11, true) + range(0x2B740, 0x2B81D, 11, false) + range(0x2B81E, 0x2B81F, 11, true) + range(0x2B820, 0x2CEA1, 11, false) + range(0x2CEA2, 0x2FFFD, 11, true) + }\fi +% \end{macrocode} +% +% 以上。 +% \begin{macrocode} +\fi +% \end{macrocode} +% +%^^A---------------- +% \subsection{完了} +% おしまい。 +% \begin{macrocode} +%</compat> +% \end{macrocode} +% +%^^A======================================================== +% \section{補助パッケージ:bxjscjkcat \ZRX} +% +% modernドライバ用の和文カテゴリを適用する。 +% +%^^A---------------- +% \subsection{準備} +% +% \begin{macrocode} +%<*cjkcat> +\def\bxjx@pkgname{bxjscjkcat} +\newcount\bxjx@cnta +\@onlypreamble\bxjx@tmpdo +\@onlypreamble\bxjx@tmpdo@a +\@onlypreamble\bxjx@tmpdo@b +% \end{macrocode} +% +% \begin{macro}{\bxjx@engine} +% エンジンの種別。 +% \begin{macrocode} +\let\bxjx@engine=n +\def\bxjx@tmpdo#1#2{% + \edef\bxjx@tmpa{\string#1}% + \edef\bxjx@tmpb{\meaning#1}% + \ifx\bxjx@tmpa\bxjx@tmpb #2\fi} +\bxjx@tmpdo\kanjiskip{\let\bxjx@engine=j} +\bxjx@tmpdo\enablecjktoken{\let\bxjx@engine=u} +\bxjx@tmpdo\XeTeXversion{\let\bxjx@engine=x} +\bxjx@tmpdo\pdftexversion{\let\bxjx@engine=p} +\bxjx@tmpdo\luatexversion{\let\bxjx@engine=l} +% \end{macrocode} +% \end{macro} +% +% それぞれのエンジンで、前提となる日本語処理パッケージが実際に +% 読み込まれているかを検査する。 +% \begin{macrocode} +\def\bxjx@tmpdo#1#2{% + \if#1\bxjx@engine + \@ifpackageloaded{#2}{}{%else + \PackageError\bxjx@pkgname + {Package '#2' must be loaded}% + {Package loading is aborted.\MessageBreak\@ehc}% + \endinput} + \fi} +\bxjx@tmpdo{p}{bxcjkjatype} +\bxjx@tmpdo{x}{xeCJK} +\bxjx@tmpdo{l}{luatexja} +% \end{macrocode} +% +% 古い{\LaTeX}の場合、|\TextOrMath| は |fixltx2e| パッケージで +% 提供される。 +% \begin{macrocode} +\ifx\TextOrMath\@undefined + \RequirePackage{fixltx2e} +\fi +% \end{macrocode} +% +%^^A---------------- +% \subsection{和文カテゴリコードの設定} +% +% up{\LaTeX}の場合、和文カテゴリコードの設定を +% Lua{\TeX}-jaと(ほぼ)等価なものに変更する。 +% +% \Note Lua{\TeX}-jaとの相違点: +% |A830|、|A960|、|1B000|。 +% \begin{macrocode} +\if u\bxjx@engine +\@for\bxjx@tmpa:={% +0080,0100,0180,0250,02B0,0300,0500,0530,0590,0600,% +0700,0750,0780,07C0,0800,0840,0860,08A0,0900,0980,% +0A00,0A80,0B00,0B80,0C00,0C80,0D00,0D80,0E00,0E80,% +0F00,1000,10A0,1200,1380,13A0,1400,1680,16A0,1700,% +1720,1740,1760,1780,1800,18B0,1900,1950,1980,19E0,% +1A00,1A20,1AB0,1B00,1B80,1BC0,1C00,1C50,1C80,1CC0,% +1CD0,1D00,1D80,1DC0,1E00,1F00,2440,27C0,27F0,2800,% +2A00,2C00,2C60,2C80,2D00,2D30,2D80,2DE0,2E00,4DC0,% +A4D0,A500,A640,A6A0,A700,A720,A800,A830,A840,A880,% +A8E0,A900,A930,A980,A9E0,AA00,AA60,AA80,AAE0,AB00,% +AB30,AB70,ABC0,D800,DB80,DC00,E000,FB00,FB50,FE00,% +FE70,FFF0,% +10000,10080,10100,10140,10190,101D0,10280,102A0,% +102E0,10300,10330,10350,10380,103A0,10400,10450,% +10480,104B0,10500,10530,10600,10800,10840,10860,% +10880,108E0,10900,10920,10980,109A0,10A00,10A60,% +10A80,10AC0,10B00,10B40,10B60,10B80,10C00,10C80,% +10E60,11000,11080,110D0,11100,11150,11180,111E0,% +11200,11280,112B0,11300,11400,11480,11580,11600,% +11660,11680,11700,118A0,11A00,11A50,11AC0,11C00,% +11C70,11D00,12000,12400,12480,13000,14400,16800,% +16A40,16AD0,16B00,16F00,1BC00,1BCA0,1D000,1D100,% +1D200,1D300,1D360,1D400,1D800,1E000,1E800,1E900,% +1EE00,1F000,1F030,1F0A0,1F300,1F600,1F650,1F680,% +1F700,1F780,1F800,1F900,E0000,E0100,F0000,100000,% +00C0% +}\do{% +\@tempcnta="\bxjx@tmpa\relax +\@tempcntb\@tempcnta \advance\@tempcntb\m@ne +\chardef\bxjx@tmpb\kcatcode\@tempcntb +\kcatcode\@tempcnta=15 \kcatcode\@tempcntb\bxjx@tmpb} +\fi +% \end{macrocode} +% +%^^A---------------- +% \subsection{ギリシャ・キリル文字の扱い} +% +% 「特定CJK曖昧文字」について、和文・欧文扱いを制御できるようにする。 +% ここで\textbf{「特定CJK曖昧文字」}とは以下に該当する文字の集合を指す: +% \begin{itemize} +% \item UnicodeとJIS X~0213に共通して含まれるギリシャ文字・キリル文字。 +% \item Latin-1の上位部分とJIS X~0208に共通して含まれる文字 +% (Lua{\TeX}-jaの定める“範囲8”)。 +% \end{itemize} +% +% \begin{macro}{\bxjx@grkcyr@list} +% 「特定CJK曖昧文字」に関する情報をもつ\,|\do|-リスト。 +% 各項目の形式は以下の通り:\\ +% |\do{|\Meta{Unicode符号値}|}{|\Meta{対象fontenc}|}{|^^A +% \Meta{テキストLICR}|}{|\Meta{数式LICR}|}| +% \Note 数式で使わない文字は \Meta{数式LICR} を空にする。 +% \begin{macrocode} +\@onlypreamble\bxjx@grkcyr@list +\def\bxjx@grkcyr@list{% +\do{0391}{LGR}{\textAlpha}{A}% % GR. C. L. ALPHA +\do{0392}{LGR}{\textBeta}{B}% % GR. C. L. BETA +\do{0393}{LGR}{\textGamma}{\Gamma}% % GR. C. L. GAMMA +\do{0394}{LGR}{\textDelta}{\Delta}% % GR. C. L. DELTA +\do{0395}{LGR}{\textEpsilon}{E}% % GR. C. L. EPSILON +\do{0396}{LGR}{\textZeta}{Z}% % GR. C. L. ZETA +\do{0397}{LGR}{\textEta}{H}% % GR. C. L. ETA +\do{0398}{LGR}{\textTheta}{\Theta}% % GR. C. L. THETA +\do{0399}{LGR}{\textIota}{I}% % GR. C. L. IOTA +\do{039A}{LGR}{\textKappa}{K}% % GR. C. L. KAPPA +\do{039B}{LGR}{\textLambda}{\Lambda}% % GR. C. L. LAMDA +\do{039C}{LGR}{\textMu}{M}% % GR. C. L. MU +\do{039D}{LGR}{\textNu}{N}% % GR. C. L. NU +\do{039E}{LGR}{\textXi}{\Xi}% % GR. C. L. XI +\do{039F}{LGR}{\textOmicron}{O}% % GR. C. L. OMICRON +\do{03A0}{LGR}{\textPi}{\Pi}% % GR. C. L. PI +\do{03A1}{LGR}{\textRho}{P}% % GR. C. L. RHO +\do{03A3}{LGR}{\textSigma}{\Sigma}% % GR. C. L. SIGMA +\do{03A4}{LGR}{\textTau}{T}% % GR. C. L. TAU +\do{03A5}{LGR}{\textUpsilon}{\Upsilon}% % GR. C. L. UPSILON +\do{03A6}{LGR}{\textPhi}{\Phi}% % GR. C. L. PHI +\do{03A7}{LGR}{\textChi}{X}% % GR. C. L. CHI +\do{03A8}{LGR}{\textPsi}{\Psi}% % GR. C. L. PSI +\do{03A9}{LGR}{\textOmega}{\Omega}% % GR. C. L. OMEGA +\do{03B1}{LGR}{\textalpha}{\alpha}% % GR. S. L. ALPHA +\do{03B2}{LGR}{\textbeta}{\beta}% % GR. S. L. BETA +\do{03B3}{LGR}{\textgamma}{\gamma}% % GR. S. L. GAMMA +\do{03B4}{LGR}{\textdelta}{\delta}% % GR. S. L. DELTA +\do{03B5}{LGR}{\textepsilon}{\epsilon}% % GR. S. L. EPSILON +\do{03B6}{LGR}{\textzeta}{\zeta}% % GR. S. L. ZETA +\do{03B7}{LGR}{\texteta}{\eta}% % GR. S. L. ETA +\do{03B8}{LGR}{\texttheta}{\theta}% % GR. S. L. THETA +\do{03B9}{LGR}{\textiota}{\iota}% % GR. S. L. IOTA +\do{03BA}{LGR}{\textkappa}{\kappa}% % GR. S. L. KAPPA +\do{03BB}{LGR}{\textlambda}{\lambda}% % GR. S. L. LAMDA +\do{03BC}{LGR}{\textmu}{\mu}% % GR. S. L. MU +\do{03BD}{LGR}{\textnu}{\nu}% % GR. S. L. NU +\do{03BE}{LGR}{\textxi}{\xi}% % GR. S. L. XI +\do{03BF}{LGR}{\textomicron}{o}% % GR. S. L. OMICRON +\do{03C0}{LGR}{\textpi}{\pi}% % GR. S. L. PI +\do{03C1}{LGR}{\textrho}{\rho}% % GR. S. L. RHO +\do{03C2}{LGR}{\textvarsigma}{\varsigma}% % GR. S. L. FINAL SIGMA +\do{03C3}{LGR}{\textsigma}{\sigma}% % GR. S. L. SIGMA +\do{03C4}{LGR}{\texttau}{\tau}% % GR. S. L. TAU +\do{03C5}{LGR}{\textupsilon}{\upsilon}% % GR. S. L. UPSILON +\do{03C6}{LGR}{\textphi}{\phi}% % GR. S. L. PHI +\do{03C7}{LGR}{\textchi}{\chi}% % GR. S. L. CHI +\do{03C8}{LGR}{\textpsi}{\psi}% % GR. S. L. PSI +\do{03C9}{LGR}{\textomega}{\omega}% % GR. S. L. OMEGA +\do{0401}{T2A}{\CYRYO}{}% % CY. C. L. IO +\do{0410}{T2A}{\CYRA}{}% % CY. C. L. A +\do{0411}{T2A}{\CYRB}{}% % CY. C. L. BE +\do{0412}{T2A}{\CYRV}{}% % CY. C. L. VE +\do{0413}{T2A}{\CYRG}{}% % CY. C. L. GHE +\do{0414}{T2A}{\CYRD}{}% % CY. C. L. DE +\do{0415}{T2A}{\CYRE}{}% % CY. C. L. IE +\do{0416}{T2A}{\CYRZH}{}% % CY. C. L. ZHE +\do{0417}{T2A}{\CYRZ}{}% % CY. C. L. ZE +\do{0418}{T2A}{\CYRI}{}% % CY. C. L. I +\do{0419}{T2A}{\CYRISHRT}{}% % CY. C. L. SHORT I +\do{041A}{T2A}{\CYRK}{}% % CY. C. L. KA +\do{041B}{T2A}{\CYRL}{}% % CY. C. L. EL +\do{041C}{T2A}{\CYRM}{}% % CY. C. L. EM +\do{041D}{T2A}{\CYRN}{}% % CY. C. L. EN +\do{041E}{T2A}{\CYRO}{}% % CY. C. L. O +\do{041F}{T2A}{\CYRP}{}% % CY. C. L. PE +\do{0420}{T2A}{\CYRR}{}% % CY. C. L. ER +\do{0421}{T2A}{\CYRS}{}% % CY. C. L. ES +\do{0422}{T2A}{\CYRT}{}% % CY. C. L. TE +\do{0423}{T2A}{\CYRU}{}% % CY. C. L. U +\do{0424}{T2A}{\CYRF}{}% % CY. C. L. EF +\do{0425}{T2A}{\CYRH}{}% % CY. C. L. HA +\do{0426}{T2A}{\CYRC}{}% % CY. C. L. TSE +\do{0427}{T2A}{\CYRCH}{}% % CY. C. L. CHE +\do{0428}{T2A}{\CYRSH}{}% % CY. C. L. SHA +\do{0429}{T2A}{\CYRSHCH}{}% % CY. C. L. SHCHA +\do{042A}{T2A}{\CYRHRDSN}{}% % CY. C. L. HARD SIGN +\do{042B}{T2A}{\CYRERY}{}% % CY. C. L. YERU +\do{042C}{T2A}{\CYRSFTSN}{}% % CY. C. L. SOFT SIGN +\do{042D}{T2A}{\CYREREV}{}% % CY. C. L. E +\do{042E}{T2A}{\CYRYU}{}% % CY. C. L. YU +\do{042F}{T2A}{\CYRYA}{}% % CY. C. L. YA +\do{0430}{T2A}{\cyra}{}% % CY. S. L. A +\do{0431}{T2A}{\cyrb}{}% % CY. S. L. BE +\do{0432}{T2A}{\cyrv}{}% % CY. S. L. VE +\do{0433}{T2A}{\cyrg}{}% % CY. S. L. GHE +\do{0434}{T2A}{\cyrd}{}% % CY. S. L. DE +\do{0435}{T2A}{\cyre}{}% % CY. S. L. IE +\do{0436}{T2A}{\cyrzh}{}% % CY. S. L. ZHE +\do{0437}{T2A}{\cyrz}{}% % CY. S. L. ZE +\do{0438}{T2A}{\cyri}{}% % CY. S. L. I +\do{0439}{T2A}{\cyrishrt}{}% % CY. S. L. SHORT I +\do{043A}{T2A}{\cyrk}{}% % CY. S. L. KA +\do{043B}{T2A}{\cyrl}{}% % CY. S. L. EL +\do{043C}{T2A}{\cyrm}{}% % CY. S. L. EM +\do{043D}{T2A}{\cyrn}{}% % CY. S. L. EN +\do{043E}{T2A}{\cyro}{}% % CY. S. L. O +\do{043F}{T2A}{\cyrp}{}% % CY. S. L. PE +\do{0440}{T2A}{\cyrr}{}% % CY. S. L. ER +\do{0441}{T2A}{\cyrs}{}% % CY. S. L. ES +\do{0442}{T2A}{\cyrt}{}% % CY. S. L. TE +\do{0443}{T2A}{\cyru}{}% % CY. S. L. U +\do{0444}{T2A}{\cyrf}{}% % CY. S. L. EF +\do{0445}{T2A}{\cyrh}{}% % CY. S. L. HA +\do{0446}{T2A}{\cyrc}{}% % CY. S. L. TSE +\do{0447}{T2A}{\cyrch}{}% % CY. S. L. CHE +\do{0448}{T2A}{\cyrsh}{}% % CY. S. L. SHA +\do{0449}{T2A}{\cyrshch}{}% % CY. S. L. SHCHA +\do{044A}{T2A}{\cyrhrdsn}{}% % CY. S. L. HARD SIGN +\do{044B}{T2A}{\cyrery}{}% % CY. S. L. YERU +\do{044C}{T2A}{\cyrsftsn}{}% % CY. S. L. SOFT SIGN +\do{044D}{T2A}{\cyrerev}{}% % CY. S. L. E +\do{044E}{T2A}{\cyryu}{}% % CY. S. L. YU +\do{044F}{T2A}{\cyrya}{}% % CY. S. L. YA +\do{0451}{T2A}{\cyryo}{}% % CY. S. L. IO +\do{00A7}{TS1}{\textsection}{\mathsection}% SECTION SYMBOL +\do{00A8}{TS1}{\textasciidieresis}{}% % DIAERESIS +\do{00B0}{TS1}{\textdegree}{\mathdegree}% % DEGREE SIGN +\do{00B1}{TS1}{\textpm}{\pm}% % PLUS-MINUS SIGN +\do{00B4}{TS1}{\textasciiacute}{}% % ACUTE ACCENT +\do{00B6}{TS1}{\textparagraph}{\mathparagraph}% PILCROW SIGN +\do{00D7}{TS1}{\texttimes}{\times}% % MULTIPLICATION SIGN +\do{00F7}{TS1}{\textdiv}{\div}% % DIVISION SIGN +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\mathdegree} +% 面倒なので補っておく。 +% \begin{macrocode} +\providecommand*{\mathdegree}{{}^{\circ}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\ifbxjx@gcc@cjk} +% 〔スイッチ〕 +% 「特定CJK曖昧文字」を和文扱いにするか。 +% \begin{macrocode} +\newif\ifbxjx@gcc@cjk +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\greekasCJK} +% 〔公開命令〕 +% 「特定CJK曖昧文字」を和文扱いにする。 +% \begin{macrocode} +\newcommand*\greekasCJK{% + \bxjx@gcc@cjktrue} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\nogreekasCJK} +% 〔公開命令〕 +% 「特定CJK曖昧文字」を欧文扱いにする。 +% \begin{macrocode} +\newcommand*\nogreekasCJK{% + \bxjx@gcc@cjkfalse} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\bxjx@fake@grk} +% |\bxjx@fake@grk{|\Meta{出力文字}|}{|\Meta{基準文字}|}|\Means +% ラテン文字で代用される数式ギリシャ文字の出力を行う。 +% \Meta{基準文字}(mathchardefの制御綴)の数式クラスと数式ファミリを +% 引き継いで、\Meta{出力文字}(ASCII文字トークン)の文字コードの +% 数式文字を出力する。 +% 例えば、|\Pi| の意味が |\mathchar"7005| である場合、 +% |\bxjx@fake@grk{B}{\Pi}| は |\mathchar"7042| を実行する。 +% \Note フォントパッケージ使用時の再定義を考慮して、\Meta{基準文字}が +% mathchardefであるかを検査し、そうでない場合はフォールバックとして +% 単に\Meta{出力文字}を実行する。 +% \begin{macrocode} +\def\bxjx@tmpdo#1\relax{% + \def\bxjx@fake@grk##1##2{% + \expandafter\bxjx@fake@grk@a\meaning##2#1\@nil{##1}{##2}}% + \def\bxjx@fake@grk@a##1#1##2\@nil##3##4{% + \ifx\\##1\\% + \bxjx@cnta##4\divide\bxjx@cnta\@cclvi + \multiply\bxjx@cnta\@cclvi \advance\bxjx@cnta`##3\relax + \mathchar\bxjx@cnta + \else ##3\fi} +}\expandafter\bxjx@tmpdo\string\mathchar\relax +% \end{macrocode} +% \end{macro} +% +% \paragraph{pdf{\TeX}・{\upTeX}の場合} +% \begin{macrocode} +\ifnum0\if p\bxjx@engine1\fi\if u\bxjx@engine1\fi>0 +% \end{macrocode} +% \begin{itemize} +% \item |\|[|bxjx@KC/|\Meta{符号値}]\Means +% その文字が「特定曖昧CJK文字」に該当する場合に定義済になる。 +% \end{itemize} +% +% まず |inputenc| を読み込んで入力エンコーディングを |utf8| +% に変更する。 +% \Note 「既定UTF-8化」後の{\LaTeX}においても、必ず +% 「|inputenc| が明示的に読み込まれた」状態になる。 +% \begin{macrocode} +\@ifpackageloaded{inputenc}{}{%else + \RequirePackage[utf8]{inputenc}} +\def\bxjx@tmpa{utf8} +\ifx\bxjx@tmpa\inputencdoingname + \PackageWarningNoLine\bxjx@pkgname + {Input encoding changed to utf8}% + \inputencoding{utf8}% +\fi +% \end{macrocode} +% +% {\upTeX}の場合に、「特定曖昧CJK文字」を含む +% ブロックの和文カテゴリコードを変更する。 +% \begin{macrocode} +\if u\bxjx@engine +\kcatcode"0370=15 +\kcatcode"0400=15 +\kcatcode"0500=15 +\fi +% \end{macrocode} +% 各文字について |\DeclareUnicodeCharacter| を実行する。 +% \begin{macrocode} +\def\bxjx@tmpdo#1{% + \@tempcnta="#1\relax + \expandafter\bxjx@tmpdo@a\csname bxjx@KC/\the\@tempcnta\endcsname{#1}} +\def\bxjx@tmpdo@a#1#2#3#4#5{% +% \end{macrocode} +% 引数\,=\,|\|[|bxjx@KC/|\Meta{符号値}]|{|\Meta{符号値}|}{|^^A +% \Meta{fontenc}|}{|\Meta{LICR}|}{|\Meta{数式LICR}|}| +% +% “数式中の動作”を決定する。 +% \Meta{数式LICR}が空(数式非対応)なら警告を出す。 +% \begin{macrocode} + \ifx\\#5\\% + \def\bxjx@tmpa{\@inmathwarn#4}% +% \end{macrocode} +% \Meta{数式LICR}が英字である場合は |\bxjx@fake@grk| で出力する。 +% 大文字なら |\Pi|、小文字なら |\pi| を基準文字にする。 +% \begin{macrocode} + \else\ifcat A\noexpand#5% + \edef\bxjx@tmpa{\noexpand\bxjx@fake@grk{#5}% + {\ifnum\uccode`#5=`#5\noexpand\Pi\else\noexpand\pi\fi}}% +% \end{macrocode} +% それ以外は\Meta{数式LICR}をそのまま実行する。 +% \begin{macrocode} + \else \def\bxjx@tmpa{#5}% + \fi\fi + \def\bxjx@tmpb{\bxjx@tmpdo@b{#1}{#2}{#3}{#4}}% + \expandafter\bxjx@tmpb\expandafter{\bxjx@tmpa}} +% \end{macrocode} +% 以降はエンジン種別で分岐する。 +% {\upTeX}の場合。 +% \begin{macrocode} +\if u\bxjx@engine +\def\bxjx@tmpdo@b#1#2#3#4#5{% +% \end{macrocode} +% 引数\,=\,|\|[|bxjx@KC/|\Meta{符号値}]|{|\Meta{符号値}|}{|^^A +% \Meta{fontenc}|}{|\Meta{LICR}|}{|\Meta{数式中の動作}|}| +% +% 当該のUnicode文字の動作は「テキストでは\Meta{LICR}、数式では +% \Meta{数式中の動作}」となる。 +% LICRは現在エンコーディングで有効な定義がある場合はそれが実行 +% されるはずである。 +% (つまり、現在がLGRである場合はギリシャ文字は常に欧文扱いになる。) +% それ以外の場合はLICRを |\bxjx@ja@or@not| に帰着させる。 +% この際に、和文用の定義として当該のkchardefを使用し、その制御綴と +% して |\|[|bxjx@KC/...|] を流用している。 +% \begin{macrocode} + \kchardef#1=\@tempcnta + \DeclareTextCommandDefault{#4}{\bxjx@ja@or@not{#1}{#3}{#4}}% + \DeclareUnicodeCharacter{#2}{\TextOrMath{#4}{#5}}} +% \end{macrocode} +% {pdf\TeX}の場合も処理はほとんど同じ。 +% ただし、和文用の定義として |\UTF{|\Meta{符号値}|}| を使う +% (|\UTF| は |bxcjkjatype| の命令)。 +% |\|[|bxjx@KC/...|] は使わないが定義済にする必要がある。 +% \begin{macrocode} +\else\if p\bxjx@engine +\def\bxjx@tmpdo@b#1#2#3#4#5{% + \mathchardef#1=\@tempcnta + \DeclareTextCommandDefault{#4}{\bxjx@ja@or@not{\UTF{#2}}{#3}{#4}}% + \DeclareUnicodeCharacter{#2}{\TextOrMath{#4}{#5}}} +\fi\fi +% \end{macrocode} +% 以上の処理を「特定CJK曖昧文字」の各々に適用する。 +% \begin{macrocode} +\let\do\bxjx@tmpdo \bxjx@grkcyr@list +% \end{macrocode} +% +% \begin{macro}{\bxjx@DeclareUnicodeCharacter} +% |\bxjx@DeclareUnicodeCharacter| を改変して、 +% 「特定CJK曖昧文字」の場合に再定義を抑止したもの。 +% \begin{macrocode} +\@onlypreamble\bxjx@org@DeclareUnicodeCharacter +\let\bxjx@org@DeclareUnicodeCharacter\DeclareUnicodeCharacter +\@onlypreamble\bxjx@DeclareUnicodeCharacter +\def\bxjx@DeclareUnicodeCharacter#1#2{% + \count@="#1\relax + \expandafter\ifx\csname bxjx@KC/\the\count@\endcsname\relax + \bxjx@org@DeclareUnicodeCharacter{#1}{#2}% + \else + \wlog{ \space\space skipped defining Unicode char U+#1}% + \fi} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\bxjx@ja@or@not} +% |\bxjx@ja@or@not{|\Meta{和文用定義}|}{|\Meta{対象fontenc}|}{|^^A +% \Meta{LICR}|}|\Means +% |\|[|no|]|greekasCJK| の状態に応じて和文または欧文で文字を出力する。 +% \begin{macrocode} +\def\bxjx@ja@or@not#1#2#3{% +% \end{macrocode} +% |\greekasCJK| の場合は、無条件に\Meta{和文用定義}を実行する。 +% \begin{macrocode} + \ifbxjx@gcc@cjk #1% +% \end{macrocode} +% |\nogreekasCJK| の場合は、対象のエンコーディングに変更してLICRを +% 実行するが、そのエンコーディングが未定義の場合は +% (フォールバックとして)和文用定義を使う。 +% \begin{macrocode} + \else\expandafter\ifx\csname T@#2\endcsname\relax #1% + \else \UseTextSymbol{#2}{#3}% + \fi\fi} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\DeclareFontEncoding@} +% |\DeclareFontEncoding@| にパッチを当てて、 +% |\DeclareFontEncoding| の実行中だけ +% 改変後の |\DeclareUnicodeCharacter| が使われるようにする。 +% \begin{macrocode} +\begingroup +\toks@\expandafter{\DeclareFontEncoding@{#1}{#2}{#3}} +\xdef\next{\def\noexpand\DeclareFontEncoding@##1##2##3{% + \noexpand\bxjx@swap@DUC@cmd + \the\toks@ + \noexpand\bxjx@swap@DUC@cmd}} +\endgroup\next +\def\bxjx@swap@DUC@cmd{% + \let\bxjx@tmpa\DeclareUnicodeCharacter + \let\DeclareUnicodeCharacter\bxjx@DeclareUnicodeCharacter + \let\bxjx@DeclareUnicodeCharacter\bxjx@tmpa + \let\bxjx@tmpa\relax} +% \end{macrocode} +% \end{macro} +% +% 以上。 +% +% \paragraph{{\XeTeX}・Lua{\TeX}の場合} +% \begin{macrocode} +\else\ifnum0\if x\bxjx@engine1\fi\if l\bxjx@engine1\fi>0 +% \end{macrocode} +% +% 各文字について、数式中の動作を定義する。 +% \begin{macrocode} +\def\bxjx@tmpdo#1{% + \bxjx@cnta="#1\relax + \begingroup + \lccode`~=\bxjx@cnta + \lowercase{\endgroup + \bxjx@tmpdo@a{~}}{#1}} +\def\bxjx@tmpdo@a#1#2#3#4#5{% +% \end{macrocode} +% \Meta{数式LICR}が空なら何もしない。 +% 空でない場合、{up\LaTeX}の場合と同じ方法で“数式中の動作”を決定し、 +% 当該の文字をmath activeにしてその動作を設定する。 +% \begin{macrocode} + \ifx\\#5\\\let\bxjx@tmpa\relax + \else\ifcat A\noexpand#5% + \edef\bxjx@tmpa{\noexpand\bxjx@fake@grk{#5}% + {\ifnum\uccode`#5=`#5\noexpand\Pi\else\noexpand\pi\fi}}% + \else \def\bxjx@tmpa{#5}% + \fi\fi + \ifx\bxjx@tmpa\relax\else + \mathcode\bxjx@cnta"8000 \let#1\bxjx@tmpa + \fi} +% \end{macrocode} +% 「Unicodeな数式」の設定が行われているかを(簡易的に)検査して、 +% そうでない場合にのみ、以上の処理を「特定CJK曖昧文字」の各々に適用する。 +% \begin{macrocode} +\mathchardef\bxjx@tmpa="119 +\ifx\bxjx@tmpa\pi \let\do\bxjx@tmpdo \bxjx@grkcyr@list \fi +% \end{macrocode} +% +% 次に、テキストにおいて「特定CJK曖昧文字」の扱いが |\|[|no|]|greekasCJK| +% で切り替わるようにする。 +% +% Lua{\TeX}の場合は、Lua{\TeX}-jaの |jacharrange| の設定を変更する。 +% \Note “範囲2”がギリシャ・キリル文字、“範囲8”がLatin-1の記号。 +% \begin{macrocode} +\if l\bxjx@engine + \protected\def\greekasCJK{% + \bxjx@gcc@cjktrue + \ltjsetparameter{jacharrange={+2, +8}}} + \protected\def\nogreekasCJK{% + \bxjx@gcc@cjkfalse + \ltjsetparameter{jacharrange={-2, -8}}} +\fi +% \end{macrocode} +% +% {\XeTeX}の場合、|xeCJK| は{\XeTeX}の文字クラス定義を参照して +% いるので、対象文字の文字クラスを変更する。 +% \begin{macrocode} +\if x\bxjx@engine + \let\bxjx@gcc@cjk@list\@empty + \def\do#1#2#3#4{% + \edef\bxjx@gcc@cjk@list{\bxjx@gcc@cjk@list + \noexpand\XeTeXcharclass"#1\bxjx@cnta}} + \bxjx@grkcyr@list + \protected\def\greekasCJK{% + \bxjx@gcc@cjktrue + \bxjx@cnta=\@ne \bxjx@gcc@cjk@list} + \protected\def\nogreekasCJK{% + \bxjx@gcc@cjkfalse + \bxjx@cnta=\z@ \bxjx@gcc@cjk@list} +\fi +% \end{macrocode} +% +% 以上。 +% \begin{macrocode} +\fi\fi +% \end{macrocode} +% +%^^A---------------- +% \subsection{初期設定} +% 「特定CJK曖昧文字」を欧文扱いにする。 +% \begin{macrocode} +\nogreekasCJK +% \end{macrocode} +% +%^^A---------------- +% \subsection{完了} +% おしまい。 +% \begin{macrocode} +%</cjkcat> +% \end{macrocode} +% +%^^A======================================================== +% \section{補助パッケージ:bxjspandoc \ZRX} +% +% Pandocの{\LaTeX}用標準テンプレートをより幸せに使うための設定。 +% BXJSクラスのpandocドライバのコードの中の、“汎用的”に使える +% 部分を切り出したもの。 +% つまり現在のpandocドライバはこのパッケージを読みこむ。 +% \Note テンプレートの{\TeX}コードより前に読み込む必要があるため、 +% 専ら文書クラス内での読込に限られる。 +% +%^^A---------------- +% \subsection{準備} +% +% \begin{macrocode} +%<*ancpandoc> +%% このファイルは日本語文字を含みます. +\def\bxjsp@pkgname{bxjscjkcat} +% \end{macrocode} +% +% \begin{macro}{\bxjsp@engine} +% エンジンの種別。 +% \begin{macrocode} +\let\bxjsp@engine=n +\@onlypreamble\bxjsp@do +\def\bxjsp@do#1#2{% + \edef\bxjsp@tmpa{\string#1}% + \edef\bxjsp@tmpb{\meaning#1}% + \ifx\bxjsp@tmpa\bxjsp@tmpb #2\fi} +\bxjsp@do\kanjiskip{\let\bxjsp@engine=j} +\bxjsp@do\XeTeXversion{\let\bxjsp@engine=x} +\bxjsp@do\pdftexversion{\let\bxjsp@engine=p} +\bxjsp@do\luatexversion{\let\bxjsp@engine=l} +% \end{macrocode} +% \end{macro} +% +%^^A---------------- +%\subsection{パッケージオプション} +% +% |english| オプションが指定されている場合、|\ldots| の調整を抑止する。 +% \Note つまり、「グローバルの |english| オプション」が指定されている +% 場合も抑止の対象になる。 +% BXJSクラスの英語モードを想定しているが、それ以外の場合でも、 +% 一般的な{\LaTeX}の習慣として、グローバルの |english| は +% 「その文書の基底言語が英語である」ことを示す。 +% \begin{macrocode} +\newif\ifbxjsp@english +\DeclareOption{english}{\bxjsp@englishtrue} +% \end{macrocode} +% +% オプション定義はおしまい。 +% \begin{macrocode} +\ProcessOptions* +% \end{macrocode} +% +%^^A---------------- +%\subsection{パッケージ読込の阻止} +% +% \begin{macro}{\pandocSkipLoadFile} +% |\pandocSkipLoadFile{|\Meta{ファイル名}|}|\Means +% 特定のファイルを(|\@filewithoptions| の処理に関して) +% 読込済であるとマークする。 +% \begin{macrocode} +\@onlypreamble\pandocSkipLoadFile +\newcommand*\pandocSkipLoadFile[1]{% + \expandafter\bxjsp@skip@load@file@a\csname ver@#1\endcsname{#1}} +\def\bxjsp@skip@load@file@a#1#2{% + \ifx#1\relax + \def#1{2001/01/01}% + \PackageInfo\bxjsp@pkgname + {File '#2' marked as loaded\@gobble}% + \fi} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\pandocSkipLoadPackage} +% |\pandocSkipLoadPackage{|\Meta{パッケージ名}|}|\Means +% |\pandocSkipLoadFile| の機能を用いてパッケージの読込を阻止する。 +% \begin{macrocode} +\@onlypreamble\pandocSkipLoadPackage +\newcommand*\pandocSkipLoadPackage[1]{% + \pandocSkipLoadFile{#1.sty}} +% \end{macrocode} +% \end{macro} +% +%^^A---------------- +%\subsection{fixltx2eパッケージ} +% テンプレートでは |fixltx2e| パッケージを読み込むが、 +% 最近(2015年版以降)の{\LaTeX}ではこれで警告が出る。 +% これを抑止する。 +% +% {\LaTeX}カーネルが新しい場合は |fixltx2e| を +% 読込済にする。 +% \begin{macrocode} +\ifx\@IncludeInRelease\@undefined\else + \pandocSkipLoadPackage{fixltx2e} +\fi +% \end{macrocode} +% +%^^A---------------- +%\subsection{cmapパッケージ} +% エンジンが{(u)\pLaTeX}のときに |cmap| パッケージが +% 読み込まれるのを阻止する。 +% (実際は警告が出るだけで無害であるが。) +% +% \begin{macrocode} +\if j\bxjsp@engine + \pandocSkipLoadPackage{cmap} +\fi +% \end{macrocode} +% +%^^A---------------- +%\subsection{microtypeパッケージ} +% 警告が多すぎなので消す。 +% +% \begin{macrocode} +\if j\bxjsp@engine \else + \PassOptionsToPackage{verbose=silent}{microtype} +\fi +% \end{macrocode} +% +% エンジンが{(u)\pLaTeX}のときに |microtype| パッケージが +% 読み込まれるのを阻止し、さらにテンプレートで使われている命令を +% 通すためにダミーの定義を行う。 +% \Note 昔はstandardドライバでこの処理を行っていたが、 +% 元来はPandoc用の処理なので、1.5版でpandocに移動。 +% \begin{macrocode} +\if j\bxjsp@engine + \pandocSkipLoadPackage{microtype} + \newcommand*\UseMicrotypeSet[2][]{} +\fi +% \end{macrocode} +% +%^^A---------------- +%\subsection{Unicode文字変換対策} +% +% Pandocで{\LaTeX}形式に書き出す場合は、元データ中の一部のUnicode文字を +% 「{\LaTeX}の表記」に置き換える。 +% その中には日本語文書で問題になるものが含まれる。 +% \begin{quote} +% \mbox{…}→|\ldots{}|\quad +% \mbox{‘}→|`|\quad +% \mbox{’}→|'|\quad +% \mbox{“}→|``|\quad +% \mbox{”}→|''|\quad +% \end{quote} +% 日本語{\LaTeX}では「{\LaTeX}の表記」は欧文扱い、 +% Unicode文字は和文扱いとして使い分ける習慣があるので、 +% このような置換が行われるのは好ましくない。 +% +% これらの置換のうち、後の4つはPandocの |--no-tex-ligatures| オプションを +% 指定すれば抑止できるが、「…」の置換を抑止する機能はないようである。 +% そこで、「|\ldots| を『…』に戻す」という処置を行う。 +% +% \begin{macro}{\pandocLdots} +% Pandoc用の |\ldots| の実装。 +% 非数式である場合は代わりに |…| を実行する。 +% \Note 以前は「Pandocが必ず |\ldots{}| の形で書き出す」ことを利用して +% 後続に |{}| があるかで「元が |…| であるか」を判断していた。 +% ところが、Pandoc 2.7版で |{}| を必ずしも付けなくなったため、 +% 1.9f版で非数式の |\ldots| を全て |…| に戻す動作に変更した。 +% \begin{macrocode} +\DeclareRobustCommand{\pandocLdots}{% + \relax\ifmmode \expandafter\bxjsp@org@ldots + \else \expandafter\bxjsp@ja@ellipsis + \fi} +\def\bxjsp@ja@ellipsis{…} +\let\bxjsp@org@ldots\ldots +% \end{macrocode} +% \end{macro} +% +% |\ldots| の実装を置き換える。 +% \Note B|english| オプション指定時は置き換えない。 +% \begin{macrocode} +\AtBeginDocument{% + \let\bxjsp@org@ldots\ldots + \ifbxjsp@english\else \let\ldots\pandocLdots \fi} +% \end{macrocode} +% +% |\ldots| の直後の文字が非英字の場合、Pandocは「|\ldots。|」の +% ように空白を入れずに並べて出力する。 +% 「Pandocは非英字と見なすが{\XeTeX}・{Lua\TeX}は英字と見なす +% (または将来その可能性がある)」文字で、特に日本語文書に現れる +% ものについて、非英字扱いにしておく。 +% \Note Pandocは「Unicode 7.0でGCがLetter」な文字を英字と判定している。 +% \begin{macrocode} +\chardef\bxjsp@cc@other=12 +\@onlypreamble\bxjsp@makeother@range +\def\bxjsp@makeother@range#1#2{% + \@tempcnta"#1\relax \@tempcntb"#2\relax + \loop\ifnum\@tempcnta<\@tempcntb + \catcode\@tempcnta\bxjsp@cc@other + \advance\@tempcnta\@ne + \repeat} +\ifnum0\if x\bxjsp@engine1\fi\if l\bxjsp@engine1\fi>0 + \catcode"1F23B=\bxjsp@cc@other + \bxjsp@makeother@range{9FCD}{A000} + \bxjsp@makeother@range{1B002}{1B170} + \bxjsp@makeother@range{2B820}{2EBF0} +\fi +% \end{macrocode} +% +%^^A---------------- +% \subsection{PandoLaモジュール} +% インストール済であれば読み込む。 +% \begin{macrocode} +\IfFileExists{bxpandola.sty}{% + \RequirePackage{bxpandola}\relax + \PackageInfo\bxjsp@pkgname + {PandoLa module is loaded\@gobble} +}{} +% \end{macrocode} +% +%^^A---------------- +% \subsection{完了} +% おしまい。 +% \begin{macrocode} +%</ancpandoc> +% \end{macrocode} +% +% 補助パッケージ実装はここまで。 +% \begin{macrocode} +%</anc> +% \end{macrocode} +% +% \Finale +% +\endinput diff --git a/language/japanese/BX/bxjscls/bxjscls.ins b/language/japanese/BX/bxjscls/bxjscls.ins new file mode 100644 index 0000000000..0e533ebe34 --- /dev/null +++ b/language/japanese/BX/bxjscls/bxjscls.ins @@ -0,0 +1,16 @@ +%% bxjscls.ins : installer file for bxjscls.dtx +\def\batchfile{bxjscls.ins} +\input docstrip.tex +\keepsilent +\generateFile{bxjsarticle.cls}{f}{\from{bxjscls.dtx}{cls,article}} +\generateFile{bxjsreport.cls}{f}{\from{bxjscls.dtx}{cls,report}} +\generateFile{bxjsbook.cls}{f}{\from{bxjscls.dtx}{cls,book}} +\generateFile{bxjsslide.cls}{f}{\from{bxjscls.dtx}{cls,slide}} +\generateFile{bxjsja-minimal.def}{f}{\from{bxjscls.dtx}{drv,minimal}} +\generateFile{bxjsja-standard.def}{f}{\from{bxjscls.dtx}{drv,standard}} +\generateFile{bxjsja-modern.def}{f}{\from{bxjscls.dtx}{drv,modern}} +\generateFile{bxjsja-pandoc.def}{f}{\from{bxjscls.dtx}{drv,pandoc}} +\generateFile{bxjscompat.sty}{f}{\from{bxjscls.dtx}{anc,compat}} +\generateFile{bxjscjkcat.sty}{f}{\from{bxjscls.dtx}{anc,cjkcat}} +\generateFile{bxjspandoc.sty}{f}{\from{bxjscls.dtx}{anc,ancpandoc}} +%% EOF diff --git a/language/japanese/BX/bxjscls/bxjscls.pdf b/language/japanese/BX/bxjscls/bxjscls.pdf Binary files differnew file mode 100644 index 0000000000..bc7df6ed8d --- /dev/null +++ b/language/japanese/BX/bxjscls/bxjscls.pdf |