LaTeX-env-label 上的 auctex 11.88 bug(?),無法自動插入標籤

LaTeX-env-label 上的 auctex 11.88 bug(?),無法自動插入標籤

我最近在 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,並且實際插入的標籤由 a 的值選擇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:"))))

相關內容