📝

KaTeXマクロ集とVS Code用シンタックスハイライト

2024/02/23に公開

はじめに

KaTeXはウェブブラウザ上で数式を表示するJavaScriptライブラリです。
この記事では、私がKaTeXコードを書く際に設定しているマクロ(多くはLaTeXマクロの模倣)を同等なKaTeXコードを挙げて解説します。

設定ファイル

VS Codeの拡張機能Markdown Preview Enhancedの設定ファイルconfig.jsの内容を挙げます。
このファイルはMarkdown Preview Enhanced: Open Config Script (Global) コマンドを実行することで開けます。

ab系 - 自動サイズ調整の括弧

\pab等はLaTeXのphysics2パッケージのように括弧の高さを自動で調節します。

マクロ 説明
\pab 丸括弧
\mathopen{}\mathclose{\left\lparen {\frac{1}{2}} \right\rparen}
\pab{\frac{1}{2}}
\bab 角括弧
\mathopen{}\mathclose{\left\lbrack {\frac{1}{2}} \right\rbrack}
\bab{\frac{1}{2}}
\Bab 波括弧
\mathopen{}\mathclose{\left\lbrace {\frac{1}{2}} \right\rbrace}
\Bab{\frac{1}{2}}
\aab 山括弧
\mathopen{}\mathclose{\left\langle {\frac{1}{2}} \right\rangle}
\aab{\frac{1}{2}}
\vab 縦棒
\mathopen{}\mathclose{\left\lvert {\frac{1}{2}} \right\rvert}
\vab{\frac{1}{2}}
\Vab 二重縦棒
\mathopen{}\mathclose{\left\lVert {\frac{1}{2}} \right\rVert}
\Vab{\frac{1}{2}}
\def\ab@common#1#2#3{\mathopen{}\mathclose{\left#1 #2 \right#3}}
\def\pab#1{\ab@common\lparen{#1}\rparen}
\def\bab#1{\ab@common\lbrack{#1}\rbrack}
\def\Bab#1{\ab@common\lbrace{#1}\rbrace}
\def\aab#1{\ab@common\langle{#1}\rangle}
\def\vab#1{\ab@common\lvert{#1}\rvert}
\def\Vab#1{\ab@common\lVert{#1}\rVert}
\pab{\frac{1}{2}} \quad
\bab{\frac{1}{2}} \quad
\Bab{\frac{1}{2}} \quad
\aab{\frac{1}{2}} \quad
\vab{\frac{1}{2}} \quad
\Vab{\frac{1}{2}} \\
\pab{x}
\pab{\frac{a}{b} \middle| b}
\pab{x + \frac{a}{b}}
\pab{\cfrac{x + \cfrac{a}{b}}{x - \cfrac{a}{b}}} \\
\def\ab@common#1#2#3{\mathopen{}\mathclose{\left#1 #2 \right#3}} \def\pab#1{\ab@common\lparen{#1}\rparen} \def\bab#1{\ab@common\lbrack{#1}\rbrack} \def\Bab#1{\ab@common\lbrace{#1}\rbrace} \def\aab#1{\ab@common\langle{#1}\rangle} \def\vab#1{\ab@common\lvert{#1}\rvert} \def\Vab#1{\ab@common\lVert{#1}\rVert} \pab{\frac{1}{2}} \quad \bab{\frac{1}{2}} \quad \Bab{\frac{1}{2}} \quad \aab{\frac{1}{2}} \quad \vab{\frac{1}{2}} \quad \Vab{\frac{1}{2}} \\ \pab{x} \pab{\frac{a}{b} \middle| b} \pab{x + \frac{a}{b}} \pab{\cfrac{x + \cfrac{a}{b}}{x - \cfrac{a}{b}}} \\

eval - 値の代入を表す縦線

\def\ab@common#1#2#3{\mathopen{}\mathclose{\left#1 #2 \right#3}}
\def\eval#1{\ab@common.{#1}\rvert}
\eval{\frac{df}{dx}}_{x=a}
\def\ab@common#1#2#3{\mathopen{}\mathclose{\left#1 #2 \right#3}} \def\eval#1{\ab@common.{#1}\rvert} \eval{\frac{df}{dx}}_{x=a}

prescript, leftidx - 左側の添字

\prescriptLaTeXのmathtoolsパッケージのように、\leftidxLaTeX のleftidxパッケージのように、左側に添字を付けるマクロです。
\prescriptは左上と左下の添字を右揃えにします。また、左上と左下の両方に添字があるという前提で添字の高さを決定します。
\leftidxは左上と左下の添字を左揃えにします。添字の高さは右側の添字と同様に決定します。

マクロ 説明
\prescript{左上添字}{左下添字}{添字対象} 左側添字 \def\prescript#1#2#3{\hphantom{\vphantom{#3}^{#1}_{#2}} \mathllap{\vphantom{#3}^{#1}_{\vphantom{#1}}} \mathllap{\vphantom{#3}^{\vphantom{#1}}_{#2}} {#3}}\prescript{227}{90}{\mathrm{Th}}^+ \prescript{227}{90}{\mathrm{Th}}^+
\leftidx{(^{左上添字})または(_{左下添字})}{添字対象} 左側添字 \def\leftidx#1#2{\vphantom{#2}#1 #2} \leftidx{_n}{\mathrm{C}}_k \leftidx{_n}{\mathrm{C}}_k
\def\prescript#1#2#3{\hphantom{\vphantom{#3}^{#1}_{#2}} \mathllap{\vphantom{#3}^{#1}_{\vphantom{#1}}} \mathllap{\vphantom{#3}^{\vphantom{#1}}_{#2}} {#3}}
\def\leftidx#1#2{\vphantom{#2}#1 {#2}}
\prescript{227}{90}{\mathrm{Th}} \quad \leftidx{^{227}_{90}}{\mathrm{Th}} \\
\prescript{}{n}{\mathrm{C}}_k \quad \leftidx{_n}{\mathrm{C}}_k
\def\prescript#1#2#3{\hphantom{\vphantom{#3}^{#1}_{#2}} \mathllap{\vphantom{#3}^{#1}_{\vphantom{#1}}} \mathllap{\vphantom{#3}^{\vphantom{#1}}_{#2}} {#3}} \def\leftidx#1#2{\vphantom{#2}#1 {#2}} \prescript{227}{90}{\mathrm{Th}} \quad \leftidx{^{227}_{90}}{\mathrm{Th}} \\ \prescript{}{n}{\mathrm{C}}_k \quad \leftidx{_n}{\mathrm{C}}_k

dv系 - 微分の記法

\pdv等はLaTeXのderivativeパッケージのような微分の記法です。
\pdv[階数]{分子}{分母}と表記し、階数は省略できます。実装の都合から階数が二文字以上の場合は[{階数}]とする必要があります。

マクロ 説明
\pdv 偏微分
\frac{\partial f}{\partial x}
\pdv{f}{x}
\odv 常微分
\frac{\mathrm{d} f}{\mathrm{d} x}
\odv{f}{x}
\idv 常微分(イタリック)
\frac{d f}{d x}
\idv{f}{x}
\mdv 物質微分
\frac{\mathrm{D} \phi}{\mathrm{D} t}
\mdv{\phi}{t}
\fdv 汎函数微分
\frac{\delta F}{\delta \phi}
\fdv{F}{\phi}
\adv 平均変化率
\frac{\Delta f}{\Delta x}
\adv{f}{x}
\jdv ヤコビアン
\frac{\partial \mathopen{}\mathclose{\left\lparen {f,g} \right\rparen}}{\partial \mathopen{}\mathclose{\left\lparen {x,y} \right\rparen}}
\jdv{f,g}{x,y}
\def\ab@common#1#2#3{\mathopen{}\mathclose{\left#1 #2 \right#3}}
\def\pab#1{\ab@common({#1})}
\def\dv#1{\@ifnextchar{[}{\dv@option{#1}}{\dv@nooption{#1}}}
\def\dv@option#1#2#3#4#5#6{\@firstoftwo{}{#2#4}\frac{ {#1}^{#3} {#5} }{ {#1} {#6}^{#3}}}
\def\dv@nooption#1#2#3{\frac{ #1 #2}{ #1 #3}}
\def\pdv{\dv{\partial}}
\def\odv{\dv{\mathrm{d}}}
\def\idv{\dv{d}}
\def\mdv{\dv{\mathrm{D}}}
\def\fdv{\dv{\delta}}
\def\adv{\dv{\varDelta}}
\def\jdv#1#2{\frac{\partial \pab{#1}}{\partial \pab{#2}}}
\pdv{f}{x} \quad
\pdv[2]{f}{x} \quad
\pdv{}{x} f \quad
\pdv[2]{}{x} f \quad
\pdv[{n-1}]{f}{x}
\def\ab@common#1#2#3{\mathopen{}\mathclose{\left#1 #2 \right#3}} \def\pab#1{\ab@common({#1})} \def\dv#1{\@ifnextchar{[}{\dv@option{#1}}{\dv@nooption{#1}}} \def\dv@option#1#2#3#4#5#6{\@firstoftwo{}{#2#4}\frac{ {#1}^{#3} {#5} }{ {#1} {#6}^{#3}}} \def\dv@nooption#1#2#3{\frac{ #1 #2}{ #1 #3}} \def\pdv{\dv{\partial}} \def\odv{\dv{\mathrm{d}}} \def\idv{\dv{d}} \def\mdv{\dv{\mathrm{D}}} \def\fdv{\dv{\delta}} \def\adv{\dv{\varDelta}} \def\jdv#1#2{\frac{\partial \pab{#1}}{\partial \pab{#2}}} \pdv{f}{x} \quad \pdv[2]{f}{x} \quad \pdv{}{x} f \quad \pdv[2]{}{x} f \quad \pdv[{n-1}]{f}{x}

その他

その他のよく使うマクロです。

マクロ 説明
\dd 微分用の立体 d \def\dd{\mathrm{d}}\dd x \dd x
\micro SI 接頭語のマイクロ µ \def\micro{\char"3bc} \micro \mathrm{m} \micro \mathrm{m}
\def\dd{\mathrm{d}}
\def\micro{\char"3bc}

シンタックスハイライト

VS CodeのMarkdown Math用KaTeXシンタックスハイライトを作りました。ぜひお試しください。
https://marketplace.visualstudio.com/items?itemName=artakase.katex-math

関連記事

https://zenn.dev/artakase/articles/katex-style-font

https://zenn.dev/artakase/articles/698b37287fc2b5

https://zenn.dev/artakase/articles/4961142a918d26


ご清読ありがとうございました。

Discussion