Ошибка auctex 11.88 (?) в LaTeX-env-label, невозможно автоматически вставить метку

Ошибка auctex 11.88 (?) в LaTeX-env-label, невозможно автоматически вставить метку

Недавно я попробовал auctex 11.88 на emacs 24.4(win7+mac). Пока все отлично!

Раньше в моем файле .emacs emacs, когда я использовал auctex11.87, было следующее (я наткнулся на него где-то на 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-label-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-function, reftex-labelвставка метки передается в RefTeX, а фактически вставляемая метка выбирается по значению переменной RefTeX, reftex-label-alist.

Для пользователей RefTeX значение CDR записи exerciseпрактически 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:"))))

Связанный контент