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