2012-01-11 39 views
7

我的问题是我在emacs中编写了一个LaTeX文档,其中包含很多C代码。我在各个地方都使用\铸造和\ verbatim环境。当我编译LaTeX(使用pdflatex)时,生成的pdf看起来很好。在原始LaTeX代码中,我希望能够使用C主模式的规则自动缩进。在LaTeX模式下缩进C代码的区域emacs

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

\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代码的部分上运行缩进区域,即使我处于LaTeX模式。

有谁知道这是可能的吗?

+0

u-punkt和Simon都提供了可行的答案。无论如何要加快这个过程,例如我的.emacs中的一个小函数可以启动c-mode,indent并切换回LaTeX模式? – jarvisschultz 2012-01-11 16:20:35

+0

我想我的答案会做你想做的。 – Tyler 2012-01-11 16:52:01

+0

如果你不知道,你看过乳胶[产品目录](http://en.wikibooks.org/wiki/LaTeX/Packages/Listings)包吗?我相信你可以输入源代码,所以不需要复制和粘贴。 – TreyA 2012-01-11 17:03:55

回答

3

这是一个快速修复。通过一些工作,你可以做出这个总结 - 即检查当前的主要模式,并在完成后切换回该模式。由于是,它切换到C模式,缩进,然后切换到乳胶模式(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)) 

绑定,为你最喜欢的键,你应该准备就绪。

4

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

  1. 打开C模式
  2. 缩进你的区域
  3. 重新打开LaTeX的模式
4

您可以使用C-x 4 c将您当前的缓冲区克隆到间接缓冲区。将间接缓冲区放入c模式并在那里进行缩进。有关间接缓冲液的更多信息,请参阅Emacs info manual, node 'Indirect Buffers'

相关问题