先日の記事では R MarkdownでKaTeXをCDNから読み込む際に、 Pandocが出力にKaTeXを埋め込まないようにするハックを紹介しました。
しかし、Pandocのドキュメントを読むと、埋め込みを回避したい場合は属性として
data-external="1"
をつけよと書いています。
Elements with the attribute data-external=“1” will be left alone; the documents they link to will not be incorporated in the document. https://pandoc.org/MANUAL.html#option--self-contained
これ、Pandoc 2.0から追加されていたとのこと。
don’t incorporate elements with data-external=“1” (#2656) https://pandoc.org/releases.html#behavior-changes-1
self containedなドキュメントでも数式を使う
例えばKaTeXを使いたい場合、以下の内容をkatex.html
などに保存し、--include-in-header katex.html --mathjax
などと指定すればOK。数式レンダリングエンジン未指定時には、Pandocが数式をユニコード文字で頑張って表現しようとするので--mathjax
の空打ちが必要になる。多分--katex
なんかの空打ちでも良いはず。
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/katex.min.css" integrity="sha384-zB1R0rpPzHqg7Kpt0Aljp8JPLqbXI3bhnPWROx27a9N0Ll6ZP/+DiW/UqRcLbRjq" crossorigin="anonymous" data-external="1">
<script defer src="https://cdn.jsdelivr.net/npm/[email protected]/dist/katex.min.js" integrity="sha384-y23I5Q6l+B6vatafAwxRu/0oK/79VlbSz7Q9aiSZUvyWYIYsd+qj+o24G5ZU2zJz" crossorigin="anonymous" data-external="1"></script>
<script defer src="https://cdn.jsdelivr.net/npm/[email protected]/dist/contrib/auto-render.min.js" integrity="sha384-kWPLUVMOks5AQFrykwIup5lo0m3iMkkHrD0uJ4H5cjeGihAutqP0yW0J6dpFiVkI" crossorigin="anonymous" onload="renderMathInElement(document.body);" data-external="1"></script>
<script>
document.addEventListener("DOMContentLoaded", function() {
renderMathInElement(document.body, {
delimiters: [
{left: "$$", right: "$$", display: true},
{left: "$", right: "$$", display: false}
],
displayMode: true
});
});
</script>
R Markdownの場合
上述のHTMLを保存した上で以下のようなYAMLフロントマターを指定する。
output:
html_document:
includes:
in_header: katex.html
mathjax: null
pandoc_args: "--mathjax"
Enjoy
rmarkdown
パッケージはこれを使わない方法を採用している。多分、Pandoc 1.xに対応するためだけど、そろそろ更新してあげたいですね。