BXjscls

BXjscls パッケージは pdflatex, lualatex, xelatex, platex-ng, uplatex, platex で使用可能な日本語文書組版のための LaTeX 文書クラスのコレクションです. TeX Live, W32TeX に含まれています.

奥村先生の「pLaTeX2e 新ドキュメントクラス(jsclasses)」は (u)pLaTeX での使用を前提としているため,他のエンジンでは使用することができません. BXjscls は jsclasses から (u)pLaTeX 依存の部分を分離したもので,これと各エンジン用の日本語処理パッケージを組み合わせることで,(u)pLaTeX 以外でも新ドキュメントクラスを用いた場合と同等の文書作成が可能となります.



基本的な使い方

ここでは新しい版(v1.x)の BXjscls パッケージの使い方を説明します. (以前の v0.3,v0.9 とは若干仕様が異なることに注意.)

文書クラスの一覧

BXjscls パッケージには次の 4 つの文書クラス(「BXJS クラス」と総称する)が収録されています. これらは何れも「新ドキュメントクラス」(JS クラス)の文書レイアウトと機能を継承したものとなっています.

文書クラスの指定

BXJS クラスを“標準設定”で使用する場合,\documentclass 命令を以下のように記述します.

\documentclass[<エンジン>,<ドライバ>,ja=standard,<他オプション>...]{<クラス名>}

ここで <クラス名> には先述の文書クラス名(bxjsarticle 等)の 1 つを指定します. クラスオプションは以下のように指定します.

“標準設定”(ja=standard)を指定した場合,自動的に当該のエンジンのための日本語処理パッケージが読み込まれます.

エンジン日本語処理パッケージjafont指定
(u)platex(エンジン機能)pxchfon
(pdf)latexbxcjkjatype
xelatexzxjatypezxjafont
lualatexLuaTeX-jaluatexja-preset

その上で,必要最低限の設定(和文フォント設定など)が行われます.そのため,(u)pLaTeX を用いる時と同様に,「何も設定せずにいきなり本文(やプレアンブル)に日本語を書く」ことができます.

例(XeLaTeX + bxjsarticle クラス)

以下は,bxjsarticle クラスを用いた簡単な XeLaTeX 文書の例です.

% 文字コードは UTF-8
\documentclass[a4paper,xelatex,ja=standard]{bxjsarticle}% ドライバ指定は無し
\usepackage{metalogo} % \XeLaTeX ロゴのため
\title{{\XeLaTeX}で日本語文書}
\author{七篠\ 権兵衛}
% \today の出力はJSクラスと同様に西暦になる
\begin{document}
\maketitle

\section{{\XeLaTeX}で日本語してみる}

吾輩は\textgt{猫}である!\hspace{1\zw}%
名前など無い!

\end{document}

以下の点にも注意してください.

例(pdfLaTeX + bxjsslide クラス)

以下は,bxjsslide クラスを用いた pdfLaTeX 文書(スライド)の例です. この文書では出力 PDF に文書情報を付加するために hyperref パッケージを読み込んでいます. (BXjscls の v1.0a 以降が必要.)

% 文字コードは UTF-8
\documentclass[pdflatex,ja=standard]{bxjsslide}% ドライバ指定は無し
\usepackage[colorlinks]{hyperref}
\hypersetup{pdftitle={{pdf\LaTeX}で日本語文書},
  pdfauthor={七篠権兵衛},
  pdfkeywords={BXJSクラス}}
\usepackage{color}
\newcommand{\alert}[1]{\textcolor{red}{#1}}
\title{{pdf\LaTeX}~で日本語文書}
\author{七篠\ 権兵衛}
\begin{document}
% タイトル
\maketitle
\newpage

\section{吾輩は~cat~である}
ニャーン
\newpage

\section{まとめ}
御清聴ありがとうございました。
\newpage

\section{大事なことなのでもう~1~回}
\alert{御清聴}ありがとうございました。
\end{document}

pdfLaTeX に対する“標準設定”では bxcjkjatype パッケージが以下の設定で自動的に読み込まれます.

\usepackage[whole,autotilde]{bxcjkjatype}

pdfLaTeX を使う場合には以下の点にも注意が必要です.

便利な機能

用紙サイズを長さで指定する

paper オプションで任意の用紙サイズを指定することができます.

% 郵便はがき(10cm×14.8cm)のサイズを設定
\documentclass[xelatex,paper={100mm}{148mm},8pt,ja=standard]{bxjsarticle}

基底フォントサイズを長さで指定する

base オプションで,基底フォントサイズ(\normalsize のフォントサイズ)に任意の長さ値を指定できます.

% 基底フォントサイズを8.5ptにする
\documentclass[xelatex,a4paper,base=8.5pt,ja=standard]{bxjsreport}

この指定の場合,厳密にいうと,「欧文の \normalsize の要求フォントサイズ」が 8.5pt になります.BXJS クラスでは(JS クラスと同様に)欧文に対して和文を少し縮小して合わせているため,和文の全角幅(\zw)は 8.5pt より少し小さくなります.

これに対して,「和文の \normalsize を特定のサイズになる」ように基底フォントサイズを設定するには jbase オプションを利用します.

% 和文の \normalsize を11Qにする
\documentclass[lualatex,b5paper,jbase=11Q,ja=standard]{bxjsbook}

※ 単位“Q”は本来は (u)pLaTeX 特有のものですが,(v1.0a 以降では)base,jbase 指定に限って他のエンジンでも使用できます*1

和文フォントのプリセット指定

※“標準設定”(ja=standard)を前提にします.

既定では基本和文フォント(\mcfamily/\gtfamily の実体)として以下のものが用いられます.

この基本和文フォント設定は,jafont オプションを用いて簡単に変更できます. 例えば,次のようにすると,基本和文フォントとしてヒラギノ(ProN版)が使用されるようになります.

\documentclass[xelatex,a4paper,ja=standard,jafont=hiragino-pron]{bxjsarticle}

この機能の仕様について少し詳しく説明しましょう. “標準設定”で利用している日本語処理パッケージには「和文フォントのプリセット設定」を行うためのパッケージが付随しています.

そこで,jafont オプションキーが指定された場合はその値をオプションにして当該のパッケージを読み込むことで,プリセット設定を実現しているのです. つまり,先の例では内部で次のパッケージ読み込みが行われます.

\usepackage[hiragino-pron]{zxjafont}

※もちろん,jafont を使わずに手動で和文フォントを設定しても構いません.

\documentclass[xelatex,a4paper,ja=standard]{bxjsarticle}
% zxjatype の命令を用いて(Win8.1の)游フォントを指定する
\setCJKmainfont[BoldFont=YuMincho-DemiBold]{YuMincho-Regular}
\setCJKsansfont[BoldFont=YuGothic-Bold]{YuGothic-Regular}

jafont オプションの応用的な使用法

※“標準設定”(ja=standard)を前提にします.

2004JIS 字形を選択する

※“標準設定”(ja=standard)を前提にします.

jafont でプリセットを指定した場合,既定では 90JIS 字形が選択されます.2004JIS 字形を選択するには,「japaram オプションの値のリストの中に“jis2004”を追加」します.

\documentclass[lualatex,ja=standard,jafont=noto,
    japaram={jis2004},a4paper]{bxjsarticle}
\begin{document}
巷で噂の葛飾区。
\end{document}

※プリセットに対する補助設定という位置付けです.
※実際に字形の切り替えができるかはフォントに依ります.
※現状では (u)pLaTeX/LuaLaTeX でのみ有効です.

和文用の単位

※“標準設定”(ja=standard)を前提にします.

和文組版に特化したエンジンである (u)pLaTeX では zw や Q 等の和文特有の単位がサポートされていますが,他のエンジンではこれらの単位は使えません. BXJS クラスではこれらの単位の代用となる長さ命令を提供しています.

命令次の単位に相当備考
\zwzw現在の和文の全角幅
\jQQ= 0.25mm
\jHH= 0.25mm
\trueQtrueQ= 0.25truemm
\trueHtrueH= 0.25truemm

少し特殊な長さ命令として \ascQ(anti-scaled Q)があります. これは,\trueQ(= 0.25truemm)を和文スケール値で割った長さであり,以下のようにフォントサイズ指定で用いることを想定しています.

% 和文サイズ10Q, 行送り16H
\fontsize{10\ascQ}{16\trueH}\selectfont

これを実行すると,和文の全角幅(\zw)が 10trueQ になるようにフォントサイズが変更されます.

この他,本来 (u)pLaTeX のカーネルで定義されている以下の和文特有パラメタも,全てのエンジンについて利用可能です.

命令意味
\Cwd標準の和文文字幅(\normalsize の \zw)
\Cht標準の和文文字高さ
\Cdp標準の和文文字深さ
\Chs標準の和文字送り(BXJS では \Cwd に等しい)
\Cvs標準の和文行送り(\normalsize の \baselineskip 自然長)

和文用の単位そのものを使う

v1.8より,(u)pLaTeX 以外のエンジンでも和文用の単位そのものを使う機能が追加されました.

次のように,「japaram オプションの値のリストの中に“units”を追加するとこの機能が有効になり,「\hspace{1zw}」などの命令が全てのエンジンで通るようになります.

\documentclass[lualatex,ja=standard,japaram={units}]{bxjsarticle}

hyperrefの文書情報の文字化け対策

※“標準設定”(ja=standard)を前提にします.

hyperref パッケージを利用して出力 PDF 文書に文書情報(しおり等)を付加する場合,一般的には“PDF の文字コード”に関する設定を適切に行う必要がありますが,これはエンジンごとに「正しい設定」が異なっていて非常に厄介なものです.

BXJS クラスでは使用されるエンジンに応じて「正しい設定」が自動的に行われるようになっています. そのため,hyperref パッケージで unicode オプションを指定する必要はありません.(指定した場合も「正しい方」に補正される.) また,(u)pLaTeX + dvipdfmx の上で用いる時も,ほとんどの場合,pxjahyper パッケージの読込は不要です.*2

※BXJS クラスが自動的に hyperref パッケージを読み込むことはありません.

数式の一部として和文文字を出力する

※“標準設定”(ja=standard)を前提にします.

次のように,数式の要素として(つまり \mbox や \text を介して「数式中のテキスト」として扱うのではなく)和文文字が使われることがあります.

\[ % "地"は地球, "太"は太陽を表す識別子
  \frac{a_{地}^3}{T_{地}^2} = G\cdot\frac{m_{太} + m_{地}}{4\pi^2}
\]

v1.3a 以前では数式中で和文文字が使えるのは LuaLaTeX に限られていましたが,v1.4 以降では (u)pLaTeX でも使えるようになりました.また,クラスオプションに enablejfam=true を指定すると,XeLaTeX でも数式中で和文文字が使えるようになります.

% XeLaTeX 文書, UTF-8
\documentclass[xelatex,ja=standard,enablejfam=true,a4paper]{bxjsarticle}
\begin{document}
\[ \frac{a_{地}^3}{T_{地}^2} = G\cdot\frac{m_{太} + m_{地}}{4\pi^2} \]
\end{document}

和文用の数式フォント命令(\mathmc,\mathgt)は本来は (u)pLaTeX と LuaLaTeX でのみサポートされるものです.それ以外のエンジン(pdfLaTeX も含む)でも“一時的にテキストに切り替える”という擬似的な処理で実装されているためこれらの命令が使えます.ただしこの場合は(一般的には)amstext(または amsmath)パッケージの併用が必要になります.

% pdfLaTeX 文書, UTF-8
\documentclass[pdflatex,ja=standard,a4paper]{bxjsarticle}
\usepackage{amsmath}% これも必要
\begin{document}
% e_{地} は無理だが, \mathmc を使うとOK
\[ e_{\mathmc{地}} = 0.0167 \]
\end{document}

magstyle設定

「新ドキュメントクラス」(JS クラス)におけるページレイアウト決定の過程では,基底フォントサイズが 10pt 以外の場合に,“版面を拡大縮小する”という手順を採用しています. そして,JS クラスではこの“版面の拡大”を実現するために TeX エンジンが持つ版面拡大機能(仮に「mag 設定」と呼称する)を利用しています. このことには相応の理由があるのですが,一方でこの処理は以下のような不都合の原因となっています.

BXJS クラスでは“版面拡大”について mag 設定以外の他の実現方法を提供していて,クラスオプション magstyle でそれを選択できます.*4

※ v1.1f において,jsclasses の 2016/07/15 版に合わせるためにオプション値の名称が変更されました.これより前の版では,usemag/nomag/nomag* の代わりにそれぞれ mag/real/xreal と書いてください. ※ magstyle の既定値は usemag ですが,例外的に,v0.87 以降の LuaTeX では usemag がサポートされない*5ので代わりに nomag* が既定値となります.

magstyle の値をどうすればよいか迷った場合は次のように決めればよいでしょう.

和文間空白,和欧文間空白の設定

※“標準設定”(ja=standard)を前提にします.

全てのエンジンにおいて,\setkanjiskip 命令で和文間空白,\setxkanjiskip 命令で和欧文間空白の大きさを設定できます. 値に em や \zw の単位を用いた場合は,フォントサイズの変更に追随します.

% 和欧文間空白を“八分空き”にする
\setxkanjiskip{0.125em minus 0.042em}

また,pTeX 系と同様の \(no)autospacing および \(no)autoxspacing 命令が全てのエンジンで使用できます.

※段落の途中で和文間空白や和欧文間空白の設定を変えた場合の挙動は,エンジンにより異なります.

jsbookクラスの一行の文字数の上限を変更する

本文領域の一行の文字数は、普通は紙面の幅が大きくなるのに合わせて増えます.ところが、書籍用の bxjsbook クラスでは,行が長くなりすぎて読みにくくなるのを防ぐため,一行の文字数の上限を 40 文字に設定しています。*6

この上限の値は textwidth-limit オプションで変更することができます.もちろん,十分な横幅がない場合は実際の行長はここで指定した値よりも小さくなります.

% A4判の(使える)横幅を使い切りたい
\documentclass[lualatex,ja=standard,textwidth-limit=60,a4paper]{jsbook}

エンジンの自動判定

BXJS クラスでは使用するエンジンの種類をオプションとして指定させる仕様になっています. これは,「どのエンジンを使うのが正しいのかは文書に明示されるべき」という設計思想のためです.

しかし,例えば「Markdown から LaTeX を途中経由して PDF に変換する」ツール等において,自動生成される LaTeX ソースのテンプレートに BXJS クラスを使用するという場合は正しいエンジン名の指定が難しい可能性も考えられます.

このような場合に対応するため,エンジンオプションとして autodetect-engine という特殊な値を用意しています. これを指定するとエンジンが自動的に判別されます.

エンジンを自動判別する時には「DVI 出力の時だけ指定が必要」なドライバオプションの扱いが厄介です. これに対処するため,ドライバオプションにも特殊な値 dvi=dvipdfmx が用意されています. これを指定すると,エンジンが DVI 出力の時にはドライバオプションに dvipdfmx が指定されたと見なされ(グローバルオプションとして機能する),エンジンが PDF 出力の場合は何も起こりません. つまり,以下のようにオプションを指定すると,PDF 出力のエンジンでも (u)pLaTeX + dvipdfmx でもコンパイルが通るようになります.

 \documentclass[autodetect-engine,dvi=dvipdfmx,ja=standard,
     a4paper,9pt,twocolumn]{bxjsreport}

XeTeX の ActualText 生成機能を利用する

XeLaTeX エンジンを利用する場合に,ActualText 生成機能(\XeTeXgenerateactualtext=1,詳しくはXeTeXの記事を参照)を有効にしたい場合は,クラスオプションに precisetext を指定します*7.(v1.1b 以降が必要.)

% ActualText生成を有効にする
\documentclass[xelatex,a4paper,ja=standard,precisetext]{bxjsarticle}

※\XeTeXgenerateactualtext に対応した新しい XeTeX 以外のエンジンではこのオプションは(警告付きで)無視されます.

Pandoc モード

Pandoc (文書形式変換ツール)のデフォルトの LaTeX 用テンプレートを利用して他形式(Markdown 等)の日本語文書を LaTeX 形式(および PDF 形式)に変換する場合,BXJS クラスの「Pandoc モード」を利用すると適切な出力が得られます.この場合,文書クラスのオプションに pandoc を指定し,エンジンと和文ドライバの指定(ja=...)を省略します.*8(v1.1a 以降が必要です.)

bxjsarticle クラスで Pandoc モードを指定した例を示します.

\documentclass[pandoc,jafont=ipaex,a5paper]{bxjsarticle}

この指定を生成するための Pandoc のオプション指定は以下のようになります.

pandoc sample.md -o sample.pdf --latex-engine=lualatex
  -V papersize=a5 -V documentclass=bxjsarticle
  -V classoption=pandoc -V classoption=jafont=ipaex

Pandoc は本来は (u)pLaTeX をサポートしませんが,BXJS クラスの Pandoc モードを用いると,正常な(コンパイルが正しく通る)(u)pLaTeX 文書に変換することができます.詳しくは以下の記事を参照してください.

※「Pandoc モード」では独自の(“pandoc”という名前の)和文ドライバが用いられます.*9

注意事項

bxjsbook クラスのページレイアウトが 1.3 版で変更された

BXJS クラスのページレイアウトは JS クラスに合わせることを原則としていますが,手違いのため,bxjsbook クラスの本文領域の水平マージンについて,jsbook クラスと大きく異なる値になっていました.(大きな紙面の場合,本文領域がノド側に偏るのが本来のデザインです.)これは本来想定していた設計ではないため,1.3 版において水平マージンを jsbook のものと合わせる改修が行われました.

以前のレイアウトを使い続けたい場合は,クラスオプションに“layout=v1”を指定してください.

\documentclass[lualatex,ja=standard,layout=v1,a4paper]{jsbook}

※詳しくは以下の記事を参照してください.

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

BXJS クラスの“標準設定”使用時に graphicx にオプションを与えたい場合 (XeLaTeX / LuaLaTeX)

以下のように,BXJS クラスの“標準設定”使用時に XeLaTeX / LuaLaTeX 文書で graphicx パッケージにオプションを与えて読み込むとエラー ! LaTeX Error: Option clash for package graphicx. が発生します. これは,BXJS クラスの XeLaTeX 用標準設定では zxjatype パッケージを通して fontspec パッケージが読み込まれるのですが,この fontspec が graphicx をオプション無しで読み込んでいるためです. LuaLaTeX 用標準設定でも fontspec が使われるため,同じ理由でエラーが発生します.

\documentclass[xelatex,ja=standard]{bxjsarticle}
\usepackage[hiresbb]{graphicx}
\begin{document}
吾輩は猫である。
\end{document}

回避策として,BXJS クラス v1.0b 以降ではグローバルオプション(クラスオプション)にこれらのオプションを付ければ適用されます.

\documentclass[xelatex,ja=standard,hiresbb]{bxjsarticle} % ここで graphicx のオプションを与える
\usepackage{graphicx} % ここはオプションなし
\begin{document}
吾輩は猫である。
\end{document}

なお,BXJS クラス v1.0a 以前ではこの回避策をとることもできませんでしたので,次のようにすればよいでしょう.

\PassOptionsToPackage{hiresbb}{graphicx} % graphicx が読まれるときにオプションを渡せるように事前に書いておく
\documentclass[xelatex,ja=standard]{bxjsarticle} % この段階で fontspec によって graphicx が読み込まれる
\begin{document}
吾輩は猫である。
\end{document}

なお,graphicx の xetex ドライバ指定については明示指定しなくとも自動的に xetex.def が読まれますので,わざわざオプション指定しなくてもよいでしょう.

文字を“和文として”出力する

(u)pLaTeX においては特に何も設定しない場合は,ASCII で(直接または間接的に)入力する文字以外の Unicode 文字は全て和文として扱われます.*10しかしその他のエンジン(と日本語処理パッケージの組合せ)では Unicode 文字の一部が“欧文扱い”になっています.そのため通常は,そのような文字は“欧文側”のフォントで出力される(あるいは,フォントが対応してなければ出力されない)ことになります.

例えば,次の文書をコンパイルすると,“☃”(U+2603)の文字の部分が空白になってしまいます.

\documentclass[xelatex,a4paper,ja=standard]{bxjsarticle}
\begin{document}
吾輩は☃である。
\end{document}

XeLaTeX + zxjatype においては,“☃”は“欧文扱い”であるため,欧文フォントで出力しようとしますが,現在の欧文フォント(Latin Modern Serif)は“☃”の字形を持たないので,結果的に空白になってしまったのです.

BXJS クラス(標準設定)では \jachar{<文字>} という命令を用いて,当該の文字を強制的に“和文として”出力させることができます.

\documentclass[xelatex,a4paper,ja=standard]{bxjsarticle}
\begin{document}
吾輩は\jachar{☃}である。
\end{document}

現在の和文フォント(IPAex明朝)には“☃”の字形があるため,これで正常に“☃”が出力できます.

※ \jachar の引数には文字 1 つだけを指定できます.

不具合

LuaLaTeX + BXJS クラスで graphicx パッケージを読み込むと“Option ‘pdftex’ requires pdfTeX”エラーが出る → 最新版にアップデート

v1.0b~v1.3a の BXJS クラス(標準設定)と最近の LuaLaTeX の組合せで graphicx(または graphics)パッケージを読み込むと予期せぬエラーが発生します.

% LuaLaTeX 文書
\documentclass[lualatex,ja=standard]{bxjsarticle}
\usepackage{graphicx}
% 以下略

例えば,この文書をコンパイルすると次のエラーが発生します.

! Package pdftex.def Error: Option `pdftex' requires pdfTeX,
(pdftex.def)                but pdfTeX features are missing.
(pdftex.def)                Loading of this driver file is aborted.

これはバグであり,v1.4 において修正されています.

※“Option clash”のエラーについては,本記事の「BXJS クラスの“標準設定”使用時に graphicx にオプションを与えたい場合」の項目を参照してください.

別行立て数式を使うと警告が出る → 最新版にアップデート

v1.0a 以前の BXJS クラスでは,文書中に別行立て数式(ディスプレイ数式)が出現するたびに無用な警告が出る,という不具合がありました.例えば:

\documentclass[uplatex,dvipdfmx,ja=standard]{bxjsarticle}
\begin{document}
例:
\[ a + b = c \] % ここで警告が出る
\end{document}

この文書をコンパイルすると以下の警告が出ます.

LaTeX Font Warning: Command \normalsize invalid in math mode on input line 4.

これはバグであり,v1.0b において修正されています.

\paragraph 命令でエラーが出る → 最新版にアップデート

v1.0d~v1.1 の BXJS クラスを minimal 和文ドライバで用いる場合,\paragraph 命令を使うとエラーが出ます.例えば:

% ja無指定なのでminimal和文ドライバになる
\documentclass[xelatex,a4paper]{bxjsarticle}
\usepackage{zxjatype}
\usepackage[ipaex]{zxjafont}
\begin{document}
\paragraph{BXjsclsは} アレ。
\end{document}

この文書をコンパイルすると以下のエラーが出ます.

! Undefined control sequence.
\jsParagraphMark ->\jsJaChar 
                             {■}
l.6 \paragraph{BXjsclsは} ア
                              レ。
?

これはバグであり,v1.1a において修正されています.

関連リンク

ChangeLog


*1 この時点では“標準設定”が未完了のため,\jQ 命令は使用できません.
*2 文書情報の文字列中に一部の特殊文字が含まれる場合には相変わらず必要になります.
*3 例えば hyperref の用紙サイズ機能が誤動作します.なお,BXJS クラスではその機能を無効化して問題を回避しています.
*4 “magstyle=”を省略する(JS クラスと同じ書き方にする)こともできます.
*5 この理由は,そもそもエンジンで(PDF モードにおいて)mag 機能がサポートされないからです.
*6 これは jsbook クラスのページレイアウト設計を踏襲したものです.通常のマージン設定で行の長さが 40 文字を超える場合は,超過した分だけ小口側のマージンが増やされます.
*7 この設定を既定にするか否かについては現在検討中らしい.
*8 ドライバオプションは dvi=dvipdfmx が既定となりますが,これは明示指定で上書きできます.
*9 “標準設定”(standard 和文ドライバ)の機能はそのまま pandoc 和文ドライバにも引き継がれているため,通常は両者の違いを意識する必要はありません.
*10 ただし pLaTeX の既定の設定では,JIS 符号にある文字以外は扱えません.

Last-modified: 2018-08-14 (火) 16:39:59 (36d)