代码之家  ›  专栏  ›  技术社区  ›  Dror

从命令行批量导出组织模式文件

  •  43
  • Dror  · 技术社区  · 11 年前

    假设我在某个目录中有几个 org-mode 文件夹: foo1.org , foo2.org 等等。我想有一个脚本(可能是一个makefile),我可以调用它

    $ generate-pdfs
    

    foo1.pdf , foo2.pdf 等等。

    我以为是这样的 emacs --batch --eval <MAGIC> 这是一个好的开始,但我不知道其中的魔力。

    一个单独的解决方案 在…内 emacs可能也很感兴趣。

    3 回复  |  直到 11 年前
        1
  •  53
  •   Sridhar Ratnakumar    10 年前

    正如你所说,Emacs拥有 --batch 选项从shell中使用Emacs执行操作。除此之外,您可以使用 -l 标志从文件加载Emacs Lisp代码并执行它,以及 -f 标志来执行单个Lisp函数。

    下面是一个基本示例,它将单个组织模式文件导出为HTML:

    emacs myorgfile.org --batch -f org-html-export-to-html --kill
    

    也许你想要更高级的东西,比如导出/发布一个完整的组织模式项目。我没有这方面的示例代码,但应该不会太复杂。

    我还有一个示例Makefile,它是我前段时间编写的,用于将目录中的所有组织模式文件导出为HTML(并将HTML文件复制到另一个目录):

    OUT_DIR=/some/output/dir/html
    # Using GNU Make-specific functions here
    FILES=$(patsubst %.org,$(OUT_DIR)/%.html,$(wildcard *.org))
    
    .PHONY: all clean install-doc
    
    all: install-doc
    
    install-doc: $(OUT_DIR) $(FILES)
    
    $(OUT_DIR):
            mkdir -v -p $(OUT_DIR)
    
    %.html: %.org
            emacs $< --batch -f org-html-export-to-html--kill
    
    $(OUT_DIR)/%.html: %.html
            install -v -m 644 -t $(OUT_DIR) $<
            rm $<
    
    clean:
            rm *.html
    

    编辑:

    使用组织模式8和新的导出引擎,HTML导出的功能发生了变化。

    要使前面的示例适用于Org 7或更旧版本,请替换 org-html-export-to-html 具有 org-export-as-html .

        2
  •  3
  •   fniessen    11 年前

    我希望(在本周末之前)发布OrgMk,这是一套Makefile和独立的Bash脚本(在Cygwin下也可以使用)!甚至更多:生成HTML、Ascii、Beamer等。

    你可以在我的GitHub帐户上找到它: https://github.com/fniessen/ (我已经有Emacs配置文件、颜色主题和其他东西,如OrgBabel参考卡——正在进行中)。

        3
  •  2
  •   Community CDub    4 年前

    在中标记几个组织文件 dired 并将其称为:

    (defun dired-org-to-pdf ()
      (interactive)
      (mapc
       (lambda (f)
         (with-current-buffer
             (find-file-noselect f)
           (org-latex-export-to-pdf)))
       (dired-get-marked-files)))
    

    如果您知道什么是异步,请包装调用,因为它可能需要一段时间。

    更新:

    这是一个结合了真棒的版本 1.dired的2.adj.受污染的 用瘸子接近 其他一个:)

    (defun dired-org-to-pdf ()
      (interactive)
      (let ((files
             (if (eq major-mode 'dired-mode)
                 (dired-get-marked-files)
               (let ((default-directory (read-directory-name "dir: ")))
                 (mapcar #'expand-file-name 
                         (file-expand-wildcards "*.org"))))))
        (mapc
         (lambda (f)
           (with-current-buffer
               (find-file-noselect f)
             (org-latex-export-to-pdf)))
         files)))