# 設定：リストと数式

> 箇条書きリストと番号付きリスト、その行頭記号、字下げ、入れ子、タスクリスト、数式の大きさ、色、間隔

- HTML版: https://postext.dev/ja/docs/configuration-lists-math
- 最終更新: 2026-10-16
- 読了時間: 18分
- 他の言語: [en](https://postext.dev/en/docs/configuration-lists-math.md), [es](https://postext.dev/es/docs/configuration-lists-math.md), [ca](https://postext.dev/ca/docs/configuration-lists-math.md), [de](https://postext.dev/de/docs/configuration-lists-math.md), [fr](https://postext.dev/fr/docs/configuration-lists-math.md), [it](https://postext.dev/it/docs/configuration-lists-math.md), [pt](https://postext.dev/pt/docs/configuration-lists-math.md), [zh](https://postext.dev/zh/docs/configuration-lists-math.md), [ar](https://postext.dev/ar/docs/configuration-lists-math.md)

## かんたんな説明

このページでは、リストと数式を説明します。箇条書きリストは各項目に記号を付け、番号付きリストは数字や文字で項目を数えます。リストごとに行頭の記号、字下げ、空きを決め、リストの中のリストでは別の値にもできます。タスクリストには、チェックを入れられる四角が付きます。最後の節では、数式の大きさ、色、まわりの空きを決めます。

## 箇条書きリスト

`unorderedLists`プロパティは、箇条書きリスト（`-`、`*`、`+`）とGFMのタスクリスト（`- [ ]`、`- [x]`）の描画方法を制御します。入れ子は5階層までサポートしています。

### 箇条書きリストの既定値

| プロパティ | 型 | 既定値 | 説明 |
| --- | --- | --- | --- |
| `fontFamily` | `string` | `bodyText.fontFamily`を継承 | 項目の文字に使うフォントです。 |
| `color` | `ColorValue` | メインカラー（`#295AA3`） | 項目の文字と行頭記号の色です。既定のパレットの`main-color`エントリーに結び付けられています。 |
| `fontWeight` | `number` | `700` | 項目の文字のウェイトです（100–900）。レベルごとに上書きしない限り、行頭記号もこのウェイトを継承します。 |
| `italic` | `boolean` | `false` | 項目の文字をイタリックで描画します。 |
| `bulletChar` | `string` | `'•'` | 行頭記号として使うグリフです。 |
| `bulletFontSize` | `Dimension` | `1 em` | 行頭記号のグリフのサイズです。相対単位は本文のフォントサイズに応じて拡大縮小します。 |
| `gap` | `Dimension` | `0.5 em` | 行頭記号と項目の文字のあいだの水平方向のアキです。 |
| `indent` | `Dimension` | `0 em` | レベル1の基本インデントです。それより深いレベルは、上書きしない限り、親の文字の開始位置から連鎖して決まります（後述）。 |
| `bulletVerticalOffset` | `Dimension` | `0 em` | 行頭記号の垂直位置を微調整します。負の値で上へ、正の値で下へ移動します。 |
| `marginTop` / `marginBottom` | `Dimension` | `1.5 em` | リスト全体の前後のアキです。 |
| `itemSpacing` | `Dimension` | `0 em` | 行の高さに加えて項目間に挿入する、垂直方向の追加のアキです。別のリストの項目の中に入れ子にしたリストの周囲では、外側のリストのアキが両側、つまり入れ子のリストの最初の項目の前と最後の項目の後に適用されます（postext 1.4までは、入れ子のリストの後の項目には入れ子のリストのアキが使われていました）。 |
| `snapTopToGrid` | `boolean` | `false` | 見出しの下の本文と同じように、リストの上のアキを切り上げて、最初の行頭記号がベースライングリッドに乗るようにします。このとき`marginTop`は最小値になります。リストの終わりではどちらの設定でも流れがグリッドに戻るため、`itemSpacing`が0なら、すべての項目が隣の段の本文と行がそろいます。postext 1.4までと同じく、既定ではオフです。この場合、行の整数倍でない`marginTop`を指定すると、リストが終わるまで項目はグリッドから外れます。内部がグリッドから外れている囲みの中のリストは影響を受けません。 |
| `hangingIndent` | `boolean` | `true` | 有効にすると、折り返した行を行頭記号の下ではなく、文字の最初の字にそろえます。 |
| `levels` | `UnorderedListLevelConfig[]` | — | レベル1–5の深さごとの上書きです。後述します。 |

### タスクリストの拡張

GFMのタスク項目（`- [ ] …`、`- [x] …`）は、行頭記号の代わりにチェックボックスを置いた箇条書きの項目として描画されます。ボックスはエンジン自身が描きます。四角い枠線で、完了した項目にはチェックが入ります。フォントに字形を求めないので、どのマシンでも、キャンバス、PDF、HTML、EPUBのどれでも同じ形になり、支援技術は`☐`または`☑`と読み上げます。一辺はマーカーのサイズ（`bulletFontSize`、またはレベルの`fontSize`）の0.6 emで、`gap`の前に取る幅もこの長さです。マーカーが本文と同じサイズなら、項目の1行目のベースラインに載ります。線の太さはマーカーの`fontWeight`に、色はマーカーの`color`に従います。次のフィールドはタスク項目にだけ適用されます。

| プロパティ | 型 | 既定値 | 説明 |
| --- | --- | --- | --- |
| `taskCheckboxChar` | `string` | `'☐'` | 未完了のタスクの文字です。既定の文字はテキストとして組まず、エンジンがボックスを描きます。ほかの文字を指定すると、リストのフォントでテキストとして組むので、そのフォントがその文字を持っている必要があります。 |
| `taskCheckedChar` | `string` | `'☑'` | 完了したタスクの文字です。既定の文字はこちらもエンジンが描き、チェックの入ったボックスになります。ほかの文字を指定すると、リストのフォントでテキストとして組みます。 |
| `taskBox` | `'drawn' \| 'character'` | `'drawn'` | 既定の2文字の組み方です。`'drawn'`ではエンジンがボックスを描きます。`'character'`では、postext 1.28までと同じく、`☐`と`☑`をリストのフォントでテキストとして組みます。フォントにこの文字がなければブラウザーがシステムのフォントを選び、項目のテキストはそのフォントが返す幅のあとから始まります。バージョン13より前に保存した設定は`'character'`として読み込まれるので、行の位置は変わりません。 |
| `taskCompletedStrikethrough` | `boolean` | `true` | 完了したタスクの文字に取り消し線を引きます。 |
| `taskCompletedColor` | `ColorValue` | 項目の色を継承 | 完了したタスクの文字に適用する色です（省略可）。省略すると通常の項目の色を使います。 |

### 箇条書きリストのレベル別上書き

`levels`の各エントリーは1つの深さ（1–5）を対象とし、次のどの項目でも上書きできます。

| プロパティ | 型 | 説明 |
| --- | --- | --- |
| `bulletChar` | `string` | この深さの行頭記号のグリフです。 |
| `fontFamily` | `string` | この深さの項目のフォントファミリーです。 |
| `fontSize` | `Dimension` | この深さの行頭記号のグリフのサイズです。 |
| `color` | `ColorValue` | 項目の色です。 |
| `fontWeight` | `number` | 項目のウェイトです。 |
| `italic` | `boolean` | イタリックの切り替えです。 |
| `indent` | `Dimension` | この深さの行頭記号の明示的なインデントです。下記の連鎖の規則を参照してください。 |
| `verticalOffset` | `Dimension` | この深さの行頭記号の垂直方向の微調整です。 |

**インデントの連鎖**。レベル1は常に全体の`indent`の値から始まります（既定は`0 em`で、行頭記号は段の端に固定されます）。レベル2–5では、`indent`を未定義のままにすると、エンジンは行頭記号を*1つ上の*レベルの文字の開始位置（親のインデント＋行頭記号の幅＋`gap`）に置きます。あるレベルに`indent`を明示すると連鎖が切れ、その深さを好きな位置に固定できます。

```ts
unorderedLists: {
  bulletChar: '—',
  gap: { value: 0.4, unit: 'em' },
  hangingIndent: true,
  levels: [
    { level: 2, bulletChar: '·' },
    { level: 3, bulletChar: '◦', color: { hex: '#666666', model: 'hex' } },
  ],
}
```

## 番号付きリスト

`orderedLists`プロパティは番号付きリスト（`1.`、`2)`など）を制御します。入れ子は5階層までサポートしており、深さごとに異なる番号の書式を使えます。

### 番号付きリストの既定値

| プロパティ | 型 | 既定値 | 説明 |
| --- | --- | --- | --- |
| `fontFamily` | `string` | `bodyText.fontFamily`を継承 | 項目の文字と番号に使うフォントです。 |
| `color` | `ColorValue` | メインカラー（`#295AA3`） | 項目の文字と番号の色です。既定のパレットの`main-color`エントリーに結び付けられています。 |
| `fontWeight` | `number` | `700` | 項目の文字と番号のウェイトです（100–900）。 |
| `italic` | `boolean` | `false` | 項目の文字をイタリックで描画します。 |
| `numberFormat` | `OrderedListNumberFormat` | `'arabic'` | 番号のスタイルで、`'arabic'`、`'lower-alpha'`、`'upper-alpha'`、`'lower-roman'`、`'upper-roman'`のいずれかです。ほかの設定での表記も使えます（`'decimal'`、`'roman-lower'`、`'i'`…。[番号書式の表記](https://postext.dev/ja/docs/configuration-page-layout.md#番号書式の表記)を参照）。未知の値はアラビア数字で番号を付け、報告されます。 |
| `prefix` | `string` | `''` | 番号の前に置く文字列で、区切りと同じスタイルで組みます。ここに`'（'`、区切りに`'）'`を指定すると、中国語のリストは（一）、（二）となります。区切りが独立したランとして描画される場合は、接頭辞も番号の直前で独立したランになります。 |
| `separator` | `string` | `'.'` | 番号と文字のあいだに置く文字です。通常は`'.'`または`')'`です。 |
| `separatorFontFamily` | `string` | `fontFamily`を継承 | 区切りのフォントです。区切りのスタイルのどれかが番号と異なる場合、区切りは（右そろえの）番号の後に独立したランとして描画されます。たとえば、Optima Boldの黒の`1`の後に、DIN Pro Boldの青の`•`が続きます。 |
| `separatorFontWeight` | `number` | `fontWeight`を継承 | 区切りのウェイトです（100–900）。 |
| `separatorItalic` | `boolean` | `italic`を継承 | 区切りをイタリックで描画します。 |
| `separatorColor` | `ColorValue` | `color`を継承 | 区切りの色です。パレットの参照も反映されます。 |
| `separatorGap` | `Dimension` | `0 em` | 番号と区切りのあいだのアキです。項目の文字は、これまでどおり区切りから`gap`離れた位置から始まります。 |
| `numberFontSize` | `Dimension` | `1 em` | 番号のサイズです。 |
| `gap` | `Dimension` | `0.5 em` | 番号と項目の文字のあいだの水平方向のアキです。 |
| `indent` | `Dimension` | `0 em` | レベル1の基本インデントです。それより深いレベルは、上書きしない限り、親の文字の開始位置から連鎖して決まります。 |
| `numberVerticalOffset` | `Dimension` | `0 em` | 番号の垂直位置を微調整します。 |
| `marginTop` / `marginBottom` | `Dimension` | `1.5 em` | リスト全体の前後のアキです。 |
| `itemSpacing` | `Dimension` | `0 em` | 項目間の垂直方向の追加のアキです。別のリストの項目の中に入れ子にしたリストの周囲では、外側のリストのアキが両側、つまり入れ子のリストの最初の項目の前と最後の項目の後に適用されます（postext 1.4までは、入れ子のリストの後の項目には入れ子のリストのアキが使われていました）。 |
| `snapTopToGrid` | `boolean` | `false` | 見出しの下の本文と同じように、リストの上のアキを切り上げて、最初の番号がベースライングリッドに乗るようにします。このとき`marginTop`は最小値になります。リストの終わりではどちらの設定でも流れがグリッドに戻るため、`itemSpacing`が0なら、すべての項目が隣の段の本文と行がそろいます。postext 1.4までと同じく、既定ではオフです。この場合、行の整数倍でない`marginTop`を指定すると、リストが終わるまで項目はグリッドから外れます。内部がグリッドから外れている囲みの中のリストは影響を受けません。 |
| `numberWidth` | `'run' \| 'level' \| 'item'` | `'run'` | 項目の番号欄の幅で、これによって文字の開始位置が決まります。番号は欄の中で右そろえになります。`'run'`：その項目が属する連続部分（run）の中でもっとも幅の広い番号に合わせます。連続部分とは、同じ深さの項目が、より深い項目だけを挟んで続くまとまりです。2つの項目のあいだに図、段落、囲みがあると新しい連続部分が始まるため、表の後の`ii)`は、その前の`i)`より少し右から文字が始まることがあり、9項目のリストは12項目のリストより左から文字が始まります。`'level'`：文書全体（本では章）で、その項目の深さにあるもっとも幅の広い番号に合わせます。そのため、すべてのリストと、途中で中断されたリストの各部分が同じ位置から文字を始めます。より深いレベルのインデントがすでにそうなっているのと同じです。`'item'`：その項目自身の番号に合わせます。各項目の文字は自分の番号から`gap`だけ離れて始まります。第九條と第十一條の後ろのアキは同じになり、文字の開始位置は項目ごとに変わります。官報が法律の条文を組むときの体裁です。折り返しの行は`hangingIndent`に従い、`false`ではリストのインデントに戻り、`true`ではその項目自身の文字の下にぶら下がります。より深いレベルのインデントは、レベルごとに1つの値のままです。postext 1.28以降。 |
| `numberAlign` | `'end' \| 'start'` | `'end'` | 番号欄の中で番号をどこに置くかを指定します。`'end'`：本文側に寄せます。連続部分の番号は終わりがそろい、`9.`と`10.`のピリオドがそろいます。`'start'`：欄の先頭に寄せます（左から右へ組むページでは左、右から左へ組むページでは右、縦組では行頭）。長さの違う番号が同じ位置から始まり、法令の条番号（第九條、第十一條）のような体裁になります。欄の幅は`numberWidth`で決まるままなので、どちらの場合も項目の文字は同じ位置から始まります。区切り記号に独自のスタイルを指定している場合、区切り記号はそれぞれの番号の直後に続きます。postext 1.26 以降。`numberWidth: 'item'`では欄が番号そのものになるため、どちらの値でも同じ組みになります。 |
| `hangingIndent` | `boolean` | `true` | 折り返した行を、番号の下ではなく文字の最初の字にそろえます。 |
| `levels` | `OrderedListLevelConfig[]` | — | レベル1–5の深さごとの上書きです。 |

### 番号付きリストのレベル別上書き

`levels`の各エントリーでは、`numberFormat`、`prefix`、`separator`、`fontFamily`、`fontSize`、`color`、`fontWeight`、`italic`、`indent`、`verticalOffset`と区切りのスタイル（`separatorFontFamily`、`separatorFontWeight`、`separatorItalic`、`separatorColor`、`separatorGap`）を上書きできます。箇条書きリストと同じインデントの連鎖が適用されます。あるレベルの区切りのスタイルは、リスト全体の区切りの設定が指定されていない限り、そのレベル自身の番号のスタイルを継承します。

**右そろえ**。パイプラインは連続部分の中でもっとも幅の広い書式付きの番号を測り、その連続部分のすべての項目をインデントして、番号の右端をそろえます。`1.`–`10.`と描画される10項目のリストでは、1桁の番号に余白を補い、区切りが同じ位置にそろうようにします。

```ts
orderedLists: {
  numberFormat: 'arabic',
  separator: '.',
  levels: [
    { level: 2, numberFormat: 'lower-alpha' },
    { level: 3, numberFormat: 'lower-roman', separator: ')' },
  ],
}
```

これで、定番の入れ子の組み合わせになります。

```
1. First item
   a. Sub-item
      i) Deep note
   b. Sub-item
2. Second item
```

中国語の公文書の階層（GB/T 15834—2011、付録B.3）は5レベルで、一、→（一）→1.→（1）→①の順になります。

```ts
orderedLists: {
  levels: [
    { level: 1, numberFormat: 'simp-chinese-informal', separator: '、' },
    { level: 2, numberFormat: 'simp-chinese-informal', prefix: '（', separator: '）' },
    { level: 3, numberFormat: 'arabic', separator: '.' },
    { level: 4, numberFormat: 'arabic', prefix: '（', separator: '）' },
    { level: 5, numberFormat: 'circled-decimal', separator: '' },
  ],
}
```

## 数式

`math`プロパティは、`$...$`（インライン）と`$$...$$`（別行立て）で囲んだLaTeXの数式の解析と描画の方法を制御します。基盤のエンジンはSVG出力モードのMathJax（`mathjax-full`パッケージ）で、キャンバスにはラスタライズして描画し、PDFには拡大縮小可能なグリフとして埋め込みます。

```ts
interface MathConfig {
  enabled?: boolean;        // Render LaTeX. When false, spans pass through as literal TeX.
  fontSizeScale?: number;   // × the surrounding text's size (the body size for display maths).
  color?: ColorValue;       // Formula colour; inherits body colour if omitted.
  marginTop?: Dimension;    // Space above display math blocks.
  marginBottom?: Dimension; // Minimum space below; baseline grid snap may enlarge it.
  indentAfterDisplay?: boolean; // Indent a paragraph that follows a display formula.
  keepWithLeadIn?: boolean; // Keep a display formula with the line that leads into it.
  equationNumbering?: {      // Number the display formulas that carry a \label.
    enabled?: boolean;           // default true
    numberingTemplate?: string;  // '{n}'; '{h1}.{n}' numbers by chapter
    resetOn?: ResourceCounterReset; // 'never' | 'h1' … 'h6'
    counterFormat?: ResourceCounterFormat; // 'decimal'
    format?: string;             // '({n})': what the formula and \eqref print
  };
}
```

| プロパティ | 型 | 既定値 | 説明 |
| --- | --- | --- | --- |
| `enabled` | `boolean` | `true` | falseの場合も`$...$`と`$$...$$`のスパンは解析されますが（そのため、閉じていない区切り記号の警告は出ます）、TeXのソースがそのまま描画されます。内容に意図的にドル記号が含まれる場合や、数式の描画を完全に無効にしたい場合に使います。 |
| `fontSizeScale` | `number` | `1.0` | 描画の前に周囲のテキストのサイズに掛ける倍率です。数式のTeXフォントの1emは、そのサイズ×`fontSizeScale`になります。そのサイズとは、別行立て数式と本文中のインライン数式では`bodyText.fontSize`、見出し、段落スタイル、キャプション、囲みの本文の中のインライン数式では、それを含むブロックのサイズです。1.0で周囲のテキストと一致します。数式のフォントが本文のフォントよりわずかに大きく、または小さく見える場合は、0.9–1.1の範囲の値が一般的です。**postext 1.5で変更**：1.4までは、数式がこれより約13%大きく組まれていました（後述）。 |
| `color` | `ColorValue` | 本文の色を継承 | 描画される数式の色です。省略すると`bodyText.color`を継承します。数式を本文と異なる色にしたい場合、たとえば見出しのアクセントカラーに合わせたい場合に明示的に設定します。 |
| `marginTop` | `Dimension` | `0.8em` | 別行立て数式の上のアキです。インライン数式では無視されます。 |
| `marginBottom` | `Dimension` | `0.8em` | 別行立て数式の下のアキです。これは**最小値**で、次のベースラインがグリッド線に乗るように、グリッドへのスナップで広がることがあります（`page.baselineGrid`でグリッドを表示するかどうかにかかわらず）。 |
| `indentAfterDisplay` | `boolean` | `true` | 別行立て数式に続く段落の1行目を、ほかの段落と同じく字下げします。`false`にすると、別行立て数式の直後の段落はすべて字下げせずに組まれ、数式が中断した文の続き（「ここで*L*は…」）として扱われます。段落の中に書いた数式（上にも下にも空行がないもの）の後は、常に字下げしません。閉じる`$$`の下の文はその段落の続きであり、字下げされることはありません（[数式](https://postext.dev/ja/docs/document-format-inline.md#数式)を参照）。 |
| `keepWithLeadIn` | `boolean` | `false` | 別行立て数式を、それを導入する行と同じ段に置きます。TeXのpredisplay penaltyに相当します。数式がその前の段落の最終行の下に収まらない場合、その行は数式と一緒に次の段またはページへ移ります。後に残る行が`bodyText.widowMinLines`未満になる場合（`bodyText.avoidWidows`がオフなら1行未満）は、その段で始まる段落が丸ごと次へ移ります（`headings.keepWithNext`により、その上で段を閉じている見出しも一緒に移ります）。持ち越された行は、オーファンの規則が何を求めていても、次の段の先頭に単独で置かれます。`false`の場合は数式だけが次へ移り、それを導入する行が上の段を閉じたり、次の段の先頭にある図の上に置かれたりすることがあります。 |
| `equationNumbering` | `{ enabled, numberingTemplate, resetOn, counterFormat, format }` | `true`、`'{n}'`、`'never'`、`'decimal'`、`'({n})'` | `\label`を持つ別行立て数式の番号の付け方です（後述の*番号付きの数式*を参照）。`numberingTemplate`、`resetOn`、`counterFormat`はリソースの種類のものと同じ働きをします。`'{h1}.{n}'`と`resetOn: 'h1'`で章ごとに(2.1)、(2.2)…と、`'{h1}.{h2}.{n}'`と`'h2'`で節ごとに番号を付けます。`format`は数式と`\eqref`が印字する番号の形で、`{n}`が番号を表します。`'[{n}]'`なら[3]と組まれます。`enabled: false`ではどの数式にも番号を付けません。`\label`は捨てられ、それへの参照はページを印字します。トークンにはコロンの後に書式も書けます（`'{h1:A}.{n}'`：アルファベットを振った付録では(A.1)）。 |

```ts
math: {
  enabled: true,
  fontSizeScale: 1.0,
  color: { hex: '#295AA3', model: 'hex' },
  marginTop: { value: 1, unit: 'em' },
  marginBottom: { value: 1, unit: 'em' },
}
```

**数式のサイズ（postext 1.5で変更）**。MathJaxは数式のボックスを`ex`で返し、TeXフォントの1`ex`は0.442emです。postext 1.4まではエンジンがこれを0.5emとして扱っていたため、どの数式も`bodyText.fontSize × fontSizeScale`より約13%大きく組まれていました。現在は数式がドキュメントに記載したとおりのサイズで組まれ、数式を含む行とページは組み直されます。1.4向けにコードで書いた設定は、書いたままの状態で`postext/bundle`の`pinLegacyMathSize`に1回通すと、1.4の数式サイズを保てます。

```ts
import { pinLegacyMathSize } from 'postext/bundle';

config = pinLegacyMathSize(config); // formulas, and the space around display formulas, as 1.4 set them
```

1.5でのほかの規則の変更でも、ページが動くことがあります。対象は、見出しの改行位置、インラインの図の周囲のアキ（本文中と囲みの中）、見出しのインラインのマーク、ドロップキャップのサイズ、コロンで終わる行の下に、それが導入するリストのために確保する余地、囲みの分割で段落やリスト項目に残る行、ダッシュの後の改行、行末不ぞろいのテキストの改行、見出しの下での段落の分割、複合語のハイフンの後の改行、`:::paragraphs`コンテナーの下のアキです。その設定で組むMarkdownを渡して`migrateConfig`を1回実行すると、そのテキストに必要なものを、数式のサイズも含めて固定します（[postext 1.4以前で書き出したバンドル](https://postext.dev/ja/docs/configuration-bundles.md#postext-14以前で書き出したバンドル)を参照）。

```ts
import { migrateConfig } from 'postext/bundle';

config = migrateConfig(config, undefined, { content: markdown }); // heading breaks, formulas, inline gaps, heading marks, drop caps, colon lines, box cuts, dash breaks, compound breaks, ragged breaking, splits under a heading and container space as 1.4 set them
```

これで、こうした規則の変更によって動くものは抑えられますが、1.4のページがすべて保たれるわけではありません。バージョン1.5ではレイアウトのバグも修正しており、修正は固定できません。古い設定にも新しい設定と同じく修正が適用されるため、修正の影響を受けるページは動くことがあります。主なものは次のとおりです。独自のデザインを持たないページ幅の見出しは、ページ全体の幅で測られ、そのレベルの行送りで組まれます。見出しデザインの中のドロップキャップのベースラインの下には、何も確保されません。ドロップキャップはセクションのパレットの色を取り、`overflow`が`'wrap'`でないデザインテキストにも組まれ、そのテキストは回り込むようになります。囲みの中の段落は、測ったときのトラッキングで描画されます。分割された囲みは、すべての断片でアイコンの列を保ちます。語間を3倍を超えて広げることになる囲みの行は、本文と同じく行末不ぞろいで組まれます。ゆるい段落を調整する仕組みは、両端そろえの行を`maxWordSpacing`が許す以上に広げません。フロートとして配置した囲みは、フロートのアキより広い`marginBottom`（上の帯の場合）または`marginTop`（下の帯の場合）を保ちます。トラッキングを指定した中央そろえまたは右そろえのデザインテキスト（柱、章扉のタイトル）は、最後の文字の後のトラッキングを含めず、文字そのもので位置が決まります。ページ幅の章扉の下では、2段目を始めるテキストが、章扉の直下のテキストと同じ位置から始まります。章扉の後に見出しが続く場合も同様です。連続するドットをカーニングで離す書体でも、目次のリーダーはページ番号の手前で止まります。柱は見出しを書かれたとおりに読み、ハイフンやダッシュの後、または幅のために分割された語の途中で行が終わる箇所に空白を入れません（`MEDIOAMBIENTALE S`ではなく`MEDIOAMBIENTALES`）。見出しデザインの`{titleText}`も同じように読みます（`thousand- colour`ではなく`thousand-colour`）。見出しデザインの帯の下端または中央に固定したテキストは、それが収まる高さに帯を保つため、見出しの上のテキストに重なることがなくなりました。行より幅の広い語が、その語に含まれるハイフンの隣で分割される場合は、そのハイフンの後で分割され、2つ目のハイフンは付きません。別のリストに入れ子にしたリストの後の項目は、入れ子のリストではなく自分のリストの`itemSpacing`を使います。最後に、行より幅が広いために分割された語の残りは、その語自身の分割位置を保ちます。そのため、Webアドレスは区切りの位置で、複合語はハイフンの位置で改行され続け、辞書の音節で改行されることはありません。

`pinLegacyMathSize`は倍率に1.1312（0.5 ÷ 0.442）を掛け、`em`で指定した別行立て数式のアキを同じ係数で割ります。別行立て数式を含む本では、倍率だけでは足りません。そのアキは数式自身のサイズに対する長さなので、同じく13%大きくなり、下のテキストを押し下げてしまいます。既定のアキについて書き出すと、3つの値は次のとおりです。

```ts
math: {
  fontSizeScale: 1.131,
  marginTop: { value: 0.7072, unit: 'em' },
  marginBottom: { value: 0.7072, unit: 'em' },
} // formulas as large as 1.4 set them, with the space 1.4 left around them
```

設定が保存されていた場合は、エンジンがそれを判別して自動的に処理します。1.5より前に書かれた`.postext`バンドルでは`openBundle` / `readBundle`が（[postext 1.4以前で書き出したバンドル](https://postext.dev/ja/docs/configuration-bundles.md#postext-14以前で書き出したバンドル)を参照）、その時期に保存された本、作業コピー、`postext-config.json`ファイルではSandboxが処理します（**Sandbox → 作業内容の保存**を参照）。これらは`migrateConfig`を通して読み込まれ、サイズが固定されます（`pinLegacyMathSize`）。`fontSizeScale`は保存されていた倍率（未設定なら1）×1.1312になり、`em`または`rem`で指定した別行立て数式のアキ（数式自身のサイズに対する長さ）は同じ係数で割られるため、別行立て数式の周囲のアキは1.4のときのまま保たれます（既定の0.8emは0.7072emになります）。ページの単位（`pt`、`mm`…）で指定したアキはそのままで、`enabled: false`の設定や、本に`$`がない設定も変更されません。こうして古い本は1.4と同じように組まれ、その`math`セクションには実際に組まれるサイズが表示されます。そのような本を現在のサイズで組みたい場合は、これらの値をリセットします。Sandboxでは**数式 → サイズの倍率**、**別行立て数式の上のアキ**、**別行立て数式の下のアキ**で、コードでは次のようにします。

```ts
math: { ...config.math, fontSizeScale: 1, marginTop: undefined, marginBottom: undefined } // today's size and margins
```

**番号付きの数式**。番号の付いた別行立て数式は、その組幅（段、または囲みの内側の幅）いっぱいに広がります。数式は中央に置かれ、その番号は数式の行の右端にそろえて組まれます。`align`では、番号の付いたすべての行でそうなります。番号は`\label{eq:x}`から付きます（postext 1.19以降）。ラベルを付けた数式と、`align`、`gather`、`alignat`、`flalign`、`eqnarray`のラベルを付けた行には、`\nonumber`や`\notag`を書いた行を除き、`equationNumbering`に従って読む順に番号が振られます。`equation`などの環境はそれだけでは番号が付かず、ラベルのない数式には番号がありません。`\tag{…}`は指定したラベルを括弧に入れて、`\tag*{…}`は書かれたとおりに印字します。どちらも数えられず、その横の`\label`はそれに名前を付けます。組幅より広い番号付きの数式は、ほかの別行立て数式と同じく右へはみ出します。（postext 1.4までは、`\tag`を含む数式はまったく描画されず、1.18までは`\tag`だけが番号を付けていました。）

本文の`\eqref{eq:x}`は番号をその`format`で（(3)）、`\ref{eq:x}`は番号だけを印字します。`:ref{id="eq:x"}`と`@eq:x`も同じです（[相互参照](https://postext.dev/ja/docs/document-format-notes-references.md#相互参照とアンカー)を参照）。数式の中では、`\eqref`は番号をテキストとして印字します。章ごとに組む本では、カウンターは前の章から続きます。`continuationAfter`がそれを`LayoutContinuation.statementCounters`（`equation`）で引き継ぎ、本のアウトラインがすべてのラベルに番号を与える（`OutlineEntry.numberLabel`）ので、別の章の数式への参照もその番号を印字します。

```ts
math: {
  equationNumbering: { numberingTemplate: '{h1}.{n}', resetOn: 'h1' }, // (1.1), (1.2)… (2.1)
}
```

解決関数（resolver）と既定値の除去関数（stripper）は、ほかのセクションと同じ形です。

```ts
import {
  DEFAULT_MATH_CONFIG,
  resolveMathConfig,
  stripMathDefaults,
} from 'postext';

const resolved = resolveMathConfig(config.math);
const minimal  = stripMathDefaults(config.math);
```

### 数式エンジンの起動

MathJaxはエンジンのほかの部分と一緒には読み込まれず、必要になったときに読み込まれます。メインスレッドでレイアウトする場合は、数式を含む文書を構築する前に起動してください。

```ts
import { buildDocument, initMathEngine, renderPage } from 'postext';

await initMathEngine(); // loads MathJax once; later calls resolve at once
const doc = buildDocument({ markdown: 'Euler: $e^{i\\pi}+1=0$.' }, config);
document.body.append(renderPage(doc.pages[0], doc));
```

- **エンジンが動くまで、数式はプレースホルダーです**。各数式は推定サイズの灰色のボックスとして配置されます。`initMathEngine()`を一度も呼ばずに数式を含む文書をレイアウトすると、コンソールにその旨の警告が1回表示されます。
- **レイアウトワーカーは自動で起動します**。`postext/worker`でのビルドは、Markdownに`$`が含まれていれば自ら`initMathEngine()`を呼びます。
- **すぐにレイアウトし、準備ができたらもう一度**。`isMathReady()`はエンジンが動いているかどうかを返します。`onMathReady(fn)`はエンジンが動き出したときに（すでに動いていればすぐに）`fn`を1回呼び、その呼び出しを取り消す関数を返します。エディターはすぐにプレースホルダーを表示し、MathJaxが届いたらもう一度レイアウトできます。`initMathEngine()`の実行中は警告は出ません。
- **失敗**。MathJaxを読み込めない場合、`initMathEngine()`はrejectされます。次の呼び出しで再び読み込みを試みます。
- **どのバンドラーでも、Nodeでも、CDNでも**。MathJaxは、事前にバンドルした1つのモジュールとしてパッケージに同梱されています（圧縮前で約1.8MB、`initMathEngine`が呼ばれたときにだけ取得されます）。単純な`import { initMathEngine } from 'https://esm.sh/postext'`で動作し、`?bundle`は不要です。`mathjax-full`パッケージはpostextのビルドにだけ必要なため、postextをインストールしてもインストールされません。MathJaxと、それに同梱されたmhchemパーサーはApache-2.0ライセンスです。それらの告知とライセンス文は、モジュールの隣に`dist/math/THIRD_PARTY_LICENSES.txt`として同梱されています。
- **1ページにエンジンは1つ**。エンジンと、描画済みの数式のキャッシュは、同じJavaScriptレルムで`postext`をインポートするすべてのコードで共有されます（[1つのページで共有されるグローバルな状態](https://postext.dev/ja/docs/configuration-programmatic-usage.md#1つのページで共有されるグローバルな状態)を参照）。

文書側の文法（`$...$`、`$$...$$`、ドル記号そのもののエスケープ）については、[文書形式](https://postext.dev/ja/docs/document-format-inline.md#数式)を参照してください。
