LaTeX数式でウズラ入力メソッドを無効にするにはどうすればよいですか?


7

入力方式を設定する場合(M-x set-input-methodRET cyrillic-translitRET などを使用)、USキーボードを使用してキリル文字を入力できます。Emacsは音訳規則を使用して、ローマ字をキリル文字に変換します。あなたが見ればcyrillic.el、あなたが例えば参照("f" ?ф)、すなわち、タイピングがfできますф

LaTeXファイルを編集していて、LaTeX-modeAUCTeX)が有効になっているとしましょう。テキストの本文にはキリル文字を使用し、式にはローマ文字を使用します。この文脈では、希望 f生成するfいない ф数式モードでは、(すなわちで$...$\[...\]\(...\)、および数学の環境では)。

LaTeX数学環境内にあるかどうかを検出する方法の質問を理解している場合そして、この答えは正しく、機能はtexmathp私たちが数学の環境であるかどうかを検出することができます。

私の質問は、以下を使用した条件付き文字変換の可能性についてです quail

タイピングff、LaTeXの数学環境の内部などфで使用できます。



@giordano:リンクした質問は、回答あるStackOverflow質問へのリンクです。私はそれを私の答えと比較していません。(ただし、後で実行する時間があるかもしれません。)
コンスタンティン

@Constantine Stack Overflowでの答えよりもあなたのアプローチが好きです。アドバイスする機能を探していましたが、インプットメソッドに慣れていません。
giordano

@giordano:私もインプットメソッドにあまり詳しくないので、これを口実に使って調べて、それについて学びました。:-)ところで、私は答えを更新しました。今は少しハックが少ないと思います。
コンスタンティン

回答:


6

最後にロシア語でLaTeX文書を編集する必要があったのは、ほぼ10年になりますが、私は関連することができます。:-)

Emacs Lispマニュアルによると、overriding-local-map設定されている場合、すべての入力メソッドはキーの変換と変換を無効にする必要があります。

これに依存して、quail条件付きで無効にすることができるはずです。

Emacs 24.4以降(新しいアドバイスメカニズムを使用)では、これを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))))

現在のメジャーモードがかどうかを確認していますlatex-mode。それを調整する必要があるかもしれません。(AUCTeXがロードtexmathpされるとすべてのバッファーにバインドされ、現在のバッファーにドル記号があるからといってインプットメソッドを台無しにしたくないので、メジャーモードをチェックする必要があります。)

古いEmacsバージョン(Emacs 23.4.1でテスト済み)では、次のように使用する必要があります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))

私はあなたのコードを入れたときにあなたの答えのおかげで、私はエラーを取得アドバイス-追加:シンボルの関数定義は無効です。この問題がどこから発生するのかはわかりません。
名前

@Name:advice-addEmacs 24.4で追加されました。答えを更新して、古いバージョンのEmacsで動作するバージョンのコードを含めます。(完了したらお知らせします。)
コンスタンティン14

@名前:回答を更新しました。うまくいくかどうか教えてください。
コンスタンティン

+1000この素晴らしい答えは完璧に機能します。
名前
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.