いものやま。

雑多な知識の寄せ集め

TeXをMarkdown記法でも使ってみた。

はてなブログで記事を書くときには、いくつかの方法があるのは以前書いた通り。

このとき、 {\TeX}も使えるということを書いたんだけど、いざ使おうとしてみるといくつか問題が・・・

今日は、その問題の具体的な内容と、自分の見つけた回避策の紹介。

まずは基本から

はてなブログ {\TeX}を使う場合、次のように書く。

[tex:{TeXの数式}]

例えば、次のような感じ。

Markdown

[tex:{ \frac{d}{dx} \int_a\^x f(t) \\: dt = f(x) }]

実際の見え方

{ \frac{d}{dx} \int_a^x f(t) \: dt = f(x) }

このように、 {\TeX}を使うと数式をキレイに書くことが出来る。

なお、 {\TeX}のより詳しい使い方は、好き好きLaTeX2e/初級編 - MyTeXpertを見るのがオススメ。
PDFでも頒布されているので、簡単に参照することが出来る。

問題点

ただし、Markdown記法で {\TeX}を使おうとすると、いくつか問題点が。

ここで指摘されている通り、アンパサンド(&)が使えない。。。

 {\TeX}だと、数式の列を揃えるためのalign環境や行列を書くためのarray環境で、アンパサンドを多用するので、これが使えないのはかなり致命的。

例えば、昨日書いた最適化問題の数式をalign環境で書こうとすると、次のような感じになってしまう。

Markdown

[tex: {
\begin{align}
  \mbox{min.} & \left\| C_a X_a - C_b X_b \right\| \\\\
  \mbox{subject. to} & X_a + X_b \\le 100 \\\\
  & X_a \\ge 0 \\\\
  & X_b \\ge 0 
\end{align}
}]

実際の見え方

 {
\begin{align}
  \mbox{min.} & \left| C_a X_a - C_b X_b \right| \\
  \mbox{subject. to} & X_a + X_b \le 100 \\
  & X_a \ge 0 \\
  & X_b \ge 0
\end{align}
}

これはアカン。

回避する方法としては、Markdown記法以外を使うしかないと書かれてるのだけど、正直、数式を書くときだけMarkdown記法以外の編集方法にするのも不便なので、なんとかしたいところ。

回避策

じゃあ、どうするのか。

結論は簡単で、pre要素の中に {\TeX}の数式を書けばいい
(※キーワードリンクが有効だと、texというキーワードにリンクが自動で貼られてしまって、ダメになる場合があるっぽい? ただ、キーワードリンクを無効にしてもダメな場合があるようなので、根本的な原因は不明)

(2015-09-26追記)
キーワードリンクの問題ではなく、Markdown記法の```を使うと、この問題が起こるみたいだった。
pre要素を使って {\TeX}の数式を書く場合、記事中では```を使わずに、preタグを直接HTMLで書いたほうがいいみたい。
(ただし、シンタックスハイライトは使えなくなる)

(2019-06-03追記)
以下の解決策を使うといい:
TeXをMarkdown記法でも使ってみた・改。 - いものやま。

Markdownの便利(?)なところとして、HTMLのタグをベタ書きすることも可能ということがある。
なので、Markdown側で勝手に改変を加えられると困る部分は、pre要素の中に明示的に入れてしまえばいい。

例えば、先ほどの例だと、次のような感じ:

Markdown

<pre>
[tex: {
\begin{align}
  \mbox{min.} & \left| C_a X_a - C_b X_b \right| \\
  \mbox{subject. to} & X_a + X_b \le 100 \\
  & X_a \ge 0 \\
  & X_b \ge 0 
\end{align}
}]
</pre>

実際の見え方

 {
\begin{align}
  \mbox{min.} & \left| C_a X_a - C_b X_b \right| \\
  \mbox{subject. to} & X_a + X_b \le 100 \\
  & X_a \ge 0 \\
  & X_b \ge 0 
\end{align}
}

バックスラッシュによるエスケープの数も、本来の {\TeX}と同じ数で済んでることが分かるかと思う。

なお、場合によっては、pre要素にすることでスタイルシートの影響を受け、フォントが小さくなったりボーダーが周りについてしまうことがあるので、それが気になるのなら、style属性を指定してあげるといいかもしれない。

例えば、

<pre style="border: none; font-size: 100%;">
[tex: {
(ここにTeXの数式)
}]
</pre>

といった具合。

こうすると、先ほどの数式は、

 {
\begin{align}
  \mbox{min.} & \left| C_a X_a - C_b X_b \right| \\
  \mbox{subject. to} & X_a + X_b \le 100 \\
  & X_a \ge 0 \\
  & X_b \ge 0 
\end{align}
}

という表示になる。
うん、いい感じ♪

今日はここまで!