UbuntuにAsymptoteをインストール

お絵描きプログラムであるAsymptoteをUbuntuにインストールした。これは、MetaPostの亜種というか改良版であり、文法などはMetaPostから引き継いで、その上でMetaPostをさらに使いやすくしたものらしい。MetaPostに慣れつつあるので、ちょっと気になったこともあり、インストールしてみた。

最初は、Synaptic パッケージ・マネージャーからUbuntu用にコンパイルされたものを入れてみたのだが、これが1.4というちょっと古いバージョン。3D関係のライブラリーを使うとエラーが出るとかで、最新の1.86を入れるべく、ソースからのコンパイルを試みた。ポイントは、ガーベージ・コレクション用のライブラリーを別途ダウンロードすることと、ドキュメント関係の作成のために TeX一式を入れておくこと。最初、コンパイル完了直前になって、texindexがないというエラーであえなく沈没。apt-get install texinfo と、texinfoをインストールして再度試みて成功。

ということで、手順をメモ。

$ wget http://downloads.sourceforge.net/asymptote/asymptote-1.86.src.tgz
$ gunzip asymptote-1.86.src.tgz
$ tar -xf asymptote-1.86.src.tar
$ cd asymptote-1.86/
$ wget http://www.hpl.hp.com/personal/Hans_Boehm/gc/gc_source/gc-7.1.tar.gz
$ ./configure
$ make all
$ sudo make install
$ hash -r

MetaPostメモ:白丸を描く

[ 備忘録 ] 図版で、点を強調するために、白丸(白抜き)で点を描きたいときがある。

まず、汎用のマクロを用意する。

def DrawShiromaru(expr P, R) =
  fill fullcircle scaled R shifted P withcolor white;
  draw fullcircle scaled R shifted P withcolor black;
enddef;

そして、点z1に白丸を描きたいときは、

DrawShiromaru(z1,1.2mm);

などとすれば良い。要するに、白で円板を塗り、円周を黒で塗るということね。

MePoTeXで悪戦苦闘

図版を作るために、ひさしぶりにMePoTeX (LaTeXからMetapostを呼び出して使うためのマクロ集) を使ったのだが、どうも思う通りに行かず、イライラする。腹立ちまぎれ(?)に状況をメモ。

まず、Mac OS X 上では、何故か pensize が思うように変えられない。\sendMP{…} の中で pickup pencircle scaled 1.2pt などとしても線は細いまま。ええいと、3ptにしたら突然太くなる。いや、3ptは太すぎなんだってば。あれこれやっていると、ペンサイズは変えてないのに、ある場所に \mptDraw{…} と、MePoTeX の描画マクロを加えた瞬間に全体のペンサイズが変更になったり、もう訳が分からんというか、なんじゃ〜これ〜。

原因がマクロ集にあるのか、それともMacのMetapostにあるのか判断できないので、Ubuntu (Linux) 上でやってみようとするのだが、これが上手く動作せずに、これまたイライラ。ちゃんと shell escape のオプションも指定しているのに、何故か sh: mpost not found のエラーメッセージ。おいおい、パスが通ってないのかよ、と思いつつ、シェルから実行してみると、パスは通っている模様。というか、platexと同じ /usr/local/teTeX/bin/ にmpost もあるんですけどね。そういえば、エディターからlatex呼び出すときも、何故か実行ファイルを見つけられなかったことあったよなあ、と思いつつ、mepotex.sty を読んで、mpostを呼び出している部分を /usr/local/teTeX/bin/mpost と、絶対パス指定に変更してみた。いやあ、こんな乱暴、普通あり得んだろう。結果・・・ちゃんと mpost 呼び出されるじゃないすか。うーん、やっぱり、ここかあ。

しかし・・・こんな現象、いくら検索しても出てこない。ってことは、ワタシの設定が間違っている可能性が高い、と思われる。うーむ、パスが通ってるのに何故に絶対パスを記述しないとダメなんでしょうか。理由が分からない。あーイライラするなあ。

MetaPostメモ

[ 備忘録 ] MetaPost で図を描こうと思ったのが苦労の始まり。描こうとした図は次のもの。点Oを中心とする円、円内の点A、そして円周上の2点P、Qを、∠PAQが直角となるように描くこと。

普通のお絵描きソフトを使わない理由はいろいろあるが、直角となる条件を自動的に処理させたいことも、その一つ。ところが MetaPost は連立1次方程式しか解けないので、円と直線の交点を求めさせることができない(多分・・・)。まあ、交点は2つあるから自動処理でどちらかを選ぶのは難しいのかなあ、とは思う。だから、O、A、Pの3点を定めてから点Qを計算で求めようとすると上手く行かない(多分・・・)。そこで作戦変更。円の中心Oを最後に求めるようにした。結局のところ、正確な図が欲しいわけで、OAの長さが前もって指定されているわけではないのだから、今回の目的のためにはこれで良い。

ということで、手順は次の通り。点AとベクトルAPを定める。ベクトルAPを90度回転して、何倍かすることにより点Qを定める。線分PQの中点Mを求める。Mを通りPQに垂直な直線上に円の中心はあるので、この直線と点Aを通る直線(これは適当に選ぶ)の交点として、中心Oを定める。今回はAを通る水平線との交点としてOを求めた。

ベクトルAPと、AP : AQ の比率を変化させることで、見やすい図にできる。MetaPostプログラムは以下のようになる。

z.A=(0,0); % 点Aを定める
z.P-z.A=(4u,u); % ベクトルAPを定める。uは適当に定めた単位長
z.Q-z.A=0.5*(z.P-z.A) rotated 90; % APを90度回転して0.5倍したものをAQとする。
z.M=0.5[z.P, z.Q]; % PQの中点をMとする。
z.O-z.M=whatever*(z.Q-z.P) rotated 90; % OMはPQと垂直になるようにせよ(方程式)
z.O-z.A=whatever*(1,0); % OAはベクトル(1,0)と平行に(方程式)

MetaGraph on Ubuntu

MetaPostのフロントエンドである MetaGraph を Ubuntu にインストールした。お絵描きソフトの要領で MetaPost のソースファイルが作成できるようだ。細部はともかく、これでおおまかな図を描くという手もあるな。グラフよりも、遷移図とか模式図などの作成に向いているかも。

JAVAで書かれているようで、起動方法は端末でMetaGraphを展開してあるディレクトリーに移り、
$ java -jar mg5.jar
とする。アプリケーション・メニューに入れる方法があれば嬉しいのだが。