Skip to content
Go back

HugoとObsidianの内部リンク形式を一致させる

  • 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>

テスト用HEADING#

記号類!?#

空 白 区 切 り#

参考文献#