我正在使用 emacs auctex。我定义了一个环境模板,如下所示。
\documentclass{article}
\newtheorem{definition}{Definition}[section]
\begin{document}
\end{document}
我使用键盘快捷键将此环境的实例插入文档中Ctrl-C, Ctrl-E
。执行此操作后,我希望系统提示我输入一个名称,该名称将包含在方括号中,如下所示:
\begin{definition}[Cauchy-Schwartz]
\end{definition}
我该怎么做?
答案1
我将提供的解决方案需要启用文件解析。如AUCTeX 手册你可以通过将其添加到你的来实现它.emacs
,如果你还没有这样做的话
(setq TeX-parse-self t) ; Enable parse on load.
(setq TeX-auto-save t) ; Enable parse on save.
此外,我提醒你,最好也添加以下行
(setq-default TeX-master nil)
以便管理多文件文档。
回到您的问题,将以下代码添加到您的.emacs
(这也适用于 AUCTeX 的当前稳定版本,11.87)
(add-hook
'LaTeX-mode-hook
(lambda ()
(TeX-auto-add-type "theorem" "mg-LaTeX")
;; Self Parsing -- see (info "(auctex)Hacking the Parser").
(defvar mg-LaTeX-theorem-regexp
(concat "\\\\newtheorem{\\(" TeX-token-char "+\\)}")
"Matches new theorems.")
(defvar mg-LaTeX-auto-theorem nil
"Temporary for parsing theorems.")
(defun mg-LaTeX-theorem-prepare ()
"Clear `mg-LaTex-auto-theorem' before use."
(setq mg-LaTeX-auto-theorem nil))
(defun mg-LaTeX-theorem-cleanup ()
"Move theorems from `mg-LaTeX-auto-theorem' to `mg-LaTeX-theorem-list'.
Add theorem to the environment list with an optional argument."
(mapcar (lambda (theorem)
(add-to-list 'mg-LaTeX-theorem-list (list theorem))
(LaTeX-add-environments
`(,theorem ["Name"])))
mg-LaTeX-auto-theorem))
;; FIXME: This does not seem to work unless one does a manual reparse.
(add-hook 'TeX-auto-prepare-hook 'mg-LaTeX-theorem-prepare)
(add-hook 'TeX-auto-cleanup-hook 'mg-LaTeX-theorem-cleanup)
(TeX-auto-add-regexp `(,mg-LaTeX-theorem-regexp 1 mg-LaTeX-auto-theorem))))
编辑完成后,重新启动 Emacs(注意:通常是M-x eval-buffer
RET,但通过重新启动 Emacs,您可以确保更改正确加载)。打开带有定义的文档\newtheorem
,(重新)解析文件,例如进行虚拟编辑(并删除空格)并保存缓冲区,然后您就可以使用可选参数添加定理Name
。