Сделать отступ для области кода C в режиме LaTeX emacs - PullRequest
7 голосов
/ 11 января 2012

Моя проблема в том, что я пишу документ LaTeX в emacs, в котором много кода на Си. Я использую среды \ 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}   

Другими словами, я хочу иметь возможность запускать indent-region в той части, которая на самом деле является кодом C, используя правила из режима C, даже если я нахожусь в режиме LaTeX.

Кто-нибудь знает, возможно ли это?

Ответы [ 3 ]

4 голосов
/ 11 января 2012

Вы можете использовать C-x 4 c для клонирования текущего буфера в косвенный буфер.Поместите этот косвенный буфер в c-mode и сделайте там свой отступ.Для получения дополнительной информации о косвенных буферах см. Справочное руководство Emacs, узел "Косвенные буферы" .

4 голосов
/ 11 января 2012

M-x indent-region отступ только для области, а не для полного буфера, поэтому:

  1. Включить режим C
  2. Сделайте отступ в вашем регионе
  3. Включите режим LaTeX
3 голосов
/ 11 января 2012

Вот быстрое решение.Немного поработав, вы можете сделать это вообще - то есть проверить текущий основной режим и вернуться в этот режим после того, как закончите.Таким образом, он переключается в c-mode, отступы, затем переключается в 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))

Свяжите это с вашей любимой клавишей, и у вас все будет готово.

...