定制`组织
我正尝试使用组织模式发布网页。 两个问题:
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
。 有没有一个简单的补救措施(我希望样式表被子目录中的所有文件都使用)?
非常感谢〜
没有直接的做法。 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-function
从plist
获取相关信息,然后将它们传递给你的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" />
的正则表达式,并将@
之间的东西替换为目录树中适当的级别。 考虑到其他选择,这看起来像是过度杀伤。
上一篇: customizing `org