AUCTeX
Если вы используете auctex :
- Отметьте блок текста, который вы хотите заключить в среду.
- Нажмите Cc Ce .
- Введите тип среды по вашему выбору (вы можете ввести только несколько символов и использовать завершение табуляции) и нажмите Введите .
Подробнее см. в руководстве .
Обратите внимание, что существует аналогичный метод для включения помеченного текста в макросы.Выполните от 1 до 3, но вместо этого нажмите Cc Ce или Cc Введите .Подробнее см. в руководстве .
YASnippet
Если вы используете YASnippet , вы можете создать фрагмент с поведением, аналогичным описанному выше.Например, вы можете использовать следующее (вы должны заменить «связывание клавиш» на правильное связывание клавиш):
# -*- mode: snippet -*-
# name: LaTeX environment
# key: "keybinding"
# --
\begin{$1}
`yas/selected-text`$0
\end{$1}
Если вам нужен фрагмент кода для макросов, вы можете использовать что-то вроде следующего:
# -*- mode: snippet -*-
# name: LaTeX macro
# key: "keybinding"
# --
\$1{`yas/selected-text`$0}
Elisp
Даже если я рекомендую описанные выше подходы, могут возникнуть ситуации, когда вы захотите вместо этого использовать простую функцию elisp.Следующее - это просто что-то грубое, которое имеет гораздо меньшую функциональность, чем вышеуказанные подходы:
(defun ltx-environment (start end env)
"Insert LaTeX environment."
(interactive "r\nsEnvironment type: ")
(save-excursion
(if (region-active-p)
(progn
(goto-char end)
(newline)
(insert "\\end{" env "}")
(goto-char start)
(insert "\\begin{" env "}") (newline))
(insert "\\begin{" env "}") (newline) (newline)
(insert "\\end{" env "} "))))
И для макросов, если вы тоже этого хотите:
(defun ltx-macro (start end env)
"Insert LaTeX macro."
(interactive "r\nsMacro: ")
(save-excursion
(if (region-active-p)
(progn
(goto-char end) (insert "}")
(goto-char start) (insert "\\" env "{"))
(insert "\\" env "{}"))))
Чтобы использовать их, поместите их в свой.emacs и do Mx ltx-environment
или ltx-macro
соответственно.