好像不支持latex数学公式?
Opened this issue · 7 comments
好像不能写公式,可否添加下支持,谢谢。
好像不能写公式,可否添加下支持,谢谢。
首先通过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 ?
你应该是在 katex
引擎下使用 {% math %}...{% endmath %}
rawblock 标签吧。
这样的问题在于,katex
引擎好多 LaTeX 的语法不认识比如 \latex
,而且块级公式不能放到引用块里面:
> this is a block quotation
> {% math %}
> x+y=z
> {%endmath%}
{% math %}...{% endmath %}
之间的两个 >
都会被识别成公式的一部分。
而且另一方面,使用 {% math %}...{% endmath %}
标签对含有大量公式的文章是非常痛苦的,也不方便其他支持 Multi-Markdown 的软件读取。
我的渲染引擎还是hexo-renderer-marked
。
主要是在渲染的时候这个引擎会和$$...$$
产生冲突,才要替换成{% math %}...{% endmath %}
。
最后不支持的话就是latex渲染引擎的问题了,我用的是mathjax
,暂时够用。
你可以再写一个插件在渲染整个页面前将$$...$$
替换为{% math %}...{% endmath %}
这种解决方案(个人理解)。
其实我也是折腾了半天时间才达到的这种效果,\latex
我去mathjax
的官网上也试了下好像不行,期待你的更新。
那到底该怎么办
hexo-math
和 hexo-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 packagehexo-server
并把- hexo-server
追加到_config.yml
里的plugins
字段下; - cli 命令
hexo generate
将不再生成index.html
、archive/*
、:title/*
(我配置的文章地址规则是:title
)、tags/*
,除非你把你的package.json
中所有以hexo-
开头的依赖项都重新npm install
一遍并加入到_config.yml
里的plugins
字段下。 - 总之一切都变了
好不容易装好了,结果它还是不能渲染 inline math
- cli 命令
所以我只好自己动手直接引入 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")])