Archivo de la etiqueta: Latex

En que ando: julio

La noticia fundamental del mes de julio es que ¡terminé de escribir el curso de LaTeX! La entrada de Pandoc y la de mi proceso de escritura cerraron el cursete que llevaba en marcha desde noviembre. Escribí también una entrada sobre el presente y el futuro del curso. Lo que me falta es mejorar los ejemplos, os agradezco cualquier sugerencia que me hagáis al respecto. Además, hablé de la idea loca de hacer una campaña de financiación colectiva, de la que os iré informando según vaya avanzando.

Ahora os iré contando mis movidas con la detección de erratas y así, la primera ya ha ocurrido, me pasaron cosas locas con el tamaño del papel con XeLaTeX que ya están arregladas. También configuré el quickbuild de Kile.

Ahora estoy a tope con Octave para que si algún día vuelvo a las trincheras no se me haya olvidado todo lo aprendido. De momento he instalado la ayuda y he aprendido cómo va el archivo de configuración. También tengo intención de retomar mi querido Haskell, que el pobre se quedó un poco en el olvido.

Seguir leyendo →

Anuncios

¡Publiquemos juntos el libro de LaTeX!

En la entrada sobre el presente y el futuro del Curso no convencional de LaTeX os contaba que me hacía ilusión que se volviera un libro de verdad. Muchos me dijisteis que costaría pasta pero que podía intentarlo y otros me recomendasteis plataformas que imprimen el libro en papel bajo demanda. He estado pensando sobre el tema y he tenido una idea que me gustaría probar: hacer una campaña de financiación colectiva.

Hoy voy a intentar responder a las preguntas que me he ido haciendo, mientras voy desarrollando la campaña poco a poco.

¿Por qué no publicar el libro en una plataforma online?

La primera pega que le veo a poner el libro en una plataforma que imprime al gusto del consumidor es que no tengo ni idea de quién y en qué condiciones imprime eso. Intento ser lo más fiel posible a la filosofía de invertir localmente por lo tanto me gustaría que ese dinero se lo llevara alguien de mi entorno que a su vez pueda revertirlo en la sociedad.

Otra tema es que lo que más me gusta de escribir es tener contacto con los que leen (es por eso que escribo en un blog y no en el periódico, por ejemplo). Me mola el rollo comunidad. Me gustaría que el libro fuera de todos los que ayuden a convertirlo en algo de verdad, hablar con ellos y que vean el proceso. Del mismo modo que os cuento aquí lo que hago y tal. Soy un poco exhibicionista. No sé hasta que punto una plataforma de este tipo me permite esta interacción.

Mi última pega es que paso de enriquecer a una alguien que no aporta nada sino que se aprovecha de lo que crean los demás. Ya que lo haría por aprender y no por sacar panoja prefiero que el intermediario tenga un enfoque social. Que sí, que soy muy rara.

Seguir leyendo →

Lo que he aprendido: el tamaño de papel con XeLaTeX

Aquí ando probando diferentes formatos para el libro de LaTeX cuando me he dado cuenta de algo: XeLaTeX ignora el tamaño del papel que definimos en la clase del documento.

Por ejemplo, si creamos un documento con:

\documentclass[a5paper]{book}

y compilamos con XeLaTeX nos queda algo así:

a5mal

La letra ocupa lo de un A5 pero el papel sigue siendo más grande. Si vamos a las propiedades del documento, veremos que es de tamaño US letter:

usletter

Curiosamente al compilar con pdfLaTeX el tamaño del papel se asigna correctamente.

Resulta que el problema es que a LaTeX le importa un pimiento el papel en el que vamos a imprimir y lo ignora. Hay paquetes como geometry y hyperref y compiladores como pdfLaTeX que lo tienen en cuenta, pero xeLaTeX no (¡el muy vago!). De esta manera, solo con cargar geometry o hyperref el tamaño del papel cambia, lo que me parece una genialidad. Este es el motivo por el que no me había dado cuenta antes, ¡casi siempre uso estos paquetes!

En cualquier caso, la mejor opción para hacer que se active el tamaño del papel si no queremos tocar nada más es decirle a geometry que debe mirar el tamaño de papel establecido. Para ello tenemos pass que según el manual hace lo siguiente:

Disables all of the geometry options and
calculations except verbose and showframe.
It is order-independent and can be used
for checking out the page layout of the
documentclass, other packages and manual
settings without geometry.

Sigue leyendo

Curso no convencional de LaTeX: ¡finiquitado!

¡Ya está terminado el Curso no convencional de LaTeX! He estado escribiendo desde noviembre, los primeros meses mientras acababa la tesis y luego ya como parada (o para más glamour de año sabático). Ha sido un proceso interesante ir escribiendo mientras la gente leía y tener mi trabajo público según se iba desarrollando. He recibido bastante feedback y ¡todo bueno!

Veamos ahora cuál es el estado del curso:

Sobre el futuro del cursete tengo varias dudas:

  • La fuente es libre, pero ¿debería vender la versión compilada?

  • ¿Lo pongo en Openlibra o un servicio similar?

  • ¿Sería posible fabricar una versión en papel? Me hace ilusión.

Mientas voy dando respuesta a estas preguntas seguiré mejorando el estilo del pdf y corrigiendo errores. Que no os de pena que haya acabado el curso, seguiré escribiendo sobre LaTeX por aquí 🙂

¿Y vosotros? ¿Qué opináis del curso? ¿Y de su futuro?


A veces no oigo punkarrada:

Curso no convencional de LaTeX: mi proceso de escritura

Hemos aprendido a crear documentos y presentaciones en LaTeX, sabemos escribir macros propias y convertir archivos de un tipo a otro. Os podría contar cómo cambiar la fuente del texto o hablar de diferentes paquetes para modificar la apariencia de nuestro documento, pero creo con lo que ya sabéis sois muy capaces de entender por vosotros mismos cualquier paquete leyendo el manual. Así que en este último capítulo voy a hablar de algo que desde mi punto de vista no se trata lo suficiente: cómo trabajo con LaTeX en, por llamarlo de algún modo, un entorno de producción. Veremos cómo organizo los archivos, qué software y paquetes utilizo y algunas cosillas sobre compilación y colaboración.

¿Cómo me organizo?

Como he dicho montones de veces la organización es fundamental, aunque no igual para todo el mundo. Cuando el documento es corto solo separo las imágenes en una carpeta propia y escribo el contenido en el mismo archivo en el que defino el estilo. Si, por el contrario, se trata de un documento más extenso, como un libro, creo un archivo de LaTeX principal desde el que llamo a las diferentes secciones o capítulos con \include{} o \input{}.

A la hora de separar los archivos, tiendo a separarlos por tipo, lo que me facilita aplicarles a todos ellos una misma acción1. En ocasiones hago una segunda clasificación por capítulos si tengo muchas figuras o extractos de código, por ejemplo.

├── principal.tex
├── estilo.bst
├── referencias.bib
│
├── Contenido
│   ├── 1.Intro.tex
│   ├── 2.Segundo.tex
│   └── ...
│
├── Código
│   ├── listing.py
│   └── ...
│
└── Figuras
    ├── fig.eps
    └── ...

Seguir leyendo →

Lo que he aprendido: configurar el QuickBuild de Kile

Una de las cosas malas de actualizar el sistema operativo es que pierdes las antiguas configuraciones y luego como ya estás acostumbrada a que todo vaya bien te vuelves loca cuando el ordenador no hace lo que tú quieres. Esto es lo que me ha pasado con Kile, acostumbrada a darle al QuickBuild para que me generase el documento sin más me he quedado jarta al ver que no llamaba de por sí a BibTeX (¡el muy!) y que no me salían las referencias (¡maldita sea su estampa!). Lo que no recuerdo es si antes tenía una opción que hacía las referencias bibliográficas o si lo configuré yo, voy para vieja.

En fin, si queremos que Kile nos haga todo el proceso en un solo click tenemos que ir a Settings > Configure Kile…, elegir Tools > Build en el árbol de la izquierda y crear una secuencia nueva para QuickBuild que haga PDFLaTeX, BibTeX, PDFLaTeX, PDFLaTeX. En la imagen se ve más claro:

quickbuild.png

Seguir leyendo →

Curso no convencional de LaTeX: la opción Pandoc

Allá por los inicios del cursete de LaTeX hablé de Pandoc, una herramienta que transforma documentos de un formato a otro fácilmente y, sobre todo, bien. Comenté que Pandoc nos permitía escribir en Markdown y obtener un pdf de calidad porque por el medio usaba LaTeX. Hoy vamos a ver cómo se hace esto.

Si ya sabemos LaTeX para que vamos a aprender Pandoc ahora, me diréis. Pues porque tiene unas pocas ventajas que paso a listar:

  • El documento es legible incluso antes de compilar.

  • Podemos usar cualquier editor de texto, cosa que también ocurre con LaTeX pero que exige un proceso de compilación más complejo.

  • Tecleamos menos, ya que Markdown es un lenguaje mucho más escueto que LaTeX. Podemos suplir las carencias de Markdown mezclando LaTeX alegremente por ahí y usando filtros.

  • No nos deja archivos auxiliares por ahí, los borra una vez hecha la transformación. Solo nos quedan el Markdown inicial y el pdf final.

  • Tenemos la opción de obtener diferentes formatos finales, lo que nos permite, por ejemplo, montar una web y sacamos un pdf a partir de los mismos archivos.

Como todo no puede ser bueno, también tiene unas pocas desventajas:

  • Necesitamos más archivos, si es un documento complejo nos vendrá bien un Makefile.

  • Instalarlo puede ser un poco lío, sobre todo los filtros.

  • Tenemos que saber LaTeX (pero ya sabemos ¿no?), Markdown (que se aprende en diez minutos) y Pandoc (otros diez minutos).

Yo escribí mi tesis doctoral así, primero porque estoy loca y segundo porque me hago vieja y mis manos necesitan un descanso del ordenador. He de reconocer que ese es un caso muy extremo, pero este sistema es muy práctico para tomar notas rápidas y que el resultado final tenga buena pinta.

Instalación y uso

Hay varias maneras de instalar Pandoc, desde la sencillísima de tirar de repositorios o del paquete de Debian o Windows correspondiente a usar cabal, el gestor de paquetes de Haskell. Hay que tener en cuenta que la versión de los repos suele ser bastante antigua1 y que si instalamos desde un paquete tendremos que reinstalar si queremos un Pandoc actualizado a tope.

Por esos motivos y porque siempre tengo la idea de aprender Haskell y luego nunca lo hago, yo instalé Pandoc y dos filtros que utilizo mucho mediante cabal2:

sudo apt-get install haskell-platform   # O equivalente según sistema operativo
cabal update                            # Actualizar lista de paquetes
cabal install pandoc                    # Instalar pandoc
cabal install pandoc-citeproc           # Instalar filtro de bibliografía
cabal install pandoc-crossref           # Instalar filtro de referencias cruzadas

Una vez que lo tenemos instalado, nos toca aprender a usarlo. Lo más raro de Pandoc es que se usa desde la terminal, nada que nosotros aguerridos latexianos no podamos dominar. En el caso más simple no tenemos más que darle el nombre del archivo de entrada y el de salida con su respectiva extensión:

pandoc INPUT.ext -o OUTPUT.ext

Ahora nos vamos a centrar en el caso de crear un pdf a partir de uno o varios archivos escritos en Markdown. Aparte de la opción -o que acabamos de ver hay otras que nos pueden resultar interesantes:

  • --latex-engine = COMPILADOR: nos permite elegir el compilador de LaTeX. Como sabemos, el compilador elegido afecta a cómo se establecen el idioma y las fuentes.

  • --variable, -V: controla el comportamiento de la plantilla que LaTeX utiliza para pasar de Markdown a pdf asignando valores a las diferentes variables. Un ejemplo es establecer el tipo de documento, que se hace con -V documentclass=book. Estas variables se pueden introducir mediante un bloque YAML en el propio archivo Markdown o en un archivo .yaml como veremos un poco más abajo.

  • --number-sections, -N: numera las secciones.

  • --top-level-division=[part|chapter|section]: indica si la división de mayor jerarquía es la parte, el capítulo o la sección. Se establece automáticamente si definimos el tipo de documento.

  • --table-of-contents, --toc: añade un índice al documento. Esta opción también puede controlarse desde el bloque YAML, la pongo como ejemplo de la flexibilidad que tiene el programa.

  • --template=RUTA: indica el camino a la plantilla que debe seguir para dar formato al documento.

  • --filter FILTRO: añade funcionalidades adicionales incluidas en un filtro. Los filtros que he mencionado en la instalación, pandoc-citeproc y pandoc-crossref, sirven respectivamente para gestionar las referencias bibliográficas y las referencias cruzadas sin tener que recurrir a sintaxis de LaTeX.

Todas estas cosas parecen complejas pero en la mayor parte de los casos usaremos el comando simple que mostraba al principio, montaremos nuestro contenido en un plis con Markdown y tendremos un documento final decente gracias al LaTeX intermedio.

¿Qué necesitamos?

Vamos a ver más en detalle qué nos hace falta para crear un pdf a partir de un Markdown. En esencia necesitamos:

  • Archivos escritos en Mardown con extensión md

  • Pandoc y una distribución de LaTeX

  • Una consola

  • Si vamos a tener referencias bibliográficas, un archivo con la bibliografía y un estilo de bibliografía csl. Nuestro amado .bib nos vale perfectamente para la primera labor y tenemos estilos csl a patadas en la web de Zotero.

  • Una plantilla si la que usa por defecto no nos gusta

Para hacernos la vida más fácil nos conviene:

  • Un archivo YAML para las variables

  • Un Makefile y make

No os preocupéis, enseguida diseccionamos las cosas nuevas: el Markdown, la plantilla, el YAML y el Makefile.

Markdown sabor Pandoc

Markdown es un viejo conocido de los que escribimos en el Internet, especialmente de los que usamos GitHub. Pandoc tiene un Markdown especial con más funcionalidades que el Markdown estricto, como notas al pie o la posibilidad de cambiar el tamaño de las imágenes, esto último en sus versiones más modernas. Va un resumen rápido:

# Título de primer nivel

## Título de segundo nivel

Lista numerada:

1. Ítem
1. *cursiva* o _cursiva_
1. **negrita**

Lista sin numerar:

* [enlace](url) o [enlace] o [enlace][ref]
* Texto[^nota]

[^nota]: Texto de la nota al pie
[enlace]: url
[ref]: url

### Título de tercer nivel

Imagen

![Texto alternativo](ruta a la imagen){width=porcentaje}

Tabla

------------
  x      y
----- ------
 0.1   1.3 
------------

Table: Aquí va el pie de tabla

$Ecuación inline$

$$Ecuación con línea propia$$

`Código inline`

Bloque de código

```haskell
-- Fibonacci!
  fib = 0 : 1 : zipWith (+) fib (tail fib)
```

Además, los filtros que mencionaba tienen una sintaxis propia para las referencias cruzadas y bibliografía. Van unos ejemplos:

# Sección {#sec:etiqueta}

Como dicen en [@claveBibliográfica] o incluso en @claveBibliográfica

![Pie de figura](ruta){#fig:etiqueta}

Tal y como se ve en @fig:etiqueta

$$ ecuación $$ {#eq:etiqueta}

La ecuación @eq:etiqueta

Plantilla personalizada

Pandoc realiza la conversión de archivos mediante una plantilla para cada tipo de formato. Hemos dicho que para pasar de Markdown a pdf utiliza LaTeX, podemos extraer la plantilla correspondiente haciendo:

pandoc -D latex > plantilla.latex

Al abrirla veremos que contiene LaTeX de toda la vida y que, por lo tanto, sabemos adaptarla a nuestro gusto.

Lo único así raro son las cosas que van entre símbolos de dólar y que no son ecuaciones sino variables. Entre ellas la más importante es $body$, donde Pandoc mete el contenido de nuestros Markdowns una vez los ha convertido a LaTeX.

Metadatos YAML

Todas las variables que aparecen en la plantilla se sustituyen con los valores o metadatos que enviamos con la opción -V, en un bloque YAML dentro de un archivo Markown o en un archivo YAML aparte.

Un bloque YAML real tiene una pinta como esta:

---
# Datos
title: Título 
author: Nombre
lang: es

# Control
toc: True

# Formato
documentclass: book
geometry:
- top=1in
- bottom=1in
- right=0.5in
- left=1.5in
mainfont: LiberationSans
fontsize: 12pt

# Bibliografía
bibliography: referencias.bib
csl: formato.csl
link-citations: true
---

Se puede añadir este bloque al inicio de nuestro Markdown o guardarlo en un archivo aparte que incluiremos como entrada para Pandoc:

pandoc datos.yaml input.md -o output.pdf

Es importante que aunque tengamos los datos en un archivo aparte mantengamos los guiones alrededor, ya que como Pandoc concatena todos los archivos de entrada no sabrá que es un bloque YAML sin ellos.

Makefile

Si juntamos todo lo visto hasta ahora nos damos cuenta de que la orden para invocar a Pandoc puede ser muy larga. Ahí es donde nos resulta útil un Makefile, un archivo que contiene las instrucciones para compilar determinada cosa, en nuestro caso para convertir los Markdowns en pdfs.

Yo no os voy a explicar cómo hacer un Makefile, básicamente porque no sé, os dejo un ejemplo con varios archivos de entrada y filtros que podéis adaptar y un par de referencias sobre el tema. Lo único que sé es que debe tener esta estructura:

variable = contenido

objetivo:
    órdenes indentadas un tabulador
    $(referencia a variable)

Mi Makefile habitual suele parecerse a este, la gente que sabe de ordenadores lo hará mucho mejor:

# Archivos markdown

FILES = INPUT_1.md INPUT_2.md

# Creación de pdf
# - La barra sirve para partir la orden 
# - El filtro crossref debe ir antes de citeproc
# - Opción -N para numerar secciones

all: 
    pandoc \
    --filter pandoc-crossref \
    --filter pandoc-citeproc \
    --template=./PLANTILLA.latex \
    -N \
    $(FILES) METADATOS.yaml \
    -f markdown -o OUTPUT.pdf

# Eliminar output

clean:
    rm OUTPUT.pdf

# Por si hay algún archivo que se llame clean

.PHONY: clean 

Ahora solo nos hace falta llamar a make:

make       # Crear el pdf
make clean # Borrar el pdf

Reflexión final

En este capítulo he intentado dar a conocer otra herramienta relacionada con LaTeX y que me parece tremendamente útil. No creo que sea un sustituto para el LaTeX puro y duro pero me parece interesante para escribir documentos rápido y que tengan una apariencia elegante. Otro uso a tener en cuenta es obtener salidas variadas a partir de nuestro LaTeX, que sé yo, para los que tengáis jefes raros que solo lean documentos en Word.

Como siempre, yo intento dar una visión general del tema, para aprender más os dejo las referencias.

Referencias

Manual de Pandoc

Sustainable Authorship in Plain Text using Pandoc and Markdown

Pandoc’s markdown

pandoc-citeproc

pandoc-crossref

Sinopsis del formato markdown para pandoc (pdf)

Zotero Style Repository

make en la Wikipedia

Compilación, Linkado y Makefiles en C en Free Hacks!


Suena:


  1. Haciendo apt-cache search pandoc en Ubuntu 16.04 LTS he visto que lleva un Pandoc 1.16 
  2. Recordad añadir .cabal/bin al path si queréis llamar a Pandoc y sus filtros desde cualquier sitio sin dar la ruta completa.