emacsをupgradeしたらankiの数式が汚くなったので直した

導入 こんにちは。 私は日頃からanki-editor を使ってAnkiのカードを作成しているのですが、 Emacsをupgradeすると、数式が汚く表示されるようになってしまいました。 症状としては、 デスクトップ版のAnkiのBrowserで各Fieldのプレビューで数式が数式として表示されない (plain latex codeとして表示される) 数式がpng画像として表示される (もともとはMathJax inlineで表示されていた) というものでした。 デスクトップ版のAnkiでcardを編集することはほぼないので、1の症状についてはまだ許容範囲でしたが、 2のほうについては、数式の解像度だけ低くなったり、他の文字とのサイズが合わなくなったりして、かなり気になりました。 解決策 以下を config.org に追加することで解決しました。 (use-package! anki-editor :after org :init (setq-default anki-editor-latex-style 'mathjax)) この解決策に至った背景 anki-editor でpushされたカードは、HTMLに変換された状態でカードとして保存されます。 うまく数式が表示されるカードのHTMLを見ると、数式は以下のように anki-mathjax というタグで囲まれていました。 <anki-mathjax block="true">1 + 1 = 3</anki-mathjax> 一方、今回の問題が発生したカードのHTMLを見ると、数式は以下のように p タグと []<p>[] 1 + 1 = 3 [/$$]</p> したがって、anki-editorがorgテキストをHTMLに変換する部分で、問題が発生していることがわかりました。 anki-editor.el の中を見てみると、以下のように anki-editor-latex-style という変数によって、latexのスタイルを変更できるようになっており、今回の解決策に至りました。 (defun anki-editor--translate-latex-env (latex-code) (setq latex-code (replace-regexp-in-string "\n" "<br>" (org-html-encode-plain-text latex-code))) (cl-ecase anki-editor-latex-style (builtin (concat "[latex]<br>" latex-code "[/latex]")) (mathjax (concat "\[<br>" latex-code "\]")))) 読んでいただきありがとうございました。...

11月 24, 2024 · 1 分 · Kaoru Babasaki

ox-htmlで\bmなどのlatexマクロを使う方法

問題 \bm{a} 上の数式を書いたorg fileは、latex(pdf)へのexportであれば \usepackage{bm} とセットで斜体太字になるところ、 ox-html で単にHTMLとして exportしただけではlatexマクロとして認識されなかったので、その対処法を解説します。 latexによる数式をHTML上で表示する場合、MathJaxというライブラリを使うことが一般的であり、今回の問題も \bm をMathJaxでマクロとして認識させることで解決できます。 このQiita記事がまさにそれをやっていたので、それを参考にまず以下の方法を試してみました。 最初に試した方法 以下のブロックをorg fileに追加しました。 #+BEGIN_EXPORT html <script> MathJax = { tex: { macros: { bm: ["\boldsymbol{#1}", 1], }, } }; </script> #+END_EXPORT 結果、 \bm はうまく斜体太字になったが、 (???) など他のlatexマクロが逆にうまく表示されなくなってしまうという問題が発生しました。 解決策 よく調べてみると、 ox-html の変数に、 org-html-mathjax-template というものがあり、そこにMathJaxの設定を書き込むことで、latexマクロをHTML上で認識させることができることがわかりました。 テコちゃんのconfigを参考に、以下の設定config.orgに追加することで解決しました。 (setq org-html-mathjax-template "<script> window.MathJax = { loader: { load: ['[tex]/mathtools'], }, tex: { ams: { multlineWidth: '%MULTLINEWIDTH' }, tags: '%TAGS', tagSide: '%TAGSIDE', tagIndent: '%TAGINDENT', packages: {'[+]': ['mathtools']}, macros: { RR: ['\\ifstrempty{#1}{\\mathbb{R}}{\\mathbb{R}^{#1}}', 1, ''], NN: ['\\ifstrempty{#1}{\\mathbb{N}}{\\mathbb{N}^{#1}}', 1, ''], ZZ: ['\\ifstrempty{#1}{\\mathbb{Z}}{\\mathbb{Z}^{#1}}', 1, ''], QQ: ['\\ifstrempty{#1}{\\mathbb{Q}}{\\mathbb{Q}^{#1}}', 1, ''], CC: ['\\ifstrempty{#1}{\\mathbb{C}}{\\mathbb{C}^{#1}}', 1, ''], bm: ['\\boldsymbol{#1}', 1], ;; <- ここに\bmの設定を追加 EE: '\\mathbb{E}', Lap: '\\operatorname{\\mathcal{L}}', Var: '\\operatorname{Var}', Cor: '\\operatorname{Cor}', E: '\\operatorname{E}', }, mathtools: { pairedDelimiters: { abs: ['\\lvert', '\\rvert'], norm: ['\\lVert', '\\rVert'], ceil: ['\\lceil', '\\rceil'], floor: ['\\lfloor', '\\rfloor'], round: ['\\lfloor', '\\rceil'], } } }, chtml: { scale: %SCALE, displayAlign: '%ALIGN', displayIndent: '%INDENT' }, svg: { scale: %SCALE, displayAlign: '%ALIGN', displayIndent: '%INDENT' }, output: { font: '%FONT', displayOverflow: '%OVERFLOW' } }; </script> <script id=\"MathJax-script\" async src=\"%PATH\"> </script>") これでどんなlatexマクロもHTML上で認譫させることができますね!...

11月 18, 2024 · 1 分 · Kaoru Babasaki