定制`org-publish-project-alist`

hat*_*rix 7 html emacs org-mode

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

  1. 有没有办法"同步" base-directory和/和html文件中的组织模式文件publishing-directory?具体来说,如果我删除了一个org文件base-directory,我可以org-publish-html删除html目录中的相应文件吗?
  2. 如果我在子目录中有页面,如何.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\"/>"
Run Code Online (Sandbox Code Playgroud)

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

非常感谢〜

cm2*_*cm2 5

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

    我怀疑通过使Lisp completion-function调用删除所需文件的shell脚本可以最轻松地实现这一目标。如果您正在使用,或属性做一些花哨的操作:include,则可能希望从中获取相关信息,然后将它们传递给Shell脚本。 该组织模式页面上有一个示例,显示了如何获取的属性值。然后,您需要将它们传递给您的Shell脚本。:exclude:base-extensioncompletion-functionplistcompletion-functionorg-publish-project-alist

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

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

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

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

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