|
|
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」が この長さに等しいことが要請されている。