TeX - LaTeX Stack Exchange is a question and answer site for users of TeX, LaTeX, ConTeXt, and related typesetting systems. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

This is a question so general, I couldn't easily find an archived post which directly addressed it.

I am interested in using LaTeX to design a one sided sheet containing figures and small amounts of text. I have a specific layout in mind drawn below. I want to be able to draw these regions, crop graphics (in graph/logo) to fit them, and place text which never flies beyond the boundary regions drawn.

mock up of output

How can one do that? I'm reaching for latex because I am generating PDFs and hope to loop over information and generate hundreds of such documents.

share|improve this question
The frames are supossed to appear in the document or they are just visual guidelines for the design you want? – Gonzalo Medina Aug 29 '12 at 23:19
They are visual guidelines, a mock up. It's a panel based approach to document design. In the "graphs" 2X4 matrix at the center right, there are 8 barcharts. The graph below is a time trend. Left are numbers, and names, then there is a JPG corporate logo to place at the upper right. – ashkan Aug 29 '12 at 23:35
The approach in this answer might be useful. – Scott H. Aug 29 '12 at 23:57
up vote 6 down vote accepted

You can use the textpos package to position objects (text and figures) on a page.

share|improve this answer
This looks really promising. I'll play around with it. Thank you. – ashkan Aug 29 '12 at 23:54

Just as an experiment, and taking as a basis the answer by Frank Mittelbach mentioned in Scott H's comment, I decided to use for the first time the xcoffins package, and here's the result (obviously there are a lot of improvements that can be done, but it could be used as a starting point):





% upper coffins
\NewCoffin \result
\NewCoffin \Title
\NewCoffin \Date
\NewCoffin \Logo

% lateral info coffin
\NewCoffin \Info

% 10 small graph coffins
\NewCoffin \Graph
\NewCoffin \Graphi
\NewCoffin \Graphii
\NewCoffin \Graphiii
\NewCoffin \Graphiv
\NewCoffin \Graphv
\NewCoffin \Graphvi
\NewCoffin \Graphvii
\NewCoffin \Graphviii
\NewCoffin \Graphix
\NewCoffin \Graphx

% 1 wider graph coffin
\NewCoffin \LGraph

% filling the coffins
\SetHorizontalCoffin \result {}
\SetHorizontalCoffin \Graph {}

\SetHorizontalCoffin \Title {\Large\bfseries Document title}
\SetHorizontalCoffin \Date {\Large\bfseries Document date}
\SetHorizontalCoffin \Logo {\color{mycolor}\rule{4cm}{2cm}}
\SetVerticalCoffin\Info {4cm} {\noindent\raggedright\lipsum[6]}

\SetHorizontalCoffin \LGraph {\Large\color{mycolor}\rule{\dimexpr5\GraphWd+12pt\relax}{2cm}}

\SetHorizontalCoffin \Graphi {\Large\color{mycolor}\rule{\GraphWd}{\GraphWd}}
\SetHorizontalCoffin \Graphii {\Large\color{mycolor}\rule{\GraphWd}{\GraphWd}}
\SetHorizontalCoffin \Graphiii {\Large\color{mycolor}\rule{\GraphWd}{\GraphWd}}
\SetHorizontalCoffin \Graphiv {\Large\color{mycolor}\rule{\GraphWd}{\GraphWd}}
\SetHorizontalCoffin \Graphv {\Large\color{mycolor}\rule{\GraphWd}{\GraphWd}}
\SetHorizontalCoffin \Graphvi {\Large\color{mycolor}\rule{\GraphWd}{\GraphWd}}
\SetHorizontalCoffin \Graphvii {\Large\color{mycolor}\rule{\GraphWd}{\GraphWd}}
\SetHorizontalCoffin \Graphviii {\Large\color{mycolor}\rule{\GraphWd}{\GraphWd}}
\SetHorizontalCoffin \Graphix {\Large\color{mycolor}\rule{\GraphWd}{\GraphWd}}
\SetHorizontalCoffin \Graphx {\Large\color{mycolor}\rule{\GraphWd}{\GraphWd}}

% put the smaller graph coffins in a 2x5 array inside \Graph
\JoinCoffins \Graph \Graphi
\JoinCoffins \Graph [\Graphi-vc,\Graphi-r] \Graphii[vc,l](3pt,0pt)
\JoinCoffins \Graph [\Graphii-vc,\Graphii-r] \Graphiii[vc,l](3pt,0pt)
\JoinCoffins \Graph [\Graphiii-vc,\Graphiii-r] \Graphiv[vc,l](3pt,0pt)
\JoinCoffins \Graph [\Graphiv-vc,\Graphiv-r] \Graphv[vc,l](3pt,0pt)
\JoinCoffins \Graph [\Graphi-hc,\Graphi-b] \Graphvi[hc,t](0pt,-3pt)
\JoinCoffins \Graph [\Graphvi-vc,\Graphvi-r] \Graphvii[vc,l](3pt,0pt)
\JoinCoffins \Graph [\Graphvii-vc,\Graphvii-r] \Graphviii[vc,l](3pt,0pt)
\JoinCoffins \Graph [\Graphviii-vc,\Graphviii-r] \Graphix[vc,l](3pt,0pt)
\JoinCoffins \Graph [\Graphix-vc,\Graphix-r] \Graphx[vc,l](3pt,0pt)

% put the wider graph below \Graph
\JoinCoffins \Graph[hc,b]  \LGraph[hc,t](0pt,-15pt)

%  put the upper coffins into \result
\JoinCoffins \result \Title
\JoinCoffins \result[\Title-b,\Title-l]  \Date [t,l](0pt,-8pt)
\JoinCoffins \result [vc,l]  \Logo [vc,r](\textwidth,0pt)
% add the \info coffin to \result
\JoinCoffins \result [b,l] \Info [t,l](10pt,-\baselineskip)

% add the \Graph coffin to \result
\JoinCoffins \result [\Info-t,\Info-r] \Graph [t,l](40pt,-1.5\baselineskip)

\noindent\TypesetCoffin \result


enter image description here

xcoffins is really a nice package.

share|improve this answer

In ConTeXt, Layers are frequently used for placing material on specific location of the page. For example, the layout that you are looking for can be achieved as follows.

\setuppagenumbering[location=] % No page numbering

\useMPlibrary[dum] % For placeholder pictures





\setupbackgrounds[page][background={header, info, graph, grid}]

  {Document header}

    align={flushleft, hyphenated},
  {Information about the content}

  {\externalfigure[dummy][width=0.7\paperwidth, height=0.1\paperheight]}



% Insert an empty page, with only the background layers.


which gives

enter image description here

share|improve this answer
Yes, I was expecting a ConTeXt answer from you ;-) – Gonzalo Medina Aug 30 '12 at 1:58
Hadn't heard of ConTeXt. Is it a package or standalone program? – ashkan Aug 30 '12 at 16:30
ConTeXt is a TeX-macro package (like LaTeX). See this question for a slightly detailed discussion. – Aditya Aug 30 '12 at 17:26

I will have to say that assembling graphs in an obvious panel was best done with wrapfig. Getting the logo aligned at the top was difficult, however I found the package fancyhdr worked tremendously well, with only the following line required:


share|improve this answer

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.