我的问题是我在emacs中写了一个包含大量C代码的LaTeX文档。我在各个地方使用\ minted和\ verbatim环境。当我编译LaTeX(使用pdflatex)时,生成的pdf看起来很好。在原始的LaTeX代码中,我希望能够使用C-major模式的规则进行自动缩进。
例如,我希望能够标记以下区域
\begin{verbatim}
void main(void)
{
printf("Hello World \n\r");
}
\end{verbatim}
让emacs将其自动格式化为
\begin{verbatim}
void main(void)
{
printf("Hello World \n\r");
}
\end{verbatim}
换句话说,我希望能够使用C模式中的规则在实际C代码的部分上运行indent-region,即使我处于LaTeX模式。
有人知道这是否可行?
答案 0 :(得分:4)
M-x indent-region
仅缩进区域,而不是完整缓冲区,因此:
答案 1 :(得分:4)
您可以使用C-x 4 c
将当前缓冲区克隆到间接缓冲区。将间接缓冲区放入c模式并在那里进行缩进。有关间接缓冲区的更多信息,请参阅Emacs info manual, node 'Indirect Buffers'。
答案 2 :(得分: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))
将它绑定到您最喜欢的密钥,您应该全部设置。