Hugo中如何在markdown中增加文章的内链

在写文章的时候总有一个需求就是关联之前写的文章,那么在hugo中应该要怎么用呢?大概有以下几种方法,我个人当然最喜欢最后一个方法咯,因为主要也是为了分享最后一个方法的。

方法一: 使用markdown的语法

1[this is a link](./link.html)

这个方法的好处是:没有破坏markdown格式,此markdown文件迁移至别处成本较低。

缺点也很明显,文章标题和链接变了,所有地方都需要手动修改

方法二:使用官方提供的 ref or relref shortcode功能

 1{{< ref "document" >}}
 2{{< ref "document#anchor" >}}
 3{{< ref "document.md" >}}
 4{{< ref "document.md#anchor" >}}
 5{{< ref "#anchor" >}}
 6{{< ref "/blog/my-post" >}}
 7{{< ref "/blog/my-post.md" >}}
 8{{< relref "document" >}}
 9{{< relref "document.md" >}}
10{{< relref "#anchor" >}}
11{{< relref "/blog/my-post.md" >}}

用法如下:

1[举个例子]({{< ref "01-append-icon.md" >}})

效果如下:

举个例子

这个方法有一个好处,就是文章的链接变了,这里会跟着变的,不需要手动修改。

缺点是,第一:破坏了markdown的语法,迁移成本比较高,第二:文章的标题不能同步变化

综合上述的两个方法,我发现如果想保留markdown语法,那就没有办法做到同步,只能在破坏语法的情况下,保证标题和链接都同步。所以就有了方法三

方法三:使用自定义的shortcode

layouts/shortcodes目录里新建一个文件 xrelref.html

填入以下内容

1{{ with .Site.GetPage (.Get 0) }}<a href="{{ .RelPermalink }}" title="{{ .Title }}" target="_blank">{{ .Title }}</a>{{ end }}

这样在文章内容部分我们就可以直接使用

1{{< xrelref "01-append-icon.md"  >}}

效果: Hugo中显示B站和telegram的icon

这样以后即使修改了文章的标题或是链接,其它的地方不用一一修正,会同步自动变更为最新的。缺点就是放弃了迁移。