Si establece un método de entrada (por ejemplo, mediante M-x set-input-methodRET cyrillic-translitRET), puede escribir caracteres cirílicos con un teclado de EE. UU .: Emacs utilizará reglas de transliteración para convertir caracteres romanos en caracteres cirílicos. Si observa cyrillic.el, verá, por ejemplo ("f" ?ф), escribir, fda ф.
Ahora imagine que está editando un archivo LaTeX y LaTeX-mode( AUCTeX ) habilitado. Utiliza caracteres cirílicos en el cuerpo del texto y caracteres romanos en las fórmulas. En este contexto que le gustaría fproducir fy no ф en modo matemático, (es decir, en $...$, \[...\], \(...\), y en entornos de matemáticas).
Si entiendo la pregunta de cómo detectar si está dentro de un entorno matemático LaTeX? y esta respuesta es correcta, la función texmathppuede detectar si estamos en un entorno matemático.
Mi pregunta es sobre la posibilidad de la siguiente transcripción condicional usando quail
escribir
fdafdentro de un entorno matemático LaTeX y enфotros lugares.
fuente

Respuestas:
Han pasado casi 10 años desde la última vez que necesité editar un documento LaTeX en ruso, pero puedo relacionarme. :-)
De acuerdo con el Manual Emacs Lisp, cada método de entrada debe deshabilitar la traducción y conversión de claves si
overriding-local-mapestá configurado.Deberíamos poder confiar en esto para deshabilitar
quailcondicionalmente.En Emacs 24.4 y posterior (usando el nuevo mecanismo de asesoramiento), agregue esto a su archivo init:
Tenga en cuenta que compruebo si el modo principal actual es
latex-mode; Es posible que deba ajustar eso. (Tenemos que verificar el modo principal porque una vez que se carga AUCTeX estátexmathpenlazado en todos los buffers, y no queremos meternos con los métodos de entrada solo porque hay signos de dólar en el buffer actual).En versiones anteriores de Emacs (probadas bajo Emacs 23.4.1) tenemos que usar
defadvice:fuente
advice-addse agregó en Emacs 24.4. Actualizaré la respuesta para incluir una versión del código que funcione con versiones anteriores de Emacs. (Te lo haré saber una vez que esté hecho).