How to Write an HTML5 App? A tutorial about writing HTML5 Apps, using HTML, JavaScript and CSS. … read more

Controlling the Geometry of an HTML Element. How to get/set the geometry of an HTML element? … read more

PSFile: Generate PostScript files with Python. A Python module to create PostScript files (either stand-alone ps files or eps files for inclusion into other documents). … read more

# Creating a Poster with TeX

By Jochen Voss, last updated 2012-02-18

This page contains some hints which may help to create a conference poster using LaTeX. The method described here is good if you want to do everything manually in order to have full control. If, instead, you just want to just get a usable result without spending too much effort, you probably will be better served by using one of the existing solutions like a0poster or sciposter.

## Overview

• Use LaTeX to create a DVI file.
• Use dvips to convert this file to a PostScript file describing one big page. This PostScript file can then be split into smaller pages and/or converted to other formats (e.g. PDF) as needed.
• Embedded PostScript commands in the DVI file are used to control the overall page layout and to add decorative elements which extend over large areas of the page. LaTeX is used to add text and formulas to regions of the page.

Warning. Do not try to run TeX files using PostScript special commands through pdflatex. All PostScript code will be ignored and the result will not be useful. Instead, use latex and dvips and later convert the result if required.

A word about units. I wrote this text when producing a poster for a conference in the USA. The given constraints were that the poster board was 3 foot heigh and 4 foot wide and that I only could print on pages which were 11 inch heigh and 8.5 inch wide. Partially caused by this, I sometimes use strange units on this page:

• One inch is 2.54cm. The abbreviation is 1in or 1″. In TeX units this is 1in.
• One foot is 12″ or 30.48cm. The abbreviation is 1ft or 1′.
• One PostScript point (the unit of length in the initial PostScript coordinate system) is 1/72 inches. In TeX units this is 1bp.
• One typographical point is 1/72.27 inches. In TeX units this is 1pt.

## Setting the Page Size

Two steps are required to set the page size manually: Firstly, one needs to set the page size inside TeX by setting the \paperwidth and \paperheight parameters, and second one needs to set the page size in PostScript using the \special{papersize=...} TeX command. Additionally you might want to set various TeX/LaTeX parameters affecting the layout.

When setting the page dimensions, one must consider TeX's default margins of 1″. By setting \textwidth and \textheight to values which are 2″ smaller than the physical pagesize, we get a 1″ margin around the page. Example 1 below shows a minimal LaTeX file for a 3ft×4ft poster.

\documentclass{minimal}

\special{papersize=48in,36in}
\setlength{\paperwidth}{48in}
\setlength{\paperheight}{36in}
\setlength{\textwidth}{46in}
\setlength{\textheight}{34in}

\topskip0pt
\setlength{\topmargin}{0pt}
\setlength{\oddsidemargin}{0pt}

\begin{document}
\hrule
\hbox to\textwidth{top left \hss top right}
\vfill
\hbox to\textwidth{bottom left \hss bottom right}
\hrule
\end{document}


Example 1. A minimal LaTeX file to set up a 4ft×3ft page with a 1″ outer margin.

Alternatively one can set \hoffset=-1in and \voffset=-1in to use the whole area of the page (the printer permitting). Example 2 shows how this can be used to create a black margin which extends all the way to the edge of the paper.

\documentclass{minimal}

\special{papersize=48in,36in}
\hoffset-1in
\voffset-1in
\setlength{\paperwidth}{48in}
\setlength{\paperheight}{36in}
\setlength{\textwidth}{48in}
\setlength{\textheight}{36in}

\topskip0pt
\setlength{\topmargin}{0pt}
\setlength{\oddsidemargin}{0pt}

\begin{document}
\hrule height1in
\hbox to\hsize{\vrule height34in width1in
\hfill
\vrule width 1in}
\hrule height1in
\end{document}


Example 2. A LaTeX file to generate 4ft×3ft page with an ugly, solid black 1″ margin.

## Setting the Font Size

This section discusses how to get LaTeX to generate text with a font size big enough for use on a poster. General information about font selection in LaTeX can be found in the LaTeX font guide.

The standard TeX fonts come in a variety of sizes but the normally provided sizes are too small for use on a poster: the biggest available cmr font is 24pt in the OT1 encoding and 36pt in the T1 encoding. These sizes might be a good choice for paragraphs of text on a poster, but bigger fonts are needed for titles etc.

### Using Scalable Fonts

There are several ways to create text in font sizes big enough for a poster. The easiest method is to use a scalable font, e.g. one of the standard PostScript fonts, which allows to set text in arbitrary sizes. You can find a list of free math fonts, including the PostScript fonts, in Stephen G. Hartke's excellent Free Math Font Survey. In example 3 below I use the txfonts package to set text in a 72pt font.

\documentclass{minimal}

\usepackage{txfonts}

\begin{document}
\fontsize{72pt}{90pt}\selectfont
\noindent This text is very big.
\end{document}


Example 3. Using the txfonts package to set text in a 72pt Times font with 90pt baseline distance.

### Using the Standard TeX Fonts

An alternative approach to get big fonts is to generate the standard TeX cm fonts in non-standard sizes. This can be done using the \DeclareFontShape command as explained in the LaTeX font guide. The code in Example 4 below shows how this is done in a very simple case, namely when just setting text using only one font in one size. For real applications where different font sizes and maybe mathematical formulas are involved, you need several more declarations like the on in the example, and it might be easier to use one of the existing style files like a0size.sty from the a0poster package.

\documentclass{minimal}

\DeclareFontShape{OT1}{cmr}{m}{n}%
{<5><6><7><8><9><10><12>gen*cmr%
<10.95>cmr10%
<14.4>cmr12%
<17.28><20.74><24.88>cmr17
<72>cmr17}{}

\begin{document}
\fontsize{72pt}{90pt}\selectfont
\noindent This text is very big.
\end{document}


Example 4. Using the standard TeX cmr font at 72pt with 90pt baseline distance.

### Matching Font Size and Layout

In order to get a nice layout, it is important to adjust the LaTeX parameters determining the layout of text to the choosen font size. This affects the usual LaTeX parameters for setting margins, font sizes, distances between paragraphs of text, etc. Example 5 illustrates how this can be done.

\setlength\abovecaptionskip{25pt}
\setlength\belowcaptionskip{0pt}
\setlength\abovedisplayskip{25pt plus 6pt minus 15pt}
\setlength\abovedisplayshortskip{0pt plus 6pt}
\setlength\belowdisplayshortskip{13pt plus 7pt minus 6pt}
\setlength\belowdisplayskip\abovedisplayskip

\renewcommand{\tiny}{\fontsize{12}{14}\selectfont}
\renewcommand{\scriptsize}{\fontsize{14.4}{18}\selectfont}
\renewcommand{\footnotesize}{\fontsize{17.28}{22}\selectfont}
\renewcommand{\small}{\fontsize{20.74}{25}\selectfont}
\renewcommand{\normalsize}{\fontsize{24.88}{30}\selectfont}
\renewcommand{\large}{\fontsize{29.86}{37}\selectfont}
\renewcommand{\Large}{\fontsize{35.83}{45}\selectfont}
\renewcommand{\LARGE}{\fontsize{43}{54}\selectfont}
\renewcommand{\huge}{\fontsize{51.6}{64}\selectfont}
\renewcommand{\Huge}{\fontsize{61.92}{77}\selectfont}
\normalsize

\DeclareMathSizes{24.88}{24.88}{20.74}{14.4}
\DeclareMathSizes{29.86}{29.86}{20.74}{14.4}
\DeclareMathSizes{35.83}{35.83}{24.88}{17.28}
\DeclareMathSizes{43.00}{43.00}{35.83}{24.88}
\DeclareMathSizes{51.6}{51.6}{35.83}{24.88}
\DeclareMathSizes{61.92}{61.92}{43}{29.86}


Example 5. Adjusting the layout for use with big fonts.

## Global Layout via PostScript

A poster typically will have some light background color or shade and maybe a colored band near the top to highlight the title. Here we use raw PostScript commands to put these decorations on the page. If you don't know how to write PostScript code, you can find many tutorials on the web and you can look up all the technical details in Adobe's PostScript Language Reference (PDF, 7.4MB). To inject the PostScript code into the output file, we use TeX's \special{} command as described in the Literal PostScript section of the dvips manual.

### Background Colour

In order to put decorations on the whole page, we need to make the PostScript output independent of TeX's current writing position. There are several ways to achieve this.

• We can put the code in the bop-hook as described in the PostScript hooks section of the dvips manual. This code is then excecuted before any of the TeX-generated content is added to the page and it uses PostScript units and the PostScript default coordinate system, i.e. the coordinate origin is at the lower left corner of the page and 72 units equal 1″ on the paper. For example, on a 3ft×4ft poster, the following commands can be used to add a light blue band to the top (3″ high) and a darker blue band to the bottom of the page (1″ high).
\special{!userdict begin /bop-hook{gsave
72 72 scale
0.5 0.5 1.0 setrgbcolor
0 0 48 1 rectfill
0.8 0.8 1.0 setrgbcolor
0 33 48 3 rectfill
grestore}def end}

• We can insert PostScript code directly. This code uses the TeX page origin as the origin and it has resolution dependent coordinate units. Marks created on the page by this code will overwrite earlier TeX output. By default the origin is 1″ down and 1″ right from the top left corner of the page and y-coordinates are increasing downwards. In order to get back to page relative coordinates we have to shift and scale the output:
\special{ps:gsave
Resolution dup scale -1 35 translate 1 -1 scale
0.5 0.5 1.0 setrgbcolor
0 0 48 1 rectfill
0.8 0.8 1.0 setrgbcolor
0 33 48 3 rectfill
grestore}


### Layout

Another use of PostScript for our poster will be, to arrange blocks of LaTeX-generated text on the page. This can be done by shifting the coordinate origin as above and then inserting the LaTeX code before the final grestore:

\special{ps:gsave
-1 Resolution mul -1 Resolution mul translate
x Resolution mul y Resolution mul translate
}
This text is shifted.
\special{ps:grestore}


There are several issues to consider in this approach:

• We cannot use scale as in the code sniplets above, since this would affect the size of the LaTeX output.
• The PostScript code generated by dvips for the This text is shifted above includes commands to move the PostScript point to the position where TeX intends the text to be. Since TeX does not know about our change of coordinates on PostScript level, this shift ends up to be relative to the location where we wanted the text to appear.

The easiest solution to this problem is to never let the TeX writing position move from the initial position. This can be done by adding all LaTeX text inside carefully wrapped boxes. The macro shifted in example 6 shows how this can be done.

\documentclass{minimal}

\special{papersize=48in,36in}
\setlength{\paperwidth}{48in}
\setlength{\paperheight}{36in}
\topskip0pt

\usepackage{txfonts}

\long\def\shifted[#1,#2]#3{%
\special{ps:gsave
-1 Resolution mul -1 Resolution mul translate
#1 Resolution mul #2 Resolution mul translate
}%
\nointerlineskip
\hbox to 0pt{\vbox to0pt{#3\vss}\hss}%
\special{ps:grestore}}

\def\square#1{\vbox to4in{\hsize4in\noindent\ignorespaces
We can insert PostScript code directly.  This code uses the TeX page
origin as the origin and has resolution dependent coordinate units.
Marks created on the page by this code will overwrite earlier \TeX\
output.  By default the origin is $1''$ down and $1''$ right
from the top left corner of the page.
\parfillskip0pt\vfil}}

\begin{document}
\fontsize{24.88pt}{30pt}\selectfont
\shifted[5,5]{\square}
\shifted[39,27]{\square}
\special{ps:gsave Resolution dup scale -1 -1 translate
9 9 moveto 39 27 lineto 1 setlinewidth stroke
grestore}
\end{document}


Example 6. This LaTeX file illustrates how embedded PostScript code can be used to control the global layout of a page. The output of this code consists of a 4ft×3ft page containing two squares of text (side length 4″) which are connected by a thick black line. Figure 1 below shows a preview of the result.