7

我正在尝试使用 org-mode 发布网页。两个问题:

  1. 有没有办法“同步” 中的 org-mode 文件base-directory和 中的 html 文件publishing-directory?具体来说,如果我删除 org 中的文件base-directory,我是否也可以org-publish-html删除 html 目录中的相应文件?
  2. 如果我在子目录中有页面,如何.css在根目录中指定单个文件用于样式表?例如,我的目录结构如下:

    public_html/

    • css/
      • 我的样式.css
    • 索引.html
    • 子目录/
      • 索引.html

使用以下规范org-publish-project-alist(这只是一个子集)-

:publishing-directory "public_html"
:style "<link rel=\"stylesheet\" href=\"css/mystyle.css\" type=\"text/css\"/>"

mystyle.css被使用,public_html/index.html但不被使用public_html/subdir/index.html。是否有一个简单的补救措施(我希望子目录中的两个/所有文件都使用样式表)?

非常感谢~

4

1 回答 1

5
  1. 没有直接的方法可以做到这一点。 Org-mode不知道(或关心)它发布到的位置 - 它只是将内容发送到那里并确保存在正确的目录结构。在文件被推送到其发布位置后,发布过程中有一个挂钩会被调用。这是通过:completion-function在您的org-publish-project-alist. 您可以使用此挂钩编写一个函数,将您和子目录中的 * .org文件与随附的 * .html发布文件进行比较,并删除那些没有随附 * .org文件的 * .html文件。base-dir

    我怀疑这将通过让你的 Lispcompletion-function调用一个删除必要文件的 shell 脚本来最容易地完成。如果您对 、 或 属性做一些花哨的事情:include:exclude:base-extension可能希望您completion-function从 中获取相关信息plist,然后将它们传递给您的 shell 脚本。 这个 org-mode 页面有一个示例completion-function,展示了如何获取org-publish-project-alist. 然后,您需要将它们传递给您的 shell 脚本。

  2. 有几种方法可以做到这一点。也许最简单的方法是用一行覆盖每个文件中的默认样式表,例如:

    #+STYLE: <link rel="stylesheet" type="text/css" href="../stylesheet.css" />

    对于您的第一级子目录文件,并../随着您对目录结构的深入了解不断添加。

    另一种可能性是为目录树 中的每个级别生成通用模板文件。这个 org-mode 页面提供了一个很好的例子来说明如何设置它。

    最后,另一种选择是使用 的:preparation-function属性org-publish-project-alist定义一个函数,该函数将自动更改每个文件的样式文件。同样,这可能最好通过让 Lisppreparation-function调用 shell 脚本来解析文件来完成。我可以想象使用 Unixsed程序来执行此操作,以找到一个表示类似的正则表达式href="@MYLOC@/stylesheet.css" />,并将 's 之间的内容替换@为目录树中的适当级别。考虑到其他选项,这似乎有点矫枉过正。

于 2012-02-26T18:06:59.867 回答