diff options
author | Norbert Preining <norbert@preining.info> | 2019-09-02 13:46:59 +0900 |
---|---|---|
committer | Norbert Preining <norbert@preining.info> | 2019-09-02 13:46:59 +0900 |
commit | e0c6872cf40896c7be36b11dcc744620f10adf1d (patch) | |
tree | 60335e10d2f4354b0674ec22d7b53f0f8abee672 /support/fancyhdrBoxed |
Initial commit
Diffstat (limited to 'support/fancyhdrBoxed')
-rw-r--r-- | support/fancyhdrBoxed/Header.py | 114 | ||||
-rw-r--r-- | support/fancyhdrBoxed/MiniBloquiHeader.tex | 133 |
2 files changed, 247 insertions, 0 deletions
diff --git a/support/fancyhdrBoxed/Header.py b/support/fancyhdrBoxed/Header.py new file mode 100644 index 0000000000..6b252392dd --- /dev/null +++ b/support/fancyhdrBoxed/Header.py @@ -0,0 +1,114 @@ +""" +/* + * Header.py 1.0 + * Implementa un mini lenguaje de bloques para crear + * cabeceras con fancyhdr + * + * Copyright (C) Manuel Gutierrez Algaba, 2000 + * + * This program is free software; you can redistribute it and/or modif +y + * it under the terms of the GNU General Public License as published b +y + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * +*/ +""" + +class Bloque: + def __init__(self, y, x, inicio_y = 0, inicio_x = 0): + """ + y : altura + x : anchura + """ + self.y = y + self.x = x + self.inicio_y = inicio_y + self.inicio_x = inicio_x + self.lista_bloques=[] + self.caracteres_anyadidos = [] + + def genera_bloque(self): + print "\\psline{-}" + self.escribe_coordenadas( + (self.inicio_x, self.inicio_y), + (self.inicio_x, self.inicio_y + self.y), + (self.inicio_x+self.x, self.inicio_y+ self.y), + (self.inicio_x+self.x, self.inicio_y), + (self.inicio_x, self.inicio_y) ) + self.genera_escritura() + for i in self.lista_bloques: + i.genera_bloque() + + def escribe_coordenadas(self, *args): + dev = "" + for i in args: + dev = dev + str(i) + " " + return dev + + def anyade(self, un_bloque): + self.lista_bloques.append(un_bloque) + return un_bloque + + def tamanyo_x(self, factor): + return Bloque(self.y, factor * self.x, self.inicio_y, self.inicio_x) + + def tamanyo_y(self, factor): + return Bloque(self.y * factor, self.x, self.inicio_y, self.inicio_x) + + def lado(self, alt, long): + if alt != "inf" and alt!= "sup" and alt!="cent": + raise "Mala 'altitud'" + if long != "izq" and long!= "der" and long!="cent": + raise "Mala 'longitud'" + t = Bloque(self.y, self.x, self.inicio_y, self.inicio_x) + if alt == "sup": + t.inicio_y = self.y + if alt == "cent": + t.inicio_y = self.y / 2 + if long == "der": + t.inicio_x = self.x + if long == "cent": + t.inicio_x = self.x / 2 + return t + + def traslada_x(self, x ): + self.inicio_x = self.inicio_x + x + for i in self.lista_bloques: + i.traslada_x(x) + + def traslada_y(self, y): + self.inicio_y = self.inicio_y + y + for i in self.lista_bloques: + i.traslada_y(y) + + def escribe_hacia(self, pos_x, pos_y, escribir): + """ + pos = numero fraccionario + """ + if pos_x >= 1.0 or pos_x < 0: + raise "Pos_x debe ser fraccionario y positivo" + + if pos_y >= 1.0 or pos_y < 0: + raise "Pos_y debe ser fraccionario y positivo" + + self.caracteres_anyadidos.append((pos_x, pos_y, escribir)) + + def genera_escritura(self): + for i in self.caracteres_anyadidos: + print "\\rput"+ self.escribe_coordenadas(( i[0] *( self.x - self.inicio_x) + self.inicio_x, self.inicio_y + i[1]* (self.y - self.inicio_y))) + "{" + i[2] + "}" + + +if __name__=='__main__': + b = Bloque(3,4) + c= b.anyade(b.lado("inf","der").tamanyo_y(0.5).tamanyo_x(3)) + b.escribe_hacia(0.12, 0.1, "Alphaville") + d = b.anyade(c.lado("sup", "izq")) + b.traslada_x(-3) + b.genera_bloque() + diff --git a/support/fancyhdrBoxed/MiniBloquiHeader.tex b/support/fancyhdrBoxed/MiniBloquiHeader.tex new file mode 100644 index 0000000000..551a273329 --- /dev/null +++ b/support/fancyhdrBoxed/MiniBloquiHeader.tex @@ -0,0 +1,133 @@ +%* +% * Header.py Implementa un mini lenguaje de bloques para crear +% * cabeceras con fancyhdr +% * +% * Copyright (C) Manuel Gutierrez Algaba, 2000 +% * +% * This program is free software% you can redistribute it and/or modif +%y +% * it under the terms of the GNU General Public License as published b +%y +% * the Free Software Foundation% either version 2 of the License, or +% * (at your option) any later version. +% * +% * This program is distributed in the hope that it will be useful, +% * but WITHOUT ANY WARRANTY% without even the implied warranty of +% * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +% * GNU General Public License for more details. +% * +%*/ + +\documentclass[10pt,a4paper]{article} +\begin{document} +\title{Documentacion de MiniBloquiHeader 1.0} +\author{ Manuel Gutierrez Algaba, irmina@ctv.es } +\date{ Enero 2000 } +\maketitle + +\section{Copyright issues} +Header.py y este documentos son ambos GPL, es decir, puedes copiarlos +y reusarlos indefinidamente, basicamente. Por cierto, por cuestiones +de tiempo este documento esta en Espanyol, sin acentos y sin nada, +en cualquier caso explica a la perfeccion de que va MiniBloquiHeader. +Por cierto, la pagina ``gueb'' de este proyecto es: +\verb|www.ctv.es/USERS/irmina/MiniBloquiHeader.html| + +\section{El problema} +El problema es que en Informatica se generan documentacion que suele +tener unas cabeceras de pagina muy ricas y complejas, del tipo: +\begin{verbatim} +----------------------------------------------- +| | Nombre capitulo | +| | | +|Adornos|--------------------------------------| +| | Nombre Seccion | Fecha | +| | | Hora | +|---------------------------------------------- +\end{verbatim} + +Dado mi desconocimiento de TeX y las pocas ganas que tengo +de bregar con TeXnicismos he encontrado que la solucion mas +simple pasa por usar fancyhdr y dibujar con Pstricks , insertando +alli donde convenga los letreros. Esto se traduce por ejemplo en: +\begin{figure} +\caption{Ejemplo de uso } +\label{fig1} +\begin{verbatim} +\documentclass[10pt]{article} +\usepackage{fancyhdr} +\usepackage{pstricks} +\usepackage{pst-node} +\begin{document} +\voffset=0cm +\headheight=1cm +\lhead{ +\psline{-}(-3, 0) (-3, 3) (1, 3) (1, 0) (-3, 0) +\rput(-2.16, 0.3) {\Asunto} +\psline{-}(1, 0) (1, 1.5) (13, 1.5) (13, 0) (1, 0) +\psline{-}(1, 1.5) (1, 3.0) (13, 3.0) (13, 1.5) (1, 1.5) +} +\rhead{} +\chead{} + +\lfoot{} +\rfoot{} +\cfoot{} +\renewcommand{\footrulewidth}{0.4 pt} +\renewcommand{\headrulewidth}{0.0 pt} +\newcommand{\Asunto}{Asi manualmente. Capitulo 1} +.... +... +\renewcommand{\Asunto}{Capitulo 2} + +\end{document} +\end{verbatim} +\end{figure} +Efectivamente el macro \verb|\Asunto| es la prueba de que puedo +insertar en los cuadros y que puedo ir variando lo que inserto +en cada pagina. Lo ideal seria hacerlo de manera automatica +con un section mark o le que fuese, pero carezco del conocimiento +y del tiempo. +\subsection{Como dibujar los cuadros} +Ahora el problema queda reducido a encontrar una manera facil de +dibujar esos cuadros. Aqui entra en accion \verb|Header.py|. +Esta escrito en python (\verb|www.python.org|) +Esta miniherramienta hace lo que tiene que hacer dibujar cuadros +y poner letreros. Para ver como funciona lo mejor es hacer pruebas. +Basicamente es un lenguaje formado por los siguientes comandos: + +\begin{itemize} +\item{Bloque: Esto crea un bloque de tamanyo (y,x), generalmente +yo suelo crear un bloque principal y los demas son descritos +en funcion de este, } +\item{lado: Indica que un bloque se ha anyadido a uno de los lados +del bloque en cuestion, c.lado(``inf'',''der'') devuelve un Bloque +del mismo tamanyo que c, pero situado en la esquina inferior derecha +de c. +} +\item{tamanyo\_y(o \_x): Estos varian la dimension del cuadrado +derivado. c.tamanyo\_x(0.3) devuelve un cuadrado cuya longitud +es un tercio la de c } +\item{traslada: Desplaza al cuadrado y a todos sus derivados} +\item{escribe\_hacia: Escribe en cierto lugar del rectangulo, +siempre ``dentro'' de el, escribe\_hacia(0.5, 0.5, ``Alfa''), +escribe ``Alfa'' en el ``medio'' del rectangulo. } +\end{itemize} +El ejemplo de \ref{fig1} ha sido generado con la secuencia: +\begin{verbatim} + b = Bloque(3,4) + c= b.anyade(b.lado("inf","der").tamanyo_y(0.5).tamanyo_x(3)) + b.escribe_hacia(0.12, 0.1, "\\Asunto") + d = b.anyade(c.lado("sup", "izq")) + b.traslada_x(-3) + b.genera_bloque() + +\end{verbatim} +Como se puede ver, se generan tres rectangulos y un letrero ( que +en este caso es un macro). + +Es facil imaginar lo que se puede llegar a hacer de manera simple. + +\section{Translation issues} +If you want to you can translate this, I lack the time. +\end{document} |