如何在emacs中的文本块周围插入LaTeX环境?

Dav*_*non 8 emacs latex latex-environment

我正在使用带有cdlatex-mode的emacs来编辑LaTeX文件.我想知道如何在已经写入的文本块周围插入LaTeX环境,以便\begin{}在所选文本之前移动并且\end{}在所选文本之后移动.我曾尝试使用cdlatex-environment函数,但这样做会删除所选文本.

N.N*_*.N. 7

AUCTeX

如果你使用:

  1. 标记要包含在环境中的文本块.
  2. C-c C-e.
  3. 输入您选择的环境类型(您只能键入一些字符并使用标签完成)并按Enter.

有关详细信息,请参阅手册

请注意,有一种类似的方法可以在宏中包含标记文本.做为1-3,而是按C-c C-eC-c Enter代替.有关详细信息,请参阅手册

YASnippet

如果您使用YASnippet,则可以创建一个与上述行为类似的代码段.例如,您可以使用以下内容(您已将"keybinding"替换为正确的键绑定):

# -*- mode: snippet -*-
# name: LaTeX environment
# key: "keybinding"
# --
\begin{$1}
  `yas/selected-text`$0
\end{$1}
Run Code Online (Sandbox Code Playgroud)

如果您还需要宏的代码段,则可以使用以下内容:

# -*- mode: snippet -*-
# name: LaTeX macro
# key: "keybinding"
# --
\$1{`yas/selected-text`$0}
Run Code Online (Sandbox Code Playgroud)

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 "} "))))
Run Code Online (Sandbox Code Playgroud)

对于宏,如果你也想要它:

(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 "{}"))))
Run Code Online (Sandbox Code Playgroud)

要使用它们放在你的.emacs做M-x ltx-environmentltx-macro分别.