Closed15
typstに入門してみる
本が書きたくなったのでtypstに入門する。
を読む。
typstの公式のブラウザエディタがあるが、copilotを使いたいのでVSCodeを使う。(本当はJetbrain製品でなんとかしたい)
を入れる。
プレビューできないので
を入れる。フォントがかすだけど、いい感じ
コードブロックは塗りつぶしたり、行数がほしいので関数みたいなの作ってみる。
ここらへんにヒントが有る
#set page(width: 148mm, height: 210mm)
#let pad_int(i, N: 2) = {
// pad an integer with leading zeros
let s = str(i)
let n_pads = N - s.len()
for _ in range(n_pads) {
s = "0" + s
}
[#s]
}
#let add_line_num((i, body)) = {
let pi = pad_int(i)
[#pi #body]
}
#let number_content(text_input) = {
text_input.split("\n").enumerate().map(add_line_num).join("\n")
}
#show raw.where(lang: "rs"): it => block(
fill: rgb("#fdf6e3"),
inset: 8pt,
width: 100%,
text(fill: rgb("#a2aabc"), number_content(it.text))
)
== なでこかわいい
今日はいい天気ですね。
正直言って、今日はいい天気ですね。
割と良い感じ
```rs
fn main() {
println!("Hello, world!");
}
行番号入れるのはできたけど、悲しいことにシンタックスハイライトが消える
#set page(width: 148mm, height: 210mm)
#let pad_int(i, N: 2) = {
// pad an integer with leading zeros
let s = str(i)
let n_pads = N - s.len()
for _ in range(n_pads) {
s = "0" + s
}
[#s]
}
#let get_line_num((i, body)) = {
pad_int(i)
}
#let number_content(text_input) = {
text_input.split("\n").enumerate(start: 1).map(get_line_num).join("\n")
}
#let code_content_block(it) = block(
fill: rgb("#fdf6e3"),
inset: 8pt,
width: 100%,
text(fill: rgb("#a2aabc"), it)
)
#let num_content_block(it) = block(
fill: rgb("#fdf6e3"),
inset: 8pt,
text(fill: rgb("#a2aabc"), number_content(it))
)
#show raw.where(lang: "rs"): it => {
grid(
columns: 2,
gutter: 0pt,
num_content_block(it.text),
code_content_block(it),
)
}
== なでこかわいい
今日はいい天気ですね。
正直言って、今日はいい天気ですね。
割と良い感じ
```rs
fn main() {
println!("Hello, world!");
}
```c
良い感じにできた。
次は、rustのコードを読み込みながら参照できるようにする。
やりたいことは
.
├── doc
│ ├── main.pdf
│ └── main.typ
├── egui-book-example-code
│ ├── Cargo.lock
│ ├── Cargo.toml
│ ├── examples
│ │ └── helloworld.rs
│ └── src
│ └── lib.rs
└── README.md
のときに、helloworldをincludeしてコード領域に表示する。
を使えば良さそう
#set page(width: 148mm, height: 210mm)
#let pad_int(i, N: 2) = {
// pad an integer with leading zeros
let s = str(i)
let n_pads = N - s.len()
for _ in range(n_pads) {
s = "0" + s
}
[#s]
}
#let get_line_num((i, body)) = {
pad_int(i)
}
#let number_content(text_input) = {
let temp_arr = text_input.split("\n").enumerate(start: 1)
let _ = if temp_arr.last().at(1) == "" {
temp_arr.pop()
}
temp_arr.map(get_line_num).join("\n")
}
#let code_content_block(it) = block(
fill: rgb("#fdf6e3"),
inset: 8pt,
width: 100%,
text(fill: rgb("#a2aabc"), it)
)
#let num_content_block(it) = block(
fill: rgb("#eee8d5"),
inset: 8pt,
text(fill: rgb("#a2aabc"), number_content(it))
)
#let code_block(it) = {
grid(
columns: 2,
gutter: 0pt,
num_content_block(it.text),
code_content_block(it),
)
}
#show raw.where(lang: "rs"): it => code_block(it)
#let insert_example_code(name) = {
raw(read("../egui-book-example-code/examples/" + name ), lang: "rs")
}
== なでこかわいい
今日はいい天気ですね。
正直言って、今日はいい天気ですね。
割と良い感じ
#insert_example_code("helloworld.rs")
insert_example_codeみたいなコードを書けば行けた。
このスクラップは2024/01/07にクローズされました