2012-01-11 12 views
7

Mi problema es que estoy escribiendo un documento LaTeX en emacs que tiene una gran cantidad de código C en él. Estoy usando los entornos \ minted y the \ literal en varios lugares. Cuando compilo LaTeX (usando pdflatex), el pdf resultante se ve bien. En el código crudo LaTeX, me gustaría poder auto-sangrar usando las reglas del modo C-mayor.Aplicar sangría a una región de código C en modo LaTeX emacs

Por ejemplo, quiero ser capaz de marcar la siguiente región

\begin{verbatim} 

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

\end{verbatim} 

Y tiene emacs auto-formato que se vea como

\begin{verbatim} 

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

\end{verbatim} 

En otras palabras, yo quiero ser capaz ejecutar indent-region en la parte que en realidad es código C usando las reglas del modo C, aunque estoy en modo LaTeX.

¿Alguien sabe si esto es posible?

+0

Tanto u-punkt como Simon proporcionan respuestas que funcionan. ¿Hay alguna forma de acelerar este proceso, por ej. ¿una pequeña función en mis .emacs que puede iniciar el modo c, sangrar y volver al modo LaTeX? – jarvisschultz

+0

Creo que mi respuesta hará lo que quiera. – Tyler

+0

En caso de que no lo supiera, ¿ha revisado el paquete de látex [Listados] (http://en.wikibooks.org/wiki/LaTeX/Packages/Listings)? Creo que puedes ingresar el código fuente para que no tengas que copiar y pegar. – TreyA

Respuesta

3

Aquí hay una solución rápida. Con un poco de trabajo podría hacer esto en general, es decir, verificar el modo principal actual y volver a ese modo una vez que haya terminado. Como es, cambia al modo C, guiones, luego cambia a modo de LaTeX (auctex), que resuelve el problema inmediato:

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

de vinculación que a su llave favorita y usted debe estar todo listo.

4

M-x indent-region guiones solamente la región, no el buffer lleno, así que:

  1. activar el modo C
  2. mella su región
  3. Encienda de nuevo en el modo LaTeX
4

Se puede utilizar C-x 4 c para clonar su búfer actual a un búfer indirecto. Pon ese búfer indirecto en el modo c y haz tu sangrado allí. Para obtener más información sobre los búferes indirectos, consulte el Emacs info manual, node 'Indirect Buffers'.

Cuestiones relacionadas