emacs + latex + yasnippet:为什么在片段后插入换行符?

时间:2011-10-01 10:24:53

标签: emacs latex

每当我在.tex文档中插入一个片段(带yasnippet)时,我会在片段后面获得一个换行符。这对于通常用于文本样式的小片段来说非常烦人。我怎么能避免这种情况?

我读了一些关于这个问题的信息(http://code.google.com/p/yasnippet/issues/detail?id=115或http://yasnippet.googlecode.com/svn/trunk/doc/faq.html),但找不到解决方法。重现如下(我使用yasnippet版本0.6.1c在Mac OS X 10.6.8上使用Aquamacs 2.3a):

  1. 将〜/ Library / Preferences / Aquamacs Emacs / Preferences.el定义为: (要求'yasnippet) (亚斯/初始化) (yas / load-directory“〜/ Library / Preferences / Aquamacs Emacs / plugins / yasnippet-0.6.1c / snippets”)

  2. 定义以下代码段(称之为“bm.yasnippet”[bm = boldmath];星号*表示光标结束的位置 - 请注意代码段后面没有换行符)

    # name: \bm{}{}
    # key: bm
    # --
    \bm{$1}*
    
  3. 重新启动Aquamacs并打开一个.tex文件并输入bm + Tab [这应插入代码段]

  4. 在代码段后添加换行符。这非常不方便,因为\bm{foo}通常用于文本样式,因此例如在“向量\bm{x}不是空向量”中。一个典型的原因是片段以换行符结束,然后插入换行符。但是,我特意获得此行为,即使代码段以换行符结尾。

4 个答案:

答案 0 :(得分:6)

我不能用普通的Emacs来重复它。事实上,我遇到了这个问题,但问题是我将require-final-newline设置为 t 。所以Emacs在我的模板末尾添加了换行符。

我的设置稍微复杂一点,但您的解决方案可能是将mode-require-final-newline设置为nil并重新启动Emacs。

要验证这是问题,请打开模板并检查最终换行符。

答案 1 :(得分:1)

感谢Temporarly disable adding of newlines in Emacs中的答案,我使用的功能只是暂时禁用在当前缓冲区中添加最终换行符:

(defun disable-final-newline ()
    (interactive)
    (set (make-local-variable 'require-final-newline) nil))

答案 2 :(得分:0)

你有一个新行的原因是你的代码片段末尾有空格或制表符。 按Ctrl + e和Ctrl + k来杀死它们会使它工作,将近1个小时才算出来......

答案 3 :(得分:0)

我有几个片段的类似问题,其中一个是我经常使用的\ frac {} {}。 我使用的frac片段版本不是与yasnippets捆绑在一起的。

问题是我在VIM中编辑了一些代码段,当您保存文件时,VIM会自动为其添加换行符。 要解决此问题,我必须在其他编辑器中删除换行符,例如emacs的。