emacs/aquamacs + latex/auctex:如何定义自己的环境或命令?

emacs/aquamacs + latex/auctex:如何定义自己的环境或命令?

我使用 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

提问者的回答:

  1. 我们的目标不是让某个特定的键绑定工作,而是定义一个 yasnippet;然后只需输入相应的键并点击即可插入<TAB>

  2. $0不是指跳转到的第一个点(通过<TAB>),而是指退出点(最后一个)

  3. 对于上面的最小示例,可以执行以下操作:

    1. enuma.yasnippet创建一个名为的文件~/.emacs.d/plugins/yasnippet-0.6.1c/snippets/text-mode/latex-mode

    2. 将以下代码放入此文件中:

       \# name: enumerate arabic
       \# key: enuma
       \# --
       \begin{enumerate}[label=(\arabic*)\ ,leftmargin=*,align=left,topsep=\mytopsep,itemsep=\myitemsep] 
           \item $1
           \item $2
       \end{enumerate}
       $0
      
    3. 输入以下代码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")
      
    4. 打开.tex文件并执行 YASnippet -> Reload everything

    5. 然后只需输入enuma并点击<TAB>;您可以$通过<TAB>点击在各个位置之间切换。

~/.emacs.d/plugins这对我有用(Aquamacs;yasnippet按照 yasnippet 网站的建议安装)

我希望这有帮助,还有更多例子http://xahlee.info/emacs/emacs/yasnippet_templates_howto.html

答案3

你想使用骷髅可选地abbrev

答案4

我认为,OP 在创建代码片段时遇到的问题yasnippet是,他们有以下一行(会yasnippet自动插入到新的代码片段中):

# expand-env: ((some-var some-value))

当在扩展上运行时,它会导致 emacs lisp 错误,从而终止扩展。要解决这个问题,要么从代码片段中删除该行,要么将标记加倍#以使其成为代码片段模式注释,因此:

## expand-env: ...

相关内容