すほーいログ

140字以上のものを残しておくために開設しました

はてなとMathJaxとはてなキーワード

はてなのMathJaxで自動連番使いながら自動連番除外した場合の中央ぞろえを維持しつつ,はてなキーワードのリンクは回避しながらもエスケープ数を極力減らしたいという要求を叶える方法を探し求めた結果です ごちゃってますが前提とまとめだけ読めばOKです

要求

  • はてな推奨の[tex:]でのエスケープ数を減らす
  • MathJaxで自動連番を使う
  • 自動連番を除外したときも中央ぞろえは維持できるようにする
  • cssに設定した数式スクロールを機能させる
  • はてなキーワードによって\sigma\arctan自動リンクされないようにする(裏技扱いの$$~$$記法だとそれぞれsigmaarctanにリンクします)

前提

編集モードはMarkdown

Markdownです. はてな記法はすいません知らないです.

自動連番設定済み

ダッシュボード → 設定→ 詳細設定 → 検索エンジン最適化 → headに要素を追加で

<script type="text/x-mathjax-config">
MathJax.Hub.Config({
  TeX: { equationNumbers: { autoNumber: "AMS" } }
});</script>

が追加されていること

cssの数式スクロール

ダッシュボード → デザイン→ スパナマーク → デザインcss

/* MathJax */
.MathJax_Display {
    overflow: auto hidden;
}

を追加して長い数式の場合は横スクロールするように設定

はてなでのMathJax

はてな推奨の書き方[tex:] (要エスケープ・&amp;問題)

  • 公式の書き方
  • ^(累乗),_(下付き)[,\(改行),*(環境につけて自動番号から除外),\ (空白)にエスケープがひとつ必要
  • ]にはエスケープが2つ必要
  • サンプルを見ればわかるがエスケープだらけになる
  • はてなキーワードリンクから除外されるので\sigma\arctanなどが使える
  • &amp;になってしまうため
    \begin{align} ~ \end{align}
    \begin{pmatrix} ~ \end{pmatrix}
    などの&が必要な環境は使えない
  • \begin{equation} ~ \end{equation}で囲っても自動数式番号の対象にならない
    • \begin{eqnarray} ~ \end{eqnarray}は番号が振られる
    • \begin{align} ~ \end{align}は番号が振られる

総じて気を付けることが多すぎます. あとライブプレビューとか使ってチェックしながら書きたいのにエスケープのせいで台無しになってしまうのもマイナス

サンプル

クリックで展開

ふつうに文中数式で使う

エネルギーと質量には[tex:E=mc\^2]の関係がある.

エネルギーと質量にはE=mc^2の関係がある.

エスケープモリモリequnarray環境(番号が振られる)

[tex: \begin{eqnarray}
V \_0 \[  \xi \_ {\alpha} \\] = W \_ a \^ 2 \\\
V \_1 \[  \xi \_ {\beta} \xi \_{\gamma} \\] = W \_ b \^ 2
\end{eqnarray}]

 \begin{eqnarray}
V _0 [  \xi _ {\alpha} ] = W _ a ^ 2 \\
V _1 [  \xi _ {\beta} \xi _{\gamma} ] = W _ b ^ 2
\end{eqnarray}

エスケープモリモリequnarray*環境(中央ぞろえが外れる)

[tex: \begin{eqnarray\*}
V \_0 \[  \xi \_ {\alpha} \\] = W \_ a \^ 2 \\\
V \_1 \[  \xi \_ {\beta} \xi \_{\gamma} \\] = W \_ b \^ 2
\end{eqnarray\*}]

 \begin{eqnarray*}
V _0 [  \xi _ {\alpha} ] = W _ a ^ 2 \\
V _1 [  \xi _ {\beta} \xi _{\gamma} ] = W _ b ^ 2
\end{eqnarray*}

はてなキーワード問題

[tex:
\theta = \arctan \frac{4}{\pi}
]


\theta = \arctan \frac{4}{\pi}

とくに問題なく変換されます

行列(&amp;になる)

[tex: 
\begin{pmatrix} a & b \\\ c & d \end{pmatrix}
]


\begin{pmatrix} a &amp; b \\ c &amp; d \end{pmatrix}

位置合わせ(&amp;になる)

[tex: \begin{align}
x + 2x &=& 3 \notag \\\
x &=& 1
\end{align} ]

 \begin{align}
x + 2x &amp;=&amp; 3 \notag \\
x &amp;=&amp; 1
\end{align}

場合分け(&amp;になる)

[tex: \begin{eqnarray}
| x | =  \begin{cases}    x & ( x \geqq 0 ) 
\\\    -x & ( x \lt 0 )  \end{cases}
\end{eqnarray}]

 \begin{eqnarray}
| x | =  \begin{cases}    x &amp; ( x \geqq 0 )
\\    -x &amp; ( x \lt 0 )  \end{cases}
\end{eqnarray}

MathJaxらしく$$で囲う (要エスケープ・はてなキーワード問題)

  • 文中で一度でも[tex:]を使っていると以降はベタで$$ ~ $$を書くだけでMathJaxが動きます.
    はてなブログで数式がきれいに書けるTeXの便利技 for 見たままモード にあるように以下のコードを,数式を使う前にかいておくのがいいと思います
    <p style="display: none;">[tex: ]</p>
  • はてな記法&amp;問題は回避できるので
    \begin{align} ~ \end{align}
    \begin{pmatrix} ~ \end{pmatrix}
    などの環境が使えるようになります
  • エスケープは必要です
    • ]エスケープは1つで十分になります
  • 番号除外でも中央ぞろえは維持されます
  • はてなキーワードに引っかかる場合はMathJaxが動きません

サンプル

クリックで展開

エスケープモリモリequnarray環境(番号が振られる)

$$ \begin{eqnarray}
V \_0 \[  \xi \_ {\alpha} \] = W \_ a \^ 2 \\\
V \_1 \[  \xi \_ {\beta} \xi \_{\gamma} \] = W \_ b \^ 2
\end{eqnarray}$$

$$ \begin{eqnarray} V _0 [ \xi _ {\alpha} ] = W _ a ^ 2 \\ V _1 [ \xi _ {\beta} \xi _{\gamma} ] = W _ b ^ 2 \end{eqnarray}$$

エスケープモリモリequnarray*環境

$$ \begin{eqnarray\*}
V \_0 \[  \xi \_ {\alpha} \] = W \_ a \^ 2 \\\
V \_1 \[  \xi \_ {\beta} \xi \_{\gamma} \] = W \_ b \^ 2
\end{eqnarray\*}$$

$$ \begin{eqnarray*} V _0 [ \xi _ {\alpha} ] = W _ a ^ 2 \\ V _1 [ \xi _ {\beta} \xi _{\gamma} ] = W _ b ^ 2 \end{eqnarray*}$$

はてなキーワード問題

$$
\theta = \arctan \frac{4}{\pi}
$$

$$ \theta = \arctan \frac{4}{\pi} $$

arctanはてなキーワードにリンクされるので変換されません

行列(&amp;回避)

$$ 
\begin{pmatrix} a & b \\\ c & d \end{pmatrix}
$$

$$ \begin{pmatrix} a & b \\ c & d \end{pmatrix} $$

位置合わせ(&amp;回避)

$$ \begin{align}
x + 2x &=& 3 \notag \\\
x &=& 1
\end{align}$$

$$ \begin{align} x + 2x &=& 3 \notag \\ x &=& 1 \end{align}$$

場合分け(&amp;回避)

$$ \begin{eqnarray}
| x | =  \begin{cases}    x & ( x \geqq 0 ) \\\
-x & ( x \lt 0 )  \end{cases}
\end{eqnarray}$$

$$ \begin{eqnarray} | x | = \begin{cases} x & ( x \geqq 0 ) \\ -x & ( x \lt 0 ) \end{cases} \end{eqnarray}$$

はてな記法をHTMLタグ<pre>[tex:]</pre>で囲う(一部除いてエスケープ不要・中央ぞろえが消える)

  • HTMLタグで囲うと大部分のエスケープが不要になります
    • ]エスケープは必要です
  • &が必要な
    \begin{align} ~ \end{align}
    \begin{pmatrix} ~ \end{pmatrix}
    などの環境も使えます
  • 番号を除外すると中央ぞろえが外れてしまいます
  • はてなキーワード問題を回避できます
  • <div>で囲うと水平スクロールしないので<pre>で囲います.

サンプル

クリックで展開

エスケープモリモリequnarray環境(番号が振られる)

<pre>[tex: \begin{eqnarray}
V _0 [  \xi _ {\alpha} \] = W _ a ^ 2 \\
V _1 [  \xi _ {\beta} \xi _{\gamma} \] = W _ b ^ 2
\end{eqnarray}]</pre>
 \begin{eqnarray}
V _0 [  \xi _ {\alpha} ] = W _ a ^ 2 \\
V _1 [  \xi _ {\beta} \xi _{\gamma} ] = W _ b ^ 2
\end{eqnarray}

エスケープモリモリequnarray*環境(番号を除外)

<pre>[tex: \begin{eqnarray*}
V _0 [  \xi _ {\alpha} \] = W _ a ^ 2 \\
V _1 [  \xi _ {\beta} \xi _{\gamma} \] = W _ b ^ 2
\end{eqnarray*}]</pre>
 \begin{eqnarray*}
V _0 [  \xi _ {\alpha} ] = W _ a ^ 2 \\
V _1 [  \xi _ {\beta} \xi _{\gamma} ] = W _ b ^ 2
\end{eqnarray*}

はてなキーワード問題

 <pre>[tex: 
\theta = \arctan \frac{4}{\pi}
]</pre>

\theta = \arctan \frac{4}{\pi}

とくに問題なく変換されます

行列(&amp;回避)

<pre>[tex: 
\begin{pmatrix} a & b \\ c & d \end{pmatrix}
]</pre>

\begin{pmatrix} a & b \\ c & d \end{pmatrix}

位置合わせ(&amp;回避)

<pre>[tex: \begin{align}
x + 2x &=& 3 \notag \\
x &=& 1
\end{align}]</pre>
 \begin{align}
x + 2x &=& 3 \notag \\
x &=& 1
\end{align}

場合分け(&amp;回避)

<pre>[tex: \begin{eqnarray}
| x | =  \begin{cases}    x & ( x \geqq 0 ) \\
-x & ( x \lt 0 )  \end{cases}
\end{eqnarray}]</pre>
 \begin{eqnarray}
| x | =  \begin{cases}    x & ( x \geqq 0 ) \\
-x & ( x \lt 0 )  \end{cases}
\end{eqnarray}

水平スクロール

<pre>[tex: \begin{eqnarray}\Large
Ax_1^3 + Bx_2^3 + Cx_1^2x_2 + Dx_1x_2^2 + Ex_1^2 + Fx_1x_2 + Gx_2^2 + Hx_1 + Ix_2 + J = 0
\end{eqnarray}]</pre>
 \begin{eqnarray}\Large
Ax_1^3 + Bx_2^3 + Cx_1^2x_2 + Dx_1x_2^2 + Ex_1^2 + Fx_1x_2 + Gx_2^2 + Hx_1 + Ix_2 + J = 0
\end{eqnarray}
<div>[tex: \begin{eqnarray}\Large
Ax_1^3 + Bx_2^3 + Cx_1^2x_2 + Dx_1x_2^2 + Ex_1^2 + Fx_1x_2 + Gx_2^2 + Hx_1 + Ix_2 + J = 0
\end{eqnarray}]</div>
 \begin{eqnarray}\Large
Ax_1^3 + Bx_2^3 + Cx_1^2x_2 + Dx_1x_2^2 + Ex_1^2 + Fx_1x_2 + Gx_2^2 + Hx_1 + Ix_2 + J = 0
\end{eqnarray}

さすがにわざとらしいですが,こういう場合に水平スクロールしてくれるほうが嬉しいので<pre>を使います.

MathJax記法をHTMLタグ<pre></pre>で囲う(動きません)

  • そもそも動きません

はてな記法をHTMLタグ<pre>[tex:]</pre>で囲ったうえで中央ぞろえを指定(一部除いてエスケープ不要)

  • HTMLタグで中央ぞろえを追加して対処します
  • 相変わらず]エスケープは必要です

サンプル

クリックで展開

エスケープモリモリequnarray*環境(番号を除外)

<pre><div style="text-align:center">[tex: \begin{eqnarray*}
V _0 [  \xi _ {\alpha} \] = W _ a ^ 2 \\
V _1 [  \xi _ {\beta} \xi _{\gamma} \] = W _ b ^ 2
\end{eqnarray*}]</div></pre>
 \begin{eqnarray*}
V _0 [  \xi _ {\alpha} ] = W _ a ^ 2 \\
V _1 [  \xi _ {\beta} \xi _{\gamma} ] = W _ b ^ 2
\end{eqnarray*}

番号を除去しても中央ぞろえが維持されるようになりました

まとめ

HTMLタグで囲ったうえで<div style="text-align:center">で中央ぞろえ指定をする.

]エスケープだけ必要.

  • 番号を振る場合
<pre>[tex: \begin{eqnarray}
Something\ Cool\ Formula
\end{eqnarray}]</pre>
 \begin{eqnarray}
Something\ Cool\ Formula
\end{eqnarray}
  • 番号を振らない場合
<pre><div style="text-align:center">[tex: \begin{eqnarray*}
Something\ Cool\ Formula
\end{eqnarray*}]</div></pre>
 \begin{eqnarray*}
Something\ Cool\ Formula
\end{eqnarray*}