TLDR: 需要在 RSS 里剥离掉 KaTeX 生成的非 MathML 的部分。
这个问题还是在 Folo 里面提出的,当然最终的结果是 WONTFIX, 所以就还得自己想办法。其实这个问题不止 Folo 有,任何 RSS 阅读器都有,这主要是因为 KaTeX 在网页端可以借助自己的 CSS 把不需要的部分隐藏起来,但是 RSS 阅读器并不会加载这些 CSS, 所以就会出现一个公式渲染三遍的问题。
仔细观察,会发现这三遍公式分别是 TeX 原文、MathML 渲染和 HTML 渲染。MathML 目前在各个主流浏览器上都已经有了足够的支持,所以按道理是不太需要保留 TeX 原文的。
直觉上,KaTeX 保留 TeX 原文是为了照顾屏幕阅读器,毕竟并不是所有的屏幕阅读器都对 MathML 有很好的支持。只能说我们对于可访问性的追求还是……不太够。
没办法,为了 RSS 中能正常渲染数学公式,就只能选择舍去除了 MathML 以外的内容了。具体而言:
import * as cheerio from 'cheerio'
eleventyConfig.addFilter('fixmath', function (x) {
const $ = cheerio.load(x)
// 去掉原始 TeX 公式
$('span.math').each((i, el) => {
$(el).text('')
})
// 去掉 HTML 渲染形式
$('[aria-hidden="true"]').remove()
return $.html()
})
然后把 RSS 的内容过一遍 fixmath 就可以了。
正在加载评论……