我正在尝试为一些报表定义一个基类,以共享相同的页面布局。我使用该fancyhdr
包创建页眉和页脚,但遇到了一些垂直对齐问题。我花了几个小时试图弄清楚如何在 HTML 中完成看似如此简单的事情。在下图中,我使用该包来showframe
帮助识别页面布局。
这是我想要实现的图像:
]1
这是我现在拥有的图像:
]2
除了一般的页面布局外,我无法将报告名称和日期与图像垂直对齐到顶部:
]3
页面主体与页眉重叠:
]4
页脚与正文重叠:
]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}
好像该geometry
包被覆盖了fancyheader
?我不确定是否理解了冲突。如果我要求 1cm 边距,为什么我要设置voffset
?此外,有没有办法指定页眉和页脚高度,并让正文使用文档的其余部分而无需设置textheight
?如何将页眉中的文本垂直对齐到顶部?
编辑2:
我设置了包声明中的属性geometry
,而不是按照建议手动设置,这很有帮助。我仍然不明白为什么顶部值必须包括headheight
和headsep
加上所需的边距值。
还剩两个问题:
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}