LaTeX-env-label의 auctex 11.88 버그(?), 자동으로 레이블을 삽입할 수 없음

LaTeX-env-label의 auctex 11.88 버그(?), 자동으로 레이블을 삽입할 수 없음

저는 최근 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 라벨 목록

지원되는 각 환경의 레이블에 사용할 접두사를 나열합니다.

이것은 car가 환경 이름이고 cdr이 접두사 또는 이를 참조하는 기호인 alist입니다.

이름을 찾을 수 없거나 cdr이 nil인 경우 해당 환경에 대한 레이블이 자동으로 삽입되지 않습니다.

환경에 대한 레이블을 자동으로 삽입하지만 접두사가 비어 있는 경우 빈 문자열을 ""해당 항목의 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-function라벨 reftex-label삽입은 RefTeX로 전송되고 실제로 삽입된 라벨은 a의 값에 의해 선택됩니다. RefTeX 변수, reftex-label-alist.

exerciseRefTeX 사용자의 경우 항목 의 CDR 값은 LaTeX-label-alist거의 쓸모가 없으며 유효한 문자열이라는 것이 중요합니다.

사용자 정의의 요점은 LaTeX-label-alistRefTeX 사용자와 비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:"))))

관련 정보