マクロツイーター

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

bxokumacro パッケージが新しくなった件

ステマ

TeX & LaTeX Advent Calendar

2015/12/01 〜 2015/12/25
TeX で笑おう、TeX で喚こう〜
*  *  *

bxokumacro パッケージとは、コレに入っている何か。

奥村氏の「新ドキュメントクラス」(JSクラス)のパッケージにオマケとして入っているのが okumacro パッケージで、それを他のエンジンでも使えるように某 ZR 氏が改造したのが bxokumacro パッケージである。

okumacro が素晴らしい件

(bx)okumacro パッケージでどんなことができるかというと……。

\挨拶

大変素晴らしい。*1

……ではあるが、恐らくこのパッケージで一番よく用いられている機能は、ルビを出力する \ruby 命令であろう。

\ruby{}{}\ruby{}{ばと}\quad
\ruby{鶺鴒}{せきれい}\quad
\ruby{雷鳥}{らいちょう}\quad
\ruby{百舌鳥}{もず}

他の“高機能な”パッケージと比べると柔軟性には劣るが、入力に気を付けていれば日本語として“まともな”ルビ出力が得られ、何よりの利点として、仕様が非常に単純なので誰でも容易に使える。

bxokumacro がアレな件

okumacro パッケージは pLaTeX 専用であるが、それを改造して他のエンジンでも使えるようにしたのが bxokumacro パッケージである。大概の機能(例えば Enter キー(リターンキー)の図を出力する \return 命令など)は“日本語処理”と無関係なので本当にどのエンジンでも(pdfLaTeX でも)使えるが、先述の \挨拶\ruby は“日本語処理”ができる環境が必要になるので、これらは“日本語できる LaTeX”でのみサポートされている。bxokumacro が作られた当時(2009 年)に“日本語できる LaTeX”といえば (u)pLaTeX の他に「XeLaTeX + zxjatype パッケージ」の環境があったので、これらの 2 種類の環境がサポートされていた。

しかし、何せ相当に古いパッケージのため、最新の XeLaTeX では正常に動作しなくなっていたようである。*2

bxokumacro が更新された件

というわけで、新しい zxjatype に対応させる改修を行った。

実はそれだけではない。そもそも bxokumacro を作った動機が「(u)pLaTeX 以外のエンジンをサポートする」ことであり、今では“日本語できる LaTeX”の種類も増えているので、それらもサポート対象に加えた。具体的には、次の環境で \ruby などの“日本語絡み”の機能が使える。(“日本語絡み”でないものは当然全てのエンジンで使える。)

  • pLaTeX および upLaTeX。
  • XeLaTeX + zxjatype パッケージ。
  • LuaLaTeX + LuaTeX-ja パッケージ。
  • pdfLaTeX 上で、BXJS クラス(BXjscls パッケージの文書クラス)を“標準設定”(standard 和文ドライバ)で用いている場合。ただし以下のような制限がある。
    • \kenten 命令は未対応。
    • 和文を含む命令名は使えないので、\挨拶\AISATSU\曜\YOU\――\DDASH*4の「代替名」を使う必要がある。

というわけで、bxokumacro を使うと、pdfLaTeX でも挨拶やルビができる。

% pdfLaTeX 文書, 文字コードは UTF-8
\documentclass[pdflatex,a5paper,ja=standard]{bxjsarticle}
\usepackage{bxokumacro}
\begin{document}
\AISATSU
\par\bigskip
\ruby{}{}\ruby{}{ばと}\quad
\ruby{鶺鴒}{せきれい}\quad
\ruby{雷鳥}{らいちょう}\quad
\ruby{百舌鳥}{もず}
\end{document}

(u)pLaTeX 用のルビ出力パッケージは幾つもあり、また LuaLaTeX + LuaTeX-ja では luatexja-ruby パッケージが使えるが、XeLaTeX + zxjatype や pdfLaTeX + BXJS の環境については、現状では bxokumacro の \ruby が日本語的ルビを“まともに”出力するための唯一の手段といえるだろう。*5

*1:文言の中の「○○の候」の部分は、コンパイル時点の月により自動的に適切な語が選ばれる。素晴らしい。

*2:xeCJK パッケージが 2.x 版から 3.x 版への更新で全面的にコードが書きなおされていて、これに伴い zxjatype も 0.5 版から 0.6 版でほぼ全面的に改訂された。そして、bxokumacro は zxjatype の 0.5 版以前の実装に依存していた。

*3:このような互いに関係の薄いパッケージを集めたバンドルでバンドル自体にバージョンを持たせるのは無理があるような気がしてきた。検討の要あり。

*4:倍角ダーシを出力する命令。

*5:pdfLaTeX + BXJS は CJK パッケージを用いているので、CJK 付属の ruby パッケージを使うことができるが、このパッケージの機能で“まともに”ルビを出力するのは相当困難であると思う。なお、XeLaTeX や LuaLaTeX においては ruby パッケージは絶対に読み込んではいけない。