bug auctex 11.88 (?) no LaTeX-env-label, não é possível inserir o rótulo automaticamente

bug auctex 11.88 (?) no LaTeX-env-label, não é possível inserir o rótulo automaticamente

Recentemente, experimentei o auctex 11.88 no emacs 24.4 (win7 + mac). está ótimo até agora!

Eu costumava ter o seguinte em meu arquivo .emacs emacs quando estava usando o auctex11.87 (encontrei isso no stackexchange em algum lugar)

(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"))

Ele gera automaticamente um rótulo quando insiro um ambiente recém-definido, digamos, quando executo C-c C-e exercise RET, recebo

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

agora em auctex11.88 só consigo

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

Preciso correr mais C-c (para adicionar \label{ex:1}lá.

Não tenho certeza se o código lisp que eu estava usando está desatualizado. Tentei executar a peça curta (LaTeX-env-label "exercise"). No auctex11.87 obtenho o resultado desejado, mas não no auctex11.88.

Por favor, avise! Muito obrigado!

Aliás, é realmente um bug mencionado anteriormente em o Correio ou devemos ajustar algo mais no auctex11.88? Algum novo recurso + problema de compatibilidade com versões anteriores é mencionado em lista de discussão Não sou especialista nisso, alguém poderia explicar? muito obrigado!

Responder1

AUCTeX e RefTeX são dois pacotes separados e independentes, um pode ser usado sem o outro. AUCTeX tem algumas facilidades sobre gerenciamento de rótulos e citações, o RefTeX é muito melhor nisso.

Nem todo mundo usa RefTeX e houve uma mudança no AUCTeX 11.88 para permitir que os usuários escolham quais rótulos devem ser inseridos. Esta seleção é independente do RefTeX, mas como efeito colateral as pessoas precisam personalizar outra variável AUCTeX (não RefTeX): LaTeX-label-alist. Aqui está sua descrição nomanual

Opção do usuário:Lista de rótulos LaTeX

Liste os prefixos a serem usados ​​para o rótulo de cada ambiente suportado.

Esta é uma lista cujo carro é o nome do ambiente e o cdr é o prefixo ou um símbolo referente a um.

Se o nome não for encontrado, ou se o cdr for nulo, nenhum rótulo será inserido automaticamente para esse ambiente.

Se você deseja inserir automaticamente um rótulo para um ambiente, mas com um prefixo vazio, use a string vazia ""como o cdr da entrada correspondente.

Portanto, você também deve adicionar uma entrada LaTeX-label-alistpara o excerciseambiente. No seu .emacs, substitua o add-hookpor este

(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:"))))

Para evitar confusão: AUCTeX decide se o rótulo deve ser inserido ou não LaTeX-label-alist, mas se o RefTeX estiver habilitado, e em particular se LaTeX-label-functionestiver reftex-label, a inserção do rótulo é transferida para o RefTeX e o rótulo realmente inserido é escolhido pelo valor de a Variável RefTeX, reftex-label-alist.

Para usuários do RefTeX o valor do CDR da exerciseentrada LaTeX-label-alisté quase inútil, o importante é que seja uma string válida.

O objetivo da personalização LaTeX-label-alisté ter o mesmo comportamento para usuários RefTeX e não-RefTeX.


Para maior clareza, este é o mínimo .emacsque usei para teste:

;; 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:"))))

informação relacionada