Dic 21 2008

TeX y LaTeX en emacs

Tag: basicadmin @ 9:56 pm

Los comandos LaTeX normalmente toman la forma:

\keyword{text}

Debido a que LaTeX es extensible, Emacs no checkea que la palabra clave sea correcta. Además de ello en LaTeX, los caracteres {} y $$ aparecen en pares, por lo que emacs genera estos pares.

Para entrar en el modo LaTeX debemos invocar M-x latex-mode o bien M-x plain-text-mode si vamos a trabajar con TeX. Además de ello existen otras dos opciones más, que son M-x tex-latex y M-x text-context. Veamos que juego de keystrokes facilita emacs para tareas fundamentales en estos modos:

C-c { : inserta el par de llaves.
C-c } : se desplaza por el par de llaves.
(sin keystroke asociada) : ‘tex-validate-buffer‘; valida la apertura y cierre de llaves y dolares en el buffer.
(sin keystroke asociada) : ‘tex-validate-region‘; valida la apertura y cierre de llaves y dolares en una región dada.
C-q «; inserta quotation marks (ya que no forma parte del ASCII standard).
C-q `; inserta quotation marks (ya que no forma parte del ASCII standard).
C-c C-o; ‘latex-insert-block‘: inserta un par comando.
C-c C-c; ‘latex-close-block‘; inserta el cierre del comando en caso de haber escrito la apertura.
C-c C-f; ‘tex-file‘; parsea, compila y muestra el tex.
C-c C-l; ‘tex-recent-output-buffer‘; representa el fichero si no se encuentra en una ventana el buffer.
C-c C-u; para ver el resultado del fichero usando el visor xdvi.
C-c C-p; ‘tex-print‘; imprime el fichero.
C-c C-q; ‘tex-show-print-queue‘; muestra la cola de impresión.
C-j; ‘tex-terminate-paragraph‘; inserta dos retornos ‘duros’ y checkea la sintaxis del párrafo.
C-c C-b; ‘tex-buffer‘; procesa el buffer.
C-c C-k; ‘tex-kill-job‘; mata el procesamiento.
C-c TAB; ‘tex-bibtex-file‘; procesa el trabajo actual usando bibtex (para bibliografias).
(sin keystroke asociada) : ‘tex-all-print‘; imprime el dvi usando una impresora adicional. Para ello checkea la variable tex-alt-dvi-print-command.
(sin keystroke asociada) : ‘latex-insert-item‘; inserta un \item en latex.
(sin keystroke asociada) : ‘latex-split-block‘; inserta el final del bloque actual y el principio de uno nuevo.
(sin keystroke asociada) : ‘tex-insert-quote‘; inserta «.


Dic 21 2008

C y C++ en emacs

Tag: basicadmin @ 8:34 pm

 

  • C en Emacs

Para programar en c en emacs debemos emplear c-mode el cual se puede invocar mediante M-x c-mode. Existen distintos keystrokes básicos que pueden sernos de mucha utilidad:

M-a : ‘c-beginning-of-statement‘; se desplaza al inicio de la sentencia.

M-e : ‘c-end-of-statement‘; se desplaza al final de la sentencia.

M-q : ‘c-fill-paragraph‘; formatea un comentario y lo separa en distintas líneas según el ancho de columna máximo.

C-M-a : ‘beginning-of-defun‘; se desplaza al inicio de la función.

C-M-e : ‘end-of-defun‘; se desplaza al final de la función.

C-M-h : ‘c-mark-function‘; pone el cursor al inicio de la función y la marca al final.

C-c C-q : ‘c-indent-defun‘; indenta la función.

C-c C-v : ‘c-up-conditional‘ se desplaza al principio del actual preposición condicional.

C-c C-p : ‘c-backward-conditional‘; se desplaza a la preposición condicional anterior.

C-c C-n : ‘c-forward-conditional‘; se desplaza a la siguiente preposición condicional.

Además de ello podemos usar distintos estilos a la hora de programar en c, de todos ellos los más famosos o aceptados de forma general por un gran amplio grupo de usuarios están soportados en emacs, para formatear nuestro código con uno de estos estilos tan sólo debemos pulsar M-x c-set-style y presionando TAB mostrará la lista de posibles estilos a seleccionar entre ellos: bsdcc-modeellental (usado por Ellental labs), gnujavak&rlinuxpythonstroustrupuser (configurado por el usuario via custom mode) y whitesmith (usado por whitesmith compilers).

Para modificar el estilo de forma permanente debemos añadir a nuestro emacs:

‘(add-hook ‘c-mode-hook

  ‘(lambda()

     (c-set-style «mystyle»)))

La variable c-style-alist contiene toda la carga de la configuración para cada estilo de c.

Siguiendo con el juego de keystrokes utiles podemos emplear algunas más las cuales pueden sernos de mucha utilidad:

C-c C-a : ‘c-toggle-auto-state‘; crea una nueva línea en caso de que se pulse el carácter ;, { o }.

C-c C-d : ‘hungry-delete-key‘; elimina todos los espacios en blanco que haya a la izquierda con delete.

(sin keystroke asociada) : ‘c-toggle-hungry-state‘; el modeline cambiará de C a C/h.

C-c C-t : ‘c-toggle-auto-hungry-state‘; activa/desactiva las C o C/h.

Si queremos activarlo al iniciar debemos poner esto en nuestro .emacs:

(add-hook ‘c-mode-hook

 ‘(lambda()

(c-toggle-auto-state)))

Si queremos cambiarlo en nuestro estilo específico debemos hacer:

(add-hook ‘c-mode-hook

 ‘(lambda()

(c-set-style «nombre del estilo»)))

A la hora de trabajar con comentarios tenemos varias opciones de estilo bastante utiles como por ejemplo:

M-j : ‘indent-new-comment-line‘; además si dejamos comment-multiline a nil crearía un nuevo comentario en la línea siguiente teniendo en cuenta la identación de la actual y poniendo /* */

M-j : ‘indent-new-comment-line‘; además si dejamos comment-multiline a true crearía un nuevo comentario en la línea siguiente teniendo en cuenta la identación de la actual y usando un sólo /* */ para todas las líneas.

Por último podemos expandir macros, lo cual es muy útil, ya que muchas macros complejas son el nacimiento de nuevos bugs o problemas en tiempo de ejecución.

C-c C-e : ‘c-macro-expand‘; antes deberemos tener seleccionada una región y esto nos expandirá las macros y mostrará el resultado en *Macro expansion* buffer.

C-c C-u : ‘c-up-conditional‘; se desplaza a la condición del preprocesador anterior.

Es posible modificar la variable c-macro-processor para cambiar las opciones por defecto que es /lib/cpp -C (la opcion -C es para preservar los comentarios) o bien modificar el .emacs para realizar este cambio de forma permanente:

(setq c-macro-processor «/usr/local/lib/cpp -C»)

  • C++ en Emacs

Para programar en c++ debemos emplear c++-mode, el cual invocaremos mediante M-x c++-mode. Todos los keystrokes explicados previamente sirven para c++, ya que c++ incluye todo c y algo más. Sin embargo existe este otro modo ya que la sintaxis es opuesta y por lo tanto necesitamos otro modo para definir este nuevo comportamiento, además podemos añadir esto a nuestro .emacs:

(add-hook ‘c++-mode-hook

 ‘(lambda()

 (c-set-style «Stroustrup»)

 (c-toggle-auto-state))

C-c : : ‘c-scope-operator‘; inserta el scope operator para evitar problemas con el electric :.

(sin keystroke asociada) : ‘c-forward-subword‘; se desplaza hacia delante una subpalabra según la nomenclatura de estandares GNU.

(sin keystroke asociada) : ‘c-backward-subword‘; se desplaza hacia detrás una subpalabra según la nomenclatura de estandares GNU.


« Página anterior