Asymptote: the Vector Graphics Language
Asymptote 是一门矢量图形编程语言,同时是一个矢量作图工具。
Asymptote目前缺少IDE、自动代码提示等生态,因此为了方便画图,可以自己做一个简易IDE。
使用inotifywait实现一个功能:当.asy
文件被更改时,自动调用Asymptote对.asy
进行读取然后作图生成.eps
文件,实现及时画图。
Windows没有类似Linux自带inotifywait,因此使用这个开源代码进行编译使用。
https://github.com/thekid/inotify-win
Windows平台,PowerShell脚本如下:
$fname='1'
function create_empty_eps{
# create an empty .eps file for evnice to open(auto-reload).
echo '%!PS-Adobe-3.0 EPSF-3.0\n' > "$fname.eps"
}
create_empty_eps
# start SumatraPDF.
# omit `.exe` of `SumatraPDF.exe` for return process info
$sumatra_app = Start-Process SumatraPDF -passthru
echo $sumatra_app
function run_asy{
&'C:\Program Files\Asymptote\asy.exe' "$fname.asy"
}
run_asy
# trap ctrl+c for killing SumatraPDF process.
try {
while($true){
inotifywait.exe -e modify "$fname.asy"
run_asy
If ($LastExitCode -eq "1") {
create_empty_eps
}
}
}
finally {
$sumatra_app | Stop-Process
}
Linux平台,bash脚本如下:
fname='1';
create_empty_eps(){
# create an empty .eps file for evnice to open(auto-reload).
echo '%!PS-Adobe-3.0 EPSF-3.0\n' >| ${fname}.eps;
}
create_empty_eps;
# start evince in background.
evince ${fname}.eps &;
evince_pid=$!;
# trap ctrl+c for killing background evnice process.
is_ctrl_c=0;
function ctrl_c() {
echo "kill ${evince_pid}";
kill -9 ${evince_pid};
is_ctrl_c=1;
}
trap ctrl_c INT;
asy ${fname}.asy;
while [ ${is_ctrl_c} -ne 1 ];
do
inotifywait -e CLOSE_WRITE ${fname}.asy;
asy ${fname}.asy;
if [ $? -ne 0 ]; then
create_empty_eps;
fi
done
写一个示例
size(100);
draw(unitcircle);
draw(unitsquare);
fill(unitsquare);
Asymptote数学画图