如何将Org-mode文件属性导出为Markdown属性?
存在可行方案,直接通过Emacs Lisp给Org的Markdown导出流程挂内容过滤钩子即可实现,不需要依赖第三方导出插件,具体操作如下:
- 把如下Elisp配置写入你的Emacs配置文件(通常是
init.el或者config.el),执行eval-buffer或者重启Emacs让配置生效:
(defun my/org-md-insert-custom-frontmatter (exported-content) "提取Org文件级属性,插入指定格式的Markdown顶部属性块" (let* ((file-props org-file-properties) (get-prop (lambda (key) (cadr (assoc key file-props)))) (frontmatter (concat "___\n" (when-let ((val (funcall get-prop "TITLE"))) (format "title: %s\n" val)) (when-let ((val (funcall get-prop "TAGS"))) (format "tags: %s\n" val)) (when-let ((val (funcall get-prop "AUTHOR"))) (format "author: %s\n" val)) (when-let ((val (funcall get-prop "EXCLUDE_TAGS"))) (format "exclude_tags: %s\n" val)) (when-let ((val (funcall get-prop "OPTIONS"))) (format "options: %s\n" val)) (when-let ((val (funcall get-prop "SUMMARY"))) (format "summary: %s\n" val)) "___\n"))) (concat frontmatter exported-content))) ;; 将处理函数挂载到Org Markdown导出的最终内容过滤钩子上 (add-hook 'org-md-export-filter-final-output-functions #'my/org-md-insert-custom-frontmatter)
- 配置生效后,正常使用Org原生导出流程即可:打开目标Org文件,按快捷键
C-c C-e m m就能直接导出带指定顶部属性块的Markdown文件,导出的正文部分和原生Org Markdown导出效果完全一致,一级标题会自动转为# 标题格式,正文排版不会错乱。
如果后续需要新增导出的属性字段,只需要在frontmatter拼接逻辑里新增对应字段的取值和格式化代码即可,比如要导出EMAIL字段,直接加一行(when-let ((val (funcall get-prop "EMAIL"))) (format "email: %s\n" val))就行,自定义成本很低。
内容的提问来源于stack exchange,提问作者joshpetit
相关产品推荐
相关产品推荐

