【问题标题】:Can org-mode babel tangle produce leiningen directories?org-mode babel tangle 可以生成 leiningen 目录吗?
【发布时间】:2013-08-18 17:32:34
【问题描述】:

我们希望自动生成 Leiningen 项目树 完全来自 org-mode babel 文件。我们想这样做,以便我们 还可以通过以下方式创建漂亮的排版文档 org-latex-export-to-pdf。我们要不低于完全识字 从 org-mode 在 Clojure 中编程。

以下命令:

$ lein new ex1

生成一棵如下所示的树:

ex1
ex1/.gitignore
ex1/doc
ex1/doc/intro.md
ex1/project.clj
ex1/README.md
ex1/resources
ex1/src
ex1/src/ex1
ex1/src/ex1/core.clj
ex1/test
ex1/test/ex1
ex1/test/ex1/core_test.clj

我们想通过运行来做同样的事情 org-babel-tangle,仅此而已,在我们的 org-mode 缓冲区中 emacs。

出现了一个困难:而tangle 很乐意生产 srctest 等现有子目录中的文件,如果子目录不存在,似乎不愿意生成子目录。这意味着我们必须 通过其他方式创建目录结构——除非我们可以 让tangle 为我们做这件事,这就是本文的主题 StackOverflow 问题。

Leiningen 创建的目录结构中有六个文件。我可以将它们全部删除并使用 BEGIN_SRC 块从我的 org 文件中重新创建它们,如下所示

#+BEGIN_SRC clojure :tangle ./ex1/src/ex1/core.clj
(ns ex1.core)

(defn foo
  "I don't do a whole lot."
  [x]
  (println x "Hello, World!"))
#+END_SRC

特别注意子目录路径的名称

#+BEGIN_SRC clojure :tangle ./ex1/src/ex1/core.clj

如果我们的目录结构已经存在,一切都很好。 org-mode 的tangle 将 创建或更新上述所有六个文件,并在任何现有目录中创建新文件。我们不知道如何 获取tangle 生成目录;它抱怨说没有这样的 目录。

如果您想了解更多详细信息,可以在here 找到所需的.org 文件的副本。

【问题讨论】:

  • 您是否考虑过以fogus.github.io/marginalia/作为起点?
  • 现在看——不知道
  • 我的 .2c org-babel 比边缘化强大得多
  • 我们的 babel 用例是我们有 很多 数学需要在 LaTeX 中排版,还有很多图表 a-la TikzPGF,我们真的希望Clojure 代码就在隔壁,这样我们就有机会保证代码和文档不会漂移。我们的文档/代码/项目将运行超过 1k 页。

标签: clojure org-mode leiningen literate-programming org-babel


【解决方案1】:

可以在 begin_src 部分使用以下标头,

:mkdirp yes

【讨论】:

  • 如果你使用 noweb,你可以有一个部分收集所有 sn-ps 并创建目录,这样你就不必将它添加到所有源标题
  • 供参考,raw.github.com/nakkaya/nakkaya.com/master/resources/posts/… 使用 org-babel 和 noweb 他的大部分帖子都是用 org-babel 写的
  • 你也可以为一个部分指定一个 noweb 名称,这样所有的部分都会在一个文件中结束,等等。
  • @Red.Cabin:是的,您可以在一个地方指定每个代码块必须具有默认属性。将以下内容放在文件顶部的某处:
  • #+PROPERTY: mkdirp 是
【解决方案2】:

仅供参考,现在有一个用于使用基于组织的项目的 lein 项目模板:

https://github.com/thi-ng/thing-babel

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多