当所有表格都在一个地方定义或包含在由 \input 调用的单独文件中时,如何将表格放置在第一个 \autoref 之后?

当所有表格都在一个地方定义或包含在由 \input 调用的单独文件中时,如何将表格放置在第一个 \autoref 之后?

背景

我有一组可以自动生成的表(具体来说是一组由phpmyadmin生成的数据库表描述)。

我想在文档中提及每个表格后将其包含在内。

我认为我了解表格放置命令的工作原理 [htbp],但这些不是问题。

问题

有没有一种简单的方法可以强制在引用之后放置浮动?

例子

这是我所拥有的 MWE

\documentclass[10pt]{article}
\usepackage{hyperref}

\begin{document}
\input{dbtables.tex}
% in practice, all tables appear here

\section{tables}

 \subsection{table1}
  \autoref{tab:table1} is for this.
  % I want Table 1 to appear here

 \subsection{table2}
  \autoref{tab:table2} is for that.
  % I want Table 2 to appear here

\end{document}

内容dbtables.tex可能在哪里

\begin{table}[hb]
\caption{test table 1}
\label{tab:table1}
\begin{tabular}{ l c r }
  1 & 2 & 3 \\
\end{tabular}
\end{table}

\begin{table}[hb]
\caption{test table 2}
\label{tab:table2}
\begin{tabular}{ l c r }
  4 & 5 & 6 \\
\end{tabular}
\end{table}

最后,我想要的结果类似于:

\documentclass[10pt]{article}
\usepackage{hyperref}

\begin{document}
\input{dbtables.tex}

\section{tables}

 \subsection{table1}
  \autoref{tab:table1} is for this.

\begin{table}[hb]
\caption{test table 1}
\label{tab:table1}
\begin{tabular}{ l c r }
  1 & 2 & 3 \\
\end{tabular}
\end{table}

 \subsection{table2}
  \autoref{tab:table2} is for that.

\begin{table}[hb]
\caption{test table 2}
\label{tab:table2}
\begin{tabular}{ l c r }
  4 & 5 & 6 \\
\end{tabular}
\end{table}


\end{document}

除非我想将文件分开保存。

答案1

如果可以dbtables.tex像这样生成表格代码

\mytable{1}{
\begin{table}[hb]
\caption{test table 1}
\label{tab:table1}
\begin{tabular}{ l c r }
  1 & 2 & 3 \\
\end{tabular}
\end{table}
}

\mytable{2}{
\begin{table}[hb]
\caption{test table 2}
\label{tab:table2}
\begin{tabular}{ l c r }
  4 & 5 & 6 \\
\end{tabular}
\end{table}
}

然后你可以定义

\makeatletter
\newcommand{\mytable}[2]{\@namedef{my@table@\romannumeral#1}{#2}}
\newcounter{mytablecnt}
\newcommand{\placetable}{%
  \stepcounter{mytablecnt}\@nameuse{my@table@\roman{mytablecnt}}}
\makeatother

并且您的输入可以是

\begin{document}
\input{dbtables.tex}
% in practice, all tables appear here

\section{tables}

 \subsection{table1}
  \autoref{tab:table1} is for this.
  \placetable

 \subsection{table2}
  \autoref{tab:table2} is for that.
  \placetable

\end{document}

答案2

您可以使用flafter包裹:

\usepackage{flafter}

该软件包是基本 LaTeX 安装的一部分。它负责在引用浮动元素后将其放置。

关于这个主题的其他有用的包是placeins及其命令\FloatBarrier,使用它例如可以避免浮动在小节边界上,以及afterpage,例如使用\afterpage{\clearpage}

相关内容