問題

\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 はうまく斜体太字になったが、 \eqref{} など他の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上で認譫させることができますね!

今回は以上です。

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