我一直在使用 Org-mode 撰写有关编程的博客文章。为此,我在 .org 文件中包含了内联代码段,如下所示:
#+BEGIN_SRC csharp
public class UserBuilder
{
private string _firstName;
private string _lastName;
...
#+END_SRC
当我使用导出 html 功能时,它的格式如下:
<pre class="src src-csharp"><span style="color: #7f007f;">public</span> <span style="color: #7f007f;">class</span> <span style="color: #228b22;">UserBuilder</span>
{
<span style="color: #7f007f;">private</span> <span style="color: #228b22;">string</span> <span style="color: #a0522d;">_firstName</span>;
<span style="color: #7f007f;">private</span> <span style="color: #228b22;">string</span> <span style="color: #a0522d;">_lastName</span>;
...
</pre>
由于我在博客上使用 JavaScript 来格式化代码片段,所以我希望输出如下所示:
<pre name="code" class="csharp">
public class UserBuilder
{
private string _firstName;
private string _lastName;
...
</pre>
这能做到吗?怎样做到?
答案1
有关更改源代码导出器的文档可以在以下文档中找到org-export-format-source-code-or-example
:C-h f org-export-format-source-code-or-example
...
检查名为“org--format-source-code-or-example”的函数是否已绑定。如果是,则将其用作自定义格式化程序。否则,使用默认格式化程序。为 docbook、html、latex 和 ascii 后端提供了默认格式化程序。例如,使用“org-html-format-source-code-or-example”提供自定义格式化程序以导出到“html”
。...
可以找到一个示例导出函数这里(l. 2635)。已修改以满足您的要求:
(defun org-html-format-source-code-or-example
(lines lang caption textareap cols rows num cont rpllbl fmt)
(setq lines
(concat
"<pre name=\"code\" class=\"" lang "\">\n"
(cond
(textareap
(concat
(format "<p>\n<textarea cols=\"%d\" rows=\"%d\">"
cols rows)
lines "</textarea>\n</p>\n"))
(t
(with-temp-buffer
(insert lines)
(goto-char (point-min))
(while (re-search-forward "[<>&]" nil t)
(replace-match (cdr (assq (char-before)
'((?&."&")(?<."<")(?>.">"))))
t t))
(buffer-string))))
"</pre>\n"))
(unless textareap
(setq lines (org-export-number-lines lines 1 1 num cont rpllbl fmt)))
lines)
评估后(复制到 *scratch* 并运行M-x eval-buffer
,或放入 .emacs 并重新启动)html 导出
#+BEGIN_SRC java
public class UserBuilder
{
private string _firstName;
private string _lastName;
}
#+END_SRC
作为
<pre name="code" class="java">
public class UserBuilder
{
private string _firstName;
private string _lastName;
}
</pre>
(必须在示例中切换语言,因为我的 emacs 不支持 c#,但它适用于所有语言)。