ADR-0018 本文量の見積もりはマスターの行間・段落間隔・内側余白に合わせ、本文はヘッダとフッタの手前に収める
状況
- 1 枚に入る行数を「本文枠の高さ ÷(文字サイズ × 1.2)」で見積もっていた(ADR-0011)。PowerPoint は箇条書きの段落ごとにマスターの段落前後の間隔(既定のテーマでは 1 行の 20%)を足し、本文枠の上下左右には内側余白もある。見積もりが実際より多く出るため、自動分割しても最終行が枠の下にはみ出し、フッタに隠れたり重なったりしていた。
- 画像スライドの本文と画像は、タイトルの下からスライド下端の 5% 上までに置いていた。マスターにヘッダやフッタの帯を足しても、この範囲は変わらなかった。
- 余白を Markdown で指定させる案もあったが、書式はマスターの責務(ADR-0002)で、利用者に余白を意識させたくない。
決定
importMaster はレイアウトの本文プレースホルダーから、行間(a:lnSpc)、段落前後の間隔(a:spcBef / a:spcAft、行に対する割合か pt)、内側余白(a:bodyPr の lIns tIns rIns bIns、既定 0.1in / 0.05in)を読む。レイアウト → マスターの本文プレースホルダー → マスターの bodyStyle の順に継承する。
- 見積もり(
src/model/fit.ts)は、1 行の高さをマスターの行間(無ければ文字サイズ × 1.2)とし、テキストの段落ごとに段落前後の間隔を行数に換算して足す。本文枠は内側余白を引いた大きさで数える。空行・表の行・画像行には段落間隔を足さない。
- 本文を置いてよい上下の範囲(
contentBand)をマスターから求める。Body-Text レイアウトとマスターの図形・画像・日付 / フッター / スライド番号のうち、本文の列にかかり、スライドの上 3 分の 1 に収まるものをヘッダ、下 3 分の 1 から始まるものをフッタとみなす。範囲はそれらからスライド幅の 1% 離す。
- 画像スライドの画像と本文はこの範囲に収める(プレビュー、見積もり、deck.json の geometry が同じ範囲を使う)。テキストと 2 カラムは本文プレースホルダーの位置を変えず、見積もりとプレビューの本文の下端だけをフッタの手前で切る(文字は上から流れるので、正しく分割すればフッタに届かない)。
- 本文枠がフッタやヘッダと重なっているマスターは、設定のマスター画面で警告する。ヘッダとの重なりは PowerPoint 側で直してもらう。
- 書き出し時の溢れの警告は、deck.json の
fit(アプリの見積もり)を使う。deck.json の契約は変えない(fit.used / fit.capacity は v2 から存在する)。
結果
- Markdown もマスターの作り方も変えずに、自動分割、ゲージ、プレビュー、書き出しの警告が PowerPoint の実際に近づく。
- マスター無しの資料は従来と同じ(内側余白も段落間隔も無し)。
- 見積もりは目安のままで、日本語フォントの行の高さなど PowerPoint 側の差は残る。足りない場合の frontmatter による上書きは、必要になってから検討する。
状態