在LaTeX模式emacs中缩进C代码区域

jar*_*ltz 7 emacs formatting latex

我的问题是我在emacs中写了一个LaTeX文档,里面有很多C代码.我在各个地方使用\ minted和\ verbatim环境.当我编译LaTeX(使用pdflatex)时,生成的pdf看起来很好.在原始的LaTeX代码中,我希望能够使用C-major模式的规则进行自动缩进.

例如,我希望能够标记以下区域

\begin{verbatim} 

void main(void)
{
printf("Hello World \n\r");
}

\end{verbatim}
Run Code Online (Sandbox Code Playgroud)

并让emacs自动格式化它看起来像

\begin{verbatim}

void main(void)
{
    printf("Hello World \n\r");
}

\end{verbatim}   
Run Code Online (Sandbox Code Playgroud)

换句话说,我希望能够使用C模式中的规则在实际C代码的部分上运行indent-region,即使我处于LaTeX模式.

有谁知道这是否可能?

Tyl*_*ler 3

这是一个快速修复方法。通过一些工作,您可以使其通用 - 即检查当前的主要模式,并在完成后切换回该模式。按原样,它切换到 c 模式,缩进,然后切换到 LaTeX 模式 (AucTex),这解决了眼前的问题:

(defun indent-region-as-c (beg end)
  "Switch to c-mode, indent the region, then switch back to LaTeX mode."
  (interactive "r")
  (save-restriction
    (narrow-to-region beg end)
    (c-mode)
    (indent-region (point-min) (point-max)))
    (LaTeX-mode))
Run Code Online (Sandbox Code Playgroud)

将其绑定到您最喜欢的键上,您就可以完成所有设置了。