9

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

4

2 回答 2

9

AUCTeX

如果您使用

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

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

请注意,有一种类似的方法可以将标记的文本包含在宏中。执行 1-3 的操作,但按C-c C-eC-c Enter代替。有关详细信息,请参阅手册

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 函数。以下只是粗略的东西,其功能远少于上述方法:

(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-environment或执行ltx-macro

于 2012-01-31T16:23:12.107 回答
0

按照 Tikhon Jelvis的回答中的建议,我查看了乳胶模式文档(Ch m)并发现了该功能

latex-insert-block

这似乎正是你想要的。

快捷键是 Cc Ct(只要您处于乳胶模式)。

于 2013-04-08T13:56:41.173 回答