在 AUCTeX 中在 \begin{enumerate} 和 \item 之间添加一行

在 AUCTeX 中在 \begin{enumerate} 和 \item 之间添加一行

我使用 Emacs 和 AUCTeX 作为编辑器。现在,如果我使用C-c C-e并创建一个enumerate环境,它将为我提供

\begin{enumerate}
  \item
\end{enmerate}

我想要的是

\begin{enumerate}

  \item

\end{enumerate}

或者至少

\begin{enumerate}

  \item
\end{enumerate}

这是开始和第一个项目之间的单个换行符。我希望这适用于所有带有项目的环境。谢谢。

答案1

这可能不是最有效的方法,但它应该可以完成工作:

(defun TeX-arg-item-with-newline (_optional)
  "Insert \\item with a newline above and below the macro.
OPTIONAL is ignored."
  (when (or TeX-arg-item-label-p
            (string-equal (LaTeX-current-environment)
                          "description"))
    (let ((TeX-arg-opening-brace LaTeX-optop)
          (TeX-arg-closing-brace LaTeX-optcl))
      (TeX-argument-insert (TeX-read-string
                            (TeX-argument-prompt t nil "Item label"))
                           t)))
  (insert " ")
  (save-excursion
    (re-search-backward "\\\\item"
                        (line-beginning-position) t)
    (forward-line -1)
    (unless (looking-at-p "^[ ]*$")
      (forward-line)
      (LaTeX-newline)
      (indent-according-to-mode)))
  (save-excursion
    (forward-line)
    (unless (looking-at-p "^[ ]*$")
      (LaTeX-newline)
      (delete-horizontal-space))))

(add-hook 'LaTeX-mode-hook
          (lambda ()
            (TeX-add-symbols '("item" TeX-arg-item-with-newline ignore))))

相关内容