我正在使用带有 cdlatex-mode 的 emacs 来编辑 LaTeX 文件。我想知道如何在已经编写的文本块周围插入 LaTeX 环境,以便\begin{}
在所选文本之前和所选文本\end{}
之后。我尝试使用 cdlatex-environment 功能,但这样做会删除选定的文本。
问问题
2098 次
2 回答
9
AUCTeX
如果您使用auctex:
- 标记要包含在环境中的文本块。
- 按C-c C-e。
- 输入您选择的环境类型(您只能输入一些字符并使用制表符完成)并按Enter。
有关详细信息,请参阅手册。
请注意,有一种类似的方法可以将标记的文本包含在宏中。执行 1-3 的操作,但按C-c C-e或C-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 回答