Posters (beamerposter/tikzposter/a0poster)

L'accident le plus courant quand on fabrique une affiche A0 en LaTeX, c'est de découvrir chez l'imprimeur que le fichier est en A4. Sur TeX Live 2024, c'est littéralement ce qui arrive : passez la classe a0poster par pdflatex et pdfinfo annonce un papier de 595,276 × 841,89 pt, c'est-à-dire A4. Visez le même A0 avec beamerposter ou tikzposter et les deux sortent correctement en 2383,94 × 3370,39 pt (A0). Cette page compare les trois voies vers une affiche de congrès — beamerposter, qui réemploie beamer ; tikzposter, une classe dédiée bâtie sur TikZ ; et a0poster, qui date de 1997 — en compilant chacune et en mesurant le résultat avec pdfinfo. Elle se termine sur ce qu'il faut vérifier avant de confier le fichier à l'imprimeur.

La taille de page de l'affiche : la vérifier avec pdfinfo

Avant tout, regardez les dimensions du PDF réellement produit. pdfinfo poster.pdf les donne à la ligne Page size:. L'A0 vaut 2383,94 × 3370,39 pt, soit 84,1 × 118,9 cm. Si cette ligne indique encore A4 (595,276 × 841,89 pt), le problème n'est pas l'option de classe mais que la taille de page n'a jamais atteint le PDF. Cela ne se voit pas à l'œil : une affiche est toujours affichée réduite à l'écran, si bien qu'une affiche écrasée en A4 ressemble simplement à une affiche vue en petit.

Classe ou packagePapier sous pdflatex (mesuré)Comment la taille est fixée
beamerposter2383,94 × 3370,39 pt (A0 portrait)Écrite directement dans le PDF depuis size=a0 et orientation
tikzposter2383,94 × 3370,39 pt (A0 portrait)a0paper est passé à geometry, et atteint donc le PDF
a0poster595,276 × 841,89 pt (A4)Passe par un \special PostScript, que pdflatex ignore
baposterImpossible à chargerAbsent de TeX Live 2024 (voir plus bas)

Utiliser beamerposter : en fait juste size et scale

Si vous connaissez déjà beamer, beamerposter est le chemin le plus court. Posez \usepackage[size=a0,scale=1.4,orientation=portrait]{beamerposter} par-dessus \documentclass[final]{beamer} et vos block, columns, thèmes et thèmes de couleurs fonctionnent tels quels à l'échelle de l'affiche. Aucune notation nouvelle à apprendre. L'option [final] replie les surimpressions en une seule page, ce qui compte quand on recycle un diaporama contenant encore \pause ou \only<2>.

poster.tex
\documentclass[final]{beamer}
% size: a0b a0 a1 a2 a3 a4 custom  /  orientation: portrait landscape
\usepackage[size=a0,scale=1.4,orientation=portrait]{beamerposter}
\title{A Poster Title}
\author{A. Author}
\institute{Somewhere}
\begin{document}
\begin{frame}[t]{}
\maketitle
\begin{columns}[t]
  \begin{column}{0.45\textwidth}
    \begin{block}{Introduction}
      Body text at poster scale.
    \end{block}
  \end{column}
  \begin{column}{0.45\textwidth}
    \begin{block}{Results}
      More body text.
    \end{block}
  \end{column}
\end{columns}
\end{frame}
\end{document}

scale est le grossissement de la fonte, et c'est là que beamerposter est astucieux : un facteur de base est prénormalisé pour chaque format de papier. Dans beamerposter.sty, a0 et a0b valent 1.0, a1 0.70710678, a2 0.5, a3 0.35355339 et a4 0.25. Cette suite est exactement les puissances de 1/√2, ce qui correspond au fait que la série A divise l'aire par deux à chaque cran — la longueur du côté est donc divisée par √2. Résultat : scale=1.0 paraît de la même taille sur n'importe quel papier ; refaites une affiche A1 en A0 et le texte se lit à la même taille apparente. À la mesure, a0 avec scale=1.0 donne un \normalsize de 24,88 pt sur une interligne de 30 pt, et scale=1.4 donne 34,83 pt sur 42 pt.

Le papier vient de size=a0b a0 a1 a2 a3 a4 custom, accompagné de orientation=portrait ou landscape. À la mesure, orientation=landscape a échangé les dimensions en 3370,39 × 2383,94 pt et size=a1 a donné 1683,78 × 2383,94 pt (A1), exactement comme prévu. Avec size=custom, width et height se passent en nombres nus, en centimètres : width=200,height=300 a produit 5669,29 × 8503,94 pt, une banderole de deux mètres sur trois d'emblée. Le beamerposter de TeX Live 2024 est en v1.13, datée du 23 avril 2018.

tikzposter : une classe dédiée où le thème décide de l'aspect

tikzposter a été écrit pour les affiches dès l'origine. On déclare \documentclass[25pt,a0paper,portrait,margin=10mm]{tikzposter}, on rédige le corps en \block{Titre}{Contenu} et on le répartit avec \begin{columns} et \column{0.5}. Le vocabulaire de beamer ne s'applique pas. L'aspect change en bloc avec un seul \usetheme{...}, et la version de TeX Live 2024 en fournit neuf : Autumn, Basic, Board, Default, Desert, Envelope, Rays, Simple et Wave. Les neuf ont été compilés ici, et chacun a produit un PDF A0 sans erreur.

poster.tex
\documentclass[25pt,a0paper,portrait,margin=10mm]{tikzposter}
\usetheme{Board}      % Autumn Basic Board Default Desert Envelope Rays Simple Wave
\usecolorstyle{Britain}  % Australia Britain Default Denmark Germany Russia Spain Sweden
\title{A Poster Title}
\author{A. Author}
\institute{Somewhere}
\begin{document}
\maketitle
\begin{columns}
\column{0.5}
\block{Introduction}{Body text at poster scale.}
\column{0.5}
\block{Results}{%
  \begin{tikzfigure}[A caption]
    % tikzfigure does NOT open a tikzpicture -- you must open one yourself
    \begin{tikzpicture}
      \draw (0,0) rectangle (2,2);
    \end{tikzpicture}
  \end{tikzfigure}}
\end{columns}
\end{document}

L'aspect se règle sur quatre couches : outre \usetheme, il y a \usecolorstyle (huit, curieusement nommés d'après des pays — Australia, Britain, Default, Denmark, Germany, Russia, Spain, Sweden), \usecolorpalette (cinq) et \useblockstyle (sept : Basic, Corner, Default, Envelope, Minimal, Slide, TornOut). Une commande documentée ne fonctionne toutefois pas dans le tikzposter v2.0 (15 janvier 2014) livré avec TeX Live 2024. \innerblock meurt sur ! TeX capacity exceeded, sorry [grouping levels=255]. — quel que soit le thème, et même après un \useinnerblockstyle préalable — et aucun PDF n'est produit. Pour une boîte imbriquée, employez \coloredbox{...}, qui est passé sans encombre dans le même montage.

L'autre piège est tikzfigure. L'environnement met seulement en place un center et un compteur de légende — il n'ouvre pas de tikzpicture à votre place. Écrivez un \draw nu et ajoutez une légende dans l'argument optionnel, et vous obtenez ! LaTeX Error: There's no line here to end. La cause est la ligne 818 de tikzposter.cls, qui place \\[10pt] juste avant la légende : si le contenu s'est terminé en mode vertical, ce \\ n'a aucune ligne à terminer. Retirer la légende fait disparaître l'erreur, mais la bonne solution est d'ouvrir un tikzpicture à l'intérieur, comme dans l'exemple ci-dessus. La taille de fonte vient des options de classe 12pt, 14pt, 17pt, 20pt et 25pt ; avec 25pt, le \normalsize mesuré valait 24,88 pt, et avec 20pt 20,74 pt.

Pourquoi a0poster sort en A4, et deux façons d'obtenir un vrai PDF A0

a0poster sort en A4 parce qu'il transmet la taille du papier par un \special PostScript. Compilez-le sur TeX Live 2024 et le journal se remplit de Non-PDF special ignored!, suivi de <special> header=./a0header.ps et <special> papersize=83.96cm,118.82cm. pdfTeX écarte les deux, si bien que le papier reste au A4 par défaut d'article. La classe écrit effectivement, à la compilation, un fragment PostScript nommé a0header.ps dans le répertoire de travail, contenant PageSize [2380 3368] et setpagedevice. Le programme censé le lire est dvips. Il s'agit de la v1.22b, datée du 31 janvier 2004, de Gerlinde Kettl et Matthias Weiser, travaillée depuis 1997 — une conception de l'apogée du DVI, restée intacte.

shell
# Route 1 -- the route the class was designed for (DVI to PostScript to PDF)
latex poster.tex && dvips poster.dvi -o poster.ps && ps2pdf poster.ps
pdfinfo poster.pdf | grep "Page size"   # 2384 x 3370 pts (A0)

# Route 2 -- stay with pdflatex and copy the paper size into the PDF yourself.
# Put these two lines in the preamble of poster.tex:
#   \pdfpagewidth=\paperwidth
#   \pdfpageheight=\paperheight
pdflatex poster.tex
pdfinfo poster.pdf | grep "Page size"   # 2379.97 x 3368.13 pts (A0)

Il y a deux issues. La voie prévue est latex, puis dvips, puis ps2pdf ; à la mesure, le .ps portait en tête %%DocumentPaperSizes: a0 et le PDF obtenu faisait 2384 × 3370 pt. L'autre consiste à rester sous pdflatex et à recopier soi-même dans le PDF les dimensions calculées par la classe, en mettant \pdfpagewidth=\paperwidth et \pdfpageheight=\paperheight dans le préambule ; cela a donné 2379,97 × 3368,13 pt. À noter aussi qu'un \documentclass{a0poster} nu prend par défaut landscape,a0b,final, et que a0b n'est pas l'A0 ISO mais une feuille surdimensionnée de 119 × 87 cm. Si le format compte, écrivez [a0,portrait] explicitement. Côté fonte, \normalsize est redéfini à 24,88 pt, et la classe ajoute ses propres \veryHuge (74,3 pt), \VeryHuge (89,16 pt) et \VERYHuge (107 pt). Elle n'apporte aucune mécanique de colonnes ni de blocs : le contenu se dispose à la main, avec l'environnement multicols de multicol ou avec minipage.

baposter n'est pas dans TeX Live 2024

baposter, qui dispose le contenu en grille de boîtes, est cité dans quantité de tutoriels d'affiches — mais il n'est pas dans TeX Live 2024. kpsewhich baposter.cls ne renvoie rien, et tlmgr info baposter répond cannot find package baposter. Le seul quasi-homonyme est xebaposter, une classe XeLaTeX pour affiches persanes et latines, qui est autre chose. Employer baposter suppose donc de l'installer depuis le CTAN à la main ; avant d'en payer le prix, il est plus rapide d'essayer tikzposter.

Ce qu'il faut vérifier avant de confier le fichier à l'imprimeur

Trois vérifications suffisent. Taille de page : la ligne Page size: de pdfinfo. Incorporation des fontes : dans pdffonts, chaque ligne doit afficher yes dans la colonne emb. Résolution des images : 150 dpi à la taille finale suffisent en pratique, 300 dpi pour une affiche lue de près. pdffonts sur une affiche produite par pdflatex montre des fontes Type 1 sous des noms de sous-ensemble comme PWNZYL+CMB10, avec yes sous emb et sub. Un seul no à cet endroit signifie que le RIP de l'imprimeur risque de substituer une autre fonte.

Il reste une limite — rarement atteinte, mais déroutante quand elle l'est. La plus grande dimension de TeX vaut 16383,99998 pt, environ 5,75 m. Essayée avec \setlength, la valeur 16383,99998 pt passe telle quelle tandis que 577 cm échoue sur ! Dimension too large. Les 3370 pt d'un A0 sont bien en dessous, tout comme les 8503,94 pt d'un beamerposter de deux mètres sur trois. Mais composer en une seule page un fond de stand de six mètres, et vous heurterez ce mur. La réponse habituelle : composer à la moitié de la taille et faire agrandir de 200 % à l'impression.

  • Réutiliser un diaporama beamer existantbeamerposter. size et scale décident presque tout
  • Obtenir vite un rendu soignétikzposter. Neuf thèmes et huit styles de couleurs, mais éviter \innerblock
  • Garder la main sur la mise en page, ou partir d'une source existantea0poster, en confirmant toujours par pdfinfo que la taille du papier a atteint le PDF
  • On vous a recommandé baposter → il n'est pas dans TeX Live 2024. L'installer depuis le CTAN à la main, ou passer à tikzposter