はじめに
気軽に Markdown で知見を共有できるサービスが巷にはあふれています.なかには,LaTex 形式で数式を記述できるものもあります.
ただ,圏論の図式となると数が限られるようですし,まずはローカルの使い慣れた開発環境で記事を書きたい,というニーズもあると思います.
そこで,本記事では下記の環境構成で圏論の図式をかく方法を記述します.(各ソフトウェアのバージョン情報は省略します)
(GitHub リポジトリのリンクを追加予定)
環境構築方法
1. VSCode を起動して,拡張機能をインストール
まずは,VSCode を起動しましょう.
VSCode をインストールできていない場合は下記を参照してください.
Setting up Visual Studio Code 7
個人的には,macOS であれば Homebrew,Ubuntu であれば Snap 経由でインストールしています.
また,ターミナルにて対象ディレクトリまで移動して $ code . というコマンドで起動することが多いです.
次に,拡張機能である "Markdown Preview Enhanced" 2 をインストールします.こちらの拡張機能をインストールすることで MathJax の拡張機能を利用できるようになります.
VSCode の拡張機能のインストール方法は下記を参照してください.
Use extensions in Visual Studio Code 8
個人的には,原則として拡張機能をインストールした後は,global では "Disable" にして,ワークスペースごとに "Enable (Workspace)" にしています.
2. 拡張機能の設定
拡張機能の設定をしていきます.
VSCode のワークスペース直下にて,お馴染みの .vscode/settings.json という設定ファイルが存在すれば下記の設定を追加し,無ければファイルを作成します.
※数式のレンダリングに KaTex 9 でなく,MathJax を使うようにします.
{
+ "markdown-preview-enhanced.mathRenderingOption": "MathJax"
}
行頭の + 記号は不要です.
次に,コマンドパレットを開き,Markdown Preview Enhanced: Open Config Script (Workspace) というコマンドを実行します.
VSCode のコマンドパレットの使い方は下記を参照してください.
Visual Studio Code tips and tricks 10
すると,いくつかのファイルが作成されますが,その中の .crossnote/config.js というファイルを下記のように編集します.
※XyJax(Xy-pic 11 12 という Tex パッケージの MathJax 移植版)5 という MathJax の拡張機能を有効にします.
({
katexConfig: {
"macros": {}
},
mathjaxConfig: {
"tex": {
+ packages: {'[+]': ['xypic']}
},
"options": {},
"loader": {
+ load: ['[custom]/xypic.js'],
+ paths: {custom: 'https://cdn.jsdelivr.net/gh/sonoisa/XyJax-v3@3.0.1/build/'}
}
},
mermaidConfig: {
"startOnLoad": false
},
})
行頭の + 記号は不要です.
ここまでの作業で,下記のようなファイル構成になっているはずです.
.
├── .crossnote
│ ├── config.js
│ ├── head.html
│ ├── parser.js
│ └── style.less
└── .vscode
└── settings.json
3. プレビュー & エクスポート
あとは,お好きなパスに Markdown ファイルを作成して存分に数式を書いてください.
ここでは,例として index.md を用意します.
index.md
---
puppeteer:
landscape: false
format: "A4"
---
# index.md
$$
\begin{xy}
\xymatrix {
GF(A) \ar[r]^{GF(f)} & GF(A') \ar[d]^{\eta_{A'}^{-1}} \\
A \ar[u]^{\eta_A} \ar[d]_{\eta_A} \ar[r]^{f} & A' \\
G(FA) \ar[r]_{G(h)} & G(FA') \ar[u]_{\eta_{A'}^{-1}}
}
\end{xy}
$$
## Definitions
- **_Naturally isomorphic_**
1. $F, G \in \mathrm{ob}([\mathscr{A}, \mathscr{B}]);\ F \cong G$
- > $$
\begin{xy}
\xymatrix @=4pc {
\mathscr{A} \rtwocell^{F}_{G}{*[r]{\scriptstyle \alpha}} & \mathscr{B}
}
\end{xy}
$$
2. $\forall{A \in \mathscr{A}};\ \alpha_A \circ {\alpha_A}^{-1} = 1_{F(A)},\ {\alpha_A}^{-1} \circ \alpha_A = 1_{G(A)}$
- $$
\begin{xy}
\xymatrix {
F(A) \ar[d]<-.2em>_{\alpha_A} \ar[r]^{F(f)} \ar@(lu, l) []_{1_{F(A)}} & F(A') \ar[d]^{\alpha_{A'}} \\
G(A) \ar[u]<-.2em>_{{\alpha_A}^{-1}} \ar[r]_{G(f)} \ar@(ld, l) []^{1_{G(A)}} & G(A')
}
\end{xy}
$$
コマンドパレットを開いて,Markdown: Markdown Preview Enhanced: Open Preview というコマンドを実行するとプレビューが開きます.
上記の画像では別ウィンドウで表示していますが,デフォルトでは VSCode 上の別タブとして表示されます.
macOS では Shift + Cmd + V のショートカットが使えます.
プレビュー上で右クリックするとコンテキストメニューが表示されるので,そこから PDF にエクスポートできます.
下記の画像は "Export > Chrome (Puppeteer) > PDF" の順でメニュー選択している様子です.
Chrome を利用して PDF にエクスポートするには,Google Chrome 13 のインストールが必要です.
デフォルトではよくわからないサイズの PDF が出力されますが,Markdown のフロントマターでサイズ指定できます.14
---
puppeteer:
landscape: false
format: "A4"
---
サンプル
(追記予定)
See https://sonoisa.github.io/xyjax/xyjax.html
おわりに
楽しい圏論ライフを!
おまけ
(追記予定)
-
https://marketplace.visualstudio.com/items?itemName=shd101wyy.markdown-preview-enhanced ↩ ↩2
-
https://github.com/shd101wyy/vscode-markdown-preview-enhanced ↩
-
https://code.visualstudio.com/docs/getstarted/tips-and-tricks#_command-palette ↩
-
https://shd101wyy.github.io/markdown-preview-enhanced/#/ja-jp/puppeteer?id=puppeteer-%e3%81%ae%e8%a8%ad%e5%ae%9a ↩

