在 emacs AucTeX 模式下,为什么 Cc Cj 不起作用

在 emacs AucTeX 模式下,为什么 Cc Cj 不起作用

我在 Emacs 的 AucTeX 模式下,逐项列表中的换行符出现了问题。如果我这样做,Cc Ce RET itemize RET,我期望得到以下结果

\begin{itemize}
   \item 
\end{itemize}

而是得到

\begin{itemize}\item 
\end{itemize}

此外,当我在项目末尾执行 Cc Cj 时,它只会给我一个新的 \item,而不会让我进入新行。因此,Ch k Cc Cj 会显示

C-c C-j runs the command LaTeX-insert-item, which is an interactive
compiled Lisp function in `latex.el'.

It is bound to C-c C-j, M-RET, <menu-bar> <LaTeX> <Item>.

(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.

那么,我的 LaTeX-insert-item 似乎出了问题?我该如何恢复正确的 Cc Cj 行为?

答案1

在我的配置中,它确实在需要时插入换行符。

从Seamus的评论中,你可以看到插入函数的定义,其中重要的部分是:

(unless (bolp) (LaTeX-newline))

检查您是否位于行首,如果不是,则插入新行。

您可以检查 latex.el 文件以查看其定义方式(当显示“LaTeX-insert-item 是 `latex.el' 中的交互式 Lisp 函数”时,只需单击文件名即可)。正如 Seamus 所说,使用他提供的代码(与我的 latex.el 中相同)在您的 .emacs 中重新定义它应该可以解决问题(除非您的 LaTeX-newline 坏了)。

答案2

嗯,这是LaTeX-insert-itemlatex.el我谷歌了一下:

(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))
    (if (assoc environment LaTeX-item-list)
    (funcall (cdr (assoc environment LaTeX-item-list)))
      (TeX-insert-macro "item"))
    (indent-according-to-mode)))

把这个添加到你的问题中能.emacs解决问题吗?至于为什么这太好笑了,我一点也不知道。

答案3

我有同样的问题。

您能否检查一下是否comment-auto-fill-only-comments为非nil,即t

设置此变量使nilLaTeX-insert-item再次工作。

以供参考:

  • LaTeX-insert-item调用LaTeX-newline,正如@Mortimer 指出的那样
  • 正常情况下,这最终会调用indent-new-comment-line (别名comment-indent-new-line
  • comment-auto-fill-only-comments如果不是,则此函数不执行任何操作nil,如注释所述:

    ;; If we are not inside a comment and we only auto-fill comments,
    ;; don't do anything (unless no comment syntax is defined).
    

相关内容