根据页眉/页脚大小自动调整文本高度

根据页眉/页脚大小自动调整文本高度

我希望在整个文档中使用多种页面样式,并带有不同的页眉和页脚格式/内容。

我遇到了让页脚不超出页面范围的问题。

我使用的解决方法是绝对设置定位,如下例所示:

\documentclass[12pt, a4paper]{article}

\usepackage{blindtext}
\usepackage{fancyhdr}
\usepackage[margin=2cm, includefoot]{geometry}

\usepackage[utf8]{inputenc}
\usepackage{lastpage}
\usepackage{mdwlist}
\usepackage{titlesec}

\fancypagestyle{firstpagestyle}
{
  \fancyhf{} % clear all header and footer fields
  \chead{
      \LARGE \textbf{Common Header} \\
      \small diff header line 1 \\ 
      \small diff header line 2 \\
      }
  \cfoot{\thepage \ of \pageref{LastPage}}
  \renewcommand{\headrulewidth}{2pt}

  \setlength\headheight{60pt}
  \setlength{\footskip}{15pt}

}

\fancypagestyle{otherpagesstyle} {
  \fancyhf{} % clear all header and footer fields
  \chead{
      \LARGE \textbf{Common Header} \\ \small
      }
  \cfoot{\thepage \ of \pageref{LastPage}}
  \renewcommand{\headrulewidth}{2pt}

  \setlength{\headheight}{33pt}
  \setlength{\footskip}{42pt}
}



\pagestyle{otherpagesstyle}

%==============================================
\begin{document}

  \thispagestyle{firstpagestyle}
%==============================================

\subsection*{Section0}
\vspace{-0.4em}
  \blindtext

%==============================================

\subsection*{Section1}
\vspace{-0.4em}
\hrule
\vspace{1em}

  \blinditemize
  \blindtext
  \blinditemize
  \blindtext
%==============================================
\subsection*{Section2}
\vspace{-0.4em}
\hrule
\vspace{1em}

  \blindtext
  \blinditemize
  \blindtext
  \blinditemize
  \blindtext
  \blinditemize
  \blindtext
\end{document}

然而,我对这个解决方案并不满意,因为它似乎不能很好地扩展到更复杂的文档,更不用说页眉/页脚/文本区域之间的耦合,因此对其中一个的更改可能会导致(手动计算)对所有的更改。

我曾尝试改变每个 pagestyle 的 textheight 属性,但“firstpagestyle”似乎并没有超载默认设置(例如\pagestyle{otherpagesstyle}....)

有没有更简洁的方法来做到这一点?

答案1

由于您的问题仅出现在第一页,因此只需始终使用相同的页眉高度,并按照第一个页眉块适合它的方式进行操作。

\documentclass[12pt, a4paper]{article}

\usepackage{blindtext}
\usepackage[margin=2cm,headheight=25pt,includefoot]{geometry}
% headheight=25pt has been suggested by fancyhdr
\usepackage{fancyhdr}

\usepackage{lastpage}

\fancypagestyle{firstpagestyle}{
  \fancyhf{} % clear all header and footer fields
  \fancyhead[C]{\LARGE
    \parbox[t][\ht\strutbox]{\textwidth}{
      \centering
      \LARGE \textbf{Common Header} \\
      \small diff header line 1 \\ 
      \small diff header line 2\endgraf % not \par because \fancypagestyle is not \long
      \kern4pt
      \hrule height2pt
    }%
  }
  \fancyfoot[C]{\thepage \ of \pageref{LastPage}}
  \renewcommand{\headrulewidth}{0pt}
}

\fancypagestyle{otherpagesstyle}{
  \fancyhf{} % clear all header and footer fields
  \fancyhead[C]{\LARGE \textbf{Common Header}}
  \fancyfoot[C]{\thepage \ of \pageref{LastPage}}
  \renewcommand{\headrulewidth}{2pt}
}

\pagestyle{otherpagesstyle}

%==============================================
\begin{document}
\thispagestyle{firstpagestyle}
\vspace*{1sp} % adjust here in case you need more room
%==============================================

\section{Section0}
\blindtext

%==============================================

\section{Section1}

\blinditemize
\blindtext
\blinditemize
\blindtext

%==============================================
\section{Section2}

\blindtext
\blinditemize
\blindtext
\blinditemize
\blindtext
\blinditemize
\blindtext

\end{document}

相关内容