定制`组织

我正尝试使用组织模式发布网页。 两个问题:

  • 有没有办法“同步” base-directory的组织模式文件和publishing-directory的html文件? 具体来说,如果我删除了base-directory的组织文件,我可以通过org-publish-html删除html目录中的相应文件吗?
  • 如果我在子目录中有页面,如何在根目录中指定一个用于样式表的单个.css文件? 例如,我的目录结构如下所示:

    的public_html /

  • CSS /
  • mystyle.css
  • 的index.html
  • 子目录/
  • 的index.html
  • org-publish-project-alist使用以下规范(这只是一个子集) -

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

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

    非常感谢〜


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

    我怀疑这可以通过将你的Lisp completion-function调用一个删除必要文件的shell脚本来completion-function 。 如果你正在用:include :exclude:base-extension属性做一些事情,你可能希望你的completion-functionplist获取相关信息,然后将它们传递给你的shell脚本。 此组织模式页面有一个示例completion-function ,显示如何获取org-publish-project-alist属性值。 然后您需要将它们传递给您的shell脚本。

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

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

    为您的第一级子目录文件,并继续添加../因为你在目录结构中更深入。

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

    最后,另一个选择是使用org-publish-project-alist :preparation-function属性来定义一个函数,该函数将自动更改每个文件的样式文件。 同样,最好通过让Lisp preparation-function调用shell脚本来解析文件来完成。 我可以想象用Unix sed程序来做这件事,找到一个像href="@MYLOC@/stylesheet.css" />的正则表达式,并将@之间的东西替换为目录树中适当的级别。 考虑到其他选择,这看起来像是过度杀伤。

  • 链接地址: http://www.djcxy.com/p/5173.html

    上一篇: customizing `org

    下一篇: WPF DataGrid ItemsSource Binding Issue