我在 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-item
在latex.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
?
设置此变量使nil
我LaTeX-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).