当使用 \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
宏可能就足够了。