4

I'm working on a beamer poster template where I need precise control over all margins. I got rid of most, but the mandatory frame environment(1) introduces a 5.69pt(2) which I cannot find(3).

Observe this example:

\documentclass[final,t]{beamer}

\usepackage[orientation=portrait,size=a4]{beamerposter}
\geometry{margin=0pt}%

\begin{document}%
\begin{frame}[t,plain]%
%\vskip-5.69pt%    <--- magical vertical space
\begin{pgfpicture}%
  \pgfsetlinewidth{1pt}%
  \pgfpathmoveto{\pgfpoint{0pt}{0pt}}%
  \pgfpathlineto{\pgfpoint{2cm}{0pt}}%
  \pgfpathlineto{\pgfpoint{2cm}{-2cm}}%
  \pgfusepath{stroke}%
\end{pgfpicture} with frame%
\end{frame}%
\end{document}%

If we build this and zoom in on the top left corner it looks like this:

vertical frame margin

Now, if we remove the \begin{frame}[t,plain] and \end{frame} we get this:

no vertical margin

Note that the thin black frame around the picture is the page border inserted by my pdf viewer.

I have no idea where the distance between the page border and the pdfpicture comes from. How do I get rid of it?


(1) I can omit the frame, but then I run into trouble with \items in itemize environments. TeX then suddenly claims \item to be an undefined control sequence.

(2) That's the overfull-ness of the \hbox reported by latex when I try to insert a minipage of the dimension [\paperheight]{\paperwidth}.

(3) I tried setting virtually every page margin to 0pt to no avail. Also, the official beamer guide does not mention this margin.

1 Answer 1

6

It's a sneaky one: the t option doesn't push everything right to the top, it sets \beamer@frametopskip to 0.2cm plus 0.5\paperheight. (0.2cm are pretty exactly the 5.69pt you observe).

Adding

\makeatletter
\define@key{beamerframe}{t}[true]{% top
  \beamer@frametopskip=0pt %<-- was: .2cm plus .5\paperheight\relax%
  \beamer@framebottomskip=0pt plus 1fill\relax%
  \beamer@frametopskipautobreak=\beamer@frametopskip\relax%
  \beamer@framebottomskipautobreak=\beamer@framebottomskip\relax%
  \def\beamer@initfirstlineunskip{%
    \def\beamer@firstlineitemizeunskip{%
      \vskip-\partopsep\vskip-\topsep\vskip-\parskip%
      \global\let\beamer@firstlineitemizeunskip=\relax}%
    \everypar{\global\let\beamer@firstlineitemizeunskip=\relax}}
}

seems to fix that issue, at least for the tiny example I tested.

2

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .