如何在html导出的orgmode中标记代码块求值?

如何在html导出的orgmode中标记代码块求值?,html,css,org-mode,Html,Css,Org Mode,如果我在orgmode中有一个代码块,我可以使用:exports two选项导出其求值 #+begin_src cpp -n :includes <iostream> :exports both std::cout << "Hello there"; #+end_src #+RESULTS: : Hello there 然后标签“Output:”出现,但结果块出现两次——一次在标签之前,一次在标签之后。更糟糕的是,如果我在orgmode(C-C-C)中运行代码,那么第

如果我在orgmode中有一个代码块,我可以使用
:exports two
选项导出其求值

#+begin_src cpp -n :includes <iostream> :exports both
std::cout << "Hello there";
#+end_src

#+RESULTS:
: Hello there
然后标签“Output:”出现,但结果块出现两次——一次在标签之前,一次在标签之后。更糟糕的是,如果我在orgmode(
C-C-C
)中运行代码,那么第二个结果块就会放在文本标签“Output:”之前。我怀疑这也是出口方面的情况

我还注意到,当导出到html时,结果块被放置在类
示例
标记中。我想我可以修改css,比如:

pre.example::before { content: "Output:"; }
但不幸的是,这将文本放在
pre
块中,我无法添加任何换行符


有没有简单的方法可以在orgmode本身或者通过css向结果块添加文本标签?如果可能的话,我希望避免使用javascript。

您可以使用派生后端来实现以下目的:

(defun my-results (fixed-width contents info)
  "Transform a results block to make it more visible."
  (let ((results (org-element-property :results fixed-width))
    (format (elt (plist-get info :back-end) 2))
    (value (org-element-property :value fixed-width)))
    (cond 
     ((eq 'html format)
      (format "<pre>Output:<br> %s</pre>" value)))))


(org-export-define-derived-backend 'my-html 'html
  :translate-alist '((fixed-width . my-results)))

(browse-url (org-export-to-file 'my-html (concat (file-name-base (buffer-file-name)) ".html")))
(取消我的结果(固定宽度内容信息)
“转换结果块以使其更可见。”
(let((结果(组织元素属性:结果固定宽度))
(格式(elt(plist获取信息:后端)2))
(值(组织元素属性:值固定宽度)))
(续)
((eq'html格式)
(格式为“输出:
%s”值()())) (组织导出定义派生后端“我的html”html :翻译列表'((固定宽度.我的结果))) (浏览url(组织导出到文件“我的html”(concat(文件名基(缓冲区文件名))”.html)))
您可以使用派生后端进行以下操作:

(defun my-results (fixed-width contents info)
  "Transform a results block to make it more visible."
  (let ((results (org-element-property :results fixed-width))
    (format (elt (plist-get info :back-end) 2))
    (value (org-element-property :value fixed-width)))
    (cond 
     ((eq 'html format)
      (format "<pre>Output:<br> %s</pre>" value)))))


(org-export-define-derived-backend 'my-html 'html
  :translate-alist '((fixed-width . my-results)))

(browse-url (org-export-to-file 'my-html (concat (file-name-base (buffer-file-name)) ".html")))
(取消我的结果(固定宽度内容信息)
“转换结果块以使其更可见。”
(let((结果(组织元素属性:结果固定宽度))
(格式(elt(plist获取信息:后端)2))
(值(组织元素属性:值固定宽度)))
(续)
((eq'html格式)
(格式为“输出:
%s”值()())) (组织导出定义派生后端“我的html”html :翻译列表'((固定宽度.我的结果))) (浏览url(组织导出到文件“我的html”(concat(文件名基(缓冲区文件名))”.html)))
这应该适用于最近的组织:

#+名称:foo
#+begin\u src cpp-n:包括:导出两个

std::cout这应该适用于最近的组织:

#+名称:foo
#+begin\u src cpp-n:包括:导出两个

std::cout如果我将此代码放在
.emacs
文件中,我会收到错误消息
Symbol的函数定义为void:org export define derived backend
。我想这可能是因为我的组织模式版本是
8.2.something
,所以我升级到
8.3.4
。升级后仍会出现此错误。应在ox.el中定义此错误。可能在代码上方添加(require'ox)。这不是您需要添加代码的地方。你需要把它放在你的.emacs文件中。对不起,我误解了你说的话。如果我事先使用
(require'ox)
将您的代码添加到我的
.emacs
中,我会得到一个错误,错误的参数类型是
错误的,stringp nil
如果我将此代码放在
.emacs
文件中,我会得到错误消息
Symbol的函数定义无效:org export define derived backend
。我想这可能是因为我的组织模式版本是
8.2.something
,所以我升级到
8.3.4
。升级后仍会出现此错误。应在ox.el中定义此错误。可能在代码上方添加(require'ox)。这不是您需要添加代码的地方。你需要把它放在你的.emacs文件中。对不起,我误解了你说的话。如果我事先使用
(require'ox)
将您的代码添加到我的
.emacs
中,我会得到一个错误,即
参数类型错误,stringp nil
    #+name: foo
    #+begin_src cpp -n :includes <iostream> :exports both
    std::cout << "Hello there";
    #+end_src

    Output:

    #+RESULTS: foo
    : Hello there