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)))))
組織ファイル
ファイルのどこかに、以下を作成します。
- マクロを含む「macros」という名前の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:
マクロが変更されるたびにこれを実行します。