[pstricks] Save a length for later use
Ulrik Stervbo
ulriks at ruc.dk
Tue May 24 11:03:39 CEST 2005
Hello everybody,
I'm trying to setup ease creating posters in latex. The idea is to let the macro
place textboxes in columns, and for that I need the total height of all boxes
placed.
The problem is scope, global and local variables (not really a pstrick question
i know). I've attached example code - anyone got any idea how I can solve my
problem and if it's possible at all?
Sincerely
Ulrik
And the code:
%--------------------------------------------------------------------------
% File: ps-tricks_play.tex
% Created: Wed May 18 11:38 2005
% Maintainer: Ulrik Stervbo
% Last Change: Wed May 20 14:52 2005
%
% Description: Messing about with pstricks and the geometry package
%--------------------------------------------------------------------------
\documentclass[dvips]{article}
\usepackage{calc}
\usepackage{pstricks-add}
\usepackage{pstricks}
\usepackage[a4paper]{geometry}
% creating a grid
\newpsobject{showgrid}{psgrid}{subgriddiv=1,griddots=10,gridlabels=6pt}
\makeatletter
%--------------------------------------------------------------------------
% creating and setting a few lengths
\newlength{\fypos}
\setlength{\fypos}{\textheight}
\newlength{\sypos}
\setlength{\sypos}{\textheight}
%
\newlength{\fxpos}
\setlength{\fxpos}{0cm}
\newlength{\sxpos}
\setlength{\sxpos}{0cm}
%
\newlength{\curr at textboxheight}
%--------------------------------------------------------------------------
% This box is taken from the textbox example from http://tug.org/PSTricks/
% and slightly modified
\def\mytextbox{\pst at object{mytextbox}}
\def\mytextbox at i#1#2{{%
\use at par % Local parameters
\if at star\solid at star\fi % Stared version
\newdimen\d % The height of the box
\pssetlength{\pst at dimc}{-\psframesep}
\psaddtolength{\pst at dimc}{-\psframesep}
\psaddtolength{\pst at dimc}{-\pslinewidth}
\psaddtolength{\pst at dimc}{-\pslinewidth}
\pssetlength{\pst at dima}{#1}
\psaddtolength{\pst at dima}{\pst at dimc}
\pssetlength{\pst at dimb}{\pst at dimc}
\setbox\z@=\vbox{\hsize=\pst at dima \par\noindent\raggedright #2}%
\d=\ht\z@\advance\d by\dp\z@
\psframebox{\box\z@}
% we need to get the value from the outside of this scope
\pssetlength{\global\curr at textboxheight}{\d}
}}
%--------------------------------------------------------------------------
% Create a poster environment, which starts a pspicture environment with
% the width and height of the page. If we're in draft mode we'll draw a
% nice grid.
\newenvironment{poster}{\begin{center}
\begin{pspicture}(0,0)(\textwidth,\textheight)
\showgrid(0,\textheight)(\textwidth,0)
}{\end{pspicture}\end{center}}
%--------------------------------------------------------------------------
% The titlebox environment
% Three textboxes are defined
\newenvironment{titlebox}[2]{
\newlength\titlebox at totalheight % the total height of the textboxes
\newlength\mytextbox at width % the width of the textboxes within the titlebox
\setlength{\mytextbox at width}{10cm}
\addtolength{\mytextbox at width}{-#2}
\addtolength{\mytextbox at width}{-#2}
\newlength\textbox at fxpos % the x-coor within the titlebox
\setlength{\textbox at fxpos}{\fxpos}
\addtolength{\textbox at fxpos}{#2}
\newlength\textbox at fypos % the y-coor within the titlebox
\setlength{\textbox at fypos}{\fypos}
\addtolength{\textbox at fypos}{-#2}
%%%%
\def\mytitle[##1]##2{%
\rput[tl](\textbox at fxpos,\textbox at fypos){%
\mytextbox[##1]{\mytextbox at width}{%
##2%
}}%
\addtolength{\titlebox at totalheight}{\curr at textboxheight}%
\addtolength{\textbox at fypos}{\curr at textboxheight}
\rput[bl](12,19.5){titlebox at totalheight1 \the\titlebox at totalheight}%
}%
% The height of this psframe should be calculated from the height of mytitle
\psframe[#1](\fxpos,\fypos)(10,18)%\textboxframe at sypos)%\textbox at fypos)
\rput[tl](12,19){titlebox at totalheight2 \the\titlebox at totalheight}
}{}
% This text box should automatically be placed just below the previous
puttextbox
% In case of being the first puttextbox below the titlebox, so we need the
% \textbox at fypos
\def\puttextbox[#1]#2#3#4{%
\rput[tl](#2,#3){%
\mytextbox[#1]{10cm}{#4}%
}
\rput[tl](12,#3){titlebox at totalheight3 \the\titlebox at totalheight}
}
\makeatother
\pagestyle{empty}
\begin{document}
\begin{poster}
\begin{titlebox}{framearc=0.2,fillstyle=solid,fillcolor=lightgray}{4mm}
\mytitle[framesep=6pt]{Lorem ipsum dolor sit amet, urna augue. Luctus
sollicitudin, accusantium nostrum. Scelerisque duis eget nonummy, rhoncus quis
nulla praesent}
\end{titlebox}
%
\puttextbox[fillcolor=yellow, fillstyle=solid,linestyle=none]{0}{17}{Lorem
ipsum dolor sit amet, urna augue. Luctus sollicitudin}
\end{poster}
\end{document}
More information about the PSTricks
mailing list