一些弯路

上一篇文章刚发布的时候,本博客之前配置的 MathJax 似乎无法正常显示方程组的大括号和行列式,于是开始了一番折腾……

最先我配置的是 CDN,我怀疑是 CDN 不稳定而且渲染不全面,所以打算在服务器部署 MathJax,于是我按照下面的方法,在服务器成功部署。

  1. 在 MathJax 的官方 Github 下载 .zip 文件;
  2. 上传到 plugins 文件夹并解压;
  3. 然后在 header.php 文件的 </head> 前面加入下面的代码1
<script>
MathJax = {
  tex: {
      inlineMath: [['[latex]', '[/latex]'], ['\\(', '\\)']],
      inlineMath: [['$', '$'], ['\\(', '\\)']],
      displayMath: [['[Latex]', '[/Latex]'], ['$$', '$$'], ['\\[', '\\]']]
  }
};
</script>
<script src="https://xxx.com/usr/plugins/mathjax/tex-chtml.js" id="MathJax-script" async></script>

嗯~成功是成功了,但是,这渲染的公式也太丑了吧……(或许我该试试看能不能调整字体?)
所以只好又换回了 CDN 渲染。

现状

我现在使用的插件是 glerium/TypechoMathJax: 一款用于Typecho的MathJax插件

使用方法

  1. 在 Github 下载 .zip 文件;
  2. 上传到 plugins 文件夹并解压;
  3. 把解压后的文件重命名为 “TypechoMathJax”,这点很重要
  4. 在 Typecho后台启用 TypechoMathJax 插件;
  5. 你可以选择调整数学公式的字体大小。

他虽说宣称自己是一款插件,但本质还是链接了 CDN 地址。
所以,目前除了心里不太踏实,其实也没有什么大问题。推荐需要 MathJax 渲染又不想太折腾的小伙伴尝试。

LaTeX、KaTeX、MathJax的联系与区别

  • MathJax 与 KaTeX 是用于网页渲染数学公式的引擎,支持 LaTeX 语法的一部分。而 LaTeX 是完整的排版系统,用于创建文档。

LaTeX 与 MathJax 的具体区别:

  1. 应用场景和功能范围不同。LaTeX 是完整的排版系统,处理文档整体;MathJax 专注网页数学公式渲染,只处理数学部分,文本用 HTML。
  2. 语法支持子集,MathJax 只实现 LaTeX 数学模式宏,像数组环境只支持部分预定义字符。
  3. 特定命令支持差异,比如 \mathbld 在 MathJax 不支持,还有 eqnarray 使用有区别。
  4. 错误处理,MathJax 更容忍语法错误。
  5. 文本模式处理,LaTeX 有丰富文本命令,MathJax 几乎不处理,除了少数如 \ref 和 \text {} 里的部分扩展。

KaTeX 与 MathJax 的具体区别:

  1. 体量与功能:KaTeX 轻,专注数学渲染;MathJax 综合,支持多种输入输出。
  2. 渲染速度:KaTeX 快,MathJax3.0 提升但仍可能慢。
  3. 语法支持:MathJax 支持更多 LaTeX 语法。
  4. 输出格式:MathJax 支持更多如 SVG。
  5. 扩展与辅助:MathJax 有扩展包和辅助技术。
  6. 浏览器兼容:MathJax 支持旧版,KaTeX 对旧版差但性能一致。
  7. 社区成熟度:MathJax 社区更成熟。

常用 LaTeX 资源

一些奇葩的兼容问题(在这里手动备忘)

  1. 方程组的大括号

情形 1

$$\begin{cases}
x=x(t)\\\
y=y(t)\\\
z=z(t)
\end{cases}$$

$$\begin{cases}
x=x(t)\\
y=y(t)\\
z=z(t)
\end{cases}$$

情形 2

$$\begin{cases}
x=x(t)\\
y=y(t)\\
z=z(t)
\end{cases}$$

$$\begin{cases}
x=x(t)\
y=y(t)\
z=z(t)
\end{cases}$$

情形 3

$$\left\{\begin{matrix}
x=x(t)\\
y=y(t)\\
z=z(t)
\end{matrix}\right.$$

$$\left{\begin{matrix}
x=x(t)\
y=y(t)\
z=z(t)
\end{matrix}\right.$$

情形 1 在 Obsidian 和 TypechoMathJax 插件中都可以正常渲染;
情形 2 在 Obsidian 和 TypechoMathJax 插件中都可以渲染,但是 TypechoMathJax 无法正确分行;
情形 3 在 Obsidian 中可正常以渲染,但是 TypechoMathJax 根本无法渲染;
难道是因为 Obsidian 的引擎有更广的适配和更大的容错率?我还没搞明白。

  1. 行列式

    $$\begin{vmatrix}
    \vec{i}&\vec{j}&\vec{k} \\\
    F_{x}&F_{y}&F_{z} \\\
    G_{x}&G_{y}&G_{z} 
    \end{vmatrix}$$

$$\begin{vmatrix}
\vec{i}&\vec{j}&\vec{k} \\
F_{x}&F_{y}&F_{z} \\
G_{x}&G_{y}&G_{z}
\end{vmatrix}$$

行列式在 TypechoMathJax 中同样需要连续键入三个“\”才可以正常分行。

脑袋爆炸!总结:

  1. 以后方程组的大括号用cases;
  2. 以后换行用三个"捺斜杠";
  3. 以后对 MathJax 代码有疑问就多看看“专业“教程。

写在最后

希望这篇文章能给你带来一点点帮助,同时如果你对于文中提到的一些问题有更好的解决方法,欢迎留言交流,笔者将不胜感激~