Se você definir um método de entrada (por exemplo, via M-x set-input-method
RET cyrillic-translit
RET), 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 f
give ф
.
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 f
de produzir f
e 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 texmathp
pode detectar se estamos em um ambiente de matemática.
Minha pergunta é sobre a possibilidade da seguinte transliteração condicional usando quail
digitação
f
fornecef
dentro de ambientes matemáticos LaTeX e emф
outros lugares.
fonte
Respostas:
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-map
estiver definido.Deveríamos poder confiar nisso para desativar
quail
condicionalmente.No Emacs 24.4 e posterior (usando o novo mecanismo de aconselhamento), adicione isso ao seu arquivo init:
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, étexmathp
vinculado 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
:fonte
advice-add
foi 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.)