با توجه به این پست در مورد تغییر اندازه textheight مطابق با مقدار مورد نیاز من میخواهم به همان اندازه که مثلا headheight افزایش پیدا میکند در همان صفحه textheight به همان اندازه کاهش پیدا کند و برعکس. من با استفاده از کدی که آقای خلیقی در این پست گداشتهاند، مقدار textheight را تغییر میدهم ولی هرچند مقدار تغییر headheight در همان صفحه اعمال میشود ولی تغییر textheight از صفحه بعد اعمال میشود.
کمی ویرایش برای بهتر مشخص شدن اشکالات
کد کمینه:
\documentclass[twoside]{article}
\usepackage[left=1cm,right=1cm,top=1cm,bottom=1cm,headheight=0pt,headsep=0pt,footskip=0pt,includeheadfoot]{geometry}
\usepackage{lipsum}
\usepackage{fancyhdr}
\usepackage{bidi}
\pagestyle{fancy}
\fancyhf{}
\fancyhead[CO]{\vrule height 50pt\Huge\bfseries This is a test Odd page\vrule height 50pt}
\fancyhead[CE]{\vrule height 150pt\Huge\bfseries This is a test Even page\vrule height 150pt}
%\fancyfoot[C]{\thepage}
\fancypagestyle{last}{%
\fancyhf{}
\fancyhead[C]{%
\vrule height 350pt\Huge\bfseries This is a test Last page \vrule height 350pt
}
% \fancyfoot[C]{\thepage}
}
\makeatletter
\newcommand*{\bidi@f@nch@lh}{%
\ifodd\count\z@
\f@nch@olh
\else
\f@nch@elh
\fi
}
\newcommand*{\bidi@f@nch@ch}{%
\ifodd\count\z@
\f@nch@och
\else
\f@nch@ech
\fi
}
\newcommand*{\bidi@f@nch@rh}{%
\ifodd\count\z@
\f@nch@orh
\else
\f@nch@erh
\fi
}
\bidi@BeforeHeader{%
\setbox\@tempboxa\vbox{%
\hbox{%
\rlap{%
\parbox[b]{\headwidth}{%
\raggedright\bidi@f@nch@lh
}%
}%
\hfill
\parbox[b]{\headwidth}{%
\centering\bidi@f@nch@ch
}%
\hfill
\llap{%
\parbox[b]{\headwidth}{%
\raggedleft\bidi@f@nch@rh
}%
}%
}%
\headrule
}%
\typeout{page number ast \thepage}
\typeout{headheight ast \the\headheight}
\typeout{new headheight ast \the\ht\@tempboxa}
\typeout{textheight ast \the\textheight}
\typeout{new textheight ast \the\dimexpr\textheight+\headheight-\ht\@tempboxa\relax}
\ifdim\headheight=\ht\@tempboxa\else
\global\addtolength{\textheight}{\dimexpr\headheight-\ht\@tempboxa\relax}
\global\setlength{\headheight}{\ht\@tempboxa}%
\fi
}
\makeatother
\begin{document}
\lipsum[5-50]
\thispagestyle{last}
\end{document}