halo-sigs / plugin-katex

为默认编辑器和文章渲染提供 KaTeX 支持。
https://halo.run/store/apps/app-ISCsX
GNU General Public License v3.0
8 stars 5 forks source link

feat: KaTeX compatibility #6

Closed xinkeng0 closed 1 year ago

xinkeng0 commented 1 year ago

目前插件正常情况下可以工作,但是需要做一些兼容性方面的改进 。

KaTeX Auto-render Extension

目前公式渲染的方式为:

renderMathInElement(document.body, {
          // customised options
          // • auto-render specific keys, e.g.:
          delimiters: [
              {left: '$$', right: '$$', display: true},
              {left: '$', right: '$', display: false},
              {left: '\(', right: '\)', display: false},
              {left: '\[', right: '\]', display: true}
          ],
          // 鈥� rendering keys, e.g.:
          throwOnError : false
        });

可能的改进点:

  1. document.body 需要更换为特定的Dom标记,例如 <Math></Math> 必须修改此项,来最大限度解决错误处理等类似问题。
  2. 相应的更新richer-editor公式生成的Dom结构以支持改动。
xinkeng0 commented 1 year ago

需要考虑的一点是,其他编辑器是否可以达到生成指定的Dom标记。

ruibaby commented 1 year ago

我的建议:

  1. 约定一个 dom 节点。
  2. 支持在插件设置中设置 dom 节点。
xinkeng0 commented 1 year ago

我的建议:

  1. 约定一个 dom 节点。
  2. 支持在插件设置中设置 dom 节点。

这样如何? <span math-inline>, <div math-display> 之后这样去渲染:

const renderMath = (selector:string,displayMode: boolean)=>{
  const els = postBody.querySelectorAll<HTMLElement>(selector)
  els.forEach((el) => {
   katex.render(el.innerText, el, { displayMode })
  })
}
renderMath('[math-inline]', false)
renderMath('[math-display]', true)

需要在插件设置中支持2个选项

  1. inline css selector
  2. display css selector