BXjscls も新しくなった
[2015-08-09] 「dvipdfmx-if-dvi オプション」の節を追記。
長らく暫定版(v0.9pre)のままであった BXjscls パッケージであるが、ついに正式版となる v1.0 をリリースした。
- BXjscls パッケージ (GitHub:zr-tex8r)
……確かにそれが最重要なんだが、他の点についても紹介しておこう。
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)が適用される。