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

时间:2012-01-31 16:19:53

标签: emacs latex latex-environment

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

2 个答案:

答案 0 :(得分:7)

AUCTeX

如果您使用

  1. 标记要包含在环境中的文本块。
  2. C-c C-e
  3. 输入您选择的环境类型(您只能键入一些字符并使用标签页完成),然后按 Enter
  4. 有关详细信息,请参阅the manual

    请注意,在宏中包含标记文本的方法类似。按1-3进行操作,而是按 C-c C-e C-c Enter 。有关详细信息,请参阅the manual

    YASnippet

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

    # -*- 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中,然后分别执行 M-x ltx-environmentltx-macro

答案 1 :(得分:0)

根据Tikhon Jelvis在回答here中提出的建议,我看了一下乳胶模式文档(C-h m)并发现了功能的提及

latex-insert-block

这似乎完全符合您的要求。

快捷键是C-c C-t(无论何时处于乳胶模式)。