Closed15

typstに入門してみる

higumachanhigumachan

typstの公式のブラウザエディタがあるが、copilotを使いたいのでVSCodeを使う。(本当はJetbrain製品でなんとかしたい)

higumachanhigumachan

コードブロックは塗りつぶしたり、行数がほしいので関数みたいなの作ってみる。

higumachanhigumachan
#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!");
}

行番号入れるのはできたけど、悲しいことにシンタックスハイライトが消える

higumachanhigumachan
#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

良い感じにできた。

higumachanhigumachan

次は、rustのコードを読み込みながら参照できるようにする。

higumachanhigumachan

やりたいことは

.
├── doc
│  ├── main.pdf
│  └── main.typ
├── egui-book-example-code
│  ├── Cargo.lock
│  ├── Cargo.toml
│  ├── examples
│  │  └── helloworld.rs
│  └── src
│     └── lib.rs
└── README.md

のときに、helloworldをincludeしてコード領域に表示する。

higumachanhigumachan
#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にクローズされました