Как вставить среду LaTeX вокруг блока текста в Emacs? - PullRequest
8 голосов
/ 31 января 2012

Я использую emacs с режимом cdlatex для редактирования файлов LaTeX. Я хотел бы знать, как вставить среду LaTeX вокруг блока текста, который уже написан, так что \begin{} идет перед выделенным текстом, а \end{} идет после выделенного текста. Я пытался использовать функцию cdlatex-environment, но при этом стирал выделенный текст.

Ответы [ 2 ]

7 голосов
/ 31 января 2012

AUCTeX

Если вы используете :

  1. Отметьте блок текста, который вы хотите заключить в среду.
  2. Нажмите Cc Ce .
  3. Введите тип среды по вашему выбору (вы можете ввести только несколько символов и использовать завершение табуляции) и нажмите Введите .

Подробнее см. в руководстве .

Обратите внимание, что существует аналогичный метод для включения помеченного текста в макросы.Выполните от 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 соответственно.

0 голосов
/ 08 апреля 2013

Следуя предложению в ответе здесь Тихона Джелвиса, я взглянул на документацию по режиму латекса (C-h m) и нашел упоминание о функции

latex-insert-block

, который, кажется, делает именно то, что вы хотите.

Сочетание клавиш - C-c C-t (всякий раз, когда вы находитесь в режиме латекса).

...