このページは日本語に翻訳済みです。
スタイル設定
Typstには柔軟なスタイル設定機能を持ち、出力される文書に対して自動的に任意のスタイル設定を適用します。 setルールでは要素の基本プロパティを設定できます。 しかし、やりたいこと全てに対応するプロパティがあらかじめ実装されているとは限りません。 このため、Typstは要素の外観を完全に再定義できるshowルールもサポートしています。
setルール
setルールを使うと、要素の外観をカスタマイズできます。
これらは、setキーワード(マークアップでは#set)を前に置いた要素関数への関数呼び出しとして記述されます。
setルールに指定できるのは、その関数のオプションのパラメーターだけです。
どのパラメーターがオプションであるかは、各関数のドキュメントを参照してください。
以下の例では、2つのsetルールを使って、フォントと見出し番号を変更しています。
#set heading(numbering: "I.")
#set text(
font: "New Computer Modern"
)
= Introduction
With set rules, you can style
your document.

setルールは、そのまま記述するとファイルの最後まで適用されます。 ブロックの中にネストすると、そのブロックの終わりまで適用されます。 ブロックを使えば、setルールの効果を指定した部分に限定できます。 以下では、contentブロックを用いてスコープすることで、特定のリストのスタイルのみを変更しています。
This list is affected: #[
#set list(marker: [--])
- Dash
]
This one is not:
- Bullet

ときには、setルールを条件付きで設定したい場合もあるでしょう。 その場合にはset-ifルールを使用します。
#let task(body, critical: false) = {
set text(red) if critical
[- #body]
}
#task(critical: true)[Food today?]
#task(critical: false)[Work deadline]

showルール
showルールを使えば、特定の種類の要素の外観を詳細に設定できます。
showルールの基本的な記述方法は、show-setルールです。
show キーワードの後に セレクター、コロン、setルールと続けて記述します。
セレクターの基本的な記述方法は 要素関数を置くことであり、setルールは選択された要素にのみ適用されます。
下の例では、見出しは紺色になり、他のテキストは黒色のままです。
#show heading: set text(navy)
= This is navy-blue
But this stays black.

show-setルールを使えば、異なる関数のプロパティを組み合わせてさまざまな効果を得られます。
しかし、この記述方法による設定はTypst標準で定義されている範囲に制約されています。
より柔軟な設定方法として、要素の整形方法をゼロから定義する変換型showルールによる記述も可能です。
このようなshowルールを記述するには、コロンの後のsetルールを任意の関数に置き換えます。
この関数は対象の要素を受け取り、任意のコンテンツを返せます。
関数は多くの場合、無名関数構文を使ってit => ..のようにインラインで定義されます。
慣例として、関数のパラメーターにはitという名前が使われます。
関数に渡される要素で利用可能なフィールドは、対応する要素関数のパラメーターと一致します。 以下では、ファンタジー百科事典向けに見出しを整形するshowルールを定義します。
このshowルール自体は、タイトルの両側にチルダ文字を加え(このチルダはバックスラッシュでエスケープする必要があります。エスケープしないとノーブレークスペースとして解釈されてしまうためです)、タイトルをイタリック体で強調表示し、その後ろに見出しカウンターを表示します。
この例では、中央揃えと別のフォントの適用もあわせて行いたいとします。 これらのsetルールを既存のshowルールの中に追記する手もありますが、ここでは別々のshow-setルールとして追加しています。 こうすることで、これらのルールは文書中の後続のshow-setルールによって上書き可能なままとなり、スタイル設定を組み合わせやすい状態が保たれます。 これに対し、変換型showルールの内部に書かれたsetルールは、後から上書きできなくなります。
#set heading(numbering: "(I)")
#show heading: set align(center)
#show heading: set text(font: "Inria Serif")
#show heading: it => block[
\~
#emph(it.body)
#counter(heading).display(it.numbering)
\~
]
= Dragon
With a base health of 15, the dragon is the most
powerful creature.
= Manticore
While less powerful than the dragon, the manticore
gets extra style points.

setルールと同様に、showルールは、現在のブロック内またはファイルの終わりまで有効です。
関数の代わりに、showルールのコロン右側は、要素に直接置換されるべきリテラル文字列またはコンテンツブロックを取ることもできます。 またshowルールのコロン左側は、以下に示すように、変換を適用する対象を定義するセレクターを受け取ることができます。
-
全て:
show: rest => ..
showルール以降の全てを変換する。 個別の関数呼び出しでラップすることなく、複雑なレイアウトを文書全体に適用するのに便利です。 -
文字列:
show "Text": ..
設定した文字列に対して、スタイル変更や文字の置き換えを行います。 -
正規表現:
show regex("\w+"): ..
正規表現にマッチする文字列に対して、スタイル変更や文字の置き換えを行います。 正規表現についてはregex 関数を参照してください。 -
関数やフィールド:
show heading.where(level: 1): ..
指定されたフィールドを持つ要素のみを変換します。 例えば、レベル1の見出しのスタイルだけを変更したい場合などに有効です。 -
ラベル:
show <intro>: ..
指定されたラベルを持つ要素に対して適用する。 ラベルについてはlabelタイプを参照してください。
#show "Project": smallcaps
#show "badly": "great"
We started Project in 2019
and are still working on it.
Project is progressing badly.
