我正在尝试使用org-mode发布网页。两个问题:
base-directory
中的组织模式文件和publishing-directory
中的html文件?具体来说,如果我删除base-directory
中的组织文件,我是否可以让org-publish-html
删除html目录中的相应文件?如果我在子目录中有页面,如何在根目录中指定单个.css
文件以用于样式表?例如,我的目录结构如下:
的public_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
使用。有没有一个简单的补救措施(我希望样式表由子目录中的两个/所有文件使用)?
非常感谢〜
答案 0 :(得分:3)
没有直截了当的方法。 Org-mode
不知道(或关心)它发布的位置 - 它只是在那里发送内容并确保存在正确的目录结构。发布过程中有一个钩子,在将文件推送到其发布位置后调用它。通过在:completion-function
中设置org-publish-project-alist
属性来控制此操作。您可以使用此挂钩编写一个函数,将base-dir
和子目录中的* .org 文件与随附的* .html 发布的文件进行比较,然后删除那些* .html 文件没有随附的* .org 文件。
我怀疑通过让你的Lisp completion-function
调用一个删除必要文件的shell脚本,这将是最容易实现的。如果您使用:include
,:exclude
或:base-extension
属性做了些什么,您可能希望completion-function
从plist
中获取相关信息然后将它们传递给您的shell脚本。 This org-mode page有一个示例completion-function
,其中显示了如何获取org-publish-project-alist
的属性值。然后,您需要将它们传递给shell脚本。
有几种方法可以做到这一点。也许最简单的方法是使用以下行覆盖每个文件中的默认样式表:
#+ STYLE:&lt; link rel =“stylesheet”type =“text / css”href =“../ stylesheet.css”/&gt;
用于您的第一级子目录文件,并在您深入了解目录结构时继续添加../
。
另一种可能性是为目录树中的每个级别生成通用模板文件。 This org-mode page给出了如何设置它的一个很好的例子。
最后,另一个选项是使用:preparation-function
的{{1}}属性来定义一个将自动更改每个文件的样式文件的函数。同样,最好通过让Lisp org-publish-project-alist
调用shell脚本来解析文件来完成。我可以想象使用Unix preparation-function
程序执行此操作以查找表示类似sed
的正则表达式,并将href="@MYLOC@/stylesheet.css" />
之间的内容替换为目录树中的适当级别。考虑到其他选择,这看起来有点矫枉过正。