通常,在编辑数学内容时,我会多次处理以下情况:我在 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"))
))))