[Tex/LaTex] How to adjust textwidth and textheight to paper size in mid document? (and header and footer “length” as well)

fancyhdrgeometryheader-footermargins

I want to adjust textwidth and textheight to papersize in mid document, that simple.

I am planning to change some pages paper size, but I need both the header, footer and text to adjust (better if automatically) to the paper size.

I've been playing around with geometry package and I was unable to find an option that help me.

MWE:

\documentclass{article}
\usepackage{geometry}
\usepackage{lipsum}
\usepackage{fancyhdr}
\begin{document}

\thispagestyle{fancy}
\newlength{\classpageheight} \setlength{\classpageheight}{\pdfpageheight}
\newlength{\classpagewidth} \setlength{\classpagewidth}{\pdfpagewidth}

\lipsum[1-6]
\newpage
\thispagestyle{fancy}
\eject \pdfpagewidth=17in \pdfpageheight=18in
\lipsum[1-6]

\eject \pdfpagewidth=\classpagewidth \pdfpageheight=\classpageheight
\newpage
\thispagestyle{fancy}
\lipsum[1-6]

\end{document}

MWE compiled here.

Best Answer

Here is my solution your remarks are welcome

\documentclass{article}
\usepackage{geometry}
\usepackage{lipsum}
\usepackage{fancyhdr}

\def\vcoef#1{#1=\dimexpr #1*\pdfpageheight/\paperheight\relax}
\def\hcoef#1{#1=\dimexpr #1*\pdfpagewidth/\paperwidth\relax}

\makeatletter 
\def\adjustpagedim#1#2{%
\newpage
\pdfpagewidth=#1 \pdfpageheight=#2
\hcoef\textwidth
\vcoef\textheight
\vsize=\textheight
\@colroom=\textheight
\@colht=\textheight
\columnwidth=\textwidth
\if@twocolumn%
   \advance\columnwidth-\columnsep
   \divide\columnwidth\tw@%
   \@firstcolumntrue%
\fi%
\hsize=\columnwidth
\linewidth=\hsize
\hcoef\evensidemargin
\hcoef\oddsidemargin
\vcoef\topmargin
\vcoef\headheight
\vcoef\headsep
\vcoef\footskip
\hcoef\marginparwidth
\hcoef\marginparsep
\headwidth=\textwidth
% this is important but does nothing here
\paperwidth=\pdfpagewidth
\paperheight=\pdfpageheight}
\makeatother
\begin{document}

\thispagestyle{fancy}
%----->I change something here
\newlength{\classpageheight} 
\setlength{\classpageheight}{\paperheight}
\newlength{\classpagewidth} 
\setlength{\classpagewidth}{\paperwidth}

\lipsum[1-6]

\adjustpagedim{17in}{18in}
\thispagestyle{fancy}

\lipsum[1-6]

\adjustpagedim{\classpagewidth}{\classpageheight}
\thispagestyle{fancy}

\lipsum[1-6]

\end{document}