BXjscls パッケージ
~XeLaTeX でまともな日本語文書レイアウトを~

この紹介記事の内容は旧版(v0.3 以前)を基にしているが、 新しい版(v1.0 以降)の BXjscls はこれとは基本的な使い方がかなり異なる。 新版の情報については TeX Wiki の中の記事を参照してほしい。
奥村晴彦氏製作の「pLaTeX2e新ドキュメントクラス」を pLaTeX 以外の「日本語が通るLaTeX」―例えば XeLaTeX―で使えるように改造したもの。
変更履歴

概要

横書き日本語用の文書クラスとして定評のある奥村晴彦氏の pLaTeX2e 新ドキュメントクラス (以下これを js クラスと呼ぶ) を pLaTeX 以外の「日本語が処理できる」LaTeX で使えるようにすることを目標として 日本語処理部分を取り除いたものである。 すなわち、

  1. 日本語が扱える LaTeX
  2. BXjscls の文書クラス
  3. 1 と 2 を連携させるための TeX コード

の 3 つで pLaTeX + js クラスと同じ役割を果たす。 無論、3 を実装するのは開発者の仕事になる。 XeLaTeX 上での日本語組版用パッケージとして私が開発している zxjatype パッケージについては 既に 3 の作業が行われている。

ダウンロード

github のページから ZIP アーカイブがダウンロードできる。

「奥底の倉庫」に旧版が置いてある。

対応環境

  • TeX 処理系:
    上述のとおり、LaTeX2e で UTF-8 で書かれた日本語が直接処理できるもの であれば、連携コードを開発することでこのパッケージ中の 文書クラスを利用できる可能性がある。 現状では、次の環境に対して連携コードが用意されていて、 すぐに使用可能な状態になっている。
    • XeLaTeX 0.997 版以降 + zxjatype 0.3 版以降
    • pLaTeX(ptexenc 拡張版)
    • upLaTeX
  • 前提パッケージ: geometry 4.2 版以降
    ※ BXjscls 0.2/0.3 版と geometry 4.2/5.2 版の組み合わせで動作確認した。

基本的な使用法

ここでは、 文書作成者向けに BXjscls の文書クラス(以下 bxjs クラスと呼ぶ)の使用法を解説する。

プレアンブルの書き方

XeLaTeX + zxjatype と組み合わせる場合

bxjs クラスと zxjatype パッケージを 組み合わせる場合、必要最低限のプレアンブルの記述は以下のようになる。

\documentclass[<オプション,...>]{bxjsarticle} % または bxjsreport
\usepackage{zxjatype}
\setjamainfont{<ファミリ名>}
\setjasansfont{<ファミリ名>}
\setjamonofont{<ファミリ名>}
\usepackage{xltxtra}
\begin{document}

さらに zxjafont パッケージを 併用するとプレアンブルの記述を以下のようにできる。

\documentclass[<オプション,...>]{bxjsarticle} % または bxjsreport
\usepackage{zxjatype}
\usepackage{<設定>}{zxjafont} %「設定」は ipa, kozuka6, hiragino 等
\usepackage{xltxtra}
\begin{document}

pLaTeX または upLaTeX と組み合わせる場合

pLaTeX の場合はクラスオプションとして platex を指定する。 フォント指定は js クラスの標準(mingoth 等が非指定) の場合と同じになる。

\documentclass[platex,<オプション,...>]{bxjsarticle} % または bxjsreport
\begin{document}

upLaTeX の場合はクラスオプションとして uplatex を指定する。 フォント指定は js クラスの uplatex 指定の場合と 同じになる。

\documentclass[uplatex,<オプション,...>]{bxjsarticle} % または bxjsreport
\begin{document}

もちろん、OTF パッケージ等の他のパッケージと組み合わせることも 可能である。

クラスオプション

クラスオプション(<オプション,...> の部分に書くもの) は基本的に js クラスのものを踏襲しているが、 中には追加・削除されたものもある。 詳しくは付録を参照。 特に基底フォントサイズの指定として、 js クラスの 8pt9pt10pt、 ……の代替として、base=4mm として任意の長さが 指定できる。 これの変種として、jbase=10.5bp は「和文の」 \normalsize が 10.5bp になるようにする。

補足事項

  • bxjs クラスでは内部で geometry パッケージを読み込んで その機能を利用してページレイアウトを設定している。 geometry のパラメタ設定を利用してレイアウトを変更することも可能 (\setpagelayout 命令; 付録を参照)である。 geometry を再度読み込むことはできないことに注意。
  • pTeX の zw(現在の全角幅)に相当するものとして、 \jsZw という長さ変数を用意している。 例えば、全角 3 文字分の空白を空ける場合は \hspace{3\jsZw} とする。

付録:bxjs クラスマニュアル

クラスオプション

bxjs クラスに特有のオプション

  • base=<長さ>: 基底フォントサイズ(\normalsize のフォントのサイズ)を指定する。 js クラスの 10pt11pt、…等と同じ役割で、 任意の値を指定できる。
    参考: ##pt の形のオプションには名前と実際に設定される値が ずれているものが多く、例えば 11pt は 10.95pt、14pt は 14.4pt が実際の設定値である(LaTeX の “magstep” の習慣による)。 これに対して base=14pt は文字通り 14pt を設定する
  • jbase=<長さ>: 和文を基準にして基底フォントサイズを指定する。 すなわち和文フォントの \normalsize のサイズ を指定の長さとする。
  • scale=<値>: 和文フォントに対するスケール値。 既定値は 0.924715 (= 13Q/10pt、js クラスの設定とほぼ同じ。) 日本語処理の機構がこの値を適切に処理する必要がある。 XeLaTeX + zxjatype の場合は、\setjafontscale の既定値をこの値に設定する。
  • paper={<幅>}{<高さ>}: 用紙サイズを指定する。 js クラスの a4paperb5paper、…等と同じ役割で、 任意の値を指定できる。
  • mag=<値>\mag 値の直接指定。

js クラスのオプションで使用可能なもの

  • 用紙サイズ指定: a4papera3papera5papera6paperb4paperb5paperb6papera4ja5jb4jb5ja4varb5varletterpaperlegalpaperexecutivepaper
  • 横置き: landscape
  • 基底フォントサイズ: 10pt8pt9pt11pt12pt14pt17pt20pt21pt25pt30pt36pt43pt12Q14Q
  • 両面用レイアウト: onesidetwosidevartwoside
  • 段組み: onecolumntwocolumn
  • 表題ページ: notitlepagetitlepage
  • 起こし: openrightopenany (まだ bxjsbook が未完成なので無意味)
  • オーバーフル警告: finaldraft
  • 英語化: english

js クラスのオプションで使用不可能なもの

  • クラス変種指定: reportslide ―― report 相当は bxjsreport、slide 相当は bxjsslide(未完成) と別クラスになっている。
  • トンボ出力: tombowtombomentuke ―― これは pLaTeX のカーネル命令を利用しているので とりあえず除外。
  • 和文フォントメトリック指定: jiswinjismingothuplatex ―― 和文フォントの管理は文書クラスでは行わない。 (uplatex は bxjs では別の意味になる。)
  • 和文数式フォントの登録の制御: disablejfam ―― 同上。(なお、現在のところ数式中の和文使用は全く考慮していない。)
  • papersize スペシャル: papersize ―― これは geometry 側で設定する。 XeLaTeX を使う場合は、既定で適切な処理がされて正しい用紙サイズの PDF が出力されるはずである。

ページレイアウトの設定

bxjs クラスではページレイアウトの設定に geometry パッケージを 用いて次の手順で行っている。

  1. (基底フォントサイズにより決定された mag 値を実際に設定する。)
  2. geometry で次のパラメタを設定する。
    1. クラスオプションで指定された用紙サイズ、および truedimen
    2. bxjsarticle/bxjsreport の場合、次の設定値。
      headheight=10pt, footskip=0.03367\paperheight,
      headsep=\footskip-\topskip, includeheadfoot,
      hscale=0.76, hmarginratio=1:1, vscale=0.83, vmarginratio=1:1
      
  3. 後処理を行う。以下の処理が含まれる。
    • textwidth を全角幅の整数倍に、 textheight を整数行分の自然長になるように丸める。
    • marginpar 関連の設定を行う。 (将来はこれも geometry で設定するように変更する予定。)

ページレイアウトの再設定のために次の命令が用意されている。

  • \setpagelayout{<設定>}: 現在のページレイアウトの設定の一部を修正する。 <設定> は geometry のパラメタの記述であり、 現在の設定に追記して geometry が再設定を行った後、 再び 3 の後処理が行われる。
  • \setpagelayout*{<設定>}: 用紙以外の設定をリセットして改めてページレイアウトの設定を行う。 具体的には、2a と <設定> の内容を用いて geometry が再設定を行った後、再び 3 の後処理が行われる。

なお、\geometry 命令を直接呼び出すことも可能である。 当然この場合は 3 の後処理は行われない。

その他の機能

  • \jsZw [長さ変数]: 現在の全角幅。 これは単純に現在のフォントサイズに scale クラスオプション で設定された値を乗じたものである。 つまり、bxjs クラスでは「和文フォント」の「1em」が この長さに等しいことが要請されている。