Emacs 组织模式-(要求组织发布)导致组织版本降级

Emacs 组织模式-(要求组织发布)导致组织版本降级,emacs,org-mode,Emacs,Org Mode,我刚刚将组织模式升级到ELPA中提供的最新版本。根据官方文档,安装必须在新的emacs会话中完成,在此会话中没有加载与组织相关的脚本/文件。安装成功,org版本报告我已更新到8.2.6(从7.9.3f)。然而,一旦我放回与组织相关的旧脚本并重新加载emacs,当我运行org version时,我就会得到7.9.3f。为了追踪原因,我通过逐个添加与组织相关的脚本来追溯我的步骤。我发现当我添加回(require'org publish)时,版本降级为内置版本。我不知道为什么会发生这种情况。问题主要是

我刚刚将组织模式升级到ELPA中提供的最新版本。根据官方文档,安装必须在新的emacs会话中完成,在此会话中没有加载与组织相关的脚本/文件。安装成功,
org版本
报告我已更新到8.2.6(从7.9.3f)。然而,一旦我放回与组织相关的旧脚本并重新加载emacs,当我运行
org version
时,我就会得到7.9.3f。为了追踪原因,我通过逐个添加与组织相关的脚本来追溯我的步骤。我发现当我添加回
(require'org publish)
时,版本降级为内置版本。我不知道为什么会发生这种情况。

问题主要是由于我的emacs初始化方式(初始化脚本)造成的

  • 在最新版本的org(撰写本文时为8.2.6)中,
    org publish
    现在是
    ox publish
    ,因此我需要调用
    (要求“ox publish”)
    。我认为调用
    org publish
    或任何较早版本的模块会导致设置混乱
  • 但是,在更改了引用之后,我得到了一个错误,关于未找到
    ox publish
  • 为了进一步追踪问题,我从我的
    init.el
    中删除了所有与组织相关的脚本(这就是我命名初始化脚本的方式),然后再次运行emacs。当我当时运行
    org版本时,我看到它是8.2.6
  • 为了检查是否加载了
    ox publish
    ,我使用了暂存缓冲区,并手动执行
    (需要“ox publish”)
    ;它返回正常,确认模块已实际加载。这意味着,
    ox publish
    仅在初始化后加载
  • 我的第一个解决方法是在初始化后使用init hook之后的
    加载我的组织发布脚本:

    (add-hook 'after-init-hook (lambda() (load-file "/path/to/org-publish-project.el")))
    
  • 这解决了问题,我可以看到我的组织安装升级正确。但是,通过init hook之后的
    加载脚本时,我感觉不太好。官方orgmode邮件列表中的一些人建议,我应该检查我是否在我的
    init.el
    中调用
    (包初始化)
    。我没有。该操作将加载通过包管理器安装的包。如果init脚本中没有指定,默认情况下,初始化后将调用它。了解到这一点,我在
    init.el
    的开头添加了对
    (包初始化)
    的调用。之后,我调用了
    load file
    ,直接将其加载到我的组织发布脚本中

    (load-file "/path/to/org-publish-project.el")
    

Org版本8中的导出后端经过重构,变得更加模块化。如果您更改为
(要求“ox发布”)
,这是否解决了问题?我已经尝试过了,但emacs说找不到
ox发布
。我在使用ELPA的组织模式时遇到了很多问题,然后我直接从.zip文件进行安装,它就可以正常工作,你已经试过了吗?我已经为这个问题提供了我自己的答案,看看你是否能从中发现一些东西。