KaTeX с bookdown + gitbook

Я строю проект bookdown и представляю его как gitbook с многочисленными страницами по математике, и он медленно рендерится. Я хотел бы использовать KaTeX вместо mathJax для рендеринга моей математики, но я не уверен, как заставить это работать. Есть плагин для gitbook, так что это возможно, но я не знаю, как интегрировать его с bookdown.

В моем index.Rmd файл я пробовал следующее:

---
site: bookdown::bookdown_site
output:
  bookdown::gitbook:
    pandoc_args: [--katex]
    mathjax: NULL
    includes:
      in_header: katex.html
documentclass: book
---

где katex.html состоит из таблицы стилей и темы для KaTeX.

<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.7.1/katex.min.css" integrity="sha384-wITovz90syo1dJWVh32uuETPVEtGigN07tkttEqPv+uR2SE/mbQcG7ATL28aI9H0" crossorigin="anonymous">
<script src="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.7.1/katex.min.js" integrity="sha384-/y1Nn9+QQAipbNQWU65krzJralCnuOasHncUFXGkdwntGeSvQicrYkiUBwsgUqc1" crossorigin="anonymous"></script>

Однако математика не отображается (за исключением нескольких частей, которые все еще отображаются MathJax).

Есть ли способ получить скидку на работу с KaTeX?

1 ответ

Решение

Кажется, вы не читали документацию по KaTeX. KaTeX не отображает автоматически ваши математические выражения. Смотрите раздел Автоматический рендеринг математики на странице в README на Github. Короче говоря, вы должны загрузить auto-render.min.js и добавить событие для отображения математики, например, в вашем katex.html, тебе нужно:

<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.7.1/katex.min.css" integrity="sha384-wITovz90syo1dJWVh32uuETPVEtGigN07tkttEqPv+uR2SE/mbQcG7ATL28aI9H0" crossorigin="anonymous">
<script src="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.7.1/katex.min.js" integrity="sha384-/y1Nn9+QQAipbNQWU65krzJralCnuOasHncUFXGkdwntGeSvQicrYkiUBwsgUqc1" crossorigin="anonymous"></script>

<script src="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.7.1/contrib/auto-render.min.js" integrity="sha384-dq1/gEHSxPZQ7DdrM82ID4YVol9BYyU7GbWlIwnwyPzotpoc57wDw/guX8EaYGPx" crossorigin="anonymous"></script>
<script>
  document.addEventListener("DOMContentLoaded", function() {
    renderMathInElement(document.body);
  });
</script>

Чтобы отключить MathJax в выводе gitbook bookdown, вам нужно установить math: false в YAML, например

---
site: bookdown::bookdown_site
output:
  bookdown::gitbook:
    pandoc_args: [--katex]
    mathjax: NULL
    includes:
      in_header: katex.html
documentclass: book
math: false
---

Мне не удалось заставить предложение Yihui работать, но проверяю связанный README от KaTeX репо я использовал следующее в katex.html

<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.11.1/dist/katex.min.css" integrity="sha384-zB1R0rpPzHqg7Kpt0Aljp8JPLqbXI3bhnPWROx27a9N0Ll6ZP/+DiW/UqRcLbRjq" crossorigin="anonymous">

<!-- The loading of KaTeX is deferred to speed up page rendering -->
<script defer src="https://cdn.jsdelivr.net/npm/katex@0.11.1/dist/katex.min.js" integrity="sha384-y23I5Q6l+B6vatafAwxRu/0oK/79VlbSz7Q9aiSZUvyWYIYsd+qj+o24G5ZU2zJz" crossorigin="anonymous"></script>

<!-- To automatically render math in text elements, include the auto-render extension: -->
<script defer src="https://cdn.jsdelivr.net/npm/katex@0.11.1/dist/contrib/auto-render.min.js" integrity="sha384-kWPLUVMOks5AQFrykwIup5lo0m3iMkkHrD0uJ4H5cjeGihAutqP0yW0J6dpFiVkI" crossorigin="anonymous" onload="renderMathInElement(document.body);"></script>

Затем в YAML я использовал:

---
site: bookdown::bookdown_site
output:
  bookdown::gitbook:
    pandoc_args: [--katex]
    mathjax: NULL
    includes:
      in_header: katex.html
documentclass: book
math: true
---

В частности, я счел необходимым использовать math: true не math: false.

Другие вопросы по тегам