2013-08-14 3 views
4

Мой вопрос мотивирован написанием TeX в emacs, но не связан с самой системой TeX.Как заменить строку non-backslashed в режиме abacrev emacs?

Моя цель - создать аббревиатуры в emacs, чтобы заменить некоторые (TeX) макросы их символами юникода, например \ alpha с α, автоматически, когда я набираю TeX в emacs.

Я планировал достичь этого, используя систему аббревиатуры. В то время как следующие аббревиатуры работает отлично (заменяет тест с \ теста):

("test" "\\test" nil 0) 

Аббревиатуры, которые могли бы сделать то, что я хочу, а именно:

("\\alpha" "A" nil 0) 

или

("\\\\beta" "B" nil 0) 

не применяют когда я набираю \ alpha или \ beta.

(я мог бы обойти это, заменив «альфа» себя и удаление одного предшествующего символа, но я хотел бы сохранить возможность вводить альфа без обратной косой черты и не применяя это правило расшифровкой сокращений.)

Что такое правильная форма аббревиатуры, которая заменяет \ alpha на α?

ответ

4

Необходимо изменить свойство :regexp вашей таблицы аббревиатуры.

(abbrev-table-put <your-abbrev-table> :regexp "\\(\\\\[[email protected]]+\\)") 

Единственная проблема заключается в регулярное выражение, которое сопоставляется смотрит назад, вы не можете иметь дополнительные символы в начале. Таким образом, либо вы меняете категорию синтаксиса \ (но тогда вам не нужна специальная обработка таблиц аббревиатуры), или вам нужно выбрать, чтобы все аббревиатуры в этой таблице начинались с обратной косой чертой или без нее.

Но почему вы не используете метод ввода для вставки символов Юникода?

+0

По крайней мере, метод ввода TeX, описанный ниже, слишком хочет заменить, что позволяет вам легко набирать \ over, \ varepsilon или другие макросы TeX, которые на самом деле не являются частью метода ввода. Моя цель состояла в том, чтобы найти решение, в котором я могу набрать TeX, как всегда, с заменой, происходящей без активного ввода от меня. –

+0

Вижу. Я использую rfc1345, это действительно полная и систематическая; Я рекомендую вам попробовать. В любом случае изменение регулярного выражения работает с одним оговором (см. Отредактированный ответ). – angus

1

Это уже существует. Используйте функцию set-input-method и выберите TeX.

+0

Не отвечая на вопрос, это уклоняется от вопроса и позволяет мне достичь своей цели напрямую. Спасибо. –

+0

Что касается вашего решения, можно ли предложить emacs не-нетерпеливую версию системы ввода-метода? Например, если у меня есть аббревиатура для \\ alpha и type \\ alphar, ничего не заменяется. Однако, если я ввожу \ varepsilon в методе ввода TeX, я получаю ǎrepsilon, потому что он aggresively соответствует \ va, который находится в его базе данных. –

+0

Я никогда не играл с аббревиатурой –