Ene 20 2011

Doc-view : ver pdf desde emacs

Tag: basicoverdrive @ 6:57 pm

En el articulo anterior explicabamos como instalar, configurar y manejar minimamente AUCTeX (obviamente AuCTeX es mucho mas extenso e interesante de lo que mostramos en dicho articulo, pero ahora el usuario ya tiene la capacidad de indagar y ese empujoncito que a veces necesita para tener ese interes).

Este articulo es en parte, un complemento del anterior, pero que he decidido separar debido a que es otro paquete diferente al anterior, tambien externo a emacs y que busca otro proposito; el de poder ver o cargar pdf en emacs. Para ello, podemos tomar el ejemplo del texto anterior y generar asi un pdf o cargar un pdf cualquiera (aprovecho para promocionar el R5RS e invito a cargarlo en nuestro emacs -de paso de su lectura-).

Una vez tengamos nuestro fichero pdf en nuestro sistema. Pasamos a descargar y configurar el paquete (no es mas que uno o dos ficheros elisp cortesia de Tassilo Horn) que nos permitira cargar y visualizar pdfs en emacs: doc-view.

Los pasos que debemos seguir son muy simples:

Prerequisitos:

  • Instalar xpdf:
    • # apt-get install xpdf
  • Instalar ghostscript:
    • # apt-get install ghostscript

Descarga y configuracion de doc-view:

Esto lo podemos poner en un directorio cualquiera de nuestro sistema, en mi caso no me complique mucho para el articulo y cree uno en mi $HOME llamado docview donde meti ahi los ficheros .el. Luego simplemente debeis incluir las siguientes lineas en vuestro .emacs para cargar el nuevo path donde se encuentren esos scripts elisp:

(add-to-list ‘load-path «~/docview/»)
(require ‘doc-view)
(require ‘doc-view-extension)

Luego tan solo debemos abrir emacs o recagar el .emacs con la vieja tecnica de M-x load-path y cargar el propio fichero de configuracion. Abrir nuestro fichero fichero y simplemente cargar el preview con M-x doc-view-mode. Y voila! aqui tenemos el resultado:

Ejemplo de emacs con doc-view visualizando un pdf

Nota: Podemos incluir en nuestro .emacs que cada vez que carguemos un fichero pdf automaticamente cargue el modo doc-view-mode y evitar tener que realizar este paso cada vez:

(setq auto-mode-alist
‘((“\\.pdf$” . doc-view-mode)))

Existen algunos problemas que me han surgido por despiste:

Trobleshooting

En un principio, la primera vez que configure doc-view, solo anadi el load-path, sin embargo olvide el require del doc-view, lo que no evita que podamos cargar y leer pdfs, sin embargo aparece una especie de refresco horizontal de pantalla sobre la ventana donde es cargado el pdf. Esto es precisamente por la falta de este require, asi que si os ocurre ya sabeis que es por la ausencia de esa linea.

Por otra parte he visto ese mismo comportamiento algunas otras veces al cargar algunos pdf, desconozco realmente por que ocurre, sin embargo perdiendo el foco de la propia ventana y volviendolo a colocar en emacs (hacer click en otra ventana y luego en la de emacs de nuevo), el problema se solventa (ya que sino puede hacer la lectura bastante molesta; intentare informar de esto a Tassilo; el creador de este script. Para ver si es un problema de versiones, etc.) de momento os dejo este workaround, para salir del paso.

Nota importante: Desde la version 23.1 doc-view esta incluido en GNU/Emacs y no es necesaria esta configuracion a menos que se use una version anterior. En Emacs 24, doc-view soporta zoom real por lo que +/- no llamara desencadenara la reconversion del documento completo.


Ene 20 2011

AUCTeX

Tag: basicoverdrive @ 5:34 pm

Hace un tiempo escribi un articulo orientado a TeX y LaTeX en emacs. En el simplemente se especificaban un listado de keybindings para usar emacs escribiendo este tipo de documentos. Sin embargo, hay que decir que existe AUCTeX que es una extension que proporciona un entorno de desarrollo para TeX, LaTeX, Texinfo y ConTeXt. Permite ademas previsualizar LaTeX.

  • C-c C-c : previsualiza y realiza demas acciones.
  • C-c C-t C-p : permite cambiar la previsualizacion activando/desactivando pdflatex, dvi o pdf.
  • C-t C-l : [a documentar – investigando en ello]

Prerequisitos antes de instalar AUCTeX:

  • AUCTeX requiere instalar TeX, LaTeX y texinfo (podemos realizarlo a modo apt-get install, emerge, mediante tarball, etc).
    • # apt-get install tex-common tex-latex
  • Preview-latex requiere que instalemos dvips para las operaciones en DVI mode.
    • # apt-get install dvi2ps
  • Preview-latex requiere de la instalacion de ghostscript (podemos realizarlo a modo apt-get install, emerge, tarball, etc).
    • # apt-get install ghostscript
  • Se requiere texinfo; este paquete es interesante para construir el tarball (podemos realizarlo a modo apt-get install, emerge, tarball, etc).
    • # apt-get install texinfo

Recordemos que AUCTeX es una extension y no forma parte del paquete emacs, por lo que hay que descargarlo y compilarlo (tambien es posible descargar AUCTeX desde CVS si quereis tener la ultimisima version, que en mi caso no es fundamental aunque quiza muchos desarrolladores o gente que espere nuevas features si le pueda interesar):

  1. Para ello nos dirigimos a la web oficial de AuCTeX.
  2. En «downloads» tenemos distintas versiones segun el sistema operativo, en mi caso «UNIX-style«.
  3. Una vez descargado, descomprimimos el paquete con:
    • $ tar xvfz auctex-11.86.tar.gz (o la version que sea).
  4. Entramos en el directorio:
    • $ cd auctex-11.86/
  5. Lanzamos el configure:
    • $ ./configure
  6. Compilamos:
    • $ make

Nota: no es necesario lanzar el make install a no ser que queramos que otros usuarios tengan acceso al paquete instalado, en mi caso, no es asi, como en la mayoria de personas que usan ellos unicamente su ordenador. Ademas como nos va a tocar meter un load-path en nuestro .emacs es mucho mas interesante asi, para ir cambiando de versiones segun vayamos metiendo nuevas. Siempre es menos engorros que tener que buscar las ubicaciones y ficheros de donde se haya instalado nuestro paquete en el sistema.

Esta puede ser la configuracion basica para trabajar con AUCTeX (cortesia de David -gracias-) y que podemos anadir en nuestro .emacs:

(add-to-list ‘load-path «~/auctex-version/»)
(add-to-list ‘load-path «~/auctex-version/preview/»)
(load «auctex.el» nil t t)
(load «preview-latex.el» nil t t)
(setq-default TeX-PDF-mode t)

Tambien recomiendo incluir las siguientes lineas para evitar tener cada vez que cargamos un fichero .tex estar cada vez cargando M-x latex-mode:

(setq auto-mode-alist
‘((«\\.tex$» . LaTeX-mode)
(«\\.sty$» . LaTeX-mode)
(«\\.bbl$» . LaTeX-mode)
(«\\.bib$» . BibTeX-mode)
(«\\.cls$» . LaTeX-mode)
(«\\.clo$» . LaTeX-mode)))

Una vez hecho esto o bien podemos lanzar de nuevo emacs o bien simplemente hacer un M-x load-file y cargar de nuevo nuestro .emacs.

Un ejemplo de documento LaTeX en mi emacs

Despues de pulsar C-c C-c para compilar y generar los ficheros dvi, pdf, etc

Estos son los ficheros generados por C-c C-c (en mi caso queria pdf en lugar de DVI)

Existen algunos keystrokes que entran en conflicto con stumpwm (para mas informacion sobre este peculiar wm, ver mi articulo sobre stumpwm):

Troubleshooting

Solucion de algunos problemas que me han surgido con stumpwm:

En latex-mode y AucTeX combinandolo con stumpwm surge un conflicto entre keybindings, ya que C-t C-t en stumpwm hace toggle entre frames mientras que C-c C-t C-p en latex-mode con AucTeX sirve para invocar pdfLatex para especificar si la salida sera dvi o pdf. La forma de solucionarlo es empleando el comando de stumpwm C-t t, el cual generara un C-t que nos servira para poder usar el comando C-c C-t C-p en cualquier otro WM, pero que en este se realizara mediante C-c C-t t C-p.


Ene 18 2011

Servidor de emacs: emacsclient y emacsserver

Tag: basicoverdrive @ 9:05 pm

Algunos usuarios se quejan de la tardanza que tiene emacs al cargar comparado con otros. Sobre todo debido a la gran carga a medida que este se va configurando modificando funcionalidades en nuestro .emacs. Para ello existe una solucion; usar emacsclient, que nos permitira evitar toda esta carga cada vez que lancemos emacs. Para ello no hay que hacer realmente nada, ya que esta feature viene en el paquete emacs base y tampoco requiere de ninguna configuracion especial. Aunque aqui incluiremos algunas lineas que nos facilitaran las tareas.

Recomiendo poner en nuestro .bashrc las siguientes lineas:

Estos cambios tendran efecto o bien si nos logueamos en otra consola, o bien si nos deslogueamos y logueamos en la misma o bien si lanzamos el comando source ~/.bashrc :

export EDITOR=»emacsclient -c»
export VISUAL=»emacsclient -c»
export ALTERNATIVE_EDITOR=»emacs»
alias e=»emacsclient -c»
alias es=»emacs –daemon»
alias ec=»emacsclient -c»

Nota para aquellos que no quieran usar estos alias: si no quisieramos poner estas lineas y seguir con la configuracion de toda la vida: debemos lanzar emacs –daemon la primera vez y luego ir lanzando emacsclient -c cada vez para cada hilo de ese daemon o bien emacs para un proceso nuevo cada vez.

Nota para los que si habeis decidido modificar vuestro .bashrc: De esta forma podemos lanzar el comando «es» desde cualquier terminal o consola la primera vez, y luego lanzar emacs (si queremos un proceso cada vez) o simplemente teclear e (si queremos un hilo cada vez). Veremos que se queda emacs como daemon o proceso residente en memoria, de esa forma cada vez que lanzamos emacs, se estara lanzando un hilo de este proceso en lugar de un proceso cada vez, ademas esto permitira intercomunicar los distintos hilos, sin importar si lo lanzamos en una consola y ahora nos encontramos en las XWindow y lo abrimos con GTK o desde un terminal, podremos tener acceso a los distintos buffers, con toda la informacion. etc. (Aqui el comando fbgrab lo empleo para capturas de pantalla en consola, pero carece de interes para el fin de este articulo, el comando verdaderamente importante es el primero que lanzo: emacs –daemon):

Emacs como daemon

Es importante tener en cuenta, que cuando salgamos de emacs (emacsclients) realmente es como si estuviesemos cerrando frames, ya que emacsserver seguira corriendo con aquella informacion modificada, asi que debemos cercionarnos de no apagar o reiniciar (aunque no veamos un emacs (en este caso emacsclient) mostrado, ya que podemos cerrar todos los emacsclients sin haber guardado ningun fichero o las ultimas modificaciones, ya que esto se queda residente en memoria aunque no tenga ninguna representacion).

Ahora ya tenemos nuestro querido emacs, que carga en 0 segundos. El «real» es el tiempo que he tardado desde que pulse intro del comando «time emacsclient -c» hasta que presione «C-x c» para cerrar emacs (es decir el tiempo que tarde en abrir y cerrar emacs), pero el tiempo de carga real como podemos ver ni siquiera llega a 1 milesima de segundo (el comando fbi es el que uso para previsualizar capturas en consola que carece de importancia en este articulo, el comando time precediendo a cualquier comando es el que nos da los tiempos):

Emacs cargado en menos de 1 milesima de segundo

Por ultimo hacer mencion especial a la primera captura de pantalla, si os fijais bien, tengo algunas features externas al paquete emacs, por lo que nuestro $HOME se va llenando de estas, aqui entra la esencia de reorganizar y reordenar estas features para no mezclarlas con otros ficheros y que nuestro directorio de usuario se convierta en algo caotico. Lo ideal, es emplear un directorio para ello por ejemplo ‘emacs‘ o ‘elisp‘ (ya que emacs se suele emplear cuando se descarga emacs desde el cvs/svn/git) donde dentro esten estas features o bien ‘.emacs.d/elisp‘. Todo esto es opcional, pero son buenas practicas que hara que todo nuestro sistema de ficheros tenga mayor coherencia a la hora de buscar ficheros; en mi caso, segun el ordenador que utilice, lo tengo mas o menos desordenado ;-).


Página siguiente »