2012-01-11 96 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'

相關問題