5. 数式とコードハイライト
数式とコードハイライトに必要なファイルは pfpdf の package に同梱されています。初回の browser 取得が済んでいれば、ネットワークなしで動作します。
5.1 inline 数式
$...$ で囲むと inline 数式になります。開始 $ の直後と終了 $ の直前に空白は置かず、改行をまたがないようにします。
二次方程式の解は $x = \frac{-b \pm \sqrt{b^2 - 4ac}}{2a}$ です。
二次方程式の解は $x = \frac{-b \pm \sqrt{b^2 - 4ac}}{2a}$ です。
5.2 display 数式
単独行の $$ で囲むと display 数式になります。delimiter と式を同じ行に置く書き方は display 数式として扱いません。
$$
\int_{-\infty}^{\infty} e^{-x^2} \, dx = \sqrt{\pi}
$$
閉じる $$ がない場合は数式を開始せず、通常の text として扱われます。MathJax が TeX の構文エラーを報告した場合は、誤った数式を含む PDF を残さず終了 code 2 で失敗します。
$$ \int_{-\infty}^{\infty} e^{-x^2} , dx = \sqrt{\pi} $$
5.3 数式にしたくない $
通常の文章中の $ を数式にしたくない場合は \$ と escape します。
価格は \$100 です。
5.4 コードハイライト
fenced code block の言語名を指定すると、syntax highlight されます。
```python
def greet(name: str) -> str:
return f"Hello, {name}!"
```
def greet(name: str) -> str:
return f"Hello, {name}!"
他の言語も同様です。
export function add(a: number, b: number): number {
return a + b;
}
言語名を省略すると highlight なしの plain な code block になります。未知の言語名を指定した場合も code 自体は残り、plain text 表示と warning になります。
plain text のブロック
5.5 Mermaid 図
言語名に mermaid を指定した fenced code block は図として描画されます。Mermaid 本体は pfpdf に同梱されているため、CDN への接続は不要です。
```mermaid
flowchart LR
A[Markdown] --> B[Mermaid]
B --> C[PDF]
```
flowchart LR
A[Markdown] --> B[Mermaid]
B --> C[PDF]
Mermaid は Markdown 変換時に SVG へ描画されます。生成した SVG は build workspace 内の独立した画像として保持され、Vivliostyle がその vector image をページ組版します。Mermaid の構文エラーがある場合、未描画の source code を PDF に残して成功とはせず、source file / line を表示して終了 code 2 で失敗します。同梱 runtime 自体の読み込み失敗は終了 code 1 です。
A -->|label| Bのようなflowchartのedge labelは、server-side描画で文字と背景の位置が一致しないため現在は未対応です。edgeの説明が必要な場合はnodeのlabelとして表現してください。
5.6 code block 内は変換されない
code block と inline code の中では、**strong**、$math$、raw HTML、___ などの記法は一切解釈されません。記法の説明を書くときに便利です。