分享+探讨:网页(博客/笔记)的 LaTeX 支持现状

mathjax 不够用吗,支持完整 latex 是有什么场景吗

看主题里文章的话能知道理由是不能跑 TikZ。

当然首先要知道 TikZ 这个东西只有在输出 PDF 的时候才能用,因为本质是通过输出 PDF 的基础指令实现的画图。

我也很少直接用 TikZ,作图首选是 TeX 作者 DEK 用的 MetaPost。

用 MetaPost 画的数织问题答案

用 SVG 做公式如果內嵌的话 HTML 体积会增大太多,影响加载,另外 host 的话不方便网站结构变化,我不太喜欢这种方案。当然我也有用到 TeX 生成的 SVG 的时候,比如用 MusiXTeX 制作的五线谱 Common Lisp and Music Composition

1 个赞

能用到 LaTeX 宏包或自定义命令的场景还是很多的。Tikz 是其一。关于自定义命令我举个例子,有个符号是 d 加上一横,这个符号找不到合适的命令,只能自己定义。注:此符号的含义是“变分”,有点类似于偏微分但并不一样。

你应该是对的,因为我刚才找到一个 tex2svg 的项目,它支持 Tikz,而其中一个依赖就是 pdf2svg。

不过原来还有 dvisvgm 不能直接处理的 LaTeX 吗,我才知道。

我倒是没想过这个问题。之后如果我真的去自研这种方案,会尝试缓解(比如降低 svg 精度,或者仅在无法使用 mathjax/katex 时才转为 svg)。

顺便再请问,这种方案能处理 d 加一横这种自定义命令吗?

DVI 原生的画图能力只能画黑色长方形(比如直线),和排列黑色的字体图形。超过这个范围的画图能力都是额外实现的扩展。

你贴的回答下面有这个符号的 Unicode 字符

对于除了约定俗成符号以外,更通用的组合字符,我不推荐这种做法,因为如果字体换了的话这个横可能就不会交叉了

1 个赞

你说得对,所以我在用 LaTeX 时都会特别设置字体。换字体的时候不会只换字体,而是换一整套配置,包括 dbar 这种定义。

不知道题主有没有考虑过 Sphinx? 它在导出数学公式的时候也使用了 Emacs 的 AUCTeX, 对数学公式有完整的支持. (Math support for HTML outputs in Sphinx — Sphinx documentation)

1 个赞

简单看了一眼,它似乎就是我原文中在找的那个方案。如果是的话就太好了。

非常感谢。 有空我会详细了解一下。

1 个赞

其实我一直希望的一个效果就是, mathjax 支持的 latex 表达式都是相对简单的,复杂的比如用到 algorithm2e 的就放在 #+begin_src latex 当中,导出到 hugo 的时候,这类复杂的转为图片,以上简单的继续用 mathjax 来渲染。

不清楚 ox-hugo 是怎么实现的,但这是 ox-html 的默认行为(需要对 ob-latex 做一点设置)

我搞不定这个,选择了 #+OPTIONS: tex:dvisvgm 方式,org-latex-preview 在 org 中是正常的,导出到 svg 后,css 中的 vertical-align 应该还要 -1em 才能在网页上对齐,请问这个需要怎么修改啊。

你是用什么导出的呢?我用 ox-html 导出是没有 inline css 的。

另外用 #+OPTIONS: tex:dvisvgm 是把所有的 LaTeX 代码块导出成图片。你的需求不是 latex babel 里的才导出为图片吗?

是我使用的主题定义了 img 标签的 margin,麻烦您花费时间帮我找问题了。

我的需求确实是只有 latex babel 中导出为图片,但是我这里到了 pdf 就会报错,不会生成 svg。(退而求其次才使用了 #+OPTIONS: tex:dvisvgm 方法的)

虽然但是, dvisvgm能从dvi, xdv, pdf中生成svg.

虽然但是,PDF 和 PS 支持靠的是额外装 Ghostscript 和 MuTool,TeXlive 标准安装没有这两个。

我发现 GitHub - SaswatPadhi/pseudocode.js: Beautiful pseudocode for the Web 这个项目可以处理 algorithm 相关的包的渲染,这样就可以全覆盖了。

1 个赞

这个包的范围其实有限(尝试下来

根据本贴后续的部分讨论,以及我新增的使用经验,我抽空把文章更新了一下。

经过实际使用,目前我认为 ox-hugo 是符合我的需求的。

谢谢推荐。我去了解了 Sphinx,发现自己更偏好 Org-mdoe 和 Hugo。 不过我还是把它作为一个可能选择更新到文章里了。

2 个赞

刚才站点部署出了一点问题,已经解决,文章已经更新。

我使用下来,最好的方案是直接将 LaTeX 编译为 PDF,然后使用 PDF.js 在网页展示 PDF.

这个“文章”的链接有问题,打不开。