Skip to content
Go back

Hugoで文献目録を直接読み出すには

文献目録をZoteroからHugoに直接渡せないか考えます。

  • ノートのYAML Frontmatterを経由してデータを渡す方法が辛くなってきた
    • 自動で同期が取れず、手でデータを修正しなければならない
    • 情報伝達のために本文のないノートも管理しなければならない
  • ZoteroのBetter BibTeXプラグインはJSONやCSVでの出力に対応している
    • BetterBibTeX JSONはプラグイン独自形式で、Zotero固有データを出力できる
    • Better CSL JSONはCSLが規定するJSONスキーマで出力される
  • HugoはJSONをパースできるので、Zoteroが出力したファイルを読み取りに行ける
    • アセット経由でファイルを読み込んでtransform.Unmarshalでパースすれば直接データのやりとりができる?
    • dataディレクトリにJSONを入れると、Unmarshal不要でSite.Data.<path>から参照できるようになるので、こちらでやるほうが良い
  • Obsidian側は特に変える必要はなさそう
    • Pandoc Reference ListがCSL JSONに対応しているみたい
    • ZotLitはノート生成機能が便利なので、辞めなくても良い
  • なので、CSL JSONから引用表示の文字列を作るHugoテンプレートを作った

おまけ1:内部パスを探す方法の改善#

  • Hugoで、日本語のフォルダにあるファイルへのリンクが作れない不具合に遭遇した
    • 内部リンクはwikilink形式で、relrefがファイルを見つけてGetPageがページを取得する
  • relref相対URLを返すのに、ファイルパスを受け取るGetPageへ渡していたのが原因だった
    • 非ASCII文字がURLにエンコードされて、パスとして使えなくなっていた
    • どうして今まで大丈夫だったのだろう…?
      • ファイル名だけはURLでも大丈夫なように特別に処理されている?
  • relrefの挙動はor (page.GetPage $path) (site.GetPage $path)で代用できるはず

おまけ2:構文処理の一本化(に失敗)#

  • ついでに、構文の置換処理を一つにまとめてみる
  • サブパターンを|で繋いで構文のいずれかにマッチするようにして、そのマッチしたものに対応するpartialを呼び出すようにする
  • …と思ったけど、構文の中の構文が処理できなくなるので、個別のループでやる方法で良かった

おまけ3:ショートコード活用?#

  • HugoのShortcode構文をObsidianに持っていくほうが楽だったのでは?
    • Hugoに組み込まれた機能なので構文の処理で妙なことを起こさないし、Obsidian側で多少差異があっても表示上の問題なので許容できるはず
  • ただし、作ったMarkdownファイルを他のアプリで再利用することが難しくなるので、既存の構文で書いたほうが良いかも

おまけ4:見出しへのリンク#

  • Obsidianの”ブロックへのリンク”構文を見出しに使うときは直後の段落に書くこと
    • “ブロックへのリンク”構文は文末にも書けるが、見出しでこれをすると目次にそのIDが載ってしまう

参考資料#