背景
我有一组可以自动生成的表(具体来说是一组由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}
。