Mostrando entradas con la etiqueta latex. Mostrar todas las entradas
Mostrando entradas con la etiqueta latex. Mostrar todas las entradas

viernes, marzo 31, 2017

Lorem Ipsum en Python y LaTeX

Lorem ipsum es un texto que se suele usar para probar el formato tipográfico de un diseño. Por extensión, hace referencia a cualquier texto aleatorio que se usa para comprobar el correcto funcionamiento de un programa. Así, que es raro que no exista alguno de esos generadores para diversos lenguajes de programación o entornos de edicción de texto. Dos ejemplos de su uso en python y LaTeX, donde estos generadores me han sido útiles:

Python

En Python la librería que he usado para generar este tipo de textos es loremipsum. Puede instalarse de manera muy sencilla con pip y su documentación es muy sencilla de seguir, con varios ejemplos:

from loremipsum import get_sentences, get_paragraphs
# Generate a list of n sentences
list_sentences = get_sentences(10)
print list_sentences
# Generate n paragraphs
paragraphs = get_paragraphs(4)
print paragraphs

Si se quiere obtener estadísticas de los párrafos generados se puede usar las funciones con prefijo generate_ Por ejemplo:

from loremipsum import generate_sentence
(total_sentences, total_words, sentence) = generate_sentence()
print total_sentences, total_words
print sentence

LaTeX

En LaTeX se puede usar el paquete lipsum para generar este tipo de textos de prueba. Suele venir con la mayoría de las instalaciones de LaTeX. Su uso es sencillo. Cargamos el paquete y usamos la macro \lipsum con un intervalo que señala los párrafos que se quieren generar:

\documentclass[10pt,a4paper]{article}
% UTF-8 and friends
\usepackage[utf8]{inputenc}
\usepackage[spanish]{babel}
\usepackage{lipsum}
\begin{document}
\section*{First section}
\lipsum[1-2]
\section*{Second section}
\lipsum[1-3]
\end{document}

viernes, marzo 24, 2017

Tablas de contenidos por sección en LaTeX

Siguiendo con la elaboración de mi recetario, hace un tiempo se me planteó un problema: Quería generar una tabla de contenidos por cada sección de recetas que tuviese, además de una tabla general con todos los contenidos. Es decir, tener algo similar a lo que se ve en esta captura de pantalla:


Captura del PDF con el índice principal y un subíndice en el primer capítulo

De esta manera, tendría al comienzo de casa sección (platos principales, postres, dulces, pastas, ...) las recetas que contiene.

¿Y de qué manera se puede conseguir este formato en LaTeX? Pues con ayuda de los paquetes de macros titlesec, titletoc e hyperref: Se va a redefinir la macro que inicia las secciones, \chapter para que cuando se inicie una, nos escriba las tablas de contenido de todo lo que hay dentro.

\titleformat{\chapter}[display]
{\bfseries\huge\bfseries\filcenter}{\thechapter}{25pt}{\Large}
 [%
  \startcontents
  \printcontents{}{1}{\setcounter{tocdepth}{3}}%
  \newpage%
  ]

Cuando se use esa nueva definición de la macro \chapter, LaTeX y las utilidades asociadas serán capaces de generar las tablas de contenido de todas las secciones que se usen.

\chapter*{Capítulo 1}
    \addcontentsline{toc}{chapter}{Capítulo 1}
    \section*{Sección 1}
      \addcontentsline{toc}{section}{Sección 1}
      \lipsum[1-2]
    \section*{Section 2}
\addcontentsline{toc}{section}{Sección 2}
\lipsum[1-2]

Sobre las líneas anteriores hay que tener en cuenta lo siguiente:

  • Se está usando la versión de la macro acabada en un asterisco, \chapter*. Esto hace que no se utilice la numeración para las secciones, al menos en el tipo de documento report que es el que estoy usando.
  • Para que cada sección se añada a la tabla de contenidos es necesario usar la macro \addcontentsline.
  • La macro \lipsum no es más que un generador de texto lorem ipsum.

El código completo de un ejemplo que se puede procesar con pdflatex puede encontrarse en este repo de github, junto con el PDF generado. El código fuente del ejemplo completo es:

% Tipo de documento
\documentclass[10pt,a4paper]{report}
% UTF-8 and friends
\usepackage[utf8]{inputenc}
\usepackage[spanish]{babel}
\usepackage{titlesec}
\usepackage{titletoc}
\usepackage{hyperref}
\usepackage{lipsum}
% Para los capitulos
\titleformat{\chapter}[display]
{\bfseries\huge\bfseries\filcenter}{\thechapter}{25pt}{\Large}
 [%
  \startcontents
  \printcontents{}{1}{\setcounter{tocdepth}{3}}%
  \newpage%
  ]
\title{Testing subcapítulos}
\begin{document}
  \maketitle
  \newpage
  \tableofcontents
  \chapter*{Capítulo 1}
    \addcontentsline{toc}{chapter}{Capítulo 1}
    \section*{Sección 1}
      \addcontentsline{toc}{section}{Sección 1}
      \lipsum[1-2]
    \section*{Section 2}
\addcontentsline{toc}{section}{Sección 2}
\lipsum[1-2]
\chapter*{Capítulo 2}
\addcontentsline{toc}{chapter}{Capítulo 2}
\section*{Sección 1}
\addcontentsline{toc}{section}{Sección 1}
\lipsum[1-2]
\section*{Sección 2}
\addcontentsline{toc}{section}{Sección 2}
\lipsum[1-2]
\end{document}

lunes, febrero 06, 2017

Como usar Latex para hacer un libro de recetas

Tras probar varios paquetes de macros para LaTeX y ver que uno de ellos, xcookybooky me daba las macros que necesitaría para mi pequeño libro de recetas, me he puesto manos a la obra con el mismo.

El formato que quiero lograr en el libro es de un índice principal, diferentes capítulos donde se agrupan recetas similares - postres, primeros platos, ... - y que en el inicio de cada capítulo exista una tabla de contenido con las recetas del mismo.

Para organizar el código fuente, en un primer momento, puesto que no tengo demasiadas recetas, uso un fichero principal desde donde voy incluyendo cada receta con ayuda de la macro \input de LaTeX. Los ficheros de receta siguen la misma estructura con lo cual es muy sencillo generarse una plantilla para usarla.

El código fuente sigue, por tanto este esquema similar al siguiente:

\documentclass[10pt,a4paper]{report}
% Paquetes usados
\usepackage[utf8]{inputenc}
\usepackage{xcookybooky}
\usepackage[spanish]{babel}
\usepackage{hyperref}
%
\title{Recopilación de recetas}
\begin{document}
\maketitle
\newpage
\tableofcontents
\chapter*{Platos principales}
\addcontentsline{toc}{chapter}{Platos Principales}
\input{src/carnesalsa.tex}
\input{src/espinacasgarbanzos.tex}
\input{src/ensaladillagambas.tex}
\chapter*{Postres}
\addcontentsline{toc}{chapter}{Postres}
\input{src/pannacotta}
\end{document}

Este esquema es muy flexible:En el futuro, se puede cambiar a un sistema donde se use \input por cada fichero capítulo, y a su vez éstos incluyan las recetas.

Para definir las recetas se van a usar el paquete de macros del paquete xcookybooky. Cada receta se escribe en un fichero y se renderiza una página distinta. Para evitar problemas con los estilos, éstos se reinician en cada página. La plantilla de una receta es la siguiente:

% Plantilla para recetas
\newpage % Nueva página
\thispagestyle{empty} % Borra los estilos 
\begin{recipe}[params]{Título de la receta} % Comienza una receta
\introduction{ % Introducción
}
\ingredients{ % Ingredientes
}
\suggestion{ % Sugerancias
}
\preparation{ % Pasos de la preparación
    \begin{itemize}
        \item
    \end{itemize}
}
\end{recipe}

Cada receta va en un entorno recipe y es obligatorio ponerle un nombre. Tal como está definido este entorno, las recetas se incorporarán al índice del documento. Al menos es necesario que dentro del entorno se haga uso de las macros \ingredients y \preparation. La primera se usará para definir una tabla con los ingredientes - ojo, que usa la sintaxis de las tablas en Latex. La segunda, para los pasos de la preparación. Aunque existe una macro definida para cada paso (\step), también se puede hacer uso de un entorno enumerate

Un ejemplo de una receta definida completa usando este paquete:

% Caballas aliñadas
\newpage
\thispagestyle{empty}
\begin{recipe}[source={Bisabuela Isabel}]{Caballas aliñadas}
\introduction{
La caballa fresca es un pescado azul que se consume típicamente en verano. Una manera de prepararla, que gusta mucho en mi famila es aliñada.
}
\ingredients{
    \unit[1]{Kg} & Caballa fresca limpias de vísceras y cabeza \\
    1 & cebolla mediana \\
      &Vinagre \\
      &Aceite de oliva
}
\preparation{
    \begin{enumerate}
        \item Congelar al menos 48 horas las caballas. Aunque no es una preparación cruda, mejor evitar problemas con el anisakis.
        \item Sumergir las caballas en un recipiente con agua y vinagre para que se terminen de desangrar.
    \item Salar las caballas y meter un par de horas en el frigorífico.
        \item Poner a calentar agua con sal en una olla donde podamos sumergir las caballas, esperar que hierva.
        \item Sumergir las caballas 4 o 5 minutos hasta que estén cocidas. Tened en cuenta que el tiempo de conción dependerá del tamaño de la caballa, me pasó que alguna de ellas al ser bastante gruesa, no quedaba bien cocida por el centro y tuve que volver a dejarla 2 o 3 minutos.
        \item Sacar las caballas de la olla, limpiar la piel - se desprende con facilidad -, abrilas, retirar las espinas y poner en una fuente.
        \item Añadir cebolla cortada en aros por encima de la caballa.
        \item Aliñar con aceite de oliva y ya está lista para servir.
    \end{enumerate}
}
\end{recipe}

Y la imagen del renderizado de esta receta con LaTeX es la siguiente:

El paquete de macros xcookybooky tiene muchísimas más opciones que las esbozadas en esta pequeña entrada, con lo cual, animo a leer su documentación para comprender su uso.

martes, enero 31, 2017

Plantilla para recetas en Latex

Desde hace algún tiempo me ronda la idea de recopilar todas aquellas recetas de cocina que voy aprendiendo, así como recetas de mis padres y elaborar un pequeño recetario que me sirva de referencias con las mismas. La solución más cómoda para mi fue usar LaTeX. Es cierto, que introducir el marcado a mano cuando existen estupendos editores WYSIWYG, pero el acabo de los documentos realizados con este sistema siempre me ha gustado. Además, se ajusta bastante a mi manera de trabajar, con un editor de texto como vim y la posterior generación de pdf.

Ahora, tenía que buscar un conjunto de macros para LaTeX que me facilitase la creación del libro. Así que buscando en The Comprehensive TEX Archive Network para ver que posibles paquetes podía probar. Bajo cooking encontré varios tipos de macros que se podían ajustar más o menos a lo que iba buscando. Empecé probando cooking pero no me convenció demasiado. Así que pasé al siguiente xcookybooky

Tras instalarlo en el sistema, vi que era justo lo que necesita: Un entorno de receta, que permite especificar varias secciones y cuyo resultado es este:

domingo, julio 27, 2014

Un viejo resumen de Teoría de la Información

El año pasado realizando en Coursera un curso de introducción a los conceptos de Big Data de Gautam Shroff, me encontré por casualidad con conceptos de una asignatura de tercero de carrera de Teoría de la Información. Por esas casualidades extrañas tenía en casa unas notas de hace unos veinte años que realicé para poder estudiarla. Están un poco incompletas, pero decidí que sería una buena oportunidad para pasarlas a soporte electrónico usando Latex, para volver a repasar como se usaba dicho sistema de preparación de documentos.

Sé que las notas no están completas y que hay que rellenar bastantes huecos, pero a mi me ha servido para recordar algunas cosas de estadística y sobre todo, como un excelente ejercicio para usar Latex, en especial todo lo relacionando con la escritura de fórmulas matemáticas, mil veces más cómoda, diga la gente lo que diga, que el famoso editor de ecuaciones del Word que recuerdo. Con el paso del tiempo, reconozco que de haber perdido las cuatro horas que he tardado en pasar toda esa información a Latex hubiese tenido unas notas más cómodas de estudiar. Y creo recordar que por aquellos entonces si tenía alguna versión de Latex que corría sobre MS-DOS.

He creado un proyecto en Sourceforge, Notas de teoría de la información para subir tanto el código fuente en Latex como el documento que se genera.

Básicamente el código fuente y el documento lo pongo en dominio público. Como siempre, se agradece nombrar el origen de los mismos. Sé que el hay algunos conceptos e información que no están completas y que puede haber errores. Cualquier corrección es bien recibida. Si me veo con ánimo, repasaré todo el documento e intentaré rellenar aquellas lagunas que tiene, pero no prometo nada.