替代解决方案(不是独立的),使用 Org 的动态块。
- 它没有我原始解决方案的任何警告(因为它生成了 Org 对 LaTeX 或 HTML 的实际期望)
- 可以在 LaTeX 模式下编辑宏 (
C-c C-'
)
打回来
创建一个以org-dblock-write:block-macro.el
以下内容命名的文件,并将其添加到 Emacs 的加载路径中。
(defun org-dblock-write:block-macro (params)
(let ((block-name (or (plist-get params :from) "macros"))
(org-buf (current-buffer)))
(with-temp-buffer
(let ((tmp-buf (current-buffer)))
(set-buffer org-buf)
(save-excursion
(org-babel-goto-named-src-block block-name)
(org-babel-mark-block)
(let ((mblock-begin (region-beginning))
(mblock-end (region-end)))
(set-buffer tmp-buf)
(insert-buffer-substring org-buf mblock-begin mblock-end)))
(set-buffer org-buf)
(insert "#+BEGIN_HTML\n\\(\n")
(insert-buffer-substring tmp-buf)
(insert "\\)\n#+END_HTML\n")
(set-buffer tmp-buf)
(beginning-of-buffer)
(while (re-search-forward "^" nil t)
(replace-match "#+LATEX_HEADER: " nil nil))
(set-buffer org-buf)
(insert-buffer-substring tmp-buf)))))
组织文件
在文件的某处,创建:
- 一个名为“宏”的 LaTeX 源代码块,其中包含您的宏
- 一个空的
block-macro
动态块
您可以更改源块的名称,并:from <custom-name>
在动态块中使用标头参数。另外,请注意:exports none
源代码块中的 (通常您不想导出 LaTeX 源代码)。
#+NAME: macros
#+BEGIN_SRC latex :exports none
\newcommand\a{a}
\def\b{b}
\DeclareMathOperator\c{c}
#+END_SRC
#+BEGIN: block-macro
#+END:
现在C-c C-c
与动态块上的点一起使用,它将更新为:
#+BEGIN: block-macro
#+BEGIN_HTML
\(
\newcommand\a{a}
\def\b{b}
\DeclareMathOperator\c{c}
\)
#+END_HTML
#+LATEX_HEADER: \newcommand\a{a}
#+LATEX_HEADER: \def\b{b}
#+LATEX_HEADER: \DeclareMathOperator\c{c}
#+LATEX_HEADER:
#+END:
每当修改宏时执行此操作。