将表格固定在给定的页面上,以便在其上方添加文本时表格不会向下移动?

将表格固定在给定的页面上,以便在其上方添加文本时表格不会向下移动?

我整天查看了所有可能重复的问题,但仍然找不到我的问题的明确解决方案。

我正在考虑将写在 中的表格固定tabular在给定的页面上。我查看了所有说明,但一无所获。我从他们那里得到的只是使用floatplaceins包来浮动表格或图形。我这样做了,并且我可以将表格与文本分开,但是我遇到了一个问题:我想在表格前输入一些文本,当我输入时,比如说在一页上,文本下方的表格会向下移动到新页面,例如,在输入文本之前,此表格的页码是第 3 页,在输入文本之后,它可能会转到第 5 页。我不想看到这个。我想要的是将此表格保留在特定页面,比如说第 3 页,并且无论我在该表格前添加多少文本,它始终停留在第 3 页,这意味着如果我的文本量大于两页,文本将自动跳转到第 4 页,而不是开始占据第 3 页并将表格下推到下一页。

我之所以要这样做,是因为有时我必须返回文本并添加或删除一些单词。我最终会发现表格或图形上方的页面只填充了几个句子,而整个空间都是空的,而且由于表格的大小,表格已经旋转到另一页sidewaytable,表格必须占用单独的页面,即使只用几个句子也无法填满页面。

总而言之,我想将表格固定在给定的页面上,而不是简单地将其浮动在随机页面上并根据其上方的文本而变化。

答案1

此方法将指定表格设置在指定页面的顶部,并且似乎可以与周围的浮动元素配合使用。它使用钩子everypage将表格添加到指定页面。已编辑以使该过程自动化。已重新编辑以修复当另一个表格出现在同一页面上时导致编号错误的情况。

之后\begin{document},你应该调用

\fixedtable{page number}{table content, including \captionof{table}{}, as necessary}

您可以尝试该设置\aftertablegap以及取消注释其他表行以查看结果是否表现良好。

\documentclass{article}
\usepackage{everypage}
\usepackage{lipsum}
\usepackage{caption}
\newlength\tableheight
\newlength\Xheaderheight
\setlength{\Xheaderheight}{\dimexpr\topmargin+\headsep+\headheight\relax}
\def\aftertablegap{12pt}% AFTER TABLE GAP

\newcommand\fixedtable[2]{%
  \global\newcommand\myfixedtable{%
    \begin{minipage}[t]{\textwidth}%
      \vspace{\Xheaderheight}%
      #2%
    \end{minipage}%
  }
  \setbox0=\hbox{\addtocounter{table}{-1}\myfixedtable}%
  \global\setlength\tableheight{\dp0}
  \AddEverypageHook{%
    \ifnum\thepage=#1%
      \edef\savethetable{\thetable}%
      \setcounter{table}{\fixedtableno}%
      \hspace{\oddsidemargin}%
      \myfixedtable%
      \vspace{\dimexpr-\Xheaderheight+\aftertablegap}%
      \global\addtolength\textheight{\dimexpr%
        -\Xheaderheight+\tableheight+\aftertablegap}%
      \setcounter{table}{\savethetable}%
    \fi%
  }
  \AddEverypageHook{%
    \ifnum\thepage=\numexpr#1-1\relax%
      \xdef\fixedtableno{\thetable}%
      \refstepcounter{table}%
      \global\addtolength\textheight{\dimexpr%
        +\Xheaderheight-\tableheight-\aftertablegap}
    \fi%
  }
}

\begin{document}
\fixedtable{3}{%
    \centering\captionof{table}{This is my caption}
    \begin{tabular}{|c|c|} 
      \hline This & is\\ \hline a & test\\ \hline A & B\\ \hline 
      C & D\\ \hline
%      C & D\\ \hline
%      C & D\\ \hline
%      C & D\\ \hline
%      C & D\\ \hline
%      C & D\\ \hline
%      C & D\\ \hline
    \end{tabular}%
}

\lipsum[1-8]
\begin{table}[ht]
  \caption{My table}
  \centering\rule{1in}{.5in}
\end{table}
\lipsum[9-12]
\begin{table}[ht]
  \caption{My table}
  \centering\rule{1in}{.5in}
\end{table}
\begin{table}[ht]
  \caption{My table}
  \centering\rule{1in}{.5in}
\end{table}
\lipsum[13-15]
\begin{table}[ht]
  \caption{My table}
  \centering\rule{1in}{.5in}
\end{table}
\lipsum[15-35]
\end{document}

在此处输入图片描述

答案2

实验性;正在进行中;与常规浮选混合时不稳定

哦,是的,这是印刷工的噩梦!我正在为这项任务准备一个通用解决方案,我想我已经找到了解决方案(经过十年的尝试,我稍后会告诉你我的故事),但我还没有完全准备好发布/发布它。我现在可以为您提供这个解决方案,但有几个已知问题。

我使用 header 将排版材料传递到特定页面 ( \ifnum\thepage),并使用包\afterpage中的命令afterpage将其从 header 放置到文档正文中。因此,我必须从所需页面中减去 2 页,正如您将在示例中看到的那样。

已知的限制和问题如下:

  • 处理第一页时不能使用这种方法。我们需要两页来将材料从页眉浮动回文档。如果想要的页面是第 1 页,我们需要直接放置它,而不需要 header+afterpage。它会流到第 2 页甚至第 3 页。
  • 当只有两页时,它也无法工作,在这种情况下,\afterpage必须使用无页眉。否则,它可能会流到第 3 页。
  • 如果文档最后一页(即所需页面)上没有足够的排版材料(段落),则浮动材料将流到第 +1 页。您可以在使用 注释掉行时看到这一点\input{table2.tex}。另一个表格将流到第 6 页,而不是第 5 页。我们必须手动添加一个段落,因此请取消注释\par\,该表格将流到所需的第 5 页。
  • 我们可以将浮动主体(此处为顶部、底部,甚至页面)置于此浮动程序中,但排版变得不稳定,因为它依赖于文档主体中的其他排版材料。如果我们更改[!b][!p]原始示例,则两个浮动主体都会流向不需要的第 6 页甚至第 7 页。

absolute floating我的建议是,在这种情况下不要使用通用浮动。只需使用\begin{tabular}和,\begin{figure}无需其他参数。它将放置在页面顶部,因此无需指定h或,指定相当稳定(这取决于文档的其他部分),但使用在许多情况下不稳定。Hbp

下面的例子中有两个浮动表,分别流向第 3 页和第 5 页。第一个浮动表将成为第 5 页上的真实表 2(它由计数外部控制\mypage),第二个浮动表将成为第 3 页上的真实表 1(它由页眉直接控制\ifnum\thepage=1,它是第 3 页减 2 页)。

%! *latex mal-floating-table.tex
\documentclass[a4paper]{article}
\usepackage{afterpage}
\usepackage{kantlipsum}
\usepackage{xcolor}
\usepackage{fancyhdr}
\pagestyle{fancy}
\usepackage{filecontents}
%
\begin{filecontents*}{table1.tex}
\begin{table}[!ht]
\centering
\begin{tabular}{|c|c|c|}
  a&B&Cd\\
  e&F&Gh\\
  i&j&Kl\\
\end{tabular}
\caption{\color{blue}\bfseries My first floating table is becoming table~\ref{table1} on page~\pageref{table1}}\label{table1}
\end{table}%
\end{filecontents*}
%
\begin{filecontents*}{table2.tex}
\begin{table}[!b] % [!b] (working well) or [p] (unstable)
\centering
\begin{tabular}{|c|c|c|}
  a&B&Cd\\
  e&F&Gh\\
  i&j&Kl\\
\end{tabular}
\caption{\color{red}\bfseries My second floating table is becoming  table~\ref{table2} on page~\pageref{table2}}\label{table2}
\end{table}%
\end{filecontents*}

\newcount\mypage \mypage=5
\advance\mypage by -2% Wanted page minus 2...
\fancyhead[L]{%
%\typeout{mypage: \the\mypage}% Which page it is?
\ifnum\thepage=\mypage
  \afterpage{%
  \input{table1.tex}%
  }% End of \afterpage...
\fi% End of including table 1.
\ifnum\thepage=1% --> page 3
  \afterpage{%
  \input{table2.tex}% To be commented out...
  }% End of \afterpage...
\fi% End of including table 2.
}% End of \fancyhead...

\begin{document}
\kant[1-15]
%\par\ 
\end{document}

姆韦

相关内容