コンテンツにスキップ

#show: と with を利用して外部のテンプレートを利用する

#set#showで設定したスタイリングはそのファイル内かブロック内で有効になりますが、 これを外部ファイルに記述してそれを#importして利用することができます。

layout.typというファイルを作成し、#letを使って名前はなんでもよいのですがlayoutを定義します。

そして=に続くコードブロック内でスタイリングをします。

引数は自由に定義して問題ありません。コロン:の後に続く要素はデフォルト値になります。

layout.typ
#let layout(
body,
title: "Typstの使い方",
author: "ubanis",
pagesize: "a5",
column: 1,
fontname: "Noto Sans CJK JP",
fontsize: 8pt,
language: "ja",
) = {
// ドキュメントの設定
set document(
title: _title,
author: author,
)
// ページの設定
set page(
fill: none,
paper: pagesize,
flipped: false,
binding: left,
margin: (
top: 25mm,
bottom: 15mm,
inside: 15mm,
outside: 15mm,
),
columns: column,
numbering: "1",
)
// フォントの設定
set text(
font: fontname,
lang: language,
size: fontsize,
)
// 本文
{//このコードブロックはなくてもよい
body
}
}// layoutの終わり

必ず関数の最後の方にbodyを入れてください。

そしてこれを本体の文書から#importを使って読み込みます。

#import "layout.typ"の後に続く:はそのファイルから読み込む関数を指定します。*は全てを読み込むことを表しています。

特定の関数を読み込むならば#import "layout.typ": layoutのように指定します。

そしてその下で#show:を付けてlayout.with関数を呼び出します。

main.typ
#import "layout.typ": *
#show: layout.with(
title: "いろいろできそうなTypstで遊ぼう",
author: "ubanis",
pagesize: "a5",
column: 1,
fontsize: 9pt,
fontname: "BIZ UDPGothic",
)
= ここから本文です
`layout`で設定した要素がここに適用されます。
この部分全てがlayoutの引数`body`に入っています
- リスト1
- リスト2
- リスト3

コードにあるように#show: layout.with(...)以降のファイル内はlayout.typ#layout内で設定したスタイルが適用されます。

他に#include関数もあり、別ファイルの内容がそのまま同じファイル内に取り込まれるため以下のようにした場合も別ファイルにスタイルが適用されます。

#show: layout.with(...) // 省略
= ここから本文です
`layout`で設定した要素がここに適用されます。
この部分全てがlayoutの引数`body`に入っています
- リスト1
- リスト2
- リスト3
#include "next.typ" //このファイルの中身もlayoutのスタイルが適用される。

layout.typbodyの前にコンテンツを書けばそれはこの本文の前に置かれます。#outlineを使って目次を載せたり引数を活用して表紙を作成したりするのもよいでしょう。

// ここまで省略
// タイトルページ
{
v(3cm)
set text(size: 1.5em)
align(center, title)
align(bottom+center, author)
pagebreak()//改ページ
}
// 目次
{
set text(size:0.9em)
outline(
title: [目次],
depth: 2,
indent: 2em,
)
pagebreak()//改ページ
}
// 本文
{//このコードブロックはなくてもよい
body
}
}// layoutの終わり