Emacs组织模式 - 导出到另一个目录?

tmi*_*ast 20 org-mode

我知道这有点小,但它一直在困扰我.我正在使用Org-mode进行项目,而且我倾向于频繁地导出到PDF或HTML,这使得我的目录中充斥着PDF,Tex和HTML文件.有没有办法让Org-mode导出到另一个位置,也许是一个名为./exports的子目录?

cm2*_*cm2 20

除了通过将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.
Run Code Online (Sandbox Code Playgroud)

导出后,它将被放置在"exports"目录中,但仅限于该目录存在.如果它不存在,您将在控制台中收到错误消息.

  • 谢谢.我想,这更直接地回答了我的问题.但有一件奇怪的事情.如果我导出为HTML或ASCII,文件将转到./exports,但如果我导出到TEX(或PDF),它将保留在当前目录中.也许它在我的配置中的东西? (3认同)
  • 奇怪的是这个设置对我不起作用。仍然导出到与“.org”文件相同的路径(默认行为) (3认同)
  • 这现在适用于 PDF 吗?我通读了那里的邮件列表交换,但不清楚 pdf 的导出是否已修复。 (2认同)

Ruy*_*Ruy 9

最初的问题涉及到组织文件的导出,而上述大多数答案实际上与发布有关,这是一个不同的概念。

我相信解决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))))
Run Code Online (Sandbox Code Playgroud)

PS:

  1. 我意识到有5年历史的问题可能不再与OP相关,但希望搜索相似内容的人将从此答案中受益。

  2. 这是对http://rwx.io/posts/org-export-configurations/中找到的代码段的略微修改。

  3. 在以上博客中找到的原始解决方案允许为每种导出格式设置不同的目录。但是,如果目标是避免自己的目录“乱扔PDF,Tex和HTML文件”,那么我认为最好只有一个目录包含所有格式的导出文件,这是我上面提供的修改的本质。


编辑:emacs手册(https://www.gnu.org/software/emacs/manual/html_node/elisp/Porting-old-advice.html#Porting-old-advice)指出,新defadvice机制已使该机制过时了advice-add。所以这是使用推荐的效果相同的代码片段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)
Run Code Online (Sandbox Code Playgroud)

和以前一样,该文件应放在您的.emacs文件中。


小智 8

当第一次提出问题时,这可能是不可能的,但最简单的解决方案是将目录添加到:EXPORT_FILE_NAME:属性中:

:PROPERTIES:
:EXPORT_FILE_NAME: exports/<filename>
:END:
Run Code Online (Sandbox Code Playgroud)

就像在接受的答案中一样,目录必须存在才能使其工作。

  • 不起作用。运行 Emacs 26.1 和 Orgmode 9.0.9。文件夹导出/存在。似乎`:EXPORT_FILE_NAME:` 属性根本不起作用,无论是完整路径还是相对路径,带或不带引号。 (2认同)

cro*_*sso 8

您必须将以下行放在 org 文件的开头:

#+EXPORT_FILE_NAME: PATH/filename
Run Code Online (Sandbox Code Playgroud)

其中PATH是您想要导出文件的文件夹的路径(例如~/exports)以及filename您想要为导出的文件指定的名称(例如tutorial.html)。