ox-hugo 构建 hugo 博客

ox-hugo 是一个 Org Mode 的导出工具,可以将 Org Mode 导出为符合 Hugo 要求的 Markdown 文档,默认使用 TOML ,若想使用 YAML 格式的文件头,则需要添加如下配置。

配置 hugo matter format 格式

通过配置文件的导出设置,可以将 front matter 从 toml 改成 yaml 的样式。

  • 整个 Org 文件

    需要在文件头中增加下面的设置:

    ,#+hugo_front_matter_format: yaml
    
  • 子标题

    如果是用子标题设置来导出的情况,则需要单独配置一个属性。

    ​* This is a Headline
    :PROPERTIES:
    :EXPORT_HUGO_FRONT_MATTER_FORMAT: yaml
    :END:
    

编写 hugo snippets 模板

为了方便导出,增加了 2 个代码片段用来快速生成文档标头,对单独文件:

#+DATE: 2023-01-13 Fri ;;写作时间
#+HUGO_BASE_DIR: ~/workspace/blog/ ;;生成目录地址
#+HUGO_SECTION: <SECTION> ;;子目录地址 最终生成的目录是 ~/workspace/blog/content/<SECTION>
#+HUGO_SERIES: <series> ;; 用户的分类,可以自己组织系列文章
#+HUGO_CATEGORIES: category1 category2 ;; 指定文章的 category
#+HUGO_TAGS: tags1 tags2 ;; 指定文章的 Tags
#+HUGO_DRAFT: false
#+AUTHOR: "夏南瓜"
#+HUGO_FRONT_MATTER_FORMAT: yaml ;; 指定 markdown 的头信息格式,默认为 TOML,可以配置为 YAML 类型
#+HUGO_WEIGHT: auto
#+HUGO_AUTO_SET_LASTMOD: false

对子标题:

:EXPORT_FILE_NAME: eregenerate_org_id
:EXPORT_DATE: 2022-03-01

通过这 2 个模板就能非常方便的添加导出时的默认信息。

自动导出成 markdown 文件

因为每次更新完博客后再导出成对应的 markdown 文件有点麻烦,翻看了一下,发现 ox-hugo 已经支持自动导出修改过的文件。

可以配置成按项目自动导出,需要在项目的根目录下,新增文件:.dir-locals.el,内容如下:

(("content-org/"
  . ((org-mode . ((eval . (org-hugo-auto-export-mode)))))))

这样当文件有变化的时候,就会自动更新到对应的目录,其中 content-org 指的是对应的 org 文件的目录。

如果是和 hugo content 同目录下,则可以将文件的内容修改为:

((org-mode . ((eval . (org-hugo-auto-export-mode)))))

如果只有少量文档需要自动导出的话,则可以在 org 文档中增加下面的配置:

# Local Variables:
# eval: (org-hugo-auto-export-mode)
# End:

设置了上面的参数的文档就会在保存的时候自动导出了,当然也可以通过设置上面的参数禁止导出:

# Local Variables:
# eval: (org-hugo-auto-export-mode -1)
# End:

启用上面的设置需要利用 .dir-locals.el 来按项目导出。