这是我的代码:
\documentclass[12pt,a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage{graphicx}
\usepackage{lipsum}
\usepackage{placeins}
\clubpenalty=10000
\widowpenalty=10000
\begin{document}
\section{First}
\lipsum[1-3]
\section{Second}
\FloatBarrier
\begin{table}[h!]
\caption{Long text Long text Long text Long text Long text Long text Long text Long text Long text Long text Long text Long text Long text Long text Long text Long text Long text Long text Long text Long text Long text Long text Long text!}
\begin{tabular}{|c|c|}
\hline 1&2 \\
\hline 3&4 \\
\hline
\end{tabular}
\end{table}
\FloatBarrier
\FloatBarrier
\begin{table}[h!]
\caption{Short text}
\begin{tabular}{|c|c|}
\hline 1&2 \\
\hline 3&4 \\
\hline
\end{tabular}
\end{table}
\FloatBarrier
Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text.
\end{document}
我的附录中有很多部分,其中包含两个表格和小文本。我不喜欢部分名称单独出现在页面底部而没有表格。我该如何避免这种情况?
附言 \clubpenalty=10000 \widowpenalty=10000
此代码没有帮助。
PSS 我出于很多其他原因需要使用\FloatBarrier
。我不喜欢使用 idea,\newpage
总是看到这个问题。
答案1
如果有待定浮动(如这里所示),那么\floatBarrier
本质上\clearpage
会强制分页,您\section
在该部分的第一个非浮动文本之后和之前有 4 个 !!!! 命令。如果您在那里放置强制分页符,那么这自然会覆盖 LaTeX 在标题后不分页的所有尝试。
使用[h]
很可能会导致您有待处理的不可放置浮动元素,这些浮动元素会漂移到文档末尾。它的意思是不是顶部,不是底部,不浮动页面换句话说,它几乎不允许所有浮动位置,只留下强制浮动\clearpage
或文档结束浮动作为唯一的可能性。为了给自己一个机会,LaTeX 会发出警告
`!h' float specifier changed to `!ht'
但即使ht
是相当严格的,也是htp
更加合理的。
如果你不想让浮动从一个部分浮动到下一个部分,请使用屏障前标题。如果您使用 section 选项,包将自动执行此操作。
\documentclass[12pt,a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage{graphicx}
\usepackage{lipsum}
\usepackage[section]{placeins}
\clubpenalty=10000
\widowpenalty=10000
\begin{document}
\section{First}
\lipsum[1-3]
\section{Second}
\begin{table}[htp]
\caption{Long text Long text Long text Long text Long text Long text Long text Long text Long text Long text Long text Long text Long text Long text Long text Long text Long text Long text Long text Long text Long text Long text Long text!}
\begin{tabular}{|c|c|}
\hline 1&2 \\
\hline 3&4 \\
\hline
\end{tabular}
\end{table}
\begin{table}[htp]
\caption{Short text}
\begin{tabular}{|c|c|}
\hline 1&2 \\
\hline 3&4 \\
\hline
\end{tabular}
\end{table}
Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text.
\end{document}
如果您有很长(甚至很短)的无文本表格序列,最好使用非浮动环境,例如minipage
或使用 float 包H
来使table
表格不浮动。否则,LaTeX 会保留表格,等待文本填满页面,而文本永远不会出现。在这里,我注释掉了最后的文本,以显示它在这种情况下有效。由于非浮动,LaTeX 会尝试将节头与第一个表格保持一致,因此将两者都放在第 2 页上。
\documentclass[12pt,a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage{graphicx}
\usepackage{lipsum}
%\usepackage[section]{placeins}
\usepackage{float}
\begin{document}
\section{First}
\lipsum[1-3]
\section{Second}
\begin{table}[H]
\caption{Long text Long text Long text Long text Long text Long text Long text Long text Long text Long text Long text Long text Long text Long text Long text Long text Long text Long text Long text Long text Long text Long text Long text!}
\begin{tabular}{|c|c|}
\hline 1&2 \\
\hline 3&4 \\
\hline
\end{tabular}
\end{table}
\begin{table}[H]
\caption{Short text}
\begin{tabular}{|c|c|}
\hline 1&2 \\
\hline 3&4 \\
\hline
\end{tabular}
\end{table}
%Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text.
\end{document}
答案2
该titlesec
包有一个 nobottomtitles
选项;它定义了一个\bottomtitlespace
,使得距离底部边距小于该距离的章节标题将移到下一页,而它们应该出现的页面底部会参差不齐。 \bottomtitlespace 的默认值为0.2\textheight
。