Org Mode导出过滤时如何获取src代码块的语言?
解决Org导出过滤器中获取代码块语言的问题
问题根源:你之前的代码无效,是因为
org-export-filter-src-block-functions的第一个参数code并不是Org代码块元素对象,而是导出流程中已经处理好的代码内容字符串,所以用org-element-property去读取它的:language属性肯定拿不到值。语言信息的位置:代码块的语言信息确实在
info参数里,这个参数是一个属性列表(plist),其中:context键对应的就是当前正在处理的Org代码块元素对象。修正后的代码:
(defun pygments-org-html-code (content backend info) (when (org-export-derived-backend-p backend 'html) (let* ((src-block (plist-get info :context)) (lang (org-element-property :language src-block))) (message "The src block's language: %s" lang))) content) ; 必须返回处理后的内容,否则会清空代码块输出 (add-to-list 'org-export-filter-src-block-functions 'pygments-org-html-code)
- 关键说明:
- 函数第一个参数改名为
content更准确,它是代码块的内容字符串,最后必须返回它,否则导出后的代码块会是空的。 - 通过
(plist-get info :context)拿到真正的Org代码块元素。 - 再用
org-element-property :language读取语言属性,就能正确输出了。
- 函数第一个参数改名为
内容的提问来源于stack exchange,提问作者guidoism
相关产品推荐
相关产品推荐

