个人理解这事比较复杂…
以知乎为例, 目前我看到的当前版本的专栏文章里的一个典型数学公式是这样子的:
<span class="ztext-math" data-eeimg="1" data-tex="\cos^2\alpha+\sin^2\alpha=1">
<span></span>
<span>
<span class="MathJax_Preview" style="color: inherit;"></span>
<span class="MathJax_SVG" id="MathJax-Element-2-Frame" ... data-mathml="<math> ...</math>" role="presentation">
<svg ...>
一堆标签
</svg>
<span class="MJX_Assistive_MathML" role="presentation">
<math>
一堆标签
</math>
</span>
</span>
<script type="math/tex;mode=inline" id="MathJax-Element-2">\cos^2\alpha+\sin^2\alpha=1</script>
<span class="tex2jax_ignore math-holder">\cos^2\alpha+\sin^2\alpha=1</span>
</span>
</span>
可看到, 就简单一个 \cos^2\alpha+\sin^2\alpha=1
, 它会以不同形式给表达六七次
那么 Ob 官方 Clipper 抄出来的是哪俩代码?
实测, 如果 Clipper 转换出 $AAAAA$BBBBB
这个形式,
那么 AAAAA 来自 <span class="MJX_Assistive_MathML" >...</span>
,
而 BBBBB 来自 <span class="tex2jax_ignore math-holder">...</span>
其余那些代码似乎是无关的
咋解决?
目前觉得, 在仍要使用 Clipper 的前提下, 最快速办法是剪藏前手动干掉 <span class="tex2jax_ignore math-holder">...</span>
这个元素, 如下:
// 比如在浏览器 console 执行这个
document.querySelectorAll(".tex2jax_ignore.math-holder").forEach(element => element.remove());
这样至少先做到, 剪藏到的乱糟糟的 $AAAAA$BBBBB
没有了, 全改成 $AAAAA$
的样子
至于更细节的问题:
KaTeX 公式咋办, 反复转义斜杠咋办, 行级块级公式认不准咋办, 维基那一堆 \displaystyle
咋办, … 这些可能得具体讨论了… 我目前觉得没有一个通用办法能搞定所有的网页里的公式