8

Elispを使用して、Emacsに動的テキスト置換(表示のみを置換し、実際に格納されたファイルは置換しない)を実装したいと考えています。

たとえば、LaTeX 文書では、 と入力\alphaして、Emacs に と同じようαに表示させたいので、読みやすくなります。しかし、結果.texファイルでは、保存する\alpha代わりに ,αが必要です。(注記: XeTeX または LuaTeX を使用して、UTF-8 を直接サポートすることもできます。しかし、コラボレーションとジャーナルの要件のために、UTF-8 文字をファイルに直接保存したくありません.tex。代わりに、プレビューを使用することもできます。 AUCTeXで.しかし、数式を編集しているときは役に立ちません)

既存の例は org-mode です。[[link][name]]最後の を入力した直後に を入力する]と、表示されたテキストがハイパーリンク付きの名前だけに置き換えられます。一方、このファイルを保存すると、保存された内容は[[link][name]]表示されているものとは異なり、元の内容になります。

これをどのように実装できるかについてのアイデアはありますか?

PS: The Display Specs That Replace The Text section of Emacs manual. ただし、置換対象の文字列ではなく、開始点と終了点を指定する必要があります。これは、開始点と終了点を決定するために、すべてのユーザー入力の後に検索を行う必要があることを意味します。これは、パフォーマンスとアルゴリズムの複雑さのために非現実的に見えます。

4

1 に答える 1

6

これを行う 1 つの方法は、関連するモードのフォント ロック キーワードを追加しcompose-region、古い文字列の代わりに新しいグリフを表示するために使用することです。

(font-lock-add-keywords
 'latex-mode `(("\\(\\\\alpha\\)"
                (0 (progn (compose-region (match-beginning 1)
                                          (match-end 1) "α")
                          nil)))))

org-modeまた、あなたが言及したリンクだけでなく、LaTeXのようなエンティティにも、この種の機能がすでに組み込まれていることに注意してください。

(setq org-pretty-entities t)
于 2012-11-28T07:55:43.610 に答える