我使用 Aquamacs(Mac OS X 上的 emacs;最新版本)来编译 .tex 文档。尽管 AUCTeX 提供了枚举等环境,但我想定义一个快捷方式/宏来在 .tex 文件中获取我自己的环境。理想情况下,它应该是:
我按下了某个按键
在.tex 文件中当前光标位置输入以下代码:
\begin{enumerate}[label=(\arabic*)\ ,leftmargin=*,align=left,topsep=\mytopsep,itemsep=\myitemsep]
\item
\item
\end{enumerate}
光标应该跳转到第一个 \item [因为那是人们想要继续书写的地方]。
我应该可以做到这些,但我没有办法,因为我只用了 emacs 大约一周 [到目前为止真的很喜欢它 :-)]。我猜可以在 Preferences.el(Aquamacs 的 .emacs)中通过连接到 LaTeX 模式来完成(?)
答案1
yasnippet正是您想要的。查看链接中的文档,根据我的经验,它相对轻松,并且比骨架之类的东西更容易设置。
满足您的特定需求的代码片段如下:
\begin{enumerate}[label=(\arabic*) ,leftmargin=*,align=left,topsep=\mytopsep,itemsep=\myitemsep]
\item $0
\item
\end{enumerate}
我认为这非常直观。一旦安装完成,其余就很简单了!
顺便说一句,一旦您输入了第一个项目,C-c C-j
即使没有 yasnippet,它也会作为 Auctex 的内置功能自动为您添加下一个项目。C-c C-e
提示您添加一个新的环境,这比使用代码片段更通用,但需要您手动填写选项。
答案2
提问者的回答:
我们的目标不是让某个特定的键绑定工作,而是定义一个 yasnippet;然后只需输入相应的键并点击即可插入
<TAB>
$0
不是指跳转到的第一个点(通过<TAB>
),而是指退出点(最后一个)对于上面的最小示例,可以执行以下操作:
enuma.yasnippet
创建一个名为的文件~/.emacs.d/plugins/yasnippet-0.6.1c/snippets/text-mode/latex-mode
将以下代码放入此文件中:
\# name: enumerate arabic \# key: enuma \# -- \begin{enumerate}[label=(\arabic*)\ ,leftmargin=*,align=left,topsep=\mytopsep,itemsep=\myitemsep] \item $1 \item $2 \end{enumerate} $0
输入以下代码
Preferences.el
:(add-to-list 'load-path "~/.emacs.d/plugins/yasnippet-0.6.1c") (require 'yasnippet) (yas/initialize) (yas/load-directory "~/.emacs.d/plugins/yasnippet-0.6.1c/snippets")
打开
.tex
文件并执行 YASnippet -> Reload everything然后只需输入
enuma
并点击<TAB>
;您可以$
通过<TAB>
点击在各个位置之间切换。
~/.emacs.d/plugins
这对我有用(Aquamacs;yasnippet按照 yasnippet 网站的建议安装)
我希望这有帮助,还有更多例子http://xahlee.info/emacs/emacs/yasnippet_templates_howto.html
答案3
答案4
我认为,OP 在创建代码片段时遇到的问题yasnippet
是,他们有以下一行(会yasnippet
自动插入到新的代码片段中):
# expand-env: ((some-var some-value))
当在扩展上运行时,它会导致 emacs lisp 错误,从而终止扩展。要解决这个问题,要么从代码片段中删除该行,要么将标记加倍#
以使其成为代码片段模式注释,因此:
## expand-env: ...