我正在使用带有cdlatex-mode的emacs来编辑LaTeX文件。我想知道如何在已经编写的文本块周围插入LaTeX环境,以便\begin{}
在所选文本之前,\end{}
在所选文本之后。我曾尝试使用cdlatex-environment函数,但这样做会删除所选文本。
答案 0 :(得分:7)
如果您使用auctex:
有关详细信息,请参阅the manual。
请注意,在宏中包含标记文本的方法类似。按1-3进行操作,而是按 C-c C-e 或 C-c Enter 。有关详细信息,请参阅the manual。
如果您使用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函数。以下是一些粗略的东西,其功能远远少于上述方法:
(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
。
答案 1 :(得分:0)
根据Tikhon Jelvis在回答here中提出的建议,我看了一下乳胶模式文档(C-h m)并发现了功能的提及
latex-insert-block
这似乎完全符合您的要求。
快捷键是C-c C-t(无论何时处于乳胶模式)。