マクロツイーター

はてダから移行した記事の表示が崩れてますが、そのうちに直せればいいのに(えっ)

BXjscls も新しくなった

[2015-08-09] 「dvipdfmx-if-dvi オプション」の節を追記。

長らく暫定版(v0.9pre)のままであった BXjscls パッケージであるが、ついに正式版となる v1.0 をリリースした。

……確かにそれが最重要なんだが、他の点についても紹介しておこう。

bxjsbook と bxjsslide クラス

……がちゃんと使えるようになった。

jadriver → ja

和文ドライバ指定のオプションの名前が jadriver から ja に変わった。((従来の jadriver も引き続き使える。))少しだけタイプ労力が節約できる ;)

jafont オプション

次のように、クラスオプション jafont で“和文フォントの種類”を指定できる。

% XeLaTeX 文書
% jafont=yu-win で(Win8.1の)游フォントを指定
\documentclass[a4paper,xelatex,ja=standard,jafont=yu-win]{bxjsarticle}
\begin{document}
\section{これは游ゴシックです☃}
これは游明朝です☃
\end{document}

要するに、これは次と同じである。

\documentclass[a4paper,xelatex,ja=standard]{bxjsarticle}
\usepackage[yu-win]{zxjafont}
\begin{document}
\section{これは游ゴシックです☃}
これは游明朝です☃
\end{document}

つまり、jafont に設定した値をプリセットのオプションとして zxjafont を読み込んでいるだけである。だから zxjafont パッケージ((特に、yu-win プリセットに対応した zxjafont の 0.3 版。))がインストールされている必要がある。

jafont オプションは XeLaTeX 以外でも使用可能で、(u)pLaTeX の場合は pxchfon パッケージ、LuaLaTeX の場合は luatexja-prewset パッケージ、pdfLaTeX の場合は bxcjkjatype パッケージのプリセット設定を呼び出す。

nopapersize オプション

jsarticle などの“JSクラス”では、既定では TeX 側で指定した用紙サイズは出力の DVI ファイルには記録されず、これを記録する(その為の「papersize special 命令」を実行する)には papersize というクラスオプションの指定が必要だった。

これに対して、BXjscls の文書クラスでは、既定で「papersize special 命令」が実行されるようになっている。特に何も考えなくても“正しい用紙サイズの PDF が作られる”ので通常はこれでいいのだが、稀にこれが不都合をもたらすことがある。例えば、次のように、upLaTeX + dvipdfmx で preview パッケージを利用する場合*1を考える。

\documentclass[uplatex,dvipdfmx,ja=standard]{bxjsarticle}
\usepackage[dvipdfmx,active,tightpage]{preview}
\usepackage[noalphabet]{pxchfon}
\setminchofont[0]{hgrpp1.ttc}% HG創英角ポップ体
\begin{document}
\begin{preview}
☃世界平和♬
\end{preview}
\end{document}

preview パッケージは preview 環境の領域を切り出すための papersize special 命令を実行するが、同時に bxjsarticle は A4 縦の用紙サイズを papersize special で設定するので、両者が衝突して上手くいかない。

こういうケースの対処のために、papersize special の実行を抑止するためのクラスオプション nopapersize を用意した。

\documentclass[uplatex,dvipdfmx,nopapersize,ja=standard]{bxjsarticle}
\usepackage[dvipdfmx,active,tightpage]{preview}
\usepackage[noalphabet]{pxchfon}
\setminchofont[0]{hgrpp1.ttc}% HG創英角ポップ体
\begin{document}
\begin{preview}
☃世界平和♬
\end{preview}
\end{document}
hyperref での文書情報が何故か文字化けしない

(標準和文ドライバ利用(ja=standard)の場合に限る。)

以前の記事で解説したように、hyperref パッケージにより PDF に付与される文書情報(“しおり”の文字列など)が文字化けせず正常に処理されるようにする設定は、エンジンごとに異なっていて非常にややこしい。

BXjscls のクラスを用いる場合は、PDF 文書情報の文字コードの設定を省略しても自動的に正しい設定が行われるようにした。u)pLaTeX を用いる場合でも、pxjahyper パッケージは“ほとんどの場合”に不要となる。((もちろん、pxjahyper を読み込んでも問題はない。PDF の文字情報が LaTeX の文字命令(\textendash 等)を含む場合は、相変わらず pxjahyper が必要である。))

% upLaTeX 文書
\documentclass[uplatex,dvipdfmx,ja=standard]{bxjsarticle}
\usepackage[colorlinks,bookmarksnumbered,% 文字コード指定をしない
    pdftitle={日本語でLaTeXする件}]{hyperref}
\begin{document}
\section{はじめに}
御清聴ありがとうございました。
\end{document}

なお、文書クラス自体が hyperref を読み込むわけではないので、ユーザが hyperref を読み込まない場合にはこの処置は何の影響も持たない。

dvipdfmx-if-dvi オプション

以前の記事で述べたように、BXjscls の文書クラスでは、実際に使用するエンジンをクラスオプション(xelatex 等)として指定することを原則としている。その上で、「明示指定が難しい場合*2」の対応策として、エンジンを自動判別するオプション autodetect-engine を用意している。

\documentclass[a4paper,autodetect-engine,ja=standard]{bxjsarticle}

しかし、自動判別が必要な状況で、しかも「DVI 出力のエンジン(pLaTeX 等)の場合はドライバ指定を dvipdfmx にしたい」という場合は、これだけでは対応できない。実際にエンジンが DVI 出力である時だけクラスオプションに dvipdfmx を入れなければならず文書ソースを共通にできないからである。

この場合に対処するために、dvipdfmx-if-dvi というオプションを用意した。

\documentclass[a4paper,autodetect-engine,dvipdfmx-if-dvi,ja=standard]{bxjsarticle}
\usepackage{color}

DVI 出力のエンジン(pLaTeX 等)を使っている場合は、「クラスオプションに dvipdfmx がある」と見做される。その結果、bxjsarticle クラスが dvipdfmx 用の動作を行う。なおかつ、dvipdfmx がグローバルオプションとしても有効になるので、color パッケージのドライバも dvipdfmx となる。一方で、PDF 出力のエンジン(pdfLaTeX 等)を使っている場合は、dvipdfmx-if-dvi は何の効力も持たないため、bxjsarticle クラス自身も color パッケージも(ドライバ明示指定が無いため)エンジンから判断したドライバ指定(例えば pdfLaTeX なら pdftex)が適用される。

*1:bxdpx-preview が必要である。

*2:他文書形式からの変換で LaTeX ソースが自動生成される場合を主に想定している。