当使用 Ctrl-C、Ctrl-E 插入环境时,如何让 AucTex 提示我输入名称?

当使用 Ctrl-C、Ctrl-E 插入环境时,如何让 AucTex 提示我输入名称?

我正在使用 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

相关内容