Take the 2-minute tour ×
TeX - LaTeX Stack Exchange is a question and answer site for users of TeX, LaTeX, ConTeXt, and related typesetting systems. It's 100% free, no registration required.

I'm creating three documents with three different headers, containing images or large banners. Is there a way to determine the head height automatically or even better a way to change the head height automatically with reference to the content?

I know LaTeX is telling me the head height is too small and I should change it to xx pt, but I would like to not have to do it manually.

A little excerpt of the beginning of one of my documents:

\documentclass[pdftex,12pt,oneside]{report}

\usepackage[pdftex]{graphicx}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{color}

\usepackage[paper = a4paper, tmargin = 2cm, bmargin = 2cm, lmargin = 2.5cm, rmargin = 2cm]{geometry}

\usepackage{fancyhdr}
\fancypagestyle{titlepage}
{
    \fancyhf{}
    \fancyhead[L]{~\\[0.5cm]\includegraphics[height=2cm]{./dhbw_logo}}
    \fancyhead[R]{~\\[0.5cm]\includegraphics[width=2cm]{./cz_logo}}
    \renewcommand{\headrulewidth}{0pt}
    \renewcommand{\footrulewidth}{0pt}
}
share|improve this question
    
Could you please add a minimal example? –  egreg Jun 5 '13 at 20:27
    
@egreg Added a little excerpt. –  Chris.V Jun 5 '13 at 20:33
add comment

1 Answer

up vote 8 down vote accepted

I do not think, it makes much sense to use an overlarge height of the titlepage's header for the whole document. Nonetheless the question is interesting in general.

Package fancyhdr already updates \headheight or \footskip, if the header or footer is too large. The following example stores the latest values of these dimension registers at the end of the document in an auxiliary file \jobname.heights. If the file exists, it is read in the preamble, before package geometry is loaded that might use the updated values for its calculations. Therefore the .aux file cannot be used for this purpose, because it is read a little too late (in \begin{document}).

\documentclass[12pt]{report}

\usepackage{atveryend}
\makeatletter
\AtVeryEndDocument{%
  \if@filesw % respect \nofiles
    \begingroup
      % same write register as environment `filecontents` uses
      \chardef\reserved@c=15 %
      \immediate\openout\reserved@c=\jobname.heights\relax
      \immediate\write\reserved@c{%
        \string\setlength{\string\headheight}{\the\headheight}%
      }%
      \immediate\write\reserved@c{%
        \string\setlength{\string\footskip}{\the\footskip}%
      }%
      \immediate\closeout\reserved@c
    \endgroup
  \fi
}
\makeatother
\InputIfFileExists{\jobname.heights}{}{}

\usepackage[
  includehead,
  includefoot,
  a6paper,
  landscape,
  showframe,
]{geometry}

\usepackage{fancyhdr}

\pagestyle{fancy}
\fancyhf{}
\chead{\Huge Header}
\cfoot{\Huge \begin{tabular}{c}Footer\\\thepage\end{tabular}}
\renewcommand{\headrulewidth}{0pt}
\renewcommand{\footrulewidth}{0pt}

\begin{document}
Hello World
\end{document}

First run

Package fancyhdr warns:

Package Fancyhdr Warning: \headheight is too small (12.0pt): 
 Make it at least 30.0pt.
 We now make it that large for the rest of the document.
 This may cause the page layout to be inconsistent, however.

Package Fancyhdr Warning: \footskip is too small (30.0pt): 
 Make it at least 50.99991pt.
 We now make it that large for the rest of the document.
 This may cause the page layout to be inconsistent, however.

And the contents of the page is displaced:

First run

Second run

The previously written \jobname.heights is used:

\setlength{\headheight}{30.0pt}
\setlength{\footskip}{50.99991pt}

There are no warnings and the page is:

Second run

share|improve this answer
    
Thanks for your fast reply. Oh fancyhdr updates it already if it's too large? Nice to know. This looks really nifty and I'll try it at home right after work. The only problem left and which I probably forgot to mention is that my headers contain data in all three sections of fancyhead. Is that a problem or does your solution always choose the right \headheight? –  Chris.V Jun 6 '13 at 6:02
    
@Chris.V: It does not matter, how many sections of \headheight are used. –  Heiko Oberdiek Jun 6 '13 at 7:45
    
Yeah no that was my mistake. :) Hadn't thought the whole thing to the end. ^^ Thanks for your answer, it exactly does what I searched for. –  Chris.V Jun 6 '13 at 18:35
add comment

Your Answer

 
discard

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.