はじめに
最近typstを使ってみたのですが、デフォルトだとさすがに味気がなさすぎるけど 公開されている豪華だったり論文チックなテンプレートが少し求めているものと違う かなと感じたので、自分で作ってみました。
資料化までのフロー
個人的な使い方は以下の流れにしてます。
- emacsのorg-modeで記事を書く
- ox-typstでtypstの形式に変換
- M-x
org-typst-export-to-typにて変換 - 下記の設定を生成あとのtypファイルに追記
#import "style/style.typ": *
#show: init
typst compile <hoge.typ>でpdfに変換
テンプレート
以下がテンプレートです。 説明はコメントに書いています。
#let init(body) = {
// 本文の設定
set text(lang: "ja", font: "Noto Sans CJK JP", size: 8pt)
// 見出し後の1行目の字下げ対策
set par(
leading: 0.85em, // 行間 default=0.65em
first-line-indent: 1em
)
set page(
paper: "a4",
width: 210mm,
height: 297mm,
margin: 20mm,
columns: 1,
number-align: "center"
)
// リンクを青文字下線付きに
show link: set text(fill: blue)
show link: underline
// 注釈を青文字下線付きに
show footnote: set text(fill: blue)
show footnote: underline
// コードブロックはテンプレートを使わせて頂きます。
import "@preview/codly:1.2.0: *"
import "@preview/codly-languages:0.1.1: *"
show: codly-init.with()
codly(languages: codly-languages)
// codlyの行番号を非表示に
codly(number-format: none)
let titlepageitem(body, size: 22pt, vt: 0%) = {
set align(center)
set text(size: size, font: "Noto Sans CJK JP")
v(vt)
body
}
show heading: it => {
let level = it.level
if level == 1 {
// レベル1の見出し設定
// 改ページを挟む
pagebreak(weak: true)
// ボックスで囲む
block(
width: 100%,
fill: luma(240),
stroke: 1pt,
radius: 4pt,
inset: 8pt,
it
)
v(0.5em)
} else if level == 2 {
// レベル2の見出し設定
block(it)
line(length: 100%, stroke: 1pt)
} else {
// レベル3以降の見出し設定 (デフォルト)
block(it)
v(0.5em)
}
}
body
}
おわりに
これで、一旦満足できるテンプレートができました。 必要に応じて更新していこうと思います。
訳あってWSLでないWindows環境でox-typstを使っていたのですが、 うまく動作せず辛かったので、そこらへんの改善が課題ですね。
- リストの生成
- 画像の埋め込み あたりが、うまく動作しませんでした。