auctex 11.88 在 LaTeX-env-label 上存在错误(?),无法自动插入标签

auctex 11.88 在 LaTeX-env-label 上存在错误(?),无法自动插入标签

我最近在 emacs 24.4(win7+mac)上尝试了 auctex 11.88。到目前为止一切顺利!

当我使用 auctex11.87 时,我的 .emacs emacs 文件中曾经有以下内容(我在 stackexchange 的某个地方碰到过它)

(setq reftex-label-alist
  '(
    ("theorem" ?h "thm:" "~\\ref{%s}" t  ("theorem" "th."))
    ("lemma" ?l "lem:" "~\\ref{%s}" t  ("lemma" "lem." ))
    ("exercise" ?x "ex:" "~\\ref{%s}" t  ("exercise" "ex." ))
    ("question" ?q "ques:" "~\\ref{%s}" t  ("question" "q." ))
    ))

(add-hook 'LaTeX-mode-hook
   (lambda ()
     (LaTeX-add-environments
       '("lemma" LaTeX-env-label)
       '("exercise" LaTeX-env-label)
       '("theorem" LaTeX-env-label)
       '("question" LaTeX-env-label)
       )))

(setq  reftex-insert-label-flags '("s" "ft"))

当我插入新定义的环境时,它会自动生成一个标签,例如,当我运行时C-c C-e exercise RET,我得到

\begin{exercise}
  \label{ex:1}
  (cursor here)
\end{exercise}

现在在 auctex11.88 我只能得到

\begin{exercise}
  (cursor here)
\end{exercise}

我需要进一步运行C-c (才能添加\label{ex:1}到那里。

我不确定我使用的 lisp 代码是否过时了。我尝试执行短代码(LaTeX-env-label "exercise")。在 auctex11.87 中我得到了想要的结果,但在 auctex11.88 中却没有。

请指教!非常感谢!

顺便问一下,这真的是早期提到的一个错误吗? 邮件 或者我们应该在 auctex11.88 中调整其他内容?一些新功能 + 向后兼容性问题在 邮件列表 我不是这方面的专家,有人可以详细说明一下吗?非常感谢!

答案1

AUCTeX 和 RefTeX 是两个独立的软件包,一个可以单独使用。AUCTeX 有一些关于标签和引用管理的功能,而 RefTeX 在这方面做得更好。

并非所有人都使用 RefTeX,AUCTeX 11.88 中有一个变化,允许用户选择要插入哪些标签。此选择与 RefTeX 无关,但副作用是人们需要自定义另一个 AUCTeX(不是 RefTeX)变量:LaTeX-label-alist。以下是其在手动的

用户选项LaTeX 标签列表

列出每个支持的环境的标签要使用的前缀。

这是一个 alist,其 car 是环境名称,cdr 是前缀或引用环境名称的符号。

如果未找到名称,或者 cdr 为零,则不会自动为该环境插入标签。

如果要自动插入环境标签但前缀为空,请使用空字符串""作为相应条目的 cdr。

LaTeX-label-alist因此,您还应该为环境添加一个条目excercise。在您的 中.emacs,将 替换add-hook为此

(add-hook
 'LaTeX-mode-hook
 (lambda ()
   (LaTeX-add-environments
    '("lemma" LaTeX-env-label)
    '("exercise" LaTeX-env-label)
    '("theorem" LaTeX-env-label)
    '("question" LaTeX-env-label))
   (add-to-list 'LaTeX-label-alist '("exercise" . "ex:"))))

为了避免混淆:AUCTeX 根据 来决定是否应插入标签LaTeX-label-alist,但如果启用了 RefTeX,特别是如果LaTeX-label-functionreftex-label则标签的插入将转移到 RefTeX,并且实际插入的标签由 RefTeX 变量的值来选择reftex-label-alist

exercise对于 RefTeX 用户来说,条目的 CDR 值LaTeX-label-alist几乎没用,重要的是它是一个有效的字符串。

定制的目的LaTeX-label-alist是让 RefTeX 和非 RefTeX 用户具有相同的行为。


.emacs为了清楚起见,这是我用于测试的最小值:

;; Enable RefTeX automatically in AUCTeX buffers.
(autoload 'turn-on-reftex "reftex" "RefTeX Minor Mode" nil)
(add-hook 'TeX-mode-hook
      (lambda ()
        (turn-on-reftex)))
(setq reftex-plug-into-AUCTeX t)

;; RefTeX-related settings.
(setq
 reftex-label-alist
 '(("theorem" ?h "thm:" "~\\ref{%s}" t  ("theorem" "th."))
   ("lemma" ?l "lem:" "~\\ref{%s}" t  ("lemma" "lem." ))
   ("exercise" ?x "ex:" "~\\ref{%s}" t  ("exercise" "ex." ))
   ("question" ?q "ques:" "~\\ref{%s}" t  ("question" "q." )))
 reftex-insert-label-flags '("s" "ft"))

;; AUCTeX-related settings.
(add-hook
 'LaTeX-mode-hook
 (lambda ()
   (LaTeX-add-environments
    '("lemma" LaTeX-env-label)
    '("exercise" LaTeX-env-label)
    '("theorem" LaTeX-env-label)
    '("question" LaTeX-env-label))
   (add-to-list 'LaTeX-label-alist '("exercise" . "ex:"))))

相关内容