Wenn Sie eine Eingabemethode festlegen (z. B. über M-x set-input-method
RET cyrillic-translit
RET), können Sie kyrillische Zeichen über eine US-Tastatur eingeben: Emacs verwendet Transliterationsregeln, um römische Zeichen in kyrillische Zeichen umzuwandeln. Wenn Sie hineinschauen cyrillic.el
, sehen Sie zum Beispiel ("f" ?ф)
, dh das Geben f
gibt ф
.
Stellen Sie sich nun vor, Sie bearbeiten eine LaTeX-Datei und LaTeX-mode
( AUCTeX ) ist aktiviert. Sie verwenden kyrillische Zeichen im Textkörper und römische Zeichen in Formeln. In diesem Zusammenhang möchten Sie f
produzieren f
und nicht ф
in Mathematik - Modus (dh in $...$
, \[...\]
, \(...\)
, und in Mathematik Umgebungen).
Wenn ich die Frage verstehe, wie ich feststellen kann, ob ich mich in einer LaTeX-Mathematikumgebung befinde? und diese Antwort richtig, kann die Funktion texmathp
erkennen, ob wir uns in einer mathematischen Umgebung befinden.
Meine Frage betrifft die Möglichkeit der folgenden bedingten Transliteration mit quail
Das Tippen
f
gibtf
in einer LaTeX-Mathematikumgebung undф
anderswo.
quelle
Antworten:
Es ist fast 10 Jahre her, seit ich das letzte Mal ein LaTeX-Dokument auf Russisch bearbeiten musste, aber ich kann mich darauf beziehen. :-)
Gemäß dem Emacs Lisp-Handbuch sollte jede Eingabemethode die Schlüsselübersetzung und -konvertierung deaktivieren, wenn sie festgelegt
overriding-local-map
ist.Wir sollten uns darauf verlassen können, dass wir dies
quail
bedingt deaktivieren .Fügen Sie dies in Emacs 24.4 und höher (unter Verwendung des neuen Beratungsmechanismus) zu Ihrer Init-Datei hinzu:
Beachten Sie, dass ich überprüfe, ob der aktuelle Hauptmodus ist
latex-mode
; Möglicherweise müssen Sie dies anpassen. (Wir müssen den Hauptmodus überprüfen, da AUCTeX nach dem Ladentexmathp
in allen Puffern gebunden ist und wir nicht mit Eingabemethoden herumspielen möchten, nur weil der aktuelle Puffer Dollarzeichen enthält.)In älteren Emacs-Versionen (getestet unter Emacs 23.4.1) müssen wir Folgendes verwenden
defadvice
:quelle
advice-add
wurde in Emacs 24.4 hinzugefügt. Ich werde die Antwort aktualisieren, um eine Version des Codes aufzunehmen, die mit älteren Emacs-Versionen funktioniert. (Ich werde Sie wissen lassen, sobald das erledigt ist.)