使用几何包设置最小边距大小

使用几何包设置最小边距大小

当使用geometryfancyhdr包时,可以指定太小而无法容纳页眉和页脚的边距。

\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 英寸接头

更改页面布局和页眉的定义,使其变为 .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"

.1 英寸页眉,带 1/2 英寸边距

当然,如果还headheight不够大的话,花式高清 将要警告你。

相关内容