Я хотел бы написать команду elisp emacs, которая вставляет фиксированную строку, содержащую переменную часть в текущей позиции курсора:
\label{$STRING} \index{\nameref{$STRING}}
где команда должна запросить $STRING
и вставить весь текст.
Вот простая функция elisp для этого:
(defun labelnameref (string)
"Insert \label{ARG} \index{\nameref{ARG}} at point"
(interactive "sString for \\label and \\nameref: ")
(insert "\\label{" string "} \\index{\\nameref{" string "}}"))
Эта функция запрашивает строку в минибуфере, а затем вставляет ее в точку. Чтобы использовать его, вы можете поместить его в свой .emacs, а затем вызвать его через Mx labelnameref
или связать с ключом.
Если вы хотите использовать много подобных конструкций, может быть проще написать их как yasnippets. С YASnippet вы можете легко создать фрагмент с поведением, аналогичным описанному выше. Например, вы можете использовать следующее (вы должны заменить "связывание клавиш" на правильное связывание клавиш, если вы хотите связывание клавиш для него):
# -*- mode: snippet -*-
# name: foo
# key: foo
# binding: "keybinding"
# --
\label{$1} \index{\nameref{$1}}
При этом вы пишете foo и сразу после этого нажимаете Tab, чтобы развернуть его до \label{$1} \index{\nameref{$1}}
и запросить $1
.