[Tex/LaTex] Page header with gray background and without margin

boxescolorfancyhdrmarginparpage-numbering

After finishing my thesis in LaTeX (I am an absolute newcomer) I've been asked to format it in a specific design matching a doc-file I received.

I've managed to change titles and fonts and margins successfully, but I'm having trouble with the header.

Here's what I am trying to achieve:

Page header with gray background and without margin

I've tried messing around with fancyhdr – but after spending an hour on the documentation, I'm not sure it gives me what I need.

Can you give me a nudge into the right direction?

Particular questions:
– What package should I be using to achieve this?
– How do I create this floating box that ignores the page margin?

Best Answer

The example for the page number uses \llap/\rlap to print something to the left/right without moving the current point.

\documentclass[twoside]{book}
\usepackage[
  headheight=14pt,
]{geometry}

\usepackage{color}
\definecolor{bgpagenum}{gray}{.82}
\definecolor{fgheader}{gray}{.5}

\usepackage{fancyhdr}
\pagestyle{fancy}

\makeatletter
\let\ps@plain\ps@fancy
\makeatother

\fancyhead{}
\fancyfoot{}
\renewcommand*{\headrulewidth}{0pt}
\renewcommand*{\footrulewidth}{0pt}

\fancyhead[RO]{%
  \textcolor{fgheader}{%
    \rightmark
    \rlap{%
      \hspace{\marginparsep}%
      \hspace{-\fboxsep}%
      \colorbox{bgpagenum}{%
        \makebox[\textwidth][l]{\thepage}%
      }%
    }%
  }%
}
\fancyhead[LE]{%
  \textcolor{fgheader}{%
    \llap{%
      \colorbox{bgpagenum}{%
        \makebox[\textwidth][r]{\thepage}%
      }%
      \hspace{\marginparsep}%
      \hspace{-\fboxsep}%
    }%
    \leftmark
  }%
}

% sans serif font as main font
\renewcommand*{\familydefault}{\sfdefault}

\begin{document}
\chapter{Asdfg}
\section{Hjkl}
\newpage
\section{Yuip}
\end{document}

I have used \marginparsep as horizontal distance from the page number to the text body. Then the page number would be vertical aligned with marginal notes, if there are any. If the page number should also be outside the marginal notes, then add \hspace{\marginparwidth}. The length the gray box can be calculated:

\dimexpr\paperwidth-\textwidth-1in-\oddsidemargin\relax % odd pages
\dimexpr\paperwidth-\textwidth-1in-\evensidemargin\relax % even pages

The example simplifies it by using a larger width (\textwidth).

The other things depend on used class/packages and, what have you already managed.