BookStack配置渲染Latex公式

前言

BookStack作为一个非常好用的可自托管的用于文档以及Wiki储存的软件,常常被用于管理与储存大量文献。但是,默认情况下,他在显示文本内容的时候,不会渲染文本中的Latex公式(如图1)。这篇文章会介绍一种无需修改BookStack源码即可给他增加Latex公式渲染功能的方法。

Bookstack默认情况下未渲染Latex公式的界面
图1 Bookstack默认情况下未渲染Latex公式的界面

实现思路

Bookstack提供了自定义HTML头部内容的功能,利用这个功能能够添加自定义的HTML代码到实例的每一个页面之中,我们可以在这里添加自定义的Js脚本,从而手动给BookStack添加Latex渲染功能。

操作步骤

首先使用管理员账号登录BookStack,点击右上角的设置,再点击个性化,出来的界面如下图2

BookStack打开个性化设置界面图
图2 BookStack打开个性化设置界面图

打开后划,将界面滑动到最底下,可以看到自定义HTML头部内容的板块,就是图3中红圈圈出的部分。

BookStack 自定义HTML头部内容设置界面
图3 BookStack 自定义HTML头部内容设置界面

在下面添加下面的脚本,保存设置,刷新即可。

备注:下面的脚本调用了储存于我服务器的Katex.js,Katex.js相比其他的渲染方案有速度快稳定的优势,但是请不要大规模的调用储存在我服务器的这个js(仅能用于个人的小规模使用),如果有需求,您可以将其替换为jsdeliver提供的Katax.js。

<link rel="stylesheet" href="https://static.q2019.com/vendor/katex/katex.min.css">
<script defer src="https://static.q2019.com/vendor/katex/katex.min.js"></script>
<script defer src="https://static.q2019.com/vendor/katex/contrib/auto-render.min.js"></script>
<script>
  document.addEventListener("DOMContentLoaded", function() {
    if (window.renderMathInElement) {
      renderMathInElement(document.body, {
        delimiters: [
          { left: "$$",  right: "$$",  display: true  },
          { left: "$",   right: "$",   display: false },
          { left: "\\[", right: "\\]", display: true  },
          { left: "\\(", right: "\\)", display: false }
        ],
        throwOnError: false,
        // 可选:避免渲染代码块里的文本
        ignoredTags: ["script","noscript","style","textarea","pre","code"]
      });
    }
  });
</script>

保存之后,刷新有Latex公式的界面,可以看到Latex会被正确渲染了,如图4所示

 配置脚本后,BookStack正确渲染Latex的界面
图4 配置脚本后,BookStack正确渲染Latex的界面

常见问题

问题1:为什么实时编辑时候公式不会渲染?

答:BookStack在编辑的时候(无论使用的是所见即所得编辑器还是Markdown编辑器)是不会加载我们刚刚添加的Latex渲染逻辑,所以公式不会被渲染。

问题2:为什么有些情况下公式不会被正确渲染?

答:刚刚的我们加的渲染逻辑仅仅只能对类似$E = mc^2$这个样子的行内公式,或者像$$f(x) = 3x^3 - 4x^2 + 3x + 4 $$ 这个样子的两个 $$ 标识都在一行的行间Latex公式有效。因为BookStack对于多行的文本,会自动拆成多段,导致我们刚刚设计的脚本无法正确的对Latex公式进行渲染。而对于类似[\f(x) = 9x^2-8x+3\] 的公式,无论是否多行,由于BookStack的编辑器会对 “\”这个字符进行转义,导致无法正确渲染。个人推荐在BookStack中使用$E = mc^2$ 这样的方式进行公式的撰写。

脚注

https://www.bookstackapp.com/hacks/mathjax-tex,这是BookStack官方关于渲染公式的一个小方案,但是使用的是MathJax方案,本文使用的是Katex方案。

--------------

本文标题为:

BookStack配置渲染Latex公式

本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,记得载明出处。
内容有问题?想与我交流下?点此哦,欢迎前来交流~
上一篇