導入

こんにちは。 私は日頃からanki-editor を使ってAnkiのカードを作成しているのですが、 Emacsをupgradeすると、数式が汚く表示されるようになってしまいました。

症状としては、

  1. デスクトップ版のAnkiのBrowserで各Fieldのプレビューで数式が数式として表示されない (plain latex codeとして表示される)
  2. 数式が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 "\\]"))))

読んでいただきありがとうございました。

参考

Math & Symbols - Anki Manual