La pregunta es si es posible lograr hacer imposición de lado y lado en LaTeX puro. Pese a que el lenguaje per se no provee de muchas herramientas lógicas (programáticas), sí tiene elementos interesantes que podrían hacer el cálculo trivial, como ancho de la página, márgenes, etc.

Partiendo por el final, la funcionalidad adecuada para diagramar podrían ser las boxes (cap.6.6 de The Not So Short Introduction To LaTeXTNSS from now on). De hecho, el modelo de cajas es fundamental en el funcionamiento de LaTeX – las letras son cajas, las palabras cajas de cajas, etc. Glue & Boxes. En teoría bastará con que el ancho de las cajas que definamos calce con el de la hoja para que aparezcan lado a lado.

Los dos comandos más básicos para hacer cajas son \parbox, que formatea un párrafo de texto (plano) en una caja y el ambiente \begin{minipage} … \end{minipage} que acepta LaTeX dentro de él – el nombre minipage es sugestivo… Ambos toman el ancho como parámetro. No así el alto. Pero existen dos comandos ordenadores de cajas que son \makebox para disponerlas horizontalmente y \raisebox verticalmente. Si es que funcionarán con minipage, esto da para una primera prueba de concepto.

\documentclass[a4paper,11pt]{article}
\title{Prueba de imposición}
\author{Numérico}
%divide por 6 pero debiera dividir por 8 pues es 0.5\textwidh y 0.25\textheight !!
\begin{document}
\noindent %como son 'caracteres' intenta indentarlos
\framebox{
\raisebox{0.25\textheight}{
\begin{minipage}[t]{0.5\textwidth}
1
\end{minipage}
}
}
\framebox{
\raisebox{0.25\textheight}{
\begin{minipage}[t]{0.5\textwidth}
2
\end{minipage}
}
}
\noindent %ahora tengo que repetirlo?
\framebox{
\raisebox{0.25\textheight}{
\begin{minipage}[t]{0.5\textwidth}
3
\end{minipage}
}
}
\framebox{
\raisebox{0.25\textheight}{
\begin{minipage}[t]{0.5\textwidth}
4
\end{minipage}
}
}
\framebox{
\raisebox{0.25\textheight}{
\begin{minipage}[t]{0.5\textwidth}
5
\end{minipage}
}
}
\framebox{
\raisebox{0.25\textheight}{
\begin{minipage}[t]{0.5\textwidth}
6
\end{minipage}
}
}
\end{document}

La teoría funciona para crear las cajas, salvo que no da exactamente el resultado esperado. Divido el \textheight en 4 y el \textwidth en 2 y caben seis cajas dentro de la hoja en lugar de 8. Lo que significa que algo más está ocupando espacio.
Por un lado, no quedó perfectamente claro cómo es que funciona \raisebox. Por otro lado, modificar el espacio entre líneas no tuvo efecto. Tampoco debieran estar influyendo los márgenes, headers ni footers ya que los valores son en función del texto. Ahora, justamente, lo que se define es el valor máximo de éste. ¿Un guess podría ser que está calculando en base al largo efectivo y no el total?

Obviamente el alto y ancho que demos a cada caja debe ser en función al tamaño total de la página, lo que nos remite a un aspecto más básico que es el de los tipos de documento. Luego nos ingeniaremos cómo pasarle por parámetro en cuántas partes debe dividirla, etc. Como dice en el primer post, todo documento debe partir por \documentclass[opciones]{clase}
En cuanto al tamaño total, dentro de las opciones puede ir el tamaño del papel, pero las alternativas son carta, oficio, a5… pero no un tamaño propio (ej. cuarto de mercurio).

Se podría pensar que el tipo de documento correcto en este caso sea book, que tiene una serie de opciones ya predefinidas como imprimir por lado y lado, empezar los capítulos siempre en la página derecha, etc. Sin embargo, dado que el lado y lado no es uno a uno si ponemos muchas páginas por hoja, puede que esto no nos convenga. Depende por lo demás de si vamos a poder imponer LaTeX dentro de LaTeX o si va a haber que exportar a otro formato entre medio… Otra opción interesante podría ser la clase minimal. Como su nombre lo indica, no setea nada por defecto y puede dársele un alto y ancho luego a cada variable:

\documentclass{minimal}
\setlength{\paperwidth}{60cm}
\setlength{\paperheight}{20cm}
%necesario para visualizar el pdf...
\pdfpagewidth=\paperwidth
\pdfpageheight=\paperheight
\begin{document}
...texto...
\end{document}

La página mínima pareciera estar quedando del tamaño deseado seteándole con \setlength{\paperheight}{60cm} el alto – e igual para el ancho. Para que esto se vea reflejado en el PDF generado, si no usamos el paquete hyperref, hay que explicitar \pdfpagewidth=\paperwidth(e igual para height, nuevamente).
Sin embargo, no puedo hacer que el texto ocupe el total del papel ya que existe un márgen mínimo de 1inch.

Otro asunto importante es pensar en la posibilidad de que LaTeX formatee directamente texto LaTeX.
Para ésto, darle una mirada al paquete verbatim que permite incluir otros archivos tal cual vienen (aunque al parecer de ASCII plano). En todo caso el paquete es una mejora del ambiente verbatim (cap.2.11.5 de TNSS) que efectivamente no ejecuta LaTeX. También está el comando \include(cap. 1.8 de TNSS) que podría traer LaTeX dentro de una caja pero en su totalidad, y que por lo tanto no sabría pasar automáticamente a la siguiente caja y probablemente quedaría trunco.

La importación es con \input, no con \include porque este último comando empieza una nueva página, etc. Efectivamente, como era de esperar, lo trae todo de una dentro de la caja.
En cuanto al overflow, al poner textos de distintos largos en lugar de cortarse las cajas crecieron con ellos, perdiendo la diagramación. Esto probablemente se deba a que los anchos y altos definidos serían – nuevamente – referidos al mismo texto. ¿Quizás si uso \paperheight en lugar de \textheight, lo cuales sí podrían ser absolutos? Sea como sea, la cuestión es encontrar la manera de decirle que cuando ya no cabe pase a la siguiente… lo que no se vé fácil.

La otra opción que mencionamos era inyectarle PostScript (cap.4.1 de TNSS), suponiendo -razonablemente- que LaTeX puede ser fácilmente traducido a este formato. Para esto, después de incluir el paquete graphicx se puede usar el comando \includegraphics[llave=valor, …]{archivo} para incluir el archivo especificado. Los pares llave-valor son argumentos como ancho, alto, etc. Con lo cual lo primero que se me viene a la mente, si tratamos los tamaños en unidades absolutas, es que puede dar problemas con los tamaños de las fuentes (i.e. Una fuente de 12 exportada y luego importada con el tamaño de la página original, ¿necesariamente sigue siendo tamaño 12?)

La importación de PostScript no funca, me debe faltar la impresora a .ps. dvips no está resultando…

Finalmente, dejando a un lado la dudas aún sin resolver, me llaman la atención los paquetes calc, e ifthen los que podrían servir para ayudar a la lógica de un scriptde imposición, aunque estoy viendo que el puro LaTeX no se la va a poder para la imposición, aunque con una ayudita de java, por ejemplo, puede ser de gran ayuda…

También se ve interesante la posibilidad de empaquetarlo todo y crear un nuevo comando. Cosa que permitiría, por ejemplo, pasarle por parámetro el tamaño de la hoja de imprenta, de la hoja resultante y, quizás, si quiero que haya pliegues además de cortes, y ejecutar algo así como \imponer[100, 60, 20, 30, true] {osolhosdogato.tex}

Obviamente me falta averiguar si ya existen paquetes de imposición, cosa de no “reinventar la rueda”, etc, etc, etc.
Wikipedia[fr] tiene buenos links >>
Impose es open-source? >>
proPosition >> (en Ruby)
pdfJam >>
plugin para Scribus ! >>

ver especialmente proPosition que usa el paquete pdfpages>> de LaTeX

Este sitio utiliza cookies.    Leer más