AucTeX - 将内联模式转换为 displaymath 或反之亦然

AucTeX - 将内联模式转换为 displaymath 或反之亦然

通常,在编辑数学内容时,我会多次处理以下情况:我在 displaymath 环境中编写了一些公式,并且在编译时意识到它应该在内联中看起来更好;如果内联不能令人满意,那么也许会返回到 displaymath 环境。

所以我有类似的东西

The presheaf
\begin{displaymath}
    F \colon C \to \mathsf{Set}
\end{displaymath}
is a sheaf.

在编译时,我意识到我更喜欢内联。所以我切换到

The presheaf $F \colon C \to \mathsf{Set}$ is a sheaf.

但它要求我:删除\begin{...}和它之前的换行符,插入一个$,删除\end{...}和它之后的换行符,插入一个$。对于这样的当前操作来说有点长,尤其是当我将它更改为之后的样子时。

AucTeX 模式下是否有一些键绑定可以将选定的 displaymath 公式转换为内联公式,反之亦然?就像C-u C-c C-e(改变最内层的环境)。


编辑。我意识到这更多的是一个 Emacs 问题而不是 *TeX 问题,但我想不出更好的 stackexchange 来询问它。

答案1

将以下函数添加到您的.emacs

(defun mg-LaTeX-swap-inline-display-math ()
  "Swap between inline math and display math."
  (interactive)
  (save-excursion
    (when (texmathp)
      (cond
       ((equal (car texmathp-why) "$")
    (goto-char (cdr texmathp-why))
    (delete-char 1)
    (push-mark)
    (search-forward "$")
    (delete-char -1)
    (exchange-point-and-mark)
    (LaTeX-insert-environment "displaymath"))
       ((equal (car texmathp-why) "displaymath")
    (LaTeX-find-matching-begin)
    (re-search-forward "\\\\begin{displaymath}[ \t\n\r]*")
    (replace-match "$")
    (LaTeX-find-matching-end)
    (re-search-backward "[ \t\n\r]*\n\\\\end{displaymath}")
    (replace-match "$"))))))

使用此功能,您可以将点留在环境内displaymath,然后发出M-x mg-LaTeX-swap-inline-display-math RET将环境转换为内联数学的问题,如果您在 之间,则相反$...$。在其他情况下什么也不会发生。

您还可以将该功能绑定到您喜欢的快捷方式。例如,如果您想将其绑定到C-c m您的,请将以下代码添加到.emacs

(eval-after-load "latex"
    '(define-key LaTeX-mode-map (kbd "C-c m") 'mg-LaTeX-swap-inline-display-math))

答案2

giordano 的上述解决方案非常棒,对我帮助很大,谢谢。这是我在$\(\[和之间切换equation的修改align

        (defun LaTeX-change-surrounding-math-environment ()
          "Swap between inline math displays."
          (interactive)
            (save-excursion
            (when (texmathp)
              (cond
                ((equal (car texmathp-why) "$")
                  (goto-char (cdr texmathp-why))
                  (delete-char 1)      (insert "\\(")
                  (search-forward "$") (delete-char -1) (insert "\\)"))
                ((equal (car texmathp-why) "\\(")
                  (goto-char (cdr texmathp-why))
                  (delete-char 2)      (insert "\\[")
                  (search-forward "\\)") (delete-char -2) (insert "\\]"))
                ((equal (car texmathp-why) "\\[")
                  (goto-char (cdr texmathp-why))
                  (delete-char 2)
                  (insert "\\begin\{equation\}")
                  (search-forward "\\]")
                  (delete-char -2)
                  (insert "\\end\{equation\}"))
                ((equal (car texmathp-why) "equation")
                 (LaTeX-modify-environment "align"))
                ((equal (car texmathp-why) "align")
                 (LaTeX-find-matching-begin)
                 (re-search-forward "\\\\begin{align}[ \t\n\r]*")
                 (replace-match "$")
                 (LaTeX-find-matching-end)
                 (re-search-backward "[ \t\n\r]*[ \t\n\r]*\\\\end{align}")
                 (replace-match "$"))
                ((equal (car texmathp-why) "displaymath")
                 (LaTeX-modify-environment "equation"))
           ))))

相关内容