emacs从29.4升级到30.2之后,orgmode导出subtree时无法识别相对路径图片。

macOS上,emacs从29.4升级到30.2之后,orgmode导出subtree时无法识别相对路径图片。检查了了下,升级前后orgmode的版本有区别。

  • 升级前:Org Mode 9.6.15
  • 升级后:Org Mode 9.7.11

文档结构:

父文档通过 #+INCLUDE 引入子目录中的 Org 文件,子 Org 文件内部引用同目录下的图片资源。

示例结构:

project/                                                                                                                                                        
├── main.org                                                                                                                                                    
└── sub/                                                                                                                                                        
    ├── child.org                                                                                                                                               
    └── img/                                                                                                                                                    
        └── test.jpg                                                                                                                                            
                                                                                                                                                                
main.org:                                                                                                                                                      
                                                                                                                                                                
#+INCLUDE: "sub/child.org"                                                                                                                                      
                                                                                                                                                                
child.org:                                                                                                                                                     
                                                                                                                                                                
* Test                                                                                                                                                          
[[file:img/test.jpg]]                                                                                                                                           

现象:

  • 在 emacs 29.4(Org 9.6.15)导出正常,图片能够正确显示。
  • 在 emacs 30.2(Org 9.7.11)中,从父文档导出某个标题子树(subtree export)时失败,报错:

unable to resolve link: sub/img/test.jpg

问了几家AI,说9.7版本的orgmode对于subtree的导出有较大的调整。不过,除了改成把图片改成绝对路径,没有找到有效的解决办法。

有没有其他人也遇到这个情况,先谢~

1 个赞

确实是一个bug, 一个临时办法是修正org-export-data,把参数info的:with-broken-links部分强制清空.

修正我之前的说法,因为export逻辑比较复杂,粗暴的修改info不能解决问题.

这实际上不是一个bug,是因为org对路径要进行严格检查,所以相对路径必须用"./“或”../"开头.例如[[./code-completion.png]]

2 个赞

I can confirm the bug. Please report it to the mailing list. See Feedback (The Org Manual)


我确认这个 bug。请将其报告到邮件列表。参见 Feedback (The Org Manual)

1 个赞

我试了下,相对路径前面加了“./”也不行。

我是emas30.1, org9.7.11, 在debian测试下来没问题, 见截屏(如果没有./前缀报同样的错), 是不是图片的相对目录应该是相对于main.org?

无意间发现,我后来更新了问题中的代码,图片路径前面加了"file:",带“file:”确实没有问题。 了解了下,应该是新版本的orgmode会认为不带“file:”的图片路径为交叉引用,找不到定义,所以报“unable to resolve link.” 为了兼容存量的org文件,通过配置添加导出的hook,临时添加了“file:”前缀做了兼容。 感谢~

应该不是bug,不带“file:”的图片路径被识别为交叉引用了,图片路径添加“file:”前缀后就好了。

2 个赞