- Obsidianの内部リンクをHugoでも使いたいが、うまくジャンプしてくれない問題
- Hugoでのエンコード形式が#記号類!?や#空 白 区 切 りでObsidianと異なっている
- Hugoは英字を小文字に揃え、空白をハイフンに置き換え、記号類を消してしまう
- Obsidianはパーセントでエンコードする
- Obsidian側を修正するとリンクが切れてしまうので、Hugo側をなんとかするしかない
- Link render hooksの
.DestinationのFragmentを事前にanchorizeすることで、とりあえず対処した
- なぜか、Pathのほうはパーセントエンコーディングされていても正しく変換してくれる
{{- /* URLのFragment部をパーセント形式からHugoのアンカー形式に変換する */ -}}
{{- $url := . -}}
{{- $anchor := $url.Fragment | replaceRE `%20` " " | anchorize -}}
{{- printf "%s#%s" $url.Path $anchor -}}
- render-link.htmlでは以下のように呼び出してやる
{{- $url := urls.Parse .Destination -}}
{{- if eq $url.Scheme "" -}}
{{- /* Obsidianで自動生成された内部リンクはHugo形式に変換する */ -}}
<a href="{{- partial "url_from_obsidian.html" $url | relref .Page | safeURL -}}" {{- with .Title}} title="{{ . }}" {{- end}}>
{{- with .Text }}{{ . }}{{ end -}}
{{- else -}}
{{- /* 外部リンクはそのまま別タブで開く */ -}}
<a href="{{- .Destination -}}" target="_blank" rel="external noopener noreferrer" {{- with .Title }} title="{{ . }}" {{- end}}>
{{- with .Text }}{{ . }}{{ end -}}
{{- end -}}
</a>