﻿# 09. 出力仕様

版: **1.0.0**  
**Ohyna Rendering**（画面プレビューと PDF）の契約です。入力は [08-入力解読仕様.md](./08-入力解読仕様.md)（Ohyna Markdown）。競合解決は [10-準拠仕様マップ.md](./10-準拠仕様マップ.md)。

---

## 1. 成果物の種類と基準

| 成果物 | 契約上の位置づけ |
|--------|------------------|
| 画面プレビュー | 編集中の近似。ページ分割は近似 |
| PDF | **配布・印刷の基準** |
| PDF 確認画面 | 作成済み PDF の表示 |

**同一契約で揃えるもの:** Markdown 拡張・サニタイズ・表紙文言・テーマ・数式区切り・数式フェンス・Mermaid ソース・details の常時展開。  
**近似でよいもの:** プレビューのページ区切り位置・ズーム見た目。最終ページ割は PDF を基準とする。

### プレビューの操作ポリシー

プレビューは **成果物の見た目を確認する画面**です。

| 操作 | 扱い |
|------|------|
| ズーム・スクロール・別ウィンドウ | 可（表示倍率と見え方） |
| リンク・タスク・折りたたみ | 成果物と同じ見た目で表示（折りたたみは常に展開） |

---

## 2. ページ幾何

| 項目 | 値（既定） |
|------|------------|
| 用紙 | `pageSize` × `pageOrientation`（`a4` / `a5` / `b5` / `letter`。既定 A4 縦＝210 × 297 mm） |
| 本文余白 | 上 14 / 右 14 / 下 16 / 左 14 mm（プリセットで変更可） |
| 表紙 | 余白 0（フルブリード） |

ページ寸法・余白は CSS のページ指定を基準とし、印刷エンジンが実装する `@page` の範囲で確定します。

---

## 3. PDF 確定条件

PDF 化は次を満たしてから確定します。

1. 文書の読み込み完了
2. 図・数式の描画完了（タイムアウトあり）
3. Web フォントの読み込み完了を待つ（失敗時は続行しうる）
4. 短い待機のあとページを PDF 化

---

## 4. 表紙

| 項目 | 仕様 |
|------|------|
| 寸法 | 用紙高さ、角丸なし、フルブリード |
| 背景 | 色テーマと `coverPattern` の組み合わせ（`solid` は単色） |
| 文言 | `title` / `subtitle` / `label` / `meta`（危険な HTML はエスケープ） |
| 基準 | ドキュメント設定（front matter） |

---

## 5. 改ページ（keep-next）

| パラメータ | 値 |
|------------|-----|
| 連続見出しの上限 | 4 |
| グループ内容 | 連続見出し + 直後の非見出しブロック 1 つ |
| 図 | 単独ブロックとして扱う |
| 目次（`.toc`） | 前後とも改ページ |
| 既にグループ化されたブロック | 1 回だけグループ化 |
| 後続本文が無い連続見出し | 見出し同士だけをまとめうる |

巨大要素は頁を超えるとき分割を許容します。

### 5.1 目次

| 項目 | 仕様 |
|------|------|
| マーカー | `[TOC]`（`toc: true` 時は先頭へ自動挿入可） |
| 改ページ | 目次ブロックの**前**と**後**で必ず改ページ |
| 複数頁 | エントリが多いときは目次ページを連続（「目次（続き）」） |
| 体裁 | 見出し「目次」、ドットリーダー、本文ページ番号 |
| プレビュー | 用紙スタック分割で PDF と同様に前後改ページを再現 |

---

## 6. Mermaid 出力

| 入力 | PDF | プレビュー |
|------|-----|------------|
| `` ```mermaid ``（図） | サーバ側で SVG 埋め込み | ブラウザ描画 |
| `` ```mermaid code `` | コードとして色分け表示 | 同じ |
| 図種判定（図のみ） | ソース先頭の図種ディレクティブ | 同左 |
| 失敗時（検査通過後・図のみ） | その図だけエラー枠。文書全体は返す | 同左 |

非表示の図ソース（アクセシビリティ用）と、利用者に見せる `mermaid code` は別物です。

対応する図種キーワードは製品が固定した一覧に従います（flowchart、sequenceDiagram など一般的な Mermaid 図種）。

---

## 7. 数式出力

| 入力 | 出力上の形 |
|------|------------|
| `$` / `$$` / `\(`/`\)` / `\[`/`\]` | 区切りを残し KaTeX で描画 |
| 数式フェンス（[08](./08-入力解読仕様.md) §3.4） | 数式ブロックとして描画 |

---

## 8. テーマとフォント

マージ順（後勝ち）:

1. 製品テーマの既定
2. 色スタイルの上書き
3. ドキュメント設定（font / radius / headingBand 等）

`fontFamily` があればそれを用い、無ければ `font` プリセット。Web フォントはファミリ名に応じて付与しうる。  
`fontFamily` / `fontSize` / `lineHeight` は危険な CSS 注入を防ぐため受理文字を制限します（[10](./10-準拠仕様マップ.md)）。

---

## 9. プレビュー固有

| 項目 | 仕様 |
|------|------|
| 用紙スタック | 設定用紙サイズ。机面は明暗連動。用紙は白固定 |
| 分割 | 図・数式のあと本文を各シートへ流し込み（近似） |
| 更新 | 静的解析 error 0 のとき。error があるときは直前表示を保持し「未更新」 |

---

## 10. 画面での成功／失敗（ゲート）

| 状況 | 画面の挙動 |
|------|------------|
| 検査で error 0 | プレビュー更新・PDF 作成が可能 |
| 検査で error ≥ 1 | 問題一覧に表示。プレビュー更新と PDF 作成は待機 |
| 空の本文や処理例外 | エラーとして通知 |
| 入力が大きすぎる | サイズ上限により拒否 |

---

## 11. PDF 化時の外部通信

PDF 化では、フォント・数式・図描画など製品が許可した宛先への通信だけを許します。詳細な許可方針は [10-準拠仕様マップ.md](./10-準拠仕様マップ.md) のセキュリティ節を参照してください。
