Gostaria de escrever um comando elisp emacs que insira uma string fixa que contenha uma parte variável na posição atual do cursor:
\label{$STRING} \index{\nameref{$STRING}}
onde o comando deve consultar $STRING
e inserir o texto inteiro.
Aqui está uma função elisp simples para isso:
(defun labelnameref (string)
"Insert \label{ARG} \index{\nameref{ARG}} at point"
(interactive "sString for \\label and \\nameref: ")
(insert "\\label{" string "} \\index{\\nameref{" string "}}"))
Essa função consulta no minibuffer a string e depois insere tudo no ponto. Para usá-lo, você pode colocá-lo no seu .emacs e depois invocá-lo via M-x labelnameref
ou vinculá-lo a uma chave.
Se você deseja usar muitas construções semelhantes, pode ser mais fácil escrevê-las como yasnippets. Com o YASnippet, você pode criar facilmente um snippet com comportamento semelhante ao descrito acima. Por exemplo, você pode usar o seguinte (você substituiu "keybinding" por uma keybinding adequada, se desejar uma keybinding para ela):
# -*- mode: snippet -*-
# name: foo
# key: foo
# binding: "keybinding"
# --
\label{$1} \index{\nameref{$1}}
Com isso, você escreve foo e pressiona Tabdiretamente depois para expandi-lo \label{$1} \index{\nameref{$1}}
e procurar $1
.