2012-01-11 37 views
7

Vấn đề của tôi là tôi đang viết một tài liệu LaTeX trong các emacs có nhiều mã C trong đó. Tôi đang sử dụng cả hai môi trường \ minted và \ verbatim ở những nơi khác nhau. Khi tôi biên dịch LaTeX (sử dụng pdflatex), kết quả là pdf sẽ ổn. Trong mã LaTeX thô, tôi muốn có thể tự động thụt lề bằng cách sử dụng các quy tắc của chế độ C-major.Thụt lề một vùng mã C trong chế độ LaTeX emacs

Ví dụ, tôi muốn để có thể đánh dấu các khu vực sau đây

\begin{verbatim} 

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

\end{verbatim} 

Và có emacs tự động định dạng nó trông giống như

\begin{verbatim} 

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

\end{verbatim} 

Nói cách khác, tôi muốn có thể để chạy thụt lề khu vực trên một phần thực sự là mã C sử dụng các quy tắc từ chế độ C, mặc dù tôi đang ở chế độ LaTeX.

Có ai biết nếu điều này là có thể không?

+0

Cả u-punkt và Simon đều cung cấp câu trả lời phù hợp. Có cách nào để tăng tốc quá trình này, v.d. một hàm nhỏ trong các .emac của tôi có thể khởi động chế độ c, thụt lề và chuyển về chế độ LaTeX? – jarvisschultz

+0

Tôi nghĩ câu trả lời của tôi sẽ làm những gì bạn muốn. – Tyler

+0

Trong trường hợp bạn không biết, bạn đã xem gói latex [Listings] (http://en.wikibooks.org/wiki/LaTeX/Packages/Listings) chưa? Tôi tin rằng bạn chỉ có thể nhập mã nguồn để không cần sao chép và dán. – TreyA

Trả lời

3

Đây là bản sửa lỗi nhanh. Với một chút công việc, bạn có thể thực hiện điều này chung - tức là, kiểm tra chế độ chính hiện tại và chuyển về chế độ đó sau khi bạn hoàn tất. Như là, nó chuyển sang c-mode, indents, sau đó chuyển sang LaTeX-mode (AucTex), trong đó giải quyết vấn đề ngay lập tức:

(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)) 

Bind đó để chìa khóa yêu thích của bạn và bạn sẽ có tất cả các thiết lập.

4

M-x indent-region indents chỉ khu vực, chứ không phải toàn bộ đệm, vì vậy:

  1. Bật chế độ C
  2. Indent khu vực của bạn
  3. Bật lại chế độ LaTeX
4

Bạn có thể sử dụng C-x 4 c để sao chép bộ đệm hiện tại của bạn vào bộ đệm gián tiếp. Đặt bộ đệm gián tiếp đó vào chế độ c và làm thụt lề của bạn ở đó. Để biết thêm thông tin về bộ đệm gián tiếp, hãy xem Emacs info manual, node 'Indirect Buffers'.

Các vấn đề liên quan