使LaTeX-insert-item下拉AucTeX中的两行

时间:2018-04-12 17:18:24

标签: emacs latex elisp

我认为这足以让Lisp在这里取代TeX Stackexchange。希望我是对的。我想使用命令 C-c C-j 插入两个换行符,然后插入一个项目。当我调用它的定义时,它告诉我它在latex.el。重要的代码片段是

(unless (bolp) (LaTeX-newline))

我不太了解Lisp,但这似乎"除非该点是该行的开头,否则插入新行。"由于我想要两行,我用

替换它
(unless (bolp) (LaTeX-newline)
        (LaTeX-newline))

但是,新代码不会下拉两行。我做错了什么?谢谢。我已经包含了整个命令定义,以防我的解释错误。

(defun LaTeX-insert-item ()
  "Insert a new item in an environment.
You may use `LaTeX-item-list' to change the routines used to insert 
the item."
  (interactive "*")
  (let ((environment (LaTeX-current-environment)))
    (when (and (TeX-active-mark)
           (> (point) (mark)))
      (exchange-point-and-mark))
    (unless (bolp) (LaTeX-newline)
            (LaTeX-newline))
    (if (assoc environment LaTeX-item-list)
    (funcall (cdr (assoc environment LaTeX-item-list)))
      (TeX-insert-macro "item"))
    (indent-according-to-mode)))

1 个答案:

答案 0 :(得分:0)

您对LaTeX-newline的假设是正确的。它插入一个换行符。如果调用了修改后的函数,它将按您希望的那样工作。

它很可能永远不会被调用。

也许您已将定义添加到init文件中,但在该定义后 加载了AUCTeX,并且LaTeX-insert-item以原始方式重新定义。

您不应重新定义LaTeX-insert-item,而应定义一个新功能,例如my-LaTeX-insert-item,并将该功能用作:override的{​​{1}}建议,并在您的初始化文件中添加以下行:

LaTeX-insert-item

如果在装入软件包(advice-add 'LaTeX-insert-item :override #'my-LaTeX-insert-item) 之前定义了my-LaTeX-insert-item,该建议也将起作用。

请注意,我假设您使用带有软件包latex的更新版本的Emacs。据我所知nadvice是在Emacs 24.4中引入的。

如果 Mx nadvice RET locate-library RET 为您提供了很好的库路径