我知道这有点小,但它一直在困扰我。我正在使用Org-mode进行项目,而且我倾向于频繁地导出到PDF或HTML,这使得我的目录中充斥着PDF,Tex和HTML文件。有没有办法让Org-mode导出到另一个位置,也许是一个名为./exports的子目录?
除了通过将org-publish-project-alist
变量修改为@ user1248256建议使用发布之外,您还可以直接在文件中指定org-export-publishing-directory
变量:
#+bind: org-export-publishing-directory "./exports"
* This is a test headline
Some text here. This should be exported to the "./exports" directory.
导出后,它将被放置在“exports”目录中,但仅限于该目录存在。如果它不存在,您将在控制台中收到错误消息。
原始问题涉及组织文件的导出,而上述大多数答案实际上与发布有关,这是一个不同的概念。
我认为解决OP提出的问题的最佳方法是将以下内容添加到您的emacs初始化文件(.emacs)中:
(defadvice org-export-output-file-name (before org-add-export-dir activate)
"Modifies org-export to place exported files in a different directory"
(when (not pub-dir)
(setq pub-dir "exported-org-files")
(when (not (file-directory-p pub-dir))
(make-directory pub-dir))))
PS:
编辑:emacs手册(https://www.gnu.org/software/emacs/manual/html_node/elisp/Porting-old-advice.html#Porting-old-advice)声明defadvice
机制被新的advice-add
淘汰了。所以这里是一个具有相同效果的代码snipet,使用推荐的advice-add
:
(defun org-export-output-file-name-modified (orig-fun extension &optional subtreep pub-dir)
(unless pub-dir
(setq pub-dir "exported-org-files")
(unless (file-directory-p pub-dir)
(make-directory pub-dir)))
(apply orig-fun extension subtreep pub-dir nil))
(advice-add 'org-export-output-file-name :around #'org-export-output-file-name-modified)
和以前一样,这应该放在你的.emacs文件中。
我相信你可以通过org-publish获得。添加到你的emacs配置文件是这样的:
(setq org-publish-project-alist
'(("html"
:base-directory "~/org/"
:base-extension "org"
:publishing-directory "~/org/exports"
:publishing-function org-publish-org-to-html)
("pdf"
:base-directory "~/org/"
:base-extension "org"
:publishing-directory "~/org/exports"
:publishing-function org-publish-org-to-pdf)
("all" :components ("html" "pdf"))))
Eval这个表达式(或重启emacs),在org-mode下按C-c C-e X
,然后从列表中选择一个项目。
您可以在http://orgmode.org/worg/org-tutorials/org-publish-html-tutorial.html和http://orgmode.org/manual/Publishing.html#Publishing上查看更多信息
当问题第一次被问到时,这可能是不可能的,但最简单的解决方案是将目录添加到:EXPORT_FILE_NAME:
属性:
:PROPERTIES:
:EXPORT_FILE_NAME: exports/<filename>
:END:
就像在接受的答案中一样,目录必须存在才能使其正常工作。