把仅有的没有什么价值的 20 几篇短文迁移到 ox-hugo 后,开始使用 hugo-primer 主题没有什么问题,后来还是对 hugo-primer 不太喜欢,浏览了几十个主题 demo 后,发现还是论坛和群里人们用的最多的 even 和 jane 两个主题更喜欢一些。

但没想到的是,改用这两个主题后,全部出现文章渲染失败的情况。看提示,是 author 属性的类型不是 string 类型,而是[]string 类型,看样子是类似数组或列表之类的类型。找一篇生成后的 md 文件查看,果然 author 属性的值是[不一般的凡],外面被中括号括起来了。

心中很不理解为什么,查看 ox-hugo 文档,发现还真是特意这么做的,为的是处理多个:author:属性,也就是多作者的情况。ox-hugo 文档中还专门有一节写了这个情况:

Link: https://ox-hugo.scripter.co/doc/author/

文中提到有两个解决办法,第一是禁止导出 author 参数,方法是在 org 文件头加上

1
#+options: author:nil

或在 subtree 里加上属性:

1
2
3
:PROPERTIES:
:EXPORT_OPTIONS: author:nil
:END:

第二个解决办法就是修改主题模板来支持[]string 形式的 list,也即在调用.Param.author 属性时使用如下代码段:

1
2
3
4
5
6
7
8
9
{{ with .Params.author }}
    {{ $author_type := (printf "%T" .) }}
    {{ $author_is_slice := (eq "[]string" $author_type) }}
        {{ if $author_is_slice }}
            {{ delimit . ", " }}
        {{ else }}
            {{ . }}
        {{ end }}
{{ end }}

我还是觉得应该从主题这里下手,经过搜索对比,对两个主题做了一些修改,以 even 主题为例,需要修改的是两个文件,第一个是 layouts/partials/head.html 的第 13 行,原为:

1
<meta name="author" content="{{ if .Params.author }}{{ .Params.author | safeHTML}}{{ else }}{{ .Site.Author.name | safeHTML }}{{ end }}" />

修改为:

1
<meta name="author" content="{{ if .Params.author }}{{ with .Params.author }}{{ $author_type := (printf "%T" .) }}{{ $author_is_slice := (eq "[]string" $author_type) }}{{ if $author_is_slice }}{{ delimit . ", " | safeHTML }}{{ else }}{{ . | safeHTML}}{{ end }}{{ end }}{{ else }}{{ .Site.Author.name | safeHTML }}{{ end }}" />

第二个文件是 layouts/partials/post/copyright.html 的第 4 行,原为:

1
<span class="item-content">{{ if .Params.author }}{{ .Params.author | safeHTML }}{{ else }}{{ .Site.Author.name | safeHTML }}{{ end }}</span>

修改为:

1
<span class="item-content">{{ if .Params.author }}{{ with .Params.author  }}{{ $author_type := (printf "%T" .)  }}{{ $author_is_slice := (eq "[]string" $author_type)  }}{{ if $author_is_slice  }}{{ delimit . ", " | safeHTML  }}{{ else  }}{{ . | safeHTML }}{{ end  }}{{ end  }}{{ else }}{{ .Site.Author.name | safeHTML }}{{ end }}</span>

两个文件修改完成后重新启动 hugo server 渲染成功。

jane 主题类似,需要修改的文件是 layouts/partials/head.html 第 25 行至 30 行那一段,但是我对 hugo 的 template 语法不熟,这段不知道怎么改,请了解的同学做相应改动吧。

当然有可能考虑不周,even 主题我已经提交了 PR,jane 主题我提了 issue,不知会不会被接受。