内容格式
Hugo 支持的各类内容格式、外部程序依赖与 markup 配置分节。
内容格式(content format)指内容源文件所使用的标记语言。Hugo 首先依据前置元数据(front matter)里的 markup 标识符选择内容渲染器,只有未提供该字段时才回退到文件扩展名。格式是逐文件判定的,因此同一个站点里可以混用多种格式:
content/
└── posts/
├── post-1.md
├── post-2.adoc
├── post-3.org
├── post-4.pandoc
├── post-5.rst
└── post-6.html无论使用哪种格式,内容文件都必须带有前置元数据,最好同时写出 title 与 date,详见前置元数据。
支持的格式
| 内容格式 | 媒体类型 | 标识符 | 文件扩展名 |
|---|---|---|---|
| Markdown | text/markdown |
markdown |
markdown、md、mdown |
| HTML | text/html |
html |
htm、html |
| Emacs Org Mode | text/org |
org |
org |
| AsciiDoc | text/asciidoc |
asciidoc |
ad、adoc、asciidoc |
| Pandoc | text/pandoc |
pandoc |
pandoc、pdc |
| reStructuredText | text/rst |
rst |
rst |
Markdown
Markdown 是 Hugo 的默认内容格式,由内置的 Goldmark 渲染器直接渲染为 HTML。Goldmark 速度快,并遵循 CommonMark 与 GitHub Flavored Markdown 规范,可以在项目配置的 [markup.goldmark] 区段中调整。
Hugo 在 Markdown 之上提供了这些专有能力:
- 属性(attributes):把
class、id等 HTML 属性施加到图片以及引用块、围栏代码块、标题、水平线、列表、段落、表格等块级元素上,见内容格式属性。 - 扩展(extensions):启用内置 Markdown 扩展,用来书写表格、定义列表、脚注、任务列表、插入文本、标记文本、下标、上标等。
- 数学公式(mathematics):用 LaTeX 标记书写数学公式与表达式,见数学公式。
- 渲染钩子(render hooks):在渲染围栏代码块、标题、图片与链接时覆盖 Markdown 到 HTML 的转换逻辑,例如把每个独立图片渲染为 HTML 的
figure元素,见渲染钩子。
HTML
把内容写在 HTML 标记中,前面照常加前置元数据。内容通常相当于 HTML 文档 body 或 main 元素里会放置的部分,由 Hugo 直接输出,不再做 Markdown 转换。
注意:HTML 内容格式默认被拒绝,需要配置
security.allowContent才可使用。
Emacs Org Mode
把内容写在 Emacs Org Mode 格式中,前面加前置元数据。前置元数据也可以用 Org Mode 关键字书写,详见前置元数据中的 Org Mode 写法。
注意:Emacs Org Mode 内容格式默认被拒绝,需要配置
security.allowContent才可使用。
AsciiDoc
把内容写在 AsciiDoc 格式中,前面加前置元数据。Hugo 调用 asciidoctor 可执行文件把 AsciiDoc 渲染为 HTML,因此必须在本机安装 asciidoctor 及其依赖(Ruby)。
注意:Hugo 的默认安全策略不允许执行
asciidoctor二进制文件,必须把它加入项目配置中的security.exec.allow列表。
可以在项目配置中配置 AsciiDoc 渲染器。默认配置下,Hugo 调用 asciidoctor 时传入的命令行标志为:
--no-header-footer传入的标志取决于配置,构建时可以查看实际使用的标志:
hugo build --logLevel infoPandoc
把内容写在 Pandoc 格式中,前面加前置元数据。Hugo 调用 pandoc 可执行文件把 Pandoc 渲染为 HTML,因此必须在本机安装 pandoc。
注意:Hugo 的默认安全策略不允许执行
pandoc二进制文件,必须把它加入项目配置中的security.exec.allow列表。
Hugo 调用 pandoc 时传入的标志取决于本机安装的 Pandoc 版本。如果安装的版本支持 Pandoc 3.11 引入的 --math-method 标志:
--citeproc --math-method=mathjax否则:
--citeproc --mathjax(自 Hugo 0.164.0 起提供。)--citeproc 标志启用 Pandoc 的引文处理。使用 Pandoc 的文献与引文功能时,文献文件路径、引文样式、行内引用定义等设置通过内容文件里的元数据块控制,例如:
---
title: home
---
This is a paragraph followed by a metadata block.
---
bibliography: foo.bib
citation-style: ieee.csl
link-citations: true
---
This is a citation: @einstein1905physics注意:文献文件与引文样式文件必须位于本地文件系统上,不能从 Hugo 模块导入;路径可以相对于项目根目录,也可以是绝对路径。
reStructuredText
把内容写在 reStructuredText 格式中,前面加前置元数据。Hugo 通过 Docutils 的 rst2html 把 reStructuredText 渲染为 HTML,因此必须安装 Docutils 及其依赖(Python)。
注意:Hugo 的默认安全策略不允许执行
rst2html二进制文件,必须把它加入项目配置中的security.exec.allow列表。
Hugo 调用 rst2html 时传入的命令行标志为:
--leave-comments --initial-header-level=2渲染器分类与配置
把内容转换为 HTML 时,Hugo 使用:
- 原生渲染器:Markdown、HTML、Emacs Org Mode。
- 外部渲染器:AsciiDoc、Pandoc、reStructuredText。
原生渲染器比外部渲染器更快。外部渲染器相关的选项位于项目配置的 [markup] 区段中并按格式分节,例如 AsciiDoc 的选项在 [markup.asciidocExt];这些格式能否使用,取决于构建机器上是否装好了对应的外部程序,程序缺失时构建会报错。模板与内容格式无关:无论源文件用什么格式,渲染后的页面都由同一套模板输出。