MathJax

前回 MathJax なんてのを知ったものだから、『私、綺麗?』ってやってみたくなった。

表舞台

世界を変えた有名な式 \(E = mc^2\)

世界で一番美しい式  \(e^{j\pi} = -1\)

MathJaxの威力再確認例

\begin{align} \int^{b}_{a} f(x) dx = \lim_{n \to \infty} \sum^{n-1}_{i=0} f(x_{i}) \Delta x \end{align}

舞台裏

Chrome だと、Loading Web-Font Tex/Math/Regular こんなメッセージが出てきて、描画まで随分待たされる。firefoxもフォントをロードしてるけど、さほど時間がかならない。

じゃ、テキストブラウザでは、どう見える? w3mの登場。

世界を変えた有名な式 \(E = mc^2\)

世界で一番美しい式  \(e^{i\pi} = -1\)

MathJaxの威力再確認例

\begin{align} \int^{b}_{a} f(x) dx = \lim_{n \to \infty} \sum^{n-1}_{i=0} f(x_{i})
\Delta x \end{align}

丸見えTV宜しく、原稿ぽいのが出てきた。Orgの原稿から、多少変更されてる部分があるけどね。

sakae@pen:~$ w3m -dump_source http://hoge.fuga.com >hoge_fuga.html

とかやって、全ソースを見るのが良い。ヘッダーから丸見えだぞ。ぐぐるは、これを嫌って、バイナリアンでいいじゃんって言ってるけど、それってUnix文化の破壊だぞ。

で、注目はjavascriptを使ってる事。これじゃw3mは絶対に太刀打ち出来ませんよ。そう、mathjaxの登場です。

つらつら見て行くと、javascriptの取り寄せ先がorgmode.orgになってた。 だから、javascriptの取り寄せに時間がかかっていたんだろうね。

そして面白い記述を発見したぞ。

<script type="text/javascript" src="http://orgmode.org/mathjax/MathJax.js"></script>
          :
        // Only one of the two following lines, depending on user settings
        // First allows browser-native MathML display, second forces HTML/CSS
        //  config: ["MMLorHTML.js"], jax: ["input/TeX"],
            jax: ["input/TeX", "output/HTML-CSS"],
        extensions: ["tex2jax.js","TeX/AMSmath.js","TeX/AMSsymbols.js",
                     "TeX/noUndefined.js"],

何が面白いかって、browser-natime MathMLって部分。これをヒントに Mathematical Markup Language を見ると、事情が分かったよ。ぐぐるとかは、数式なにそれって態度な訳ね。そんな世相を覆すために、javascriptで何とかするよって事なんだね。

MathML モジラ組の案内、そして、 はじめての MathML こういうのもあった。でも、かったるいんだよね。やっぱり簡単に数式を書きたいもの。 生のhtmlは書きたく無いからOrg-modeで書いて、htmlを自動生成。数式だって、生のMathMLを書きたくないから、LaTeX(しかも、それをOrg上)で書きたいなって訳です。正直、太った括弧(htmlのタグの事ね)は嫌いだ!

道具類

上記の舞台裏は、emacs 25.1に付属のOrgが出したコード。で、下記は、26.3が出したコード。

<script type="text/x-mathjax-config">
    MathJax.Hub.Config({
        displayAlign: "center",
        displayIndent: "0em",

        "HTML-CSS": { scale: 100,
                        linebreaks: { automatic: "false" },
                        webFont: "TeX"
                       },
        SVG: {scale: 100,
              linebreaks: { automatic: "false" },
              font: "TeX"},
        NativeMML: {scale: 100},
        TeX: { equationNumbers: {autoNumber: "AMS"},
               MultLineWidth: "85%",
               TagSide: "right",
               TagIndent: ".8em"
             }
});
</script>
<script type="text/javascript"
        src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.0/MathJax.js?cofig=TeX-AMS_HTML"></script>

こちらの方は、ちゃんとした配布サイトからjavascriptを持ってきてるようで、ある。

<script src="https://polyfill.io/v3/polyfill.min.js?features=es6"></script>
<script id="MathJax-script" async src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script>

こちらは、MathJaxのサイトに載ってた新版用。設定が少なくてよさそうなので、emacs25.1が出すやつの相当部分を置き換え。無事に動いた。

よそ様

高校数学の美しい物語 のページで、下記のような使い方をしてた。

<script type="text/x-mathjax-config">
  MathJax.Hub.Config({ tex2jax: { inlineMath: [['$','$'], ["\\(","\\)"]] } });
</script>
<script type="text/javascript"
  src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.0/MathJax.js?config=TeX-AMS_HTML" defer>
</script>

w3mでhtmlのソースを落としてきて眺めるのが、オイラーのひつまぶし、もとえ、暇つぶしに持ってこいって事に気が付いてしまったぞ。(この趣味は、先祖返りの感がする。)

ひつまぶしで思い出した。もうすぐ勝負、ショウブの日だね。蛇に噛まれないように、健やかに暮らせるようにショウブ湯に浸かる。そして、栄養をつけるように、うなぎを頂くのさ。これか家風になってますよ。

emacs 25.1 vs 26.3

今までWindows10では、emacs25.1を常用してたんだけど、上記の理由により、26.3に乗り換える事にした。大分太っちょになってる、信じられないぞ。GNUが正式に配布してるやつなんで、ちゃんとした物なんだろう。25.1は、とある方のアッセンブリ品(ひょっとして、ダイエット適用かな)

sakae@atom:/mnt/c/app$ ls -lh emacs-25.1/bin/*.exe
-rwxrwxrwx 1 sakae sakae  48K Oct  5  2016 emacs-25.1/bin/addpm.exe*
-rwxrwxrwx 1 sakae sakae 197K Oct  5  2016 emacs-25.1/bin/ctags.exe*
-rwxrwxrwx 1 sakae sakae  96K Oct  5  2016 emacs-25.1/bin/ebrowse.exe*
-rwxrwxrwx 1 sakae sakae  27M Oct  5  2016 emacs-25.1/bin/emacs-25.1.exe*
-rwxrwxrwx 1 sakae sakae  75K Oct  5  2016 emacs-25.1/bin/emacsclient.exe*
-rwxrwxrwx 1 sakae sakae 433K Oct  5  2016 emacs-25.1/bin/emacsclientw.exe*
-rwxrwxrwx 1 sakae sakae  27M Oct  5  2016 emacs-25.1/bin/emacs.exe*
-rwxrwxrwx 1 sakae sakae 196K Oct  5  2016 emacs-25.1/bin/etags.exe*
-rwxrwxrwx 1 sakae sakae 385K Oct  5  2016 emacs-25.1/bin/runemacs.exe*

一番大きいやつで27Mってサイズ

sakae@atom:/mnt/c/app$ ls -lh emacs-26.3/bin/*.exe
-rwxrwxrwx 1 sakae sakae 2.4M Aug 29  2019 emacs-26.3/bin/addpm.exe*
-rwxrwxrwx 1 sakae sakae 3.4M Aug 29  2019 emacs-26.3/bin/ctags.exe*
-rwxrwxrwx 1 sakae sakae 1.9M Aug 29  2019 emacs-26.3/bin/ebrowse.exe*
-rwxrwxrwx 1 sakae sakae 130M Aug 29  2019 emacs-26.3/bin/emacs-26.3.exe*
-rwxrwxrwx 1 sakae sakae 2.6M Aug 29  2019 emacs-26.3/bin/emacsclient.exe*
-rwxrwxrwx 1 sakae sakae 1.9M Aug 29  2019 emacs-26.3/bin/emacsclientw.exe*
-rwxrwxrwx 1 sakae sakae 130M Aug 29  2019 emacs-26.3/bin/emacs.exe*
-rwxrwxrwx 1 sakae sakae 3.4M Aug 29  2019 emacs-26.3/bin/etags.exe*
-rwxrwxrwx 1 sakae sakae 1.7M Aug 29  2019 emacs-26.3/bin/runemacs.exe*

方や、130Mもある。なんで急に太った?

25.1の方は、*.dllが含まれているけど、26.3の方には、一切含まれていない。じゃUnixで言う所の、ダイナミックリンク対スタチックリンクの違い? 冷静に*.dllが全部含んでいるとしても、そんな容量にはならない。よう分からん話である。

shere/emacs/26.3/の下に、ひっそりと README.W32なんていう案内ファイルが置いてあった。 ここに太ってしまった理由が書いてあるかと思ったら、微塵も触れていない。太るのは貧乏人って相場が決まってるんで、察して下さいって事かな。

どんな所でheadタグに埋め込んでいる文字列が格納されてるか、参考に確認。

sakae@pen:/usr/share/emacs/26.1/lisp/org$ zgrep cdnjs.cloudflare.com *gz
ox-html.el.gz:  '((path "https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.0/MathJax.js?config=TeX-AMS_HTML" )

debianのソースは圧縮されてたので、zgrepなんてのを使ってみた。 そして、このファイルをブラウジングしてたら、面白い部分を発見した。

記念にemacsを改変

orgファイルをhtmlに変更すると、冒頭にh1タグでタイトルが来て、次行にh2タグで、Table of Contentsってなってからtocが出て来る。このh2タグがオイラー的には許せないので、改変しちゃう。

ox-html.el

(defun org-html-toc (depth info &optional scope)   ;; at 2262
  :
            (concat (format "<%s id=\"table-of-contents\">\n" outer-tag)
                    ;; (let ((top-level (plist-get info :html-toplevel-hlevel)))
                    ;;   (format "<h%d>%s</h%d>\n"
                    ;;        top-level
                    ;;        (org-html--translate "Table of Contents" info)
                    ;;        top-level))
                    toc
                    (format "</%s>\n" outer-tag))))))))

上記のように出力してる部分をコメントアウト。それからこのファイルをバイトコンパイルすればおk。

emacs探索

Window10にやって来たemacs 26.3(no-deps版)をしばし探索。余計な物は入っていない。infoしたら、真っ先にSKKが出てきたぞ。SKKはemacsの売りなんか。GNUとタイアップしてアジア圏の入力環境を制覇しようって企みか。

オイラーも2019年の年頭にddskkのパッケージを入れたからね。ELPAなんで、emacs本体を入れ替えても、こういうカスタマイズ環境がそのまま残って、継続出来るってのが嬉しい。

そもそもskkを入れたのは、IMEで変換した時に早とちり症候群(勝手に確定しちゃう)と言う 不可解な現象が発生したからだ。でも、最近発症してない。変なやつである。でもSKKが残っていれば、安心だな。


This year's Index

Home