Emacs 组织html导出中的缓冲区本地导出选项

Emacs 组织html导出中的缓冲区本地导出选项,emacs,org-mode,Emacs,Org Mode,我正在用org模式创建一个简单的网页,我使用org-html-postamble为我的项目做一个时间戳和版权声明,如前所述。现在,我只想为一个源文件禁用postamble。我是否可以使用缓冲区本地选项执行此操作,如下所述: 我试过了 #+ORG_HTML_POSTAMBLE: nil 无济于事 编辑:在更多的研究表明为什么它不起作用后,我更新了这个问题。如果你说的是一个文件而不是一个缓冲区,你可以添加一个。将以下行作为文件的第一行: ## -*- org-export-html-postamb

我正在用org模式创建一个简单的网页,我使用org-html-postamble为我的项目做一个时间戳和版权声明,如前所述。现在,我只想为一个源文件禁用postamble。我是否可以使用缓冲区本地选项执行此操作,如下所述:

我试过了

#+ORG_HTML_POSTAMBLE: nil
无济于事

编辑:在更多的研究表明为什么它不起作用后,我更新了这个问题。

如果你说的是一个文件而不是一个缓冲区,你可以添加一个。将以下行作为文件的第一行:

## -*- org-export-html-postamble: nil -*-
或者将以下块放在其他位置(可能在文件的末尾):

否则,您可以通过将此组件放入缓冲区来临时绑定变量(这可能是最常用的方式):

基于以下来自的代码段:


如果org export allow bind关键字为非nil,则在导出期间,可以使用bind关键字将Emacs变量变为缓冲区本地变量。它的语法是“#+BIND:variable-value”。这对于无法使用特定关键字更改的缓冲区内设置特别有用。

问题的答案是“否”。文件局部变量不优先于项目列表中定义的变量。从
org html postamble
的变量描述中引用:

Setting :html-postamble in publishing projects will take precedence over this variable.
我的解决方案是定义两个函数

(defun first-postamble (plist) (format "(c) Donald Duck - %s" (format-time-string "%d %b %Y")))
(defun second-postamble (plist) (format "(c) Daisy Duck - %s" (format-time-string "%d %b %Y")))

在我的
.emacs
中,然后在需要第一个postamble的缓冲区中使用
#+BIND:org html postamble first postamble
,并相应地使用第二个postamble。

Hmm,这两种方法都不会产生期望的结果:(缓冲区局部变量实际上已经设置好了(因为我从emacs得到了安全问题),但postamble仍在导出中。我无法判断绑定版本是否有效。可能它确实绑定了变量,但由于某些组织内部结构,因此无效。此外,在特殊注释中使用局部变量时(您的中间解决方案)这些不会被组织导出忽略,因此会出现在生成的html中。这可能是组织中的错误?编辑:我发现了问题。在项目范围中指定的变量优先:“设置:发布项目中的html postamble将优先于此变量。”所以,我想要的是不可能的。谢谢你的回答,它让我走上了正确的轨道。
Setting :html-postamble in publishing projects will take precedence over this variable.
(defun first-postamble (plist) (format "(c) Donald Duck - %s" (format-time-string "%d %b %Y")))
(defun second-postamble (plist) (format "(c) Daisy Duck - %s" (format-time-string "%d %b %Y")))