我有一个\begin{figure*}[b!]
。它正确地浮动到页面底部,但页面下方仍有页脚。(这是一个横跨多列 2 文档的两列的图形。)我希望该图形能够取代页脚 - 目前是页码和部分名称,设置为fanyhdr
- 以便它使用直到页面底部的所有可用空间,并为其上方的主要文本留出更多空间。
实现这一目标的最佳方法是什么?我想保留图形的“浮动”方面,以便此替换会自动在放置图形的正确页面上进行。
编辑:仅通过向中添加代码即可“修复”以下 MWE \replaceFooterFig
。
\documentclass{book}
\usepackage{lipsum}
\usepackage{multicol}
\usepackage{color}
\usepackage{geometry}
\geometry{a5paper,textwidth=132mm,textheight=190mm}
\usepackage{fancyhdr}
\pagestyle{fancy}
\fancyhf{}
\fancyfoot[C]{\thepage}
\newcommand{\replaceFooterFig}[1]{% all necessary code goes here
\begin{figure*}[b!]
\color{red}#1
\end{figure*}
}
\begin{document}
\begin{multicols}{2}
\lipsum[1-10]
\replaceFooterFig{
I should replace the footer (no gap to page border, multicols above makes use of the additional space!).
\lipsum[1]
}
\lipsum[11-20]
\replaceFooterFig{
I am shorter, but I should replace the footer, too.
\lipsum[2]
}
\lipsum[21-30]
\end{multicols}
\end{document}
答案1
在这里,我修改了\replaceFooterFig
几个操作。它将图形放入已保存的 中。然后通过向下移动来\vbox
减小框的深度。它还关闭了页脚(使用),并为下一页设置了页脚的重新激活(通过执行嵌套)。\footsep
\AtBeginShipout
\AtBeginShipout
\documentclass{book}
\usepackage{lipsum,atbegshi}
\usepackage{multicol}
\usepackage{color}
\usepackage{geometry}
\geometry{a5paper,textwidth=132mm,textheight=190mm}
\usepackage{fancyhdr}
\pagestyle{fancy}
\fancyhf{}
\fancyfoot[C]{\thepage}
\newcommand{\replaceFooterFig}[1]{% all necessary code goes here
\begin{figure*}[b!]
\fboxsep=0pt\setbox0=\vbox{%
\begin{minipage}[t]{\textwidth}\color{red}#1\end{minipage}%
}\dp0=\dimexpr\dp0-\footskip\relax\box0
\AtBeginShipout{\fancyhf{}\nextpagefoot}
\end{figure*}
}
\def\nextpagefoot{\AtBeginShipout{\fancyfoot[C]{\thepage}}}
\begin{document}
\begin{multicols}{2}
\lipsum[1-10]
\replaceFooterFig{
I should replace the footer (no gap to page border, multicols above makes use of the additional space!).
\lipsum[1]
}
\lipsum[11-20]
\replaceFooterFig{
I am shorter, but I should replace the footer, too.
\lipsum[2]
}
\lipsum[21-30]
\end{multicols}
\end{document}
答案2
移动页脚中的图形其实并不难。这可以通过简单的 vspace 来完成。但要抑制页脚中页码的打印却不那么容易。以下代码有效,但依赖于 \thepage 不会做愚蠢的事情这一事实……
\documentclass{book}
\usepackage{lipsum}
\usepackage{multicol}
\usepackage{color}
\usepackage{etoolbox}
\usepackage{geometry}
\geometry{a5paper,textwidth=132mm,textheight=190mm}
\newcommand\myfloatlist{}
\usepackage{fancyhdr}
\pagestyle{fancy}
\fancyhf{}
\fancyfoot[C]{\edef\temp{\thepage}\expandafter\ifinlist\expandafter{\temp}{\myfloatlist}{}{\thepage}}
\makeatletter
\newcommand{\replaceFooterFig}[1]{% all necessary code goes here
\begin{figure*}[b!]
\protected@write\@auxout{}%
{\string\listgadd{\string\myfloatlist}{\thepage}}%
\color{red}#1
\par\vspace{-0.8cm}
\end{figure*}}
\begin{document}
\begin{multicols}{2}
\lipsum[1-10]
\replaceFooterFig{
I should replace the footer (no gap to page border, multicols above makes use of the additional space!).
\lipsum[1]
}
\lipsum[11-20]
\replaceFooterFig{
I am shorter, but I should replace the footer, too.
\lipsum[2]
}
\lipsum[21-30]
\end{multicols}
\end{document}