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

标签 markdown mathjax hugo tex katex

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

谢谢!

最佳答案

对于 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 (雨果跟随 因为它使用 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 上)

关于markdown - 如何使用 markdown 语法在 Hugo 中编写数学?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64050359/

相关文章:

css - mkdocs 和 markdown : base. css 覆盖自定义 css

基于 Sphinx 的文档的 Markdown 输出

javascript - mathjax 预览不起作用

javascript - 按回车键提交表单时使用 Markdown

markdown - 同一源文档中的不同表格样式

go - Handlebars 内的 Hugo 语法文档?

hugo - 在 Hugo 模板中,如何检查 JSON 文件数组的长度?

markdown - 在 Hugo/markdown 中链接页面

latex - Sphinx 未正确呈现文档字符串中的数学表达式

javascript - 带有 mkdocs 的本地 mathjax