当前位置: 首页 > 工具软件 > Asymptote > 使用案例 >

Asymptote 自己搭建简易IDE

庄智
2023-12-01

Asymptote

Asymptote: the Vector Graphics Language
Asymptote 是一门矢量图形编程语言,同时是一个矢量作图工具。
Asymptote目前缺少IDE、自动代码提示等生态,因此为了方便画图,可以自己做一个简易IDE。

inotifywait

使用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数学画图

 类似资料: