使用 ReadTheOrg 将文学程序导出到 HTML 时保留源块的内容

Preserving content of source blocks when exporting literate program to HTML with ReadTheOrg

最小示例

我使用带有 :noweb 扩展名(?)的文学编程技术在组织模式下编写了一个程序。典型的代码片段如下所示:

* Section

In order to do foo with bar, we define a function ~do_foo~, which initializes object of a class ~BarParser~ with a value of parameter of the type ~bar_t~.

#+name: section_function_blockname
#+begin_src cpp
void do_foo
( bar_t bar
, <<additional_parameter_to_do_foo>>
) {
  BarParser barParser(bar);

  <<section_function_do_fooBody>>
} 
#+end_src

The function will require additional parameter for the purposes of the /FizzBazz/ module. We will discuss them in a [[*Decoding FizzBazz messages][later_section]].

程序的全部内容存储在一个文件中,文件顶部有 #+SETUP: theme-readtheorg.setup。安装文件不是问题,因为 HTML 生成正确,只是没有我想要的内容。

问题

为了生成代码,我使用 (org-babel-tangle)。这会为所有带有 :tangle 参数的块生成我期望的所有文件。这些文件具有我希望它们具有的内容,并且代码可以按应有的方式编译和运行。

为了生成我想随代码发布的文档,我使用 (org-html-export-to-html)。我期望发生的是:

  1. <<tags>> 将被替换为他们的预期值,这不是理想的但至少可以接受,或者
  2. 在使用 Emacs 编辑 org 文件时,<<tags>> 将保持原样。

然而 (org-html-export-to-html) 的输出完全不同且出乎意料 - 所有 <<tags>> 都被替换为换行符。这给我留下了所有具有不正确内容的代码块,如果不查看生成的代码或原始组织文件就无法理解,这完全违背了将文档放在单独文件中的目的。我不能强迫与我一起工作的每个人都切换到 Emacs 让他们浏览文档!

问题

如上所述,问题在于 (org-html-export-to-html) 中的某个调用正在处理 noweb <>。我对这个问题的疑问是:

如何强制 (org-html-export-to-html) 保留源块的内容,而不剥离 noweb <<tags>>

IIUC,你需要指定一个合适的:nowebheader。试试这个:

#+begin_src cpp :noweb no-export

并参考手册中的 noweb section 了解其他值和更多详细信息。