auctex 11.88 Fehler(?) bei LaTeX-env-label, Label kann nicht automatisch eingefügt werden

auctex 11.88 Fehler(?) bei LaTeX-env-label, Label kann nicht automatisch eingefügt werden

Ich habe vor Kurzem Auctex 11.88 auf Emacs 24.4 (Win7+Mac) ausprobiert. Bisher ist es großartig!

Als ich auctex11.87 verwendet habe, hatte ich Folgendes in meiner .emacs-Emacs-Datei (ich bin irgendwo bei Stackexchange darauf gestoßen):

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

Es generiert automatisch ein Label, wenn ich eine neu definierte Umgebung einfüge, z. B. wenn ich ausführe C-c C-e exercise RET, erhalte ich

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

jetzt in auctex11.88 kann ich nur

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

Ich muss weiter laufen, C-c (um es dort hinzuzufügen \label{ex:1}.

Ich bin nicht sicher, ob der von mir verwendete Lisp-Code veraltet. Ich habe versucht, das kurze Stück auszuführen (LaTeX-env-label "exercise"). In auctex11.87 erhalte ich das gewünschte Ergebnis, in auctex11.88 jedoch nicht.

Bitte um Rat! Vielen Dank!

BTW, ist es wirklich ein Fehler, der früh erwähnt wird in die Post oder sollten wir in auctex11.88 noch etwas anpassen? Einige neue Funktionen + Abwärtskompatibilitätsprobleme werden erwähnt in Mailingliste Ich bin kein Experte auf diesem Gebiet. Kann das jemand näher erläutern? Vielen Dank!

Antwort1

AUCTeX und RefTeX sind zwei getrennte und unabhängige Pakete, eines kann ohne das andere verwendet werden. AUCTeX bietet einige Funktionen für die Verwaltung von Beschriftungen und Zitaten, RefTeX ist hier viel besser.

Nicht jeder verwendet RefTeX und es gab eine Änderung in AUCTeX 11.88, die es Benutzern ermöglicht, auszuwählen, welche Beschriftungen eingefügt werden sollen. Diese Auswahl ist unabhängig von RefTeX, aber als Nebeneffekt müssen Benutzer eine weitere AUCTeX-Variable (nicht RefTeX-Variable) anpassen: LaTeX-label-alist. Hier ist ihre Beschreibung in derHandbuch

Benutzeroption:LaTeX-Label-Alist

Listen Sie die Präfixe auf, die für die Bezeichnung jeder unterstützten Umgebung verwendet werden sollen.

Dies ist eine Alist, deren Car der Umgebungsname und deren CDR entweder das Präfix oder ein darauf verweisendes Symbol ist.

Wenn der Name nicht gefunden wird oder der CDR Null ist, wird für diese Umgebung automatisch kein Label eingefügt.

Wenn Sie automatisch eine Bezeichnung für eine Umgebung mit einem leeren Präfix einfügen möchten, verwenden Sie die leere Zeichenfolge ""als CDR des entsprechenden Eintrags.

LaTeX-label-alistSie sollten daher auch einen Eintrag für die Umgebung hinzufügen excercise. .emacsErsetzen Sie in Ihrem add-hookdurch diesen

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

Um Verwirrung zu vermeiden: AUCTeX entscheidet anhand von , ob das Etikett eingefügt werden soll oder nicht. LaTeX-label-alistWenn RefTeX jedoch aktiviert ist, und insbesondere wenn LaTeX-label-function, reftex-labelwird das Einfügen des Etiketts an RefTeX übertragen und das tatsächlich eingefügte Etikett wird durch den Wert einer RefTeX-Variablen ausgewählt, reftex-label-alist.

Für RefTeX-Benutzer ist der CDR-Wert des exerciseEintrags LaTeX-label-alistnahezu nutzlos, wichtig ist, dass es sich um einen gültigen String handelt.

Der Sinn der Anpassung LaTeX-label-alistbesteht darin, für RefTeX- und Nicht-RefTeX-Benutzer das gleiche Verhalten zu erreichen.


Der Übersichtlichkeit halber ist dies das Minimum, das .emacsich zum Testen verwendet habe:

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

verwandte Informationen