ox-hugoとは

📝Org-modeから📝Hugoに適した📝Markdownとfrontmatterを出力するためのEmacs Package.

Hugo Section

hugoのcontent ディレクトリ配下のサブディレクトリの設定.

デフォルトではox-hugoは <HUGO_BASE_DIR>/content/posts/配下にmdファイルを出力する. ここでいうSectionとは postsのディレクトリ.

なにも設定しないと posts配下に出力されるので, カスタムするときはグローバル設定で org-hugo-default-section-directory に設定するか, HUGO_SECTIONのファイルのfrontmatterに書く.

Hugo Section — ox-hugo - Org to Hugo exporter

ox-hugo Tips

howto: exportをスキップする方法

ref. Tags and Categories — ox-hugo - Org to Hugo exporter

  • file baseでは,#+hugo_tags に noexport
  • subtree baseでは,#+filetags に noexport

org-export-exclude-tagsに除外対象のタグを設定する.

howto: ox-hugoで画像を記事に埋め込むには?

ox-hugoは/staticをrootにして画像を探すので,パスは/staticからの相対パスで書く.

ox-hugoはOrg fileに添付された画像をExportするときに自動でMarkdownファイルと同じディレクトリに配置してくれる.これは管理上とても楽である.

参考: Images in Content — ox-hugo - Org to Hugo exporter

howto: ox-hugoで生HTMLをexport

begin_export htmlend_export で囲む.

これをしないと余計なされるのでうまくいかない場合がある.

tips: 文章の引用は src_exampleよりもsrc_quote

どうも exampleでは改行が入らない. 見栄えを考慮するならsrc_quoteがいい. exampleはソースコードのログなどの表示のためだ.

tips: one big file and subtree vs many files

一つのファイルとサブツリーにまとめるか, たくさんのファイルをディレクトリにいれるか問題.

そもそもox-hugoのメイン開発動機がひとつのファイルで管理したいというものなのでone big fileが推奨されている.

  • メタデータのfront-matterの管理がとても楽になるため.
  • #+hugo_properties_ をひとファイルずつ更新する手間が省ける.

ref. https://ox-hugo.scripter.co/#org-blogging-flow-editorial

The preferred way to organize the posts is as Org subtrees (also the main reason to write this package, as nothing like that was out there) as it makes the meta-data management for Hugo front-matter pretty effortless.

If you are a one Org-file per post type of a person, that flow works too! Just note that in this flow many of those #+hugo_ properties need to be managed manually.. just as one would manage the front-matter in Markdown files — See the Org versions in the above screenshots for comparison.

書きやすいのは個別ファイルだが, それはorg-narrow-to-subtree/widenでなんとかなるかも.

💡Org-modeをマインドマップにexportするには?

ページ内参照設定(anchor)

ref. Anchors — ox-hugo - Org to Hugo exporter

エクスポートのとき, ページ内参照リンクでつかうアンカー設定. 一意であればなんでもいいのだが, ヘッドラインの見出しを頻繁に変更するならばorg-idを利用するのがいいかも. アンカーにorg-idを利用する設定はデフォルトでは有効化されてないので自分で設定する必要あり.

(setq org-hugo-anchor-functions
  '(org-hugo-get-page-or-bundle-name org-hugo-get-custom-id org-hugo-get-id org-hugo-get-heading-slug org-hugo-get-md5))

org-idベースのinternal linkのmarkdownへのexport

org-modeの機能でorg-idに対応するファイルが検索されて refrel のキーワードで出力される.

ref. Support cross-post linking for subtree-based exports (Hugo relref) · Issue #30 · kaushalmodi/ox-hugo · GitHub

いやなんか最近挙動が変わった…

ref. ox-hugo links the ID_LINK to a markdown file · Issue #452 · kaushalmodi/ox-hugo · GitHub

特定のページにnoindexオプションをつける

ox-hugoのオプションで HUGO_CUSTOM_FRONT_MATTER で独自frontmatterを設定して, hugoのソースをいじる.

:PROPERTIES:
:EXPORT_HUGO_CUSTOM_FRONT_MATTER: :noindex true
:END:
 
#+hugo_custom_front_matter: :noindex true

layouts/partials/head.html

 if .Params.noindex 
<meta name="robots" content="noindex" />
 end 

✅ox-hugo: frontmatterをdefaultのtomlからyamlへする

ox-hugoのデフォルトのfrontmatterはtoml形式. これをyaml形式に変更するには,

#+hugo_front_matter_format: yaml
 
(setq org-hugo-front-matter-format "yaml")

🔗References