CHENXCHEN / hexo-renderer-markdown-it-plus

Markdown-it is a markdown parser, done right. A faster and CommonMark compliant alternative for Hexo.
https://chchc.me/hexo-article/2017/07/27/hexo-renderer-markdown-it-plus-plugin-demo/
MIT License
120 stars 22 forks source link

错误的公式渲染 #9

Closed lxdlam closed 6 years ago

lxdlam commented 6 years ago

如下的一个公式: $\forall p<q,p\ne q\land x=p\cdot q$ 在parse阶段,<会被parse成一个HTML Token然后parse报错:

Error: Parse Error: <q,p\ne q\land x=p\cdot q

手动转义也没用。

CHENXCHEN commented 6 years ago

我在本地测试渲染没有遇到这个问题。。 公式渲染如下: image

lxdlam commented 6 years ago

似乎是markdown-it-katex插件本身的问题,有一些LaTeX token在parse的时候不识别,然后插件会直接保留原文,然后导致下一步parse的时候<被错误当成了token。

CHENXCHEN commented 6 years ago

能否提供一个 demo 项目演示这个错误? 我在本地测试没有遇到这种情况。

lxdlam commented 6 years ago

尝试如下的文本:

也就是说,$\forall p<q, x=p\cdot q\implies 2\le q\le\sqrt{x}<q\le x$是一定满足的

这里面的\implies是原插件不支持的KaTeX Token,所以这一组公式不会被转换,原插件会自动去除两端的$然后原格式保留,之后就会有p<q这里面<的冲突。

CHENXCHEN commented 6 years ago

的确出现了这个问题。。我猜测可能有两种情况: 一是markdown-it-katex引用的katex版本过低出现的问题; 二是hexo的渲染顺序,在渲染markdown之前就被其他插件处理,然后报错直接跳出,比如我使用的html-minifier插件。。 渲染如下: image

lxdlam commented 6 years ago

我手动使用0.7.1的KaTeX库进行渲染,的确是版本过低不支持\implies等一系列Token的问题。

那么hexo-html-minifier实际上应该是没问题的,只是老老实实做了它该做的工作而已。

CHENXCHEN commented 6 years ago

你可以使用这个插件 iktakahiro/markdown-it-katex 参考#10 并引入新版katex.min.css即可

CHENXCHEN commented 6 years ago

我在 v1.0.3 版本 替换了默认的 markdown-it-katex 插件,在 v1.0.3 版本只需要引入 katex.min.css 即可