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が残っていれば、安心だな。