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

时间:2012-01-11 15:00:26

标签: emacs formatting latex

我的问题是我在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模式。

有人知道这是否可行?

3 个答案:

答案 0 :(得分:4)

M-x indent-region仅缩进区域,而不是完整缓冲区,因此:

  1. 开启C模式
  2. 缩进您的地区
  3. 转回LaTeX模式

答案 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))

将它绑定到您最喜欢的密​​钥,您应该全部设置。