ポスター(beamerposter / tikzposter / a0poster)

LaTeX で A0 ポスター を作るとき、いちばん多い事故は「刷ろうとしたら A4 だった」です。実際 TeX Live 2024 で a0poster クラスを pdflatex に通すと、pdfinfo が報告する用紙は 595.276 × 841.89 pt、つまり A4 でした。同じ A0 を狙って beamerpostertikzposter を通すと、どちらもきちんと 2383.94 × 3370.39 pt(A0) で出ます。このページでは、学会ポスターを作る 3 つの道——beamer を流用する beamerposter、TikZ ベースの専用クラス tikzposter、1997 年から続く a0poster——を、実際にコンパイルして pdfinfo で寸法を測りながら比べます。印刷屋に渡す直前に確かめるべきことも最後にまとめます。

ポスターの用紙サイズ — pdfinfo で確かめる

まず、できあがった PDF の寸法を必ず自分の目で確かめてください。pdfinfo poster.pdf を実行すると Page size: の行に大きさが出ます。A0 なら 2383.94 × 3370.39 pt、単位を換算すれば 84.1 × 118.9 cm。ここが A4(595.276 × 841.89 pt)のままなら、クラスの指定ではなく PDF の用紙指定が効いていない ということです。これは見た目では気づけません。ポスターは画面上で常に縮小表示されるので、A4 に潰れていても「小さく見えている」だけに思えてしまいます。

クラスまたはパッケージpdflatex での用紙(実測)寸法の決め方
beamerposter2383.94 × 3370.39 pt(A0 縦)size=a0orientation から直接 PDF に書き込む
tikzposter2383.94 × 3370.39 pt(A0 縦)a0papergeometry に渡すので PDF に正しく届く
a0poster595.276 × 841.89 pt(A4)PostScript の \special 経由なので pdflatex では無視される
baposter読み込めないTeX Live 2024 に収録されていない(後述)

beamerposter の使い方 — sizescale の 2 つだけ

beamer を知っているなら、beamerposter がいちばん短い道です。\documentclass[final]{beamer} の上に \usepackage[size=a0,scale=1.4,orientation=portrait]{beamerposter} を重ねるだけで、blockcolumns・テーマ・カラーテーマがそのままポスターの寸法で動きます。新しい記法を覚える必要はありません。[final] はオーバーレイを畳んで 1 ページにするための指定で、\pause\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 は文字の拡大率です。ここが beamerposter の巧いところで、用紙サイズごとに基準の倍率があらかじめ正規化されていますbeamerposter.sty を読むと a0 と a0b は 1.0、a1 は 0.70710678、a2 は 0.5、a3 は 0.35355339、a4 は 0.25。この数列は 1/√2 の累乗そのもので、A 判が一段ごとに面積を半分にする——つまり辺の長さが 1/√2 になる——ことに合わせてあります。おかげで scale=1.0 はどの用紙でも同じ見た目の大きさになり、A1 のポスターを A0 に作り直しても文字の見え方は変わりません。実測では a0 で scale=1.0 のとき \normalsize24.88 pt(行送り 30 pt)、scale=1.4 にすると 34.83 pt(行送り 42 pt)でした。

用紙は size=a0b a0 a1 a2 a3 a4 custom から選び、orientation=portraitlandscape を添えます。実測では orientation=landscape で 3370.39 × 2383.94 pt、size=a1 で 1683.78 × 2383.94 pt(A1)と、期待どおりに入れ替わりました。size=custom を選んだときは widthheightセンチメートル単位の数値で渡します——width=200,height=300 は 5669.29 × 8503.94 pt になり、2 m × 3 m の垂れ幕がそのまま出ます。TeX Live 2024 同梱の beamerposter は v1.13(2018 年 4 月 23 日)です。

tikzposter — テーマで見た目が決まる専用クラス

tikzposter は最初からポスターのために書かれたクラスで、\documentclass[25pt,a0paper,portrait,margin=10mm]{tikzposter} と宣言し、本文は \block{見出し}{中身} で書き、\begin{columns}\column{0.5} で段に振り分けます。beamer の語彙は使いません。見た目は \usetheme{...} ひとつで大きく変わり、TeX Live 2024 版には Autumn・Basic・Board・Default・Desert・Envelope・Rays・Simple・Wave の 9 種類が入っています。9 つ全部を実際にコンパイルしましたが、いずれもエラーなしで A0 の PDF を出しました。

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}

見た目の層は 4 つに分かれていて、\usetheme のほかに \usecolorstyle(8 種、なぜか Australia・Britain・Default・Denmark・Germany・Russia・Spain・Sweden と国名が付いています)、\usecolorpalette(5 種)、\useblockstyle(Basic・Corner・Default・Envelope・Minimal・Slide・TornOut の 7 種)を重ねられます。ただし TeX Live 2024 同梱の tikzposter v2.0(2014 年 1 月 15 日)には動かない命令が一つあります。ドキュメントに載っている \innerblock は、テーマを変えても \useinnerblockstyle を先に呼んでも、! TeX capacity exceeded, sorry [grouping levels=255]. で落ち、PDF がまったく生成されません。入れ子の囲みが欲しいときは \coloredbox{...} を使ってください——こちらは同じ環境で問題なく通りました。

もう一つ、tikzfigure の落とし穴です。この環境は center とキャプション用のカウンタを用意するだけで、tikzpicture を開いてはくれません\draw を裸で書き、なおかつ省略可能引数でキャプションを付けると ! LaTeX Error: There's no line here to end. が出ます。原因は tikzposter.cls の 818 行目で、キャプションの直前に \\[10pt] を置いているためです。中身が垂直モードで終わっていると、その \\ に終わらせる行がありません。キャプションを外せばエラーは消えますが、正解は上のコード例のように 中に tikzpicture をきちんと開くことです。文字の大きさは 12pt 14pt 17pt 20pt 25pt のクラスオプションで選び、25pt を選ぶと \normalsize24.88 pt20pt なら 20.74 pt でした。

a0poster が A4 で出てくる理由と、A0 の PDF を得る 2 つの方法

a0poster が A4 を出すのは、用紙サイズを PostScript の \special で伝える設計だからです。TeX Live 2024 でコンパイルすると、ログに Non-PDF special ignored! が並び、その下に <special> header=./a0header.ps<special> papersize=83.96cm,118.82cm が記録されます。pdfTeX はこの二つをまるごと無視するので、用紙は article 既定の A4 のまま残ります。実際このクラスはコンパイル時にカレントディレクトリへ a0header.ps という PostScript のかけらを書き出し、その中に PageSize [2380 3368]setpagedevice を入れています。読むのは dvips です。1997〜2004 年に Gerlinde Kettl と Matthias Weiser が書いた v1.22b(2004 年 1 月 31 日)——DVI 全盛期の設計がそのまま残っているわけです。

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)

道は 2 つです。本来の経路latexdvipsps2pdf。これを実測すると .ps の先頭に %%DocumentPaperSizes: a0 が入り、できた PDF は 2384 × 3370 pt になりました。もう一つは pdflatex のまま、プリアンブルで \pdfpagewidth=\paperwidth\pdfpageheight=\paperheight を書いて、クラスが計算した寸法を自分で PDF に写す方法。これで 2379.97 × 3368.13 pt が出ます。なお、オプションを何も付けない \documentclass{a0poster} の既定は landscape,a0b,final で、a0b は ISO の A0 ではなく 119 × 87 cm の「大きめ A0」です。用紙を意識するなら [a0,portrait] のように明示してください。文字は \normalsize が 24.88 pt に再定義されるほか、このクラス独自の \veryHuge(74.3 pt)・\VeryHuge(89.16 pt)・\VERYHuge(107 pt)が使えます。段組みやブロックの仕組みは持っていないので、本文は multicolmulticols 環境や minipage を自分で並べて配置します。

baposter は TeX Live 2024 に入っていない

箱をグリッドに並べる baposter は、ポスターの記事でよく名前が挙がりますが、TeX Live 2024 には収録されていませんkpsewhich baposter.cls は何も返さず、tlmgr info bapostercannot find package baposter と答えます。似た名前で見つかるのは xebaposter(XeLaTeX 用のペルシャ語・ラテン文字ポスタークラス)だけで、これは別物です。baposter を使うつもりなら CTAN から手で入れる必要があり、その手間を払う前に tikzposter を試すほうが早いでしょう。

印刷屋に渡す前に確かめること

確認は 3 点で足ります。用紙寸法pdfinfoPage size: 行、フォントの埋め込みpdffontsemb 列がすべて yes になっていること、画像の解像度は原寸で 150 dpi あれば実用上十分(近づいて読むポスターなら 300 dpi)。フォントは pdffonts で確認すると、pdflatex が作ったポスターでは PWNZYL+CMB10 のようにサブセット名が付いた Type 1 が並び、emb sub ともに yes と出ます。ここが no の書体が一つでもあると、印刷所の RIP で別の書体に置き換えられる危険があります。

もうひとつ、めったに当たらないけれど当たると途方に暮れる上限があります。TeX の寸法の最大値は 16383.99998 pt、およそ 5.75 m です。実際に \setlength で試すと 16383.99998 pt はそのまま通り、577 cm は ! Dimension too large. で落ちました。A0 の 3370 pt はもちろん、beamerposter で 2 m × 3 m を指定した 8503.94 pt でも余裕があります。しかし展示ブースの背面を覆う 6 m の垂れ幕を一枚で組もうとすると、この壁に当たります。そのときは半分の寸法で組んで印刷時に 200% 拡大するのが定石です。

  • beamer の資産をそのまま使いたいbeamerpostersizescale の 2 つでだいたい決まる
  • 手早く整った見た目が欲しいtikzposter。テーマ 9 種+色スタイル 8 種。ただし \innerblock は避ける
  • 自分で組版を握りたい、または既存の原稿があるa0poster。ただし用紙が PDF に届いているか必ず pdfinfo で確認
  • baposter を勧められた → TeX Live 2024 には無い。CTAN から手で入れるか、tikzposter に乗り換える