解决ox-hugo导出带有:author:属性的文件后hugo even和jane主题渲染失败的问题

 把仅有的没有什么价值的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,不知会不会被接受。

comments powered by Disqus
墩墩家的幸福生活
Built with Hugo
主题 StackJimmy 设计