Org-Mode:控制代码块的HTML输出

3

Emacs org-mode 可以进行调整以微调代码块输出的 HTML 内容吗?内联代码将按预期输出。

<code> ..my code.. </code> 

正如预期的那样,但是代码块(在 #+BEGIN_SRC clojure .. #+END_SRC 块标记内)被输出为:

<pre class="src src-clojure> ..my code..</pre>

我更倾向于使用标准化的方式。
<pre><code> ..my code..</code></pre>

我希望这样做,因为这意味着不需要更改CSS,并且(托管的)代码高亮(highlight.js)可以直接使用。我已经阅读了org-mode手册并在网上搜索了很久,但没有找到相关的答案。这种行为可能是由org-mode文件ox-html.el设置的,但是调整它超出了我的elisp知识水平。

1个回答

2
您可以重新定义HTML导出引擎使用的翻译器函数以生成输出。按下C-h f(描述函数)并键入org-html-src-block以查看文档并导航到函数定义。将该defun复制到您的dotemacs中以进行自定义。
您可能想要将其更改为:
(defun org-html-src-block (src-block contents info)
  "Transcode a SRC-BLOCK element from Org to HTML.
CONTENTS holds the contents of the item.  INFO is a plist holding
contextual information."
  (if (org-export-read-attribute :attr_html src-block :textarea)
      (org-html--textarea-block src-block)
    (let ((lang (org-element-property :language src-block))
      (caption (org-export-get-caption src-block))
      (code (org-html-format-code src-block info))
      (label (let ((lbl (and (org-element-property :name src-block)
                 (org-export-get-reference src-block info))))
           (if lbl (format " id=\"%s\"" lbl) ""))))
      (if (not lang) (format "<pre><code>\n%s</code></pre>" label code)
    (format
     "<div class=\"org-src-container\">\n%s%s\n</div>"
     (if (not caption) ""
       (format "<label class=\"org-src-name\">%s</label>"
           (org-export-data caption info)))
     (format "\n<pre><code>%s</code></pre>" lang label code))))))

1
非常感谢!将关键行更改为:(format "<pre><code class=\"example\"%s>\n%s</code></pre>" label code)正好达到了我想要的效果,并允许highlight.js按预期工作。 - judep

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接