当使用geometry
和fancyhdr
包时,可以指定太小而无法容纳页眉和页脚的边距。
\documentclass{article}
\usepackage{geometry}
\usepackage{fancyhdr}
\geometry{vmargin=0.5in,
head=\dimexpr1in+\dp\strutbox\relax,
foot=\dimexpr1in+\dp\strutbox\relax}
\fancypagestyle{foo}{
\fancyhead[L]{\rule{\textwidth}{1in}}
\fancyfoot[L]{\rule{\textwidth}{1in}}}
\pagestyle{foo}
\begin{document}
This does not give any warning that the "margins"
are too small to hold the header and footer.
\end{document}
在我的实际使用案例中,我事先并不知道页眉和页脚的大小,尽管它们在之后是恒定大小\begin{document}
。调整页眉/页脚的大小以适应内容相对容易,fancyhdr
如果内容不适合,会发出警告。问题是,如果页眉/页脚超出页面,则不会fancyhdr
发出geometry
警告。
我希望能够指定边距是正好 0.5 英寸还是刚好足够容纳页眉/页脚。在上述 MWE 的情况下,边距应为 1 英寸(也许顶部边距应该稍大一些以包含\headsep
),而不是现在的 0.5 英寸。该includehead
选项会给我一个 1.5 英寸的边距,这太大了。
如果无法指定最小边距大小,是否至少可以发出警告。
答案1
您可以检查文档开头的长度,并几何学必要时调整边距。我认为本质上你要检查的tmargin
是至少\headheight+\headsep+<some minimal value>
。
例如:
\documentclass{article}
\usepackage{geometry,fancyhdr,calc}
\geometry{vmargin=0.5in,
headheight=\dimexpr1in+\dp\strutbox\relax,
footskip=\dimexpr1in+\dp\strutbox\relax,
verbose,
showframe
}
\fancypagestyle{foo}{%
\fancyhead[L]{\rule{\textwidth}{1in}}
\fancyfoot[L]{\rule{\textwidth}{1in}}}
\pagestyle{foo}
\makeatletter
\AtBeginDocument{%
\setlength\@tempdima{\headheight+\headsep+5pt}%
\ifdim\Gm@tmargin<\@tempdima\geometry{tmargin=\@tempdima}\fi
}
\makeatother
\begin{document}
This does not give any warning that the `margins' are too small to hold the header and footer.
\end{document}
更改页面布局和页眉的定义,使其变为 .1 英寸页眉,如下所示
\geometry{vmargin=0.5in,
headheight=\dimexpr.1in+\dp\strutbox\relax,
footskip=\dimexpr1in+\dp\strutbox\relax,
verbose,
showframe
}
\fancypagestyle{foo}{%
\fancyhead[L]{\rule{\textwidth}{.1in}}
\fancyfoot[L]{\rule{\textwidth}{1in}}}
\pagestyle{foo}
导致顶部边距为 1/2"
当然,如果还headheight
不够大的话,花式高清 将要警告你。