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