Hexo NexT -- 数学公式
摘要
-
Hexo是基于markdown的,所以可以使用LaTex语法来编写数学公式,只不过需要安装相应的公式渲染插件来实现。
-
Next主题 支持的公式插件为
MathJax
和KaTeX
,它们都支持LaTex语法,参考: https://theme-next.js.org/docs/third-party-services/math-equations -
本文使用的是Katex,原因是我已经使用了hexo-renderer-markdown-it渲染器,其与 mathjax 的 hexo-renderer-pandoc渲染器不能并存,所以只能选
Katex
了。
安装
-
详细的安装方法请参考:Math Equations
-
因为已经使用了hexo-renderer-markdown-it渲染器,所以这里就没有使用hexo-renderer-markdown-it-plus渲染器,其实两者也没有太大的区别,只不过后者默认就加载了一些插件,而前者需要自己安装插件并配置才可以使用。
-
但是测试时发现,按照官网的配置
hexo-renderer-markdown-it
+markdown-it-katex
的方式并不能很好的进行公式的渲染,所以这里参考了hexo-renderer-markdown-it-plus
渲染器,将其更换为@iktakahiro/markdown-it-katex。
1 | npm install @iktakahiro/markdown-it-katex --save |
在_config.yml
配置上该插件
1 | # config of hexo-renderer-markdown-it |
安装后遇到的问题
1.安装后发现通过hexo编译时会报类似如下警告
1 | LaTeX-incompatible input and strict mode is set to 'warn': Unicode text character "即" used in math mode [unicodeTextInMathMode] |
-
原因是
@iktakahiro/markdown-it-katex
插件默认开启的是严格模式,不能在$$...$$
或$...$
中包含中文,虽然我设置的是math -- every_page: false
,但其在编译阶段依旧会检查所有的页面,不过报这个警告并不会有什么影响,所以可以忽略。 -
如果不希望看到这个警告,可以为
@iktakahiro/markdown-it-katex
添加模式的控制行为
1 | # config of hexo-renderer-markdown-it |
不支持Katex
的Auto-render Extension
-
通过查看
Katex
官网可以知道,开启Auto-render Extension后,Katex
可以渲染更多的公式语法,但要注意这并不是LaTex
的标准语法 -
但是
@iktakahiro/markdown-it-katex
中并没有相应的配置,为了解决这个问题,简单的方法就是将所需要的资源添加到页面中,比如我在source\_data\post-body-start.njk
中添加了如下内容
1 | {%- if page.mathjax %} |
小贴士
可以通过next模板的_config.yml
中的custom_file_path
配置项来自定义渲染页面的某个部分,这样对应的每个页面都会加上该模板内容
1 | custom_file_path: |
-
使用
hexo-renderer-markdown-it-plus
渲染器时,如果修改了页面的内容,此时刷新页面,会发现页面中的公式不能被渲染了,只能重新启动hexo服务。 -
但是使用
hexo-renderer-markdown-it
渲染器时,刷新页面后公式就可以被渲染了。
使用
-
每个页面的
front-matter
中要添加mathjax: true
,这样在页面中就可以使用公式了。 -
Katex
公式的渲染方式支持$...$
和$$...$$
两种方式$...$
为行级公式且居左展示
1
$sin(\omega t)=\frac{1}{2j}(e^{j\omega t}-e^{-j\omega t})$
$$...$$
为块级公式且居中展示
1
2
3$$
sin(\omega t)=\frac{1}{2j}(e^{j\omega t}-e^{-j\omega t})
$$ -
$$...$$
和$...$
中不能出现Unicode字符,否则会报错,即不支持中文,如果需要显示中文,则需要使用\text{中文}
-
块级公式,在开头的
$$
之前和结尾的$$
之后,不得有任何字符(空格除外) -
行级公式,在开头的
$
之后和结尾的$
之前,不得有空格
示例
-
使用方式可以参考 KaTeX公式符号 以及 维基百科:LaTeX公式手册
-
不过记住这些公式符号还是比较困难的,这里推荐两个工具
- MyScript: 手写转LaTeX公式,直接将你需要的数学公式画出来,它会自动将其转换为LaTeX公式,然后复制即可
- LaTeX公式编辑器: 提供公式模板、图片识别(有次数限制)等功能,并且支持输出各种格式。
- Simpletex: 支持LaTex公式图片识别和手写转公式,且无次数限制,但是需要注册账号。同时也提供了客户端版本。
-
这里随便给几个示例,以下是
LaTeX
的标准语法
1 | $$ |
1 | Aha! $E = mc^{2}$. |
Aha! .
1 | $$ |
1 | $$ |
1 | $$ |
1 | $\tilde{a}$ $\underrightarrow{AB}$ |
1 | $$ |
-
以下为开启
Auto-render Extension
后支持的公式语法,并不是LaTex
的标准语法
1 | $$ |
\begin{equation} \begin{split} a &=b+c\\ &=e+f \end{split} \end{equation}
1 | $$ |
\begin{align} a&=b+c \\ d+e&=f \end{align}
1 | $$ |
\begin{CD} A @>a>> B \\ @VbVV @AAcA \\ C @= D \end{CD}