本文所提到的重新生成hugo方法已失效,待重新更新……
LaTeX存在的问题
在Markdown博客中,对于LaTeX的渲染可能会存在一个通病:
Markdown中的转义字符会对LaTeX的渲染产生干扰……
比如LaTeX的换行符\\
、左大括号\{
等……
会被Markdown给转义……
因为Hugo是先渲染的网页,此时LaTeX还未被渲染……
所以会因为转义,把本来该在LaTeX中代表换行的\\
渲染成\
……
造成LaTeX在后面的渲染中出错……
比如下面这段LaTeX:
x = \left\{ \begin{array}{l} 1 \\ 2 \end{array} \right.
应该被LaTeX渲染成:
实际上经过Markdown渲染后,那段markdown会变成:
源码
$$ x = \left\{ \begin{array}{l} 1 \\ 2 \end{array} \right. $$
渲染后的代码
$$ x = \left{ \begin{array}{l} 1 \ 2 \end{array} \right. $$
因此这之后LaTeX就会渲染出错,然后不渲染,网页中变成:
解决方法
这个问题也有很多人发现并提出……
解决方法可以查看这位在「Hexo下mathjax的转义问题」列出的4条……
由于个人的需求是:直接将在课堂上用VSCode写好的笔记贴到博客上……
尤其是文章篇幅过长内容过多时,不想一个个修改LaTeX格式,直接贴好就能用……
因此想从LaTeX渲染器入手修正……
JimmyCai在本主题中的Markdown渲染器采用的是"goldmark",数学渲染采用的是"KaTeX"……
个人搜索后发现,有一个叫“goldmark-mathjax”的插件很适合个人需求……
但Hugo中的goldmark并没有使用这个插件……
所以需要先更换LaTeX渲染为"MathJax";
然后再重新生成支持"goldmark-mathjax"的hugo……
1. 更换为"MathJax"
修改math.html
文件即可……
最好是自己创建一个math.html
覆盖,而不是直接修改主题里的math.html
……
打开位置:layouts\partials\article\components
,然后创建math.html
……
里面输入这些东西:
<script type="text/javascript" async
src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML">
MathJax.Hub.Config({
tex2jax: {
inlineMath: [['$', '$'], ['\\(', '\\)']], //这里可以修改行内公式支持的符号,比如这里就是$ $和\( \)【注意这里输入\时会被转义……
displayMath: [['$$', '$$'], ['\\[', '\\]']], //这里可以修改行间公式支持的符号,这里就是$$ $$\[ \]……
processEscapes: true,
processEnvironments: true,
skipTags: ['code', 'script', 'noscript', 'style', 'textarea', 'pre'], //这里多了个'code',原因见下……
TeX: {
equationNumbers: { autoNumber: "AMS" },
extensions: ["AMSmath.js", "AMSsymbols.js"]
}
}
});
</script>
skipTags中多个code的原因
好像这个插件也采用了上述解决方法中的“保护代码块”方法……
也就是对于<code>
标签内的东西,也会被MathJax渲染……
但我们并不需要这种方法,所以将这个标签给跳过……
教程和代码参考自:「MathJax Support」 —— Hugo中文文档,代码有改动……
2. 重新生成hugo
可以查看"hugo-theme-even"中的「Issues#233 - Mathjax公式显示错误」中“Luoyayu"的回答,按照他的步骤进行即可……
自己先新建个文件夹,在cmd里进入该文件夹后按顺序输入1~7条指令……
需要电脑安装git
和go
……
生成完成后,可以在该文件夹中的GoBuilds
子文件夹中,找到名为hugo
的文件……
添加.exe
后缀后,将其替换原来的hugo程序。
如果是用"scoop"安装的,hugo会安装在你的用户文件夹中,有个名叫scoop
的子文件夹,
里面就能找到hugo.exe
。
像这样替换好后,用hugo server
查看一下。
Markdown中内容
$$
x =
\left\{
\begin{array}{l}
1 \\
2
\end{array}
\right.
$$
效果
$$ x = \left{ \begin{array}{l} 1 \ 2 \end{array} \right. $$
直接放LaTeX了,发现是正常的,问题暂时解决……
还有点点小问题
之所以说是暂时解决,是因为在行间模式的时候会有点问题……
不知道是不是我自己输入习惯的问题orzzz……
1. 行间模式必须单独成行
我用行间模式的时候,一般都会直接跟$$ $$
放在一行里,比如$$ a=1, b=2 $$
……
这个在VSCode预览的时候也是正常的,所以就一直这么用了……
但如果用这个方法,这样输入的话就会出现很严重的问题:
Markdown中内容
效果
也就是说,行间模式必须要将$$
单独写成一行:
正确的写法
$$
x =
\left\{
\begin{array}{l}
1 \\
2
\end{array}
\right.
$$
或者:
$$
x = \left\{ \begin{array}{l} 1 \\ 2 \end{array} \right.
$$
错误的写法
$$x = \left\{ \begin{array}{l} 1 \\ 2 \end{array} \right.$$
2. 多个行间模式之间必须隔开
跟上个类似,在用多个行间模式的时候,中间必须空一行:
正确的方式
$$
Latex_1...
$$
\$\$
Latex_2...
\$\$
错误的方式
$$
Latex_1...
$$
$$
Latex_2...
$$
以上两个问题暂时不知道是什么成因……
但因为这个确实是目前能找到的最好的解决方法,所以【ry……
然后慢慢改下自己记笔记时用$$ $$
的习惯吧_(:з」∠)_……
3. 引用块中用行间模式会有问题
在引用(<blockquote>
)中如果用了行间模式,会将其后一行又变为引用……
比如这样:
可以看到“其中……”这句话被标记为了引用块……
应该是"goldmark-mathjax"插件的问题……
这篇文章写完后才发现……
有点不舒适,但也不是什么大问题【……
还是先准备考试,后面有时间再提个issue吧’_>’……