如何让底部浮动取代页脚?

如何让底部浮动取代页脚?

我有一个\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}

在此处输入图片描述

相关内容