更改放置 {table} 或任何其他浮动元素的页面上的页面样式

更改放置 {table} 或任何其他浮动元素的页面上的页面样式

当使用 \begin{table} ... \end{table} (或任何其他浮动元素)排版大型表格时,有时想要更改浮动元素最终出现的页面的页面样式。

可以使用 \thispagestyle{...} 来实现这种效果吗?无论如何,将命令放在浮动内都无济于事;在这种情况下,它应用于错误的页面(即应用于定义浮动的页面,而不是浮动出现的页面)。解决此限制的标准技巧是什么?

我可能需要补充一点:我在 latex2e 中使用 \usepackage{fancyhdr} 和大约 60 个其他包,以及一个 5000 行的 .cls 文件。并且有问题的浮动不是整页浮动;出于这个原因或者可能出于其他未知原因,\usepackage{floatpag} 和 \thisfloatpagestyle{...} 没有任何效果。

答案1

这种方法似乎有效。但不确定这是否是最好的方法。

\documentclass[a4paper,12pt]{book}
\usepackage{fancyhdr}
 \usepackage{floatpag} 
  \pagestyle{fancy}

\begin{document}

\begin{figure}[p]
\rule{14cm}{14cm}
\caption{Figure without jiggered pagestyle}
\end{figure}

\begin{figure}[p]
\rule{14cm}{14cm}
\caption{Figure without jiggered pagestyle}
\end{figure}

\begin{figure}[p]
\rule{14cm}{14cm}
\caption{Figure without jiggered pagestyle}
\end{figure}

\begin{figure}[p]
\rule{14cm}{14cm}
\caption{Figure without jiggered pagestyle}
\end{figure}

%this one is jiggered
\begin{figure}[p]
\thisfloatpagestyle{fancyplain}
\rule{14cm}{14cm}
\caption{Figure with jiggered pagestyle}
\end{figure}

\begin{figure}[p]
\rule{14cm}{14cm}
\caption{Figure without jiggered pagestyle}
\end{figure}

\begin{figure}[p]
\rule{14cm}{14cm}
\caption{Figure without jiggered pagestyle}
\end{figure}

\end{document}

答案2

以下解决方案使用以下方法修补输出例程everyshi检查是否位于“特殊浮动”所在的页面上。然后相应地将页面样式更改为“特殊样式”。

用户界面如下:

  • \label{<label>}在你的“特殊浮点数”中使用;

  • 在前言中,用于\specialpagelabel{<label>}插入与“特殊浮点”关联的标签。用于\specialpagelabels{<csv labels>}处理“特殊标签”列表。

在此处输入图片描述

\documentclass{article}
\usepackage{lipsum,fancyhdr}
\usepackage{everyshi,etoolbox,refcount}

\fancypagestyle{flpage}{%
  \fancyhf{}% Clear header/footer
  \fancyhead[C]{this is a special header}
  \fancyfoot[C]{this is a special footer}
}

\EveryShipout{%
  \renewcommand*{\do}[1]{%
    \ifnum\value{page}=\number\numexpr\getpagerefnumber{#1}-1\relax
      \thispagestyle{flpage}%
    \fi
  }
  \dolistloop{\splab}%
}
\newcommand{\specialpagelabel}[1]{\listgadd{\splab}{#1}}% Process single label
\newcommand{\specialpagelabels}[1]{% Process multiple labels
  \renewcommand*{\do}[1]{\listgadd{\splab}{##1}}% Each entry gets added to \splab
  \docsvlist{#1}}% Process list

\specialpagelabels{fig:special1,fig:special2}


\setcounter{topnumber}{1}% Just for this example (allow only 1 float at the [t]op of the page)
\begin{document}
\begin{figure}[t]
  \caption{A top float; processed on page~\thepage, placed on page~\pageref{fig:normal1}.}
  \label{fig:normal1}
\end{figure}

\lipsum[1]

\begin{figure}[t]
  \caption{Another top float; processed on page~\thepage, placed on page~\pageref{fig:special1}.}
  \label{fig:special1}
\end{figure}

\lipsum[2-35]

\begin{figure}[t]
  \caption{A top float; processed on page~\thepage, placed on page~\pageref{fig:normal2}.}
  \label{fig:normal2}
\end{figure}

\begin{figure}[t]
  \caption{Another top float; processed on page~\thepage, placed on page~\pageref{fig:special2}.}
  \label{fig:special2}
\end{figure}

\end{document}

列表处理由以下提供etoolbox. 每个“特殊标签”被添加到名为的g全局变量中,并通过在之前进行处理。list\splab\dolistloop{\splab}\shipout

上述解决方案比较通用。如果你只有几张图片,那么一个更手动的解决方案是策略性地放置(比如说)afterpage或者atbegshi宏可能就足够了。

相关内容