段落を好きな形に:shapepar で遊ぶ
なんとなく思いつきで、気の利いたメッセージカードを作れそうな LaTeX パッケージを紹介する。shapepar パッケージである。
このパッケージは、文章の段落の形を何かの図柄に整形するという機能を持つ。標準でサポートしている図柄は熊澤先生のページで既に例示されているが、今回は自由な図柄に整形する方法の紹介。手順をまとめると以下のとおり。
今回は Windows と Mac で試してみた。前提として「TeX がインストールされていること」が重要だが、追加ソフトウェアとして pstoedit と Xfig の fig2dev が必要である。
ツールのインストール
Windows の場合
pstoedit は W32TeX には付属している。TeX Live なら公式サイトから別途インストールする必要がある(TeX Wiki 参照;まだ作って間もない項目)。
Xfig は Cygwin 上にインストールするのが良いと思うが*1、代替としてシェアウェアの WinFig を使うこともできる。ただし、今回実際に扱うのは Xfig または WinFig に付属する fig2dev である*2。
Mac の場合
pstoedit と Xfig を、例えば MacPorts でインストールするとよいだろう。
さあ、使ってみよう
まずは、描画する
なんらかの描画ツールで、輪郭線となる図を描く。もちろん先ほど Xfig をインストールしたのでこれを使ってもいいのだが、操作性があまり好きではないので使いたくない。簡単でよく知られているのは Inkscape あたりだろうか*3。例えば以下のように描画して PDF 形式で保存する(今回は starcircle.pdf とした)。
描画に関しては好きなツールを使うことができるので、今回は Windows で使える WinTpic を試してみることにした。
WinTpic とは、GUI 操作で描画した図を tpic specials のコードに変換するツールである*4。PDF や EPS での出力にも対応しているが、実際にはこれは一旦 tpic specials のコードを吐いた後に自動で platex + dvipdfmx でタイプセットしている。EPS 出力の場合は、PDF 化した後に Ghostscript の epswrite/eps2write でアウトライン化(+クロップ)しており、PDF 出力の場合はさらに pdfwrite で再び PDF に戻している*5。WinTpic でも以下のように描画して PDF 出力する(今回は heptagon.pdf とした)。WinTpic は取り上げて使いやすいというわけではないが、処理が興味深いので一度使ってみると面白い。
pstoedit で Xfig に変換
さて、先ほど作った輪郭線の PDF を Xfig 形式に変換できるツールの1つが、pstoedit である。コマンドは以下のとおり。-f
オプションでフォーマットを指定し、input/output ファイルを指定する。
pstoedit -f xfig starcircle.pdf starcircle.fig
Xfig の fig 形式はテキストなので、テキストエディタで開くことができる。
少しだけ Xfig 形式のソースを編集
これを Xfig の fig2dev を使って変換するのだが、その前にコメント行を書き換える。というのも、描画した輪郭線を境界としてどこに実際の文字を流し込むかを指定する必要があるからである。
#
で始まる行がコメント行なので、文字を配置したい領域に「+」(プラス)、逆に空白にしたい領域に「-」(マイナス)とコメントを書き換えて保存する。今回は区別のため starcircle-edit.fig として保存した。
fig2dev で shape に変換
これを fig2dev で shape 形式に変換する。コマンドは以下のとおり。-L
オプションで言語を指定し、-n
でマクロ名を指定するそうだ。
fig2dev -L shape -n starcircle starcircle-edit.fig starcircle-edit.shape
実はこの starcircle-edit.shape を開いてみるとわかるが、これは LaTeX ソースである。
LaTeX で shapepar パッケージを使って処理
あとはプリアンブルで
\usepackage{lipsum} % サンプル用にダミーテキストを挿入するため \usepackage{shapepar}
を読み込み、本文では
\input{starcircle-edit.shape} \starcirclepar{\lipsum*[1-3]}
のように書いてタイプセットすると、段落の形が冒頭にあげたように、図形の形に合わせて折り返す。fig2dev を実行する際に -n
オプションで starcircle と指定したため、マクロ名が \starcirclepar
となっている。
この記事は TeX/LaTeX Stack Exchange の以下の記事
- shapepar - Very specific paragraph shape
- graphics - Text wrap with shapepar (insert image between text)
を参考にした。これらは僕が避けた Xfig で実際に描画しているが、別に Xfig でなくてもいいよね? この方法を使えば、任意の形に段落を整形できる。
デフォルトの図形を使う
shapepar パッケージがデフォルトでサポートしているハート型を利用した例も置いておく。フォントと色をいじるだけでかなりオシャレになる。任意の形に整形したい場合は、上で説明した方法を使えばよい。素敵なデザインを作ってみよう!
なお、文章ではなく「アスキーアート」で図柄を表現したい場合は、サブブログの記事を参考にしてほしい。
バレンタインデーらしい ASCII アート - アセトアミノフェンの気ままな日常
本記事のソースはすべて GitHub に置いてみた。
データさえあれば、北海道なんかでも大丈夫。楽しい!(なぜか続いた)
*1:Cygwin とは Windows 上で UNIX ライクな開発環境を構築するツールで、Xfig は Cygwin のパッケージ管理 (apt-cyg) でインストール可能である。
*2:Xfig は X11 (XWin) に依存するのに対し、fig2dev はどうやら XWin に依存しないらしい。
*3:Inkscape は、Windows では特に問題なく利用できるだろう。Mac では Inkscape が X11 依存となっているため、若干使いづらい場面もあるだろう。そうした場合は、こちらの記事を参照に X11 非依存の実験的ビルドを試してほしい。
*4:このあたりは先日 TeX Wiki の pic の項目に書き込んだので参照してほしい。tpic specials を吐く描画ツールはかなりめずらしいので、今回は WinTpic で遊んでみようというわけである。
*5:TeX2img のスキームと同様;最近の WinTpic 4.32a へのアップデートで gs9.15 の eps2write デバイスに対応したようだ。