Typstの中でJuliaのコードを実行する
Typst Advent Calendar 2024 の14日目の代わりの記事です。
Julia Advent Calendar 2024 (シリーズ2)の15日目にも入れました。
はじめに
Xで次のようなポストが流れてきました。
今年のJuliCon2024のAndreas Kröpelin さんの Jlyfish: Reproducible documents with Julia and Typst という発表でした。
この動画を見ると,Typstの*.typ のファイルにJuliaのコードを書いて,そのまま実行して,その結果を表示するものでした。Julia側でTypstのファイルの変更を監視して,*-jlyfish.jsonの中間ファイルと作り,Typstに反映させていました。
いい感じだったので,その報告です。
Jlyfishのパッケージ
こちらはTypstのパッケージをまとめてあるサイトにあります。
このサイトの手順に沿って,やってみました。
Julia側のパッケージの追加
まず,juliaのREPLでTypstJlyfish.jlパッケージを追加します。
julia> ]
(@v1.10) pkg> add TypstJlyfish
Typst側のコード
次にTypst側にパッケージを利用するためのコードを追加します。(1行目)
2行目はjsonファイルを参照するためのものです。
3行目の#jl( )の括弧の中にJuliaのコードを書きます。
#import "@preview/jlyfish:0.1.0": *
#read-julia-output(json("your-document-jlyfish.json"))
What is the sum of the whole numbers from one to a hundred? #jl(`sum(1:100)`)
Juliaとの連携
今度はJuliaのREPLからTypstJlyfish.jlを読み込み,ターゲットとなるTypstのファイルを監視します。TypstのJuliaのコードが変更されるとコードが実行され,その結果が*-jlyfish.jsonに書き込まれ,*.typに反映される仕組みです。
julia> import TypstJlyfish
julia> TypstJlyfish.watch("your-document.typ")
また,Juliaでまだ追加されていないパッケージが想定される場合は
#jl-pkg("Colors", "Typstry", "Makie", "CairoMakie")
などとTypstのファイルの書いておくと,パッケージの追加も行われます。(すでにパッケージが追加されている場合は,なくても大丈夫です。)
参考コード
私がサンプルで作成したコードです。
#import "@preview/jlyfish:0.1.0": *
#read-julia-output(json("121502-jlyfish.json"))
== $y=sin x$ のグラフ
#jl(
```julia
using Plots
plot(sin)
```)
私のMacではVSCodeの環境でやってみました。

別のファイルですが,Xに動画もポストしてあります。
Enjoy typst and julia life!
Discussion