报告页面布局中 fancyhdr 的对齐问题

报告页面布局中 fancyhdr 的对齐问题

我正在尝试为一些报表定义一个基类,以共享相同的页面布局。我使用该fancyhdr包创建页眉和页脚,但遇到了一些垂直对齐问题。我花了几个小时试图弄清楚如何在 HTML 中完成看似如此简单的事情。在下图中,我使用该包来showframe帮助识别页面布局。

这是我想要实现的图像:

![report base image]1

这是我现在拥有的图像:

![report base result]2

除了一般的页面布局外,我无法将报告名称和日期与图像垂直对齐到顶部:

![report header alignment]3

页面主体与页眉重叠:

![report body overlaps]4

页脚与正文重叠:

![report footer overlaps]5

最后,这是该课程使用的 Latex 代码:

\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{basereport}

% base class
\LoadClass[letterpaper, 12pt]{article}

% packages
\usepackage[utf8]{inputenc} % The UTF-8 encoding is specified.
\usepackage{color}
\usepackage{lipsum}
\usepackage{helvet}
\usepackage{graphicx}
\usepackage{fancyhdr} % for header and footer
\usepackage{lastpage}
\usepackage[yyyymmdd,hhmmss]{datetime}

% debug frames
\usepackage{showframe}

% margins
% http://ctan.mirror.rafal.ca/macros/latex/contrib/geometry/geometry.pdf
\usepackage[top=1cm, bottom=1cm, left=1cm, right=1cm
]{geometry}

% macro for images
\DeclareGraphicsExtensions{.pdf,.png,.jpg}

% page style
% http://ctan.bppro.ca/macros/latex/contrib/fancyhdr/fancyhdr.pdf
\pagestyle{fancy} % for page style

% page header
\fancyhf{} % reset header and footer
\renewcommand{\headrulewidth}{0pt} % remove header rule
\renewcommand{\footrulewidth}{0pt} % remove footer rule

\fancyhead[L]{
    \includegraphics[width=4cm, height=2cm, keepaspectratio=true]{universe.jpg}
}
\fancyhead[C]{}
\fancyhead[R]{
    \large\textbf{
        \MakeUppercase{Report name}
        \linebreak
        2015-11-10
    }
}

% page footer
\fancyfoot[L]{
    \small\emph{Printed on \today\ at \currenttime}
}
\fancyfoot[C]{}
\fancyfoot[R]{
    \small\emph{Page \thepage\ of \pageref{LastPage}}
}

% commands
\renewcommand{\familydefault}{\sfdefault}

以及文件:

\documentclass{basereport}
\begin{document}
\textcolor[rgb]{0,0,1}{
    \lipsum[1]
}
\end{document}

我尝试调整这些属性的长度:

\hoffset
\voffset
\headheight
\textheight
\textwidth
\footskip
\headsep

编辑:这是我使用其中一些属性所得到的结果:

\setlength{\hoffset}{0cm}
\setlength{\voffset}{1cm}

\setlength{\headheight}{2cm}
\setlength{\headsep}{0.5cm}
\setlength{\footskip}{0.5cm}

report base result with properties

好像该geometry包被覆盖了fancyheader?我不确定是否理解了冲突。如果我要求 1cm 边距,为什么我要设置voffset?此外,有没有办法指定页眉和页脚高度,并让正文使用文档的其余部分而无需设置textheight?如何将页眉中的文本垂直对齐到顶部?

编辑2:

我设置了包声明中的属性geometry,而不是按照建议手动设置,这很有帮助。我仍然不明白为什么顶部值必须包括headheightheadsep加上所需的边距值。

report base result with geometry

还剩两个问题:

1)如何垂直对齐标题,以便标题和日期位于顶部?

2)如何删除即使footrulewidth设置为也会出现的页脚下的行0.0pt

该类的更新代码供参考:

\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{basereport}

% base class
\LoadClass[letterpaper, 12pt]{article}

% packages
\RequirePackage[utf8]{inputenc} % The UTF-8 encoding is specified.
\RequirePackage{color}
\RequirePackage{lipsum}
\RequirePackage{helvet}
\RequirePackage{graphicx}
\RequirePackage{fancyhdr} % for header and footer
\RequirePackage{lastpage}
\RequirePackage[yyyymmdd,hhmmss]{datetime}

% debug frames
\RequirePackage{showframe}

% margins
% http://ctan.mirror.rafal.ca/macros/latex/contrib/geometry/geometry.pdf
\RequirePackage[
    headheight=30mm,
    headsep=5mm,
    footskip=10mm,
    top=45mm, 
    bottom=20mm, 
    left=10mm, 
    right=10mm
]{geometry}

% macro for images
\DeclareGraphicsExtensions{.pdf,.png,.jpg}

% page style
% http://ctan.bppro.ca/macros/latex/contrib/fancyhdr/fancyhdr.pdf
\pagestyle{fancy} % for page style

% page header
\fancyhf{} % reset header and footer
\renewcommand{\headrulewidth}{0pt} % remove header rule
\renewcommand{\footrulewidth}{0pt} % remove footer rule

\fancyhead[L]{
    \includegraphics[keepaspectratio=true]{universe.jpg}
}
\fancyhead[C]{}
\fancyhead[R]{
    \large\textbf{
        \MakeUppercase{Report name}
        \linebreak
        2015-11-10
    }
}

% page footer
\fancyfoot[L]{
    \small\emph{Printed on \today\ at \currenttime}
}
\fancyfoot[C]{}
\fancyfoot[R]{
    \small\emph{Page \thepage\ of \pageref{LastPage}}
}

% commands
\renewcommand{\familydefault}{\sfdefault}

答案1

基本错误是\headheight长度太小,导致页眉顶部和常规文本重叠。

fancyhdr将在控制台和日志文件中发出有关正确值的警告和一些建议。

使用\setlength{\headheight}{2cm}(或 报告的任何适当值fancyhdr)或者使用\usepackage[headheight=2cm,...]{geometry}

答案2

这是将页眉元素对齐的解决方案。诀窍是在页眉左侧使用 minipage,然后添加\vspace{0pt}到 minipage。

\documentclass[12pt]{article}
\usepackage[headheight=40.3pt]{geometry}

\usepackage{fancyhdr}
\usepackage{lastpage}

%\usepackage{showframe} % To adjust header and footer
\usepackage{lipsum}
\usepackage{graphicx}

\pagestyle{fancy}
\fancyhead{}
\fancyhead[L]{
\begin{minipage}[t]{0.49\linewidth}
    \vspace{0pt}
    {\includegraphics[scale=0.1]{example-image-a}}
\end{minipage}
\begin{minipage}[t]{0.49\linewidth}
    \vspace{0pt}
    \begin{flushright}
        {\Large \textbf{TOP Line}}\\
        {\normalsize Second line}\\
    \end{flushright}
\end{minipage}  
}
\fancyfoot{}
\fancyfoot[R]{{Page \thepage\ of \pageref{LastPage}}}
\renewcommand{\headrulewidth}{0pt}

\begin{document}

\lipsum[1-4]

\end{document}

Output

相关内容