Como posso desativar os métodos de entrada de codorna nas fórmulas do LaTeX?

7

Se você definir um método de entrada (por exemplo, via M-x set-input-methodRET cyrillic-translitRET), poderá digitar caracteres cirílicos usando um teclado dos EUA: o Emacs usará regras de transliteração para converter caracteres romanos em caracteres cirílicos. Se você olhar cyrillic.el, verá, por exemplo ("f" ?ф), ou seja, digitar fgive ф.

Agora imagine que você está editando um arquivo LaTeX e LaTeX-mode( AUCTeX ) ativado. Você usa caracteres cirílicos no corpo do texto e caracteres romanos em fórmulas. Neste contexto gostaria fde produzir fe não ф em modo matemático, (ou seja, em $...$, \[...\], \(...\)e em ambientes de matemática).

Se eu entendi a pergunta, como detectar se dentro de um ambiente matemático LaTeX? e esta resposta corretamente, a função texmathppode detectar se estamos em um ambiente de matemática.

Minha pergunta é sobre a possibilidade da seguinte transliteração condicional usando quail

digitação ffornece fdentro de ambientes matemáticos LaTeX e em фoutros lugares.

Nome
fonte
Relacionado (mas sem resposta): tex.stackexchange.com/questions/195369/…
giordano
@giordano: Note-se que a pergunta que você ligados a links para uma pergunta StackOverflow que faz ter uma resposta . Eu não a comparei com a minha resposta, no entanto. (I pode ter o tempo para fazê-lo mais tarde, no entanto.)
Constantine
@ Constantine Eu gosto da sua abordagem, mais do que a da resposta no Stack Overflow. Eu estava procurando a função para aconselhar, mas não estou realmente familiarizado com os métodos de entrada.
Giordano
@giordano: Eu também não estou familiarizado com os métodos de entrada, apenas usei isso como uma desculpa para procurar e aprender sobre isso. :-) Eu atualizei a resposta, a propósito. Eu acho que é um pouco menos de um hack agora.
Constantine

Respostas:

6

Faz quase 10 anos desde a última vez que precisei editar um documento LaTeX em russo, mas posso me relacionar. :-)

De acordo com o Emacs Lisp Manual, todo método de entrada deve desativar a conversão e conversão de chaves, se overriding-local-mapestiver definido.

Deveríamos poder confiar nisso para desativar quailcondicionalmente.

No Emacs 24.4 e posterior (usando o novo mecanismo de aconselhamento), adicione isso ao seu arquivo 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))))

Observe que eu verifico se o modo principal atual é latex-mode; pode ser necessário ajustar isso. (Temos que verificar o modo principal porque, uma vez carregado o AUCTeX, é texmathpvinculado a todos os buffers, e não queremos mexer nos métodos de entrada apenas porque existem sinais de dólar no buffer atual.)

Nas versões mais antigas do Emacs (testadas no Emacs 23.4.1), precisamos 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))
Constantine
fonte
Obrigado pela sua resposta, quando eu coloco seu código, recebo o erro A definição da função do símbolo é nula: conselhos-adição . Eu não sei de onde esse problema surge.
Name
@Name: advice-addfoi adicionado no Emacs 24.4. Atualizarei a resposta para incluir uma versão do código que funciona com versões mais antigas do Emacs. (Eu vou deixar você saber, uma vez que é feito.)
Constantine
@Name: eu atualizei a resposta; deixe-me saber se funciona para você agora.
Constantine
+1000 para esta resposta maravilhosa, funciona perfeitamente.
Name