BXpict2e パッケージ
~pict2e で eepic な世界~

pict2e パッケージを dvipdfmx に完全に対応させるための bxdpxp2e モジュールと、 epic+eepic パッケージの picture 拡張機能(楕円や破線など)を pict2e の枠組の上で実現する(従って tpic 未対応の pdfTeX でも使用可能になる) ための bxeepic パッケージの詰め合わせ。
変更履歴
注意: ここで紹介されている BXpict2e は旧式であり、 現在では代わりに BXeepic パッケージ を用いるべきである。 現在の版の pict2e は dvipdfmx に完全に対応している。 このため bxdpxp2e モジュールは不要となり、 残りの bxeepic パッケージを単体でバンドルにしたのが BXeepic パッケージ(バンドル)である。

概要

標準の LaTeX2e で簡単な図を描くための機能として picture 環境があるが、これには「可能な線分の傾きが限定されている」 等の非常に強い制限がある。 もともと TeX には描画のための機能が全く備わっていないので、 picture 環境では予め描かれる図形の断片を「文字」として集めた 「フォント」を用いて「描画」しているが故の制約である。 LaTeX の中での描画機能を拡充を目指して、DVIウェアの拡張機能 (PostScript 直接記述、tpic 拡張、等)を利用する (ただし可搬性が犠牲になる)という方法が採られてきた。 この方法の中には、PSTricks や PGF のように、 自己完結した非常に高度な機能をもつパッケージがある一方、 「標準の picture 環境について、その制限を除去し、 また必要最低限の基本的な機能のみを追加する」 という考えで開発された軽量なパッケージが存在する。 後者は、文書作成者に「重いパッケージ」の使用を求めないという点で、 外部の描画ソフトからの LaTeX ソース形式でのインポートや、 他の「少し高度な描画」(例えば、表のセルに斜線を入れる、等) が含まれる LaTeX パッケージからの使用により適しているといえる。 このような軽量なパッケージの代表例には次のようなものがある:

  • epic パッケージ: 作者は Sunil Podar。 DVIドライバの拡張を必要とせず、標準の picture 環境で用いられる機構のみを用いて、 任意の 2 点間を結ぶ実線・点線・破線の近似的な描画を実現している。 前述の強い制約の枠内なので、実線に関してはどうしても誤差が目立つ。
  • eepic パッケージ: 作者は Conrad Kwok。 標準の picture 環境および epic パッケージの機能について、 DVIドライバの「tpic 拡張」 を用いることで前述の制約を取り払い、 任意の傾きの実線・破線や任意の大きさの円を描けるようにしたもの。 楕円や円弧の描画や塗りつぶしの指定などの独自の追加機能もある。
  • pict2e パッケージ: 作者は Hubert Gäßlein、Rolf Niepraschk、Josef Tkadlec。 目的は eepic と同じで picture 環境で自由な描画を可能にしたもの。 graphicx や color パッケージと同じく、DVI ウェアを指定して、 それが対応する拡張機能 (現状では PostScript または PDF 描画命令の直接記述機能が利用可能) を利用するという方式をとる。 ちなみに、このパッケージは、 元々は LaTeX2e の標準パッケージとなる予定のものであったが開発中止となり、 LaTeX2e の登場から 10 年を経て有志の手により実装されたという経緯をもつ。

tpic 拡張機能は、dvips・dvipdfm(x)・dviout・xdvi 等の数多くの DVI ウェアでサポートされているため、 pdfTeX 登場以前は、epic + eepic の組み合わせが「軽量な拡張 picture」 の事実上標準の地位を占めていた。 しかし、pdfTeX では tpic 拡張機能はサポートされなかったため、eepic は動作しない。 (pdfTeX は DVI 形式を扱わないため、自身が「DVIウェア」の役割を兼ねる。) 従って、pdfTeX の使用が LaTeX の世界で主流になるに伴い、「軽量な拡張 picture」 の役割は後で登場した pict2e に移行しつつある。 しかし、eepic で提供されていて pict2e にはない有用な機能――例えば破線 (\dashline)、楕円(\ellipse)等――もあるので、 epic + eepic を単純に pict2e に置き換えることは必ずしもできないという問題がある。

bxeepic パッケージは、pict2e において、epic + eepic の機能 (破線や楕円など)を実現するものである。 (すなわち、tpic 拡張でなく pict2e が使うものと同じ拡張機能を利用して描画する。) 本家の epic + eepic に比べると、以下のような利点がある。

  • pdfTeX 等の tpic 拡張非対応の DVI ドライバでも動作する。
  • 何らかの理由で pict2e の理由が前提になっている場合で、 eepic にしかない機能を使うことができる。 (本物の eepic と pict2e は、当然ながら同時に読み込むことができない。)
  • epic、eepic のバグ、および tpic 拡張の本質的な欠点を回避することができる。
    参考: 原版の epic、eepic には「余計な空白が入る」という有名なバグがある。 tpic 拡張の欠点は以下の通り: 「線幅が 0.07227pt 単位でしか指定できないので、LaTeX で標準的な 0.4 pt にしようとすると相当(10%)の誤差が出る」 「仕様の不明確点のため実装により線がずれることがある」 「スプライン曲線に少し癖がある」。

対応環境

  • TeX 処理系: LaTeX2e 汎用
  • DVIドライバ: pict2e パッケージに対応するもの。 (※ dvipdfmx に完全に対応させている。)
  • 前提パッケージ: pict2e パッケージ (epic、eepic パッケージは不要)

ダウンロード

BXpict2e は旧式であり、 現在では代わりに BXeepic パッケージ を用いるべきである。

インストール

TDS 1.1 準拠 TeX システムの場合、以下の場所にファイルを移動。

  • *.def, *.sty → $TEXMF/tex/latex/bxpict2e/

例えば、W32TeX を C:\usr\local にインストールした場合は以下の通り。

  • *.def, *.sty → C:\usr\local\share\texmf-local\tex\latex\bxpict2e\

pict2e 設定ファイルの編集(bxdpxp2e モジュール利用の場合)

bxdpxp2e モジュールを使うためには pict2e の設定が必要である。 (bxeepic パッケージについてはこの作業は不要。)

  • pict2e パッケージの設定ファイル pict2e.cfg を(kpsewhich コマンド等で)探す。 もし存在すれば、そのファイルの最初のほうに以下の行を加える。
    \input{bxdpxp2e.def}
    
  • もし存在しない場合は、LaTeX が見える場所に、 前項に示した行のみからなるファイル pict2e.cfg を新たに作る。
    ※ W32TeX の場合、pict2e.cfg は普通はない。 W32TeX のインストール場所を C:\usr\local とすると、 pict2e.cfg を C:\usr\local\share\texmf-local\tex\latex\pict2e に作成する。
  • 必要に応じて mktexlsr を実行する。
注意: bxeepic パッケージを dvipdfmx のドライバ指定で読み込んでいる場合は、 pict2e 「dvipdfmx のドライバ指定」 (bxdpxp2e 提供のものと同一)で動作する。 だから、ここに挙げた導入手順がよく解らないという場合は、 「pict2e を dvipdfmx で使う場合は常に代わりに bxeepic を読み込む」 という方法を採ることもできる。

bxdpxp2e モジュール

前述の通り、pict2e パッケージは graphicx パッケージと同様に用いる DVI ウェアを「ドライバ指定」のパッケージオプションとして指定するのであるが、 現状(2010年8月)では、 pict2e パッケージは dvipdfmx オプションに対応していない。 dvipdfmx 自身は古い dvipdfm の設定も許容するので、 このこと自体は代わりに dvipdfm を指定することで解決できる。 しかし、実はこの方法には 「graphicx および color のドライバ指定まで dvipdfm に変えられてしまう」 という副作用がある。

\documentclass[a4paper]{article}
\usepackage[dvipdfmx]{graphicx,color}
\usepackage[dvipdfm]{pict2e}
% 上の設定をすると、\includegraphics 等の graphicx パッケージの
% 命令が dvipdfmx ではなく dvipdfm 用の動作をするようになる

無論、先に述べた理由でこれでも正常に動作するはずであるが、 とにかくドライバ依存のパッケージはトラブルが起こり易いので、 設定がいつもと変わるという事態は可能な限り避けたい。 (ただし、これも pict2e を先に読み込むことで逃げられるようである。)

そこで、bxdpxp2e モジュールでは 「pict2e に dvipdfmx オプションを追加する」 という作業を行う。 先述の導入手順を行った後、 以下のように pict2e に dvipdfmx オプションを 指定することができるようになる。

\documentclass[a4paper]{article}
%\usepackage[dvipdfmx]{graphicx,color} % 有りも無しも可能
\usepackage[dvipdfmx]{pict2e}

dvipdfmx 指定時の動作は以下の通り: dvipdfmx 用の graphicx ドライバファイルを未読込であれば読み込み、 pict2e 自身の機能については dvipdfm 設定と同じ動作を行う。

注意: 最新版の pict2e には「dvipdfm ドライバ使用時に \circle 等の一部の命令を実行するとエラーになる」というバグがある。 bxdpxp2e で提供される dvipdfmx ドライバではこの点は修正されている。 こんな大きな(かつ単純な)バグが残っていることからも、 海外における dvipdfm(x) の知名度の低さが推し量れると思う…。

bxeepic パッケージ

bxeepic パッケージは、pict2e において、epic + eepic の機能 (破線や楕円など)を実現するものである。

パッケージの読込

\usepackage で bxeepic パッケージを読み込む時、 もし pict2e が未読込でれば自動的に読み込まれる。 この際に、pict2e に渡すドライバ指定を bxeepic のオプションとして指定できる。 (つまりここでドライバ指定を行わない場合、 pict2e のドライバ指定はシステム既定値となる。) もし、pict2e が既に読み込まれている場合は、 bxeepic に指定されたドライバ指定は無効となる。

注意: bxdpxp2e モジュールを使用(pict2e.cfg を修正)していない場合は、 pict2e は dvipdfmx オプションを受け付けないが、 この場合でも、bxeepic は dvipdfmx オプションを受け付ける。 その時は pict2e は bxdpxp2e モジュールを使用して dvipdfmx のドライバ指定を行った時と同じ動作となる。
\documentclass[a4paper]{article}
% pict2e と一緒に読み込む場合
\usepakcage[dvips]{bxeepic} % オプションでドライバを指定
% pict2e を別に読み込む場合は以下の 2 行のようにする
%\usepackage[dvips]{pict2e}
%\usepackage{bxeepic} % この場合はドライバ指定は不可

使用法

基本的に、pict2e の提供する picture の拡張の上に、 epic と eepic の命令を追加しているだけなので、 機能についての説明については、 epic のマニュアルeepic のマニュアル、 および pict2e のマニュアルを 参照してほしい。

  • epic + eepic の機能で bxeepic でサポートしていないもの:
    • 塗りつぶし指定: \blacken\whiten\shade\texture\filltype
    • 「点線の破線」、つまり \dashline の 2 番目のオプション引数 (指定しても無視される)。
    • 「点形状の指定付の点線」、つまり \dottedline のオプション引数 (指定しても無視される)。
  • epic と eepic で仕様が異なる部分については、eepic の仕様に合わせている。 例えば、\drawline において 0 以上の stretch 値は全て同じ結果になる。
  • さらに eepic と pict2e で仕様が異なる部分については、pict2e の仕様を踏襲している。 例えば、\linethickness は eepic の \allinethickness の動作をする。
  • ただし、\arc 命令は pict2e と eepic のどちらの書式も使える。 \arc{...}{...}{...} という構文になっていたら、 eepic の書式と解釈する。
  • epic + eepic の描画結果を完全に再現することは意図していない。 例えば、\dashline による折れ線は「一度に描画」している (つまり一回の stroke 命令で描いている; join や miter 指定を正しく反映するため)ので、 節点のところに「線片部分」が乗るとは限らない。 また、同様に ...join 環境でも「後で折れ線を一度に描画」 しているので、eepic とは描画順序が異なることになる。
  • bxeepic が読み込まれると、epic と eepic の両パッケージを「読み込み済」 と扱われるようにしている。 つまり、その後で、「epic/eepic を自動的に読み込みその機能を利用する」 パッケージを読み込んだ場合、 「eepic と pict2e が両方読み込まれて衝突する」のではなく 「該当パッケージが bxeepic の機能(つまり pict2e の枠組) を利用するようになる」はずである。

サンプル

下の画像は eepic のマニュアルに掲載されている図を 実際に組版したものである。 どちらも picture の中身は原版から全く変えていない。

  • 左は pict2e + bxeepic を使って、pdfLaTeX で組版した。
  • 右は epic + eepic を使って、LaTeX + dvipdfmx で組版した。