惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

F
Fortinet All Blogs
WordPress大学
WordPress大学
The Cloudflare Blog
云风的 BLOG
云风的 BLOG
博客园 - Franky
D
Docker
小众软件
小众软件
阮一峰的网络日志
阮一峰的网络日志
H
Hackread – Cybersecurity News, Data Breaches, AI and More
Engineering at Meta
Engineering at Meta
MongoDB | Blog
MongoDB | Blog
U
Unit 42
M
MIT News - Artificial intelligence
B
Blog
GbyAI
GbyAI
C
Check Point Blog
P
Proofpoint News Feed
博客园 - 司徒正美
Hugging Face - Blog
Hugging Face - Blog
雷峰网
雷峰网
IT之家
IT之家
Google DeepMind News
Google DeepMind News
V
V2EX
Stack Overflow Blog
Stack Overflow Blog

q2019的小站

宝塔面板安装使用Guacamole教程 银河麒麟系统下龙芯浏览器无法使用中文输入法的解决方案 修改Authentik推送邮件的内容与样式 关于存在于Wordpress 主题Argon中的越权修改漏洞 百度智能云服务器HAS组件卸载 JIEBA分词WASM版本编译全过程 UBUNTU使用国内腾讯镜像源安装GITLAB-CE 基于Qwen微调猫娘大模型 解决Argon主题出现Warning Undefined array key “HTTP_USER_AGENT” 报错 NinjaForms问题解决(出现混乱的页面、Recaptcha 地址替换、Pjax导致表单不显示) roboflow/sports库的安装配置与使用
BookStack配置渲染Latex公式
q2019 · 2025-11-09 · via q2019的小站

本文最后更新于 216 天前,其中的信息可能已经有所发展或是发生改变。

前言

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方案。