Asymptote

Asymptote は MetaPost を発展させたベクトルグラフィック記述言語です。 TeX Live に標準で含まれています。



発音

最初見たときにどう発音すればいいかよく分からなかったので, Pronunciation of asymptote - how to pronounce asymptote correctly. (注意:音が出ます)で確認したところ「アスィムトートゥ」みたいな感じで発音するみたいです。 発音記号では[æ'sim(p)tout]。 英単語としての意味は“漸近線”。

インストール

http://jaist.dl.sourceforge.net/project/asymptote/https://sourceforge.net/projects/asymptote/files/ に各種バイナリがあります。

また,Asymptote は Ghostscript に依存しています。

Asymptote 2.33 以降は,Ghostscript の仕様変更*1に伴う改変がなされています。Asymptote 2.33 以降を使用する場合は Ghostscript も 9.14 以上にアップデートする必要があります。逆に,Asymptote 2.32 以前を使用する場合は 9.14 以下をインストールする必要があります。

ビルド

ソースからコンパイルするのも簡単です。

本家CTAN:graphics/asymptote/ にソースコードがあります。

macOS でコンパイルする際は,OS の readline ライブラリが古いので,あらかじめ新しい readline ライブラリをインストールしておくと,コマンドラインのヒストリー機能などが使えるようになります。 Asymptote ソースを展開したディレクトリに gc-8.0.4.tar.gz を展開せずに置き,

./configure
# 非標準なところにlibreadlineがある場合は次のように指定
# LDFLAGS="-L/usr/local/lib" CPPFLAGS="-I/usr/local/include" ./configure
make
make install

でできます。

macOS でのプレビュー

標準では gv あるいは GSview を使った PostScript プレビューになります。 これは Mac でも(gv をインストールしておけば)可能ですが,X11 を立ち上げておかなければなりません。 より簡単には asy -f pdf で起動するか,あるいは ~/.asy/config.asy に

import settings;
outformat="pdf"; 

と書いておけば PDF プレビューできます。

使い方

asy または asy -f pdf で起動します。help と入力すれば詳しいマニュアルが現れます。

日本語対応 (macOS)

/.asy/config.asy を次のようにすれば日本語が通るようです(要日本語対応 Ghostscript)。

import settings;
tex="latex";
texcommand="uplatex";
import settings;
tex="latex";
texcommand="platex";

platex のデフォルトが UTF-8 になっていない場合は "platex-utf8" とします。 こういうコマンドがなければエイリアスかバッチファイルで作りましょう。 "platex -kanji=utf8" のようにはできないようです。

日本語対応 (Windows)

私の簡単なテストでは texdvicommand="platex --kanji=utf8"; のようにオプションを含めることはできませんでした。 ただし Windows 用バイナリです。 全体がコマンド名と見なされるようです。 しかし shift jis でも問題なく通るようです(危ない "表" なども大丈夫でした)。 テストした config.asy は

import settings;
tex="latex";
texpath="c:/w32tex/bin";
texcommand="platex";
texdvicommand="platex";
dvips="dvips";
dvipsOptions="-Ppdf";
psviewer="c:/ghostgum/gsview/gsview32.exe";

うまくいったのは、偶然うまくゆく例を使ったためで,一般には Shift_JIS エンコーディングの場合,0x5c を含む文字はだめです。 W32TeX [2018/03/26] 以降の platex は UTF-8 がデフォルトですが W32TeX [2018/03/25] 以前の platex は Shift_JIS がデフォルトなので,texcommand="platex"; などとすることはできません。 platex --kanji=utf8 ... と同じ役割をするコマンド platex-utf8.exe を使って以下のように設定し,Asymptote で日本語を使うには UTF-8 を使ってください:

texcommand="platex-utf8";
texdvicommand="platex-utf8";

おそらく EUC でも OK でしょう。 EUC を使う場合は次のようにしておきます:

texcommand="platex-euc";
texdvicommand="platex-euc";

最新のものでは,texdvicommand なる変数は無くなっているかも知れません。 その場合は,単に関連する行を削除するだけで OK です。

日本語を使った例

jsarticle 相当の日本語フォントの設定をするために minijs.sty を読み込んでいます。

usepackage("minijs");
import graph;
real dnorm(real x) { return exp(-x^2/2)/sqrt(2*pi); }
size(12cm,8cm,IgnoreAspect);
draw(graph(dnorm,-4,4,operator ..));
label("標準正規分布の密度関数 $y=\frac{1}{\sqrt{2\pi}}e^{-x^2\!/2}$",(0,0.45),S);
xaxis("$x$",BottomTop,LeftTicks); 
yaxis("$y$",LeftRight,RightTicks); 

出力 dnorm-asy.pdf, dnorm-asy.png

日本語対応 (Linux/BSD/macOS/Windows共通)

AsymptoteスクリプトをUTF-8で書いてその中でbxcjkjatypeパッケージの利用を指定すれば,config.asyを設けなくても日本語を含むEPSやPDFが生成できるようです。 例:

texpreamble("\usepackage[whole]{bxcjkjatype}");
for(int i=0; i<=9; i+=1){
  draw(shift(4.5W+(i-4.5)*N)*(0E--9E));
  draw(shift(4.5S+(i-4.5)*E)*(0N--9N));
}
string[] k={"一", "二", "三", "四", "五", "六", "七", "八", "九"};
for(int i=1; i<=9; i+=1){
  label(format("%d", i), (i-5)*W+5N);
  label(scale(0.8)*k[i-1], 5E+(i-5)*S);
}
label("将棋図巧\quad 第一番", 6S);
void put(pair z, string s, transform t){label(t*s, (z.x-5)*W+(z.y-5)*S);}
void operator +(pair z, string s){put(z, s, rotate(0));}
void operator -(pair z, string s){put(z, s, rotate(180));}
5+1I+"角"; 7+1I+"金"; 7+2I+"と"; 9+2I+"金"; 8+3I+"歩"; 8+6I+"香"; 5+7I+"龍";
8+8I+"銀"; 7+9I+"桂";
10+6I+"▲"; 10+7I+"歩"; 10+8I+"銀";
8+1I-"歩"; 8+2I-"銀"; 9+3I-"歩"; 6+4I-"銀"; 7+4I-"香"; 9+4I-"桂"; 6+5I-"玉";
1+6I-"角"; 3+6I-"龍"; 9+6I-"桂"; 6+7I-"歩"; 8+7I-"と";
unitsize(15pt);

関連リンク

License

GPLv3, LGPLv3

ChangeLog


*1 EPS 出力デバイスについて,gs9.15 では epswrite が廃止され,代わりに gs9.14 で導入された eps2write が標準となっています。

Last-modified: 2020-04-07 (火) 18:38:36 (87d)