13

Emacsでは、メモのテキストドキュメント(.txtドキュメントではなく.texドキュメント)を自分で編集しているときに、さまざまなUnicode文字に簡単にアクセスできるようにするためにを使用しM-x set-input-method Ret TeXています。たとえば、入力する\tospaceと「→」がテキストに挿入され、入力するx^2と「x 2」が挿入されます。これは、使用しているフォントがそれぞれUnicodeコードポイント0x2192とをサポートしているため0x00B2です。

メソッドで特別に処理される文字の1つは、アンダースコアキー用_です。ただし、Emacsに使用しているフォントは、添え字ゼロ(コードポイント0x2080)など、さまざまな添え字文字のコードポイントをサポートしていないようです。そのため、_0入力すると、出力に薄い空白としてレンダリングされるものが表示されます。 。_0この場合、2つの文字だけを使用したいと思います。

シーケンスの途中でキーストロークを実行すると、EmacsがTeX入力メソッドを中止するため、厄介なキーストロークシーケンスを実行できます。しかし、これは厄介です。_0_spacedel0space

だから_、私の質問: TeX入力メソッドを使用しているときにキーをまったく再マップしないようにEmacsをローカルにカスタマイズするにはどうすればよいですか?または、TeX入力メソッドの変更されたクローン(または拡張機能など)を作成して、その魔法からアンダースコアを除外するにはどうすればよいですか?

私がこれまでに試したこと:

  • 私はすでにやりM-xdescribe-keyました_; self-insert-commandただし、他の多くのテキスト文字と同様に、にバインドされているだけです。私はpost-self-insert-hookそこを見ましたが、TeX入力メソッドを破壊するためにそれを使用しようとすることを検討していません。

私が今まで試したことのないこと:

  • 入力メソッドのアーキテクチャやそのソースコードについては何も学ぼうとはしていません。コードとメソッドの私の簡単な範囲から。それは私がすぐに飛び込むことができるもののようには思えませんでした。
4

4 に答える 4

6

だからここに私が見つけた解決策があります:望ましくないエントリをすべて削除して、TeX入力メソッドのパーソナライズされたコピーを作成します。次に、を使用する場合M-x set-input-methodは、の代わりにパーソナライズされたバージョンを選択しますTeX

私は以前にこれを試していたでしょうが、の組み込みドキュメントset-input-modeとその同類は、私がそれを見つけるための入力メソッドの実際のソースへの十分なガイダンスを提供していません。SOで別の検索を行い、これを見つけた後でのみ、Emacs:入力メソッドをアクティブ化できません。自分でこれを行うのに十分な情報を取得できました。

詳細:

  1. Emacsで、/usr/share/emacs/22.1/leim/leim-list.elカスタマイズする入力メソッドのエントリを開いて見つけます。エントリは次のような形式になります。

    (register-input-method
     "TeX" "UTF-8" 'quail-use-package
     "\\" "LaTeX-like input method for many characters."
     "quail/latin-ltx")
    
  2. 上記のフォームの最後の要素で参照されているファイル名のプレフィックスに注意してください。対応するElispソースファイルを見つけます。この場合、これはファイルへの相対パスですquail/latin-ltx.el[.gz]。そのファイルをEmacsで開き、チェックしてください。メソッドの再マッピングのエントリが、必要なものと望ましくないものの両方に含まれている必要があります。

  3. 他のEmacsカスタマイズの中で、そのElispソースファイルのユーザーローカルコピーを作成します。そのローカルコピーをEmacsで開きます。

  4. ローカルコピー(quail-define-package ...)で、ファイル内のフォームを見つけて、パッケージの名前を変更します。私は次FSK-TeXのように新しい名前として使用しました:

    (quail-define-package
     "FSK-TeX" "UTF-8" "\\" t   ;; <-- The first argument here is the important bit to change.
     "LaTeX-like input method for many characters but not as many as you might think.
     ...)
    
  5. ローカルコピーを調べて、不要なマッピングのS式をすべて削除します。

  6. .emacs構成ファイルでleim-list.el、ステップ1で見たものと同様のフォームを使用して、カスタマイズした入力メソッドを登録します。

    (register-input-method
     "FSK-TeX" "UTF-8" 'quail-use-package
     "\\" "FSK-customized LaTeX-like input method for many characters."
     "~/ConfigFiles/Elisp/leim/latin-ltx")
    
  7. Emacsを再起動し、新しい入力メソッドをテストします。私の場合、を実行しM-x set-input-method FSK-TeX、入力して、それがバッファに表示されるa_0ことを確認します。a_0


したがって、インストールした後は、質問にリストされている回避策のいくつかよりも厄介ではない答えが少なくとも1つあります(そして、入力メソッドの処理を遮断する方法として、Emacs22マニュアルにも公式に文書化されています)。

ただし、将来の変更をTeXモードに継承.emacsし、起動時に不要なエントリを削除するだけなので、このソリューションにはあまり満足していません。

だから私は他の誰かがこれよりも良い答えを思い付くかどうかを確認するのを待ちます。

于 2013-03-03T16:55:39.727 に答える
1

私はこれを自分でテストしませんでしたが、これはあなたが探しているものとまったく同じようです:

「emacsのTeXモードでアンダースコアの添え字を無効にする方法」-ソース

このブログポットには、次の2つの解決策があります。

  1. ブログ投稿の作者による:((setq font-lock-maximum-decoration nil)最大から)

  2. コメントとして言及:

    (eval-after-load "tex-mode" '(fset 'tex-font-lock-subscript 'ignore))

于 2013-03-03T00:16:06.597 に答える
1
于 2016-04-03T13:44:42.273 に答える
0

As already explained in pnkfelix answer, it seems we have to make a personalized copy of the TeX input method. But here comes a lighter way to do that, without any file tweaking. Simply put the following in your .emacs :

(eval-after-load "quail/latin-ltx"
  '(let ((pkg (copy-tree (quail-package "TeX"))))
     (setcar pkg "MyTeX")
     (assq-delete-all ?_ (nth 2 pkg))
     (quail-add-package pkg)))
(set-input-method 'TeX)
(register-input-method "MyTeX" "UTF-8" 'quail-use-package "\\")
(set-input-method 'MyTeX)

The important part is the assq-delete-all line in the middle that remove all shortcut entries starting with _. It's a bit of a lisp hack but it seems to work. Since I'm also annoyed by the shortcuts starting with - and ^, I also use the following two lines to disable them :

     (assq-delete-all ?- (nth 2 pkg))
     (assq-delete-all ?^ (nth 2 pkg))

Note that afterwards you can M-x set-input-method at any time and indicate TeX or MyTeX to switch between the pristine TeX input method or the customized one.

于 2019-06-19T16:51:52.807 に答える