viernes, diciembre 23, 2005

Declaración de intenciones

Desde aquí muestro lo que me gustaría hacer. Esperemos que gustar = conseguir.

Escribir una clase de LaTeX.
Puede ser que mi proyecto acabe en una clase de LaTeX. Puede ser que mi proyecto no tenga un preproceso a la creación del documento TeX. Puede ser que no utilice LaTeX sino el más primitivo TeX.

Se me ha ocurrido el crear una nueva clase de documento (\documentclass) a la que podría llamar "autolayout" o algo así. También podría tratarse de un paquete (\usepackage) pero no quiero estar sujeto a ninguna clase ya definida. No quiero márgenes, no quiero tamaños por defecto...

La clase se compondría de páginas (\begin{Page}) y de bloques (\begin{Block}). Cada página indica eso, una página. Dentro de ella se declaran una seríe de bloques, cada bloque es como una "minipage"; tienen su "mundo" en el que se fijan sus parámetros. Cada bloque, tabién tiene un ancho especificado. Si no se indicara, el ancho será el de la própia página. La altura viene calculada dependiendo del contenido del bloque.

Las páginas tienen el tamaño especificado al indicar la clase: a4, a5, etc. En la página podemos incluir tantos bloques como deseemos pero el sistema se encargará de decidir que bloques entran en la página. El objetivo es el de conseguir una página lo más bien maquetada posible.

Los siguientes puntos se tienen en cuenta:
  • un bloque no se incluye en una página si su altura es superior a la misma.
  • se pueden indicar bloques "continuadores" (\begin{Block}[continue]{refBlock}) en los que se incluye el contenido del bloque indicado. Versión ancla de QuarkXpress.
  • un bloque no se incluye en la página si su anchura es superior a la misma.
  • un bloque no puede aparecer más de una vez en la página. cuando un bloque ha sido incluido se marca para que no vuelva a ser considerado.
  • un bloque descartado por anchura o altura (son o es mayor/es que la de la página) no puede ser incluido.
  • los bloques pueden ser marcados para ser incluidos obligatoriamente por el sistema.
  • se pueden marcar varios bloques para formar un grupo. Un grupo es un conjunto de maquetaciones para el mismo contenido. Así por ejemplo nos puede interesar dar distintas versiones de un mismo contenido para que, si no se incluye en formato una columna, aparezca en formato 3 columnas apaisado. (\begin{Block}[group:group_a]). Una vez se ha incluido una noticia del grupo, el resto se marcan como incluidos también.
  • uno de los objetivos es el dejar el menor espacio posible, respetando siempre los márgenes.
  • se pueden introducir bloques fijos (\begin{block}[fixed](posx,posy)), los cuales aparecen en la posición indicada sin que el sistema los considere en su maquetación.
  • una posición ocupada por un bloque no podrá ser ocupada por otro bloque. De lo contrario, se sobrepondrían algunos objetos a otros.
  • dentro de un bloque se pueden incluir imágenes.
  • si hay pocos bloques o los bloques on muy grandes, el sistema no ofrecerá soluciones muy vistosas.
  • un bloque no puede estar en blanco.
  • a los bloques se les añade automáticamente márgenes dependiendo en que posición se encuentran. Por ejemplo, si un bloque se encuentra en la posición superior izquierda no deberá tener margen superior e izquierdo ya que ya posee los de la página. Un bloque en el medio de la página, a su vez, deberá incluir márgenes en todos sus lados para poder separarse de los otros bloques y no parecer que están adjuntos.
  • los márgenes podrán tener distintos tamaños para obtener la mejor maquetación posible.
  • si sobra espacio en uno de los laterales, se desplazará todo el contenido hacia el centro de la página para no dar la sensación de que todo el contenido está apelotonado en una esquina.
  • cuantos más elementos incluyamos mejor será la maquetación
  • se podrá indicar la posibilidad de variar la separación entre lineas, o el tamaño de la fuente para poder acoplar mejor a la página.