Closed2

Markdown PDFで数式攻略

TimdaikTimdaik

VSCodeのmarkdownで軽めの課題レポートを量産するべく、markdown2pdf環境を以前作ったのだが、数式対応が出来ていなかったぽいのでやる。

目的

MathJaxを使用して基本的なLaTeX記法に対応させる。

参考

https://qiita.com/satshout/items/1d0d179f7188454a115c

TimdaikTimdaik

MathJax特有の記法

VSCodeのmarkdownプレビューで使用される数式用ライブラリはKaTeXなので、若干の記法の差が出てくる。
プレビューでは表示できていた数式がPDFで表示されていない!!またはその逆もありうるので厄介だ。

とにもかくにも軽めのレポート用なので多少汎用性が失われるのは認めるが、できるだけ統一記法で臨むべく、両対応している記法かつ気を付けなければいけない記法をまとめた。

改行: \cr

以下のようにalignを使用する際の改行に用いる。

\begin{align}
a &= b \cr
  &= c \cr
  &= d
\end{align}

普段は\crの代わりに\\を使用しているのだが、markdownのパーサーが過剰反応しやがるのである。
小川「ワ、ワワワアアアア~笑」
(エスケープしてしまう)

少しムカつくが、基本的にmarkdownパーサーに先を越されてしまうので、こいつを刺激しない記法が中心になる。

アスタリスク: \ast

数式がレンダーされずに1.5hくらい時間とられて発狂しそうになった元凶がコイツ。
以下のように*を乱用していたのだが、どうやらこれにも小川が飛びついてしまったせいだそうな。

例として、以下のような数式を出力したい。

\begin{align} L((a|b \cdot c)^\ast \cdot (d|\epsilon)) &= L((a|b \cdot c)^\ast) \cdot L((\epsilon|d)) \cr &= (L(a) \cup L(bc))^\ast \cdot (L(\epsilon) \cup L(d)) \cr &= (\{a\} \cup \{bc\})^\ast \cdot (\{\epsilon\} \cup \{d\}) \cr &= \{a, bc\}^\ast \cdot \{\epsilon, d\} \cr &= \{\epsilon, a, bc, aa, abc, bca, bcbc, aaa, \ldots\} \cdot \{\epsilon, d\} \cr &= \{\epsilon, a, d, aa, ad, bc, aaa, aad, abc, bca, bcd\} \end{align}

数式は以下のブロックなのだが、この時点で*が灰色になっているし、その前後が斜体になってしまっていたりする...

$$
\begin{align}
L((a|b \cdot c)^* \cdot (d|\epsilon)) &= L((a|b \cdot c)^*) \cdot L((\epsilon|d)) \cr
  &= (L(a) \cup L(bc))^* \cdot (L(\epsilon) \cup L(d)) \cr
  &= (\{a\} \cup \{bc\})^* \cdot (\{\epsilon\} \cup \{d\}) \cr
  &= \{a, bc\}^* \cdot \{\epsilon, d\} \cr
  &= \{\epsilon, a, bc, aa, abc, bca, bcbc, aaa, \ldots\} \cdot \{\epsilon, d\} \cr
  &= \{\epsilon, a, d, aa, ad, bc, aaa, aad, abc, bca, bcd\}
\end{align}
$$

この*\astに変更するだけで事態は収束したが、めちゃくちゃ時間とられて哀し。


この他に参考記事にある通り、インライン(加えてブロックでも)で\{, \}の代わりに\lbrace, \rbraceを使うように、など気を付けることはある。
これなんかは集合表現等で乱用しているので注意したい。

とりあえずこの3つは常用しそうなので、気を付けまっす。

このスクラップは13日前にクローズされました