将组织模式文件导出为HTML后出现意外链接行为
我在Windows7Ultimate上运行Emacs24.3.1中的OrgMode8.2.6,遇到了一个从OrgMode导出的HTML链接的特殊情况。我广泛使用了将组织模式文件导出为HTML后出现意外链接行为,html,emacs,org-mode,Html,Emacs,Org Mode,我在Windows7Ultimate上运行Emacs24.3.1中的OrgMode8.2.6,遇到了一个从OrgMode导出的HTML链接的特殊情况。我广泛使用了org id来为组织模式文件中的标题分配唯一的id(存储在标题的:PROPERTIES:抽屉中) 在OrgMode8.0中引入新的exporter框架之前,所有这些链接都可以正常工作。无论标题的层次结构级别如何,导出的基于HTML ID的链接都可以正常工作。但是,使用新的导出器框架会产生不同的结果。现在,当目标标题低于导出设置中定义的标
org id
来为组织模式文件中的标题分配唯一的id(存储在标题的:PROPERTIES:
抽屉中)
在OrgMode8.0中引入新的exporter框架之前,所有这些链接都可以正常工作。无论标题的层次结构级别如何,导出的基于HTML ID的链接都可以正常工作。但是,使用新的导出器框架会产生不同的结果。现在,当目标标题低于导出设置中定义的标题级别(默认为级别3)(H:3
)时,基于ID的链接总是会失败。注意:这仅适用于导出的HTML;基于ID的链接在Emacs中可以完美地工作
下面是一个在我将其导出为HTML时演示此行为的最小示例(有关详细信息,请参见注释):
*标题级别1
**标题级别2
***标题级别3
:属性:
:ID:307db49e-e001-4a7b-9541-96eee2ae6f06
:完:
****非标题级别
:属性:
:ID:3be9179d-f838-4052-93ca-6C76C9AF12D
:完:
**标题级别2
***标题级别3
现在我想链接到文件中其他地方出现的信息。链接作为
预计在Emacs内。然而,当导出为HTML时,链接不会像它们一样工作
在组织模式8.0中引入新的导出器框架之前。
****基于ID的链接:[[ID:307db49e-e001-4a7b-9541-96eee2ae6f06][标题级别3]]
这个链接可以工作。使用ID始终适用于指向任何标题级别的链接。通过
“标题级别”我是指任何定义为标题的组织模式标题
(默认H:3)。
****基于ID的链接:[[ID:3be9179d-f838-4052-93ca-6C76C9AF12D][非标题级别]]
使用新导出器导出为HTML时,使用ID/的此链接不起作用
框架现在,使用ID作为指向任何
标题低于导出设置中定义的标题级别。
****非基于ID的链接:[[标题级别4][非标题级别]]
使用内部链接是可行的,但我有/许多/现有文件依赖于ID
对于标题级别低于我希望处理为(编号)级别的链接
标题,我有时还会链接到其他文件中的目标,在这种情况下,
使用ID创建了一个简单得多的工作流。
如果上面的文件名为demo links.org
,则默认输出文件为demo links.html
。第一个工作链接目标的HTML如下所示:
链接ID是目标代码的一部分,但未在链接代码中使用
非工作链接目标的HTML如下所示:
我相信,ox html.el
中的相关代码出现在“指向标题的链接”评论之后,但我对elisp是个新手(充其量)
我的问题是:这是设计的行为,还是我可以改变一些设置,使导出工作与引入新导出框架之前的工作方式相同?查看org html headline
函数的代码,似乎是“标准headline”案例(无论导出到hN的是什么)正在专门处理自定义ID:
(let* (...
(ids (remove nil
(list (org-element-property :CUSTOM_ID headline)
(concat "sec-" section-number)
(org-element-property :ID headline))))
(preferred-id (car ids)) ;; <- here, id for the header is sec-XXX
(extra-ids (cdr ids))
...)
(format ...
(format "outline-container-%s"
(or (org-element-property :CUSTOM_ID headline)
(concat "sec-" section-number)))
...
(format "\n<h%d id=\"%s\">%s%s</h%d>\n"
level1
preferred-id
(mapconcat
(lambda (x)
(let ((id (org-export-solidify-link-text
(if (org-uuidgen-p x) (concat "ID-" x)
x))))
(org-html--anchor id))) ;; <- generate a list of <a id=ID-XXX></a>
extra-ids "")
full-text
level1)
...))
(让*(。。。
(ID(删除零)
(列表(组织元素属性:自定义标题)
(concat“sec-”章节编号)
(组织元素属性:ID headline)))
(首选id(汽车id));我也遇到了这个问题。此外,在org-7.9中,用“”括起来的文本可以在导出的HTML中显示,而在org-8.2中则无法显示
由于声誉有限,我无法对该项目进行投票,因此我只需在没有正确答案的情况下回答我对代码的解释与您描述的差不多,但我认为可能遗漏了什么。因此,对我来说,这似乎也是一个bug。我将以bug的形式报告它。感谢您的输入。我很抱歉您遇到了同样的问题,但我也很高兴知道这不仅仅是我!感谢您的输入。我向组织报告了这一情况-模式邮件列表,问题已修复。
(let* (...
(ids (remove nil
(list (org-element-property :CUSTOM_ID headline)
(concat "sec-" section-number)
(org-element-property :ID headline))))
(preferred-id (car ids)) ;; <- here, id for the header is sec-XXX
(extra-ids (cdr ids))
...)
(format ...
(format "outline-container-%s"
(or (org-element-property :CUSTOM_ID headline)
(concat "sec-" section-number)))
...
(format "\n<h%d id=\"%s\">%s%s</h%d>\n"
level1
preferred-id
(mapconcat
(lambda (x)
(let ((id (org-export-solidify-link-text
(if (org-uuidgen-p x) (concat "ID-" x)
x))))
(org-html--anchor id))) ;; <- generate a list of <a id=ID-XXX></a>
extra-ids "")
full-text
level1)
...))