如何使用markdown语法在Hugo中编写数学运算?

问题描述

我是Hugo或任何Web开发的新手。我想建立一个个人网站来分享我的数学笔记,这些笔记是用markdown编写的。确切地说,我使用模板hugo-book。但是我发现它不支持Markdown的数学模式,即如果我在$$之间编写方程式,它将不起作用。我确实找到了一些写数学方程的方法,例如,我可以使用{{< katex >}},但这并不方便每次更改降价笔记时使用。因此,有没有办法我可以使用$$在此模板中编写数学方程式?

谢谢!

解决方法

对于 Mathjax 3,请将其放在页面源代码中的某处。我把它放在 layouts/partials/head-additions.html 中,但也许这是特定于 ananke 主题的:

<script src="https://polyfill.io/v3/polyfill.min.js?features=es6"></script>
<script id="MathJax-script" async src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script>

现在你可以把它放在你的页面上并让它呈现:

Raw Mathjax block:
 

$$a_4 \ne b_4$$

如您所料。

请记住,根据 commonmark spec(Hugo 遵循的 因为它在内部使用 goldmark),你 需要在([等标点符号前加两个反斜杠。所以:

This shows as Mathjax \\(a \ne b\\),but this doesn't \(a \ne b\)

Likewise,this shows as Mathjax

\\[a \ne b\\]

but this doesn't:

\[a \ne b\]

当然,您可以通过使用 $$ TeX Source $$ 来避免这种情况。

你可以停在这里。

但我更进一步,因为我不喜欢 Mathjax 如何为您提供无样式内容 (FOUC) 的闪光,如 issue 131 中所述。我修改了该问题中建议的方法。将其放在页面源代码中,而不是上面两个简单的 <script> 标记:

{{- if or (.HasShortcode "mathjax/block") (.HasShortcode "mathjax/inline") -}}
<style>
.has-mathjax {
    visibility: hidden;
}
</style>

<script src="https://polyfill.io/v3/polyfill.min.js?features=es6"></script>
<script id="MathJax-script" async src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script>

<script>
window.MathJax = {
  startup: {
    pageReady: () => {
      return MathJax.startup.defaultPageReady().then(() => {
        for (let element of document.getElementsByClassName("has-mathjax")) {
            element.style.visibility = "visible"
        }
      });
    }
  }
};
</script>
{{- end -}}

把它放在layouts/shortcodes/mathjax/block.html中:

<div class="has-mathjax">
{{ .Inner }}
</div>

这在 layouts/shortcodes/mathjax/inline.html 中:

<span class="has-mathjax">{{ .Inner }}</span>

现在你可以把它放在你的页面源中:

Mathjax block:
  
{{< mathjax/block >}}
\[a \ne 0\]
{{< /mathjax/block >}}

Inline shortcode {{< mathjax/inline >}}\(a \ne 0\){{< /mathjax/inline >}} with
Mathjax.

如您所见,使用短代码还可以解决需要在标点符号(例如 ([)前添加两个反斜杠的问题。

(完全披露:此方法也出现在 an article on my blog

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...