ahonn/hexo-theme-even

好像不支持latex数学公式?

Opened this issue · 7 comments

好像不能写公式,可否添加下支持,谢谢。

onns commented

好像不能写公式,可否添加下支持,谢谢。

首先通过npm安装hexo-math, 不知道为什么要连续执行两次才能执行成功.

npm install hexo-math --save
npm install hexo-math --save

修改网站根目录的�_config.yml, 添加如下内容:

math:
  engine: 'mathjax' # or 'katex'
  mathjax:
    src: "//cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"
    config:
      # MathJax config

用法在: hexo-math
推荐使用{% math %}...{% endmath %}这样的写法.

还是不能正确的渲染$...$行内公式和$$...$$块级公式。
我已经尝试了很多渲染器了,包括 marked、marked-it、marked-it-plus、kramed。
然后配合插件 hexo-math、mark-it-katex。

都不能正确渲染。
现在真的很头疼,官方这边有什么想法和建议么 @ahonn

onns commented

还是不能正确的渲染$...$行内公式和$$...$$块级公式。
我已经尝试了很多渲染器了,包括 marked、marked-it、marked-it-plus、kramed。
然后配合插件 hexo-math、mark-it-katex。

都不能正确渲染。
现在真的很头疼,官方这边有什么想法和建议么 @ahonn

看这个效果…

你应该是在 katex 引擎下使用 {% math %}...{% endmath %} rawblock 标签吧。

这样的问题在于,katex 引擎好多 LaTeX 的语法不认识比如 \latex,而且块级公式不能放到引用块里面:

> this is a block quotation
> {% math %}
> x+y=z
> {%endmath%}

{% math %}...{% endmath %} 之间的两个 > 都会被识别成公式的一部分。

而且另一方面,使用 {% math %}...{% endmath %} 标签对含有大量公式的文章是非常痛苦的,也不方便其他支持 Multi-Markdown 的软件读取。

onns commented

我的渲染引擎还是hexo-renderer-marked
主要是在渲染的时候这个引擎会和$$...$$产生冲突,才要替换成{% math %}...{% endmath %}
最后不支持的话就是latex渲染引擎的问题了,我用的是mathjax,暂时够用。
你可以再写一个插件在渲染整个页面前将$$...$$替换为{% math %}...{% endmath %}这种解决方案(个人理解)。
其实我也是折腾了半天时间才达到的这种效果,\latex我去mathjax的官网上也试了下好像不行,期待你的更新。

那到底该怎么办

hexo-mathhexo-renderer-mathjax 我都试过了,最后还是选择手动修改 layout/_partial/head.swig,往里面加上了 MathJax Docs 提供的即插即用式的 Snippet。(MathJax 在文档的这里列出了可以使用的CDN)

  • hexo-math 要安装两次才能用,而且 $...$ 这种 inline math 没法渲染。全都改成 \\(...\\) 太费事了(懒。

  • hexo-rendered-mathjax 是作为 hexo 的 plugin 形式存在的,如果要使用它必须得把

    plugins:
      - hexo-rendered-mathjax

    放到 _config.yml 里,但是对于 hexo@3,如果 _config.yml 里存在 plugins 字段,那么一切都变了:

    • cli 命令 hexo server 将消失,除非你安装 npm package hexo-server 并把 - hexo-server 追加到 _config.yml 里的 plugins 字段下;
    • cli 命令 hexo generate 将不再生成 index.htmlarchive/*:title/*(我配置的文章地址规则是:title)、tags/*,除非你把你的 package.json 中所有以 hexo- 开头的依赖项都重新 npm install 一遍并加入到 _config.yml 里的 plugins 字段下。
    • 总之一切都变了

    好不容易装好了,结果它还是不能渲染 inline math

所以我只好自己动手直接引入 MathJax 的 JS Library 了

目前在使用中遇到的不可避免的问题:

  • DOMContentLoaded 之后才会开始依次转换 LaTeX 到 svg,导致整个渲染过程是肉眼可见的。
  • 如果在 _config.yml 开启了 pjax(默认开启,see PR #201 ),那么换页的时候不会触发 DOMContentLoaded 事件。导致按照 MathJax 官方写法无法渲染换页后新出现的 math code。MutationObserver 也不行,非常诡异。目前发现的唯一可行的 workaround 是 setInterval 里调用 MathJax.Hub.Queue(["Typeset", MathJax.Hub, document.getElementById("main")])

EDIT: see PR #236@kchen0x 支持 $\LaTeX$