En toi Pythmeni tes TeXnopoleos
[電脳世界の奥底にて] |
BXjscls パッケージ
~XeLaTeX でまともな日本語文書レイアウトを~
- 2016/04/03: 内容が古い旨の警告を追加。
- 2012/05/01: BXjscls 0.3a 版。
- 2010/08/16: 「XeLaTeX で日本語する件について」の一部を分離してこのページを作成。
概要
横書き日本語用の文書クラスとして定評のある奥村晴彦氏の pLaTeX2e 新ドキュメントクラス (以下これを js クラスと呼ぶ) を pLaTeX 以外の「日本語が処理できる」LaTeX で使えるようにすることを目標として 日本語処理部分を取り除いたものである。 すなわち、
- 日本語が扱える LaTeX
- BXjscls の文書クラス
- 1 と 2 を連携させるための TeX コード
の 3 つで pLaTeX + js クラスと同じ役割を果たす。 無論、3 を実装するのは開発者の仕事になる。 XeLaTeX 上での日本語組版用パッケージとして私が開発している zxjatype パッケージについては 既に 3 の作業が行われている。
対応環境
- 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 クラスの 8pt
、9pt
、10pt
、
……の代替として、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 クラスの10pt
、11pt
、…等と同じ役割で、 任意の値を指定できる。参考:##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 クラスのa4paper
、b5paper
、…等と同じ役割で、 任意の値を指定できる。mag=<値>
:\mag
値の直接指定。
js クラスのオプションで使用可能なもの
- 用紙サイズ指定:
a4paper
,a3paper
,a5paper
,a6paper
,b4paper
,b5paper
,b6paper
,a4j
,a5j
,b4j
,b5j
,a4var
,b5var
,letterpaper
,legalpaper
,executivepaper
- 横置き:
landscape
- 基底フォントサイズ:
10pt
,8pt
,9pt
,11pt
,12pt
,14pt
,17pt
,20pt
,21pt
,25pt
,30pt
,36pt
,43pt
,12Q
,14Q
- 両面用レイアウト:
oneside
,twoside
,vartwoside
- 段組み:
onecolumn
,twocolumn
- 表題ページ:
notitlepage
,titlepage
- 起こし:
openright
,openany
(まだ bxjsbook が未完成なので無意味) - オーバーフル警告:
final
,draft
- 英語化:
english
js クラスのオプションで使用不可能なもの
- クラス変種指定:
report
,slide
―― report 相当は bxjsreport、slide 相当は bxjsslide(未完成) と別クラスになっている。 - トンボ出力:
tombow
,tombo
,mentuke
―― これは pLaTeX のカーネル命令を利用しているので とりあえず除外。 - 和文フォントメトリック指定:
jis
,winjis
,mingoth
,uplatex
―― 和文フォントの管理は文書クラスでは行わない。 (uplatex
は bxjs では別の意味になる。) - 和文数式フォントの登録の制御:
disablejfam
―― 同上。(なお、現在のところ数式中の和文使用は全く考慮していない。) - papersize スペシャル:
papersize
―― これは geometry 側で設定する。 XeLaTeX を使う場合は、既定で適切な処理がされて正しい用紙サイズの PDF が出力されるはずである。
ページレイアウトの設定
bxjs クラスではページレイアウトの設定に geometry パッケージを 用いて次の手順で行っている。
- (基底フォントサイズにより決定された mag 値を実際に設定する。)
- geometry で次のパラメタを設定する。
- クラスオプションで指定された用紙サイズ、および
truedimen
。 - bxjsarticle/bxjsreport の場合、次の設定値。
headheight=10pt, footskip=0.03367\paperheight, headsep=\footskip-\topskip, includeheadfoot, hscale=0.76, hmarginratio=1:1, vscale=0.83, vmarginratio=1:1
- クラスオプションで指定された用紙サイズ、および
- 後処理を行う。以下の処理が含まれる。
textwidth
を全角幅の整数倍に、textheight
を整数行分の自然長になるように丸める。- marginpar 関連の設定を行う。 (将来はこれも geometry で設定するように変更する予定。)
ページレイアウトの再設定のために次の命令が用意されている。
\setpagelayout{<設定>}
: 現在のページレイアウトの設定の一部を修正する。<設定>
は geometry のパラメタの記述であり、 現在の設定に追記して geometry が再設定を行った後、 再び 3 の後処理が行われる。\setpagelayout*{<設定>}
: 用紙以外の設定をリセットして改めてページレイアウトの設定を行う。 具体的には、2a と<設定>
の内容を用いて geometry が再設定を行った後、再び 3 の後処理が行われる。
なお、\geometry
命令を直接呼び出すことも可能である。
当然この場合は 3 の後処理は行われない。
その他の機能
\jsZw
[長さ変数]: 現在の全角幅。 これは単純に現在のフォントサイズにscale
クラスオプション で設定された値を乗じたものである。 つまり、bxjs クラスでは「和文フォント」の「1em」が この長さに等しいことが要請されている。