読者です 読者をやめる 読者になる 読者になる

Acetaminophen’s diary

化学に関すること、TeXに関すること、ゆきだるまに関すること。

段落を好きな形に:shapepar で遊ぶ

TeX ソフト ネタ

なんとなく思いつきで、気の利いたメッセージカードを作れそうな LaTeX パッケージを紹介する。shapepar パッケージである。

f:id:acetaminophen:20150212191258p:plain

このパッケージは、文章の段落の形を何かの図柄に整形するという機能を持つ。標準でサポートしている図柄は熊澤先生のページで既に例示されているが、今回は自由な図柄に整形する方法の紹介。手順をまとめると以下のとおり。

  1. 描画ツールで輪郭線を描いて、図として保存
  2. 図の形式を数回変換(少し手動で書き換える)
  3. shapepar パッケージを使って LaTeX で処理

今回は WindowsMac で試してみた。前提として「TeX がインストールされていること」が重要だが、追加ソフトウェアとして pstoeditXfig の 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 とした)。

f:id:acetaminophen:20150212190808p:plain

描画に関しては好きなツールを使うことができるので、今回は 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 は取り上げて使いやすいというわけではないが、処理が興味深いので一度使ってみると面白い。

f:id:acetaminophen:20150212190832p:plain

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 の以下の記事

を参考にした。これらは僕が避けた Xfig で実際に描画しているが、別に Xfig でなくてもいいよね? この方法を使えば、任意の形に段落を整形できる。

 

デフォルトの図形を使う

shapepar パッケージがデフォルトでサポートしているハート型を利用した例も置いておく。フォントと色をいじるだけでかなりオシャレになる。任意の形に整形したい場合は、上で説明した方法を使えばよい。素敵なデザインを作ってみよう!

f:id:acetaminophen:20150212193445p:plain

なお、文章ではなく「アスキーアート」で図柄を表現したい場合は、サブブログの記事を参考にしてほしい。


バレンタインデーらしい ASCII アート - アセトアミノフェンの気ままな日常

 

本記事のソースはすべて GitHub に置いてみた。

データさえあれば、北海道なんかでも大丈夫。楽しい!(なぜか続いた

*1:Cygwin とは Windows 上で UNIX ライクな開発環境を構築するツールで、Xfig は Cygwin のパッケージ管理 (apt-cyg) でインストール可能である。

*2:Xfig は X11 (XWin) に依存するのに対し、fig2dev はどうやら XWin に依存しないらしい。

*3:Inkscape は、Windows では特に問題なく利用できるだろう。Mac では InkscapeX11 依存となっているため、若干使いづらい場面もあるだろう。そうした場合は、こちらの記事を参照に X11 非依存の実験的ビルドを試してほしい。

*4:このあたりは先日 TeX Wiki の pic の項目に書き込んだので参照してほしい。tpic specials を吐く描画ツールはかなりめずらしいので、今回は WinTpic で遊んでみようというわけである。

*5:TeX2img のスキームと同様;最近の WinTpic 4.32a へのアップデートで gs9.15 の eps2write デバイスに対応したようだ。