¿Cómo puedo desactivar los métodos de entrada de codorniz en las fórmulas de LaTeX?

7

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 fda fdentro de un entorno matemático LaTeX y en фotros lugares.

Nombre
fuente
Relacionado (pero sin respuesta): tex.stackexchange.com/questions/195369/…
giordano
@giordano: Tenga en cuenta que la cuestión se ha vinculado a los enlaces a una pregunta StackOverflow, que hace tener una respuesta . Sin embargo, no lo he comparado con mi respuesta. (Sin embargo, es posible que tenga tiempo para hacerlo más tarde.)
Constantine
@Constantine Me gusta su enfoque, más que el de la respuesta en Stack Overflow. Estaba buscando la función para asesorar, pero no estoy realmente familiarizado con los métodos de entrada.
giordano
@ giordano: Tampoco estoy tan familiarizado con los métodos de entrada, solo utilicé esto como una excusa para investigar y aprender sobre ello. :-) He actualizado la respuesta, por cierto. Creo que ahora es un poco menos hack.
Constantine

Respuestas:

6

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:

(advice-add 'quail-input-method :around
            (lambda (orig key)
              "Disable quail-input-method in TeX and LaTeX formulas. Uses AUCTeX."
              (if (and (eq major-mode 'latex-mode)
                       (fboundp 'texmathp)
                       (texmathp))
                  (let ((overriding-local-map t))
                    (funcall orig key))
                (funcall orig key))))

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:

(defadvice quail-input-method (around disable-quail-in-formulas activate)
  "Disable quail-input-method in TeX and LaTeX formulas. Uses AUCTeX."
  (if (and (eq major-mode 'latex-mode)
           (fboundp 'texmathp)
           (texmathp))
      (let ((overriding-local-map t))
        ad-do-it)
    ad-do-it))
Constantina
fuente
Gracias por su respuesta, cuando pongo su código me sale el error La definición de la función del símbolo es nula: advice-add . No sé de dónde surge este problema.
Nombre
@Nombre: 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).
Constantine
@Nombre: actualicé la respuesta; Avísame si te funciona ahora.
Constantine
+1000 por esta maravillosa respuesta, funciona perfecto.
Nombre