(注意:我已经在 stackoverflow 上发布了这个问题,因为表格是用 Python 生成的,但这可能是一个错误。一旦我得到答案,我就会从最合适的网站上删除重复的问题)。
我正在做一份报告,其中展示了几个表格,这些表格几乎占了一页,但仍有一些空间可以写一段。我想使用[h]
(或类似的,例如[ht]
)位置说明符允许 LaTeX 管理剩余空间,但是当我更改说明符(从[H]
,这是唯一保持正确行距的说明符)时,行距被压缩,我不明白为什么也不知道如何纠正这个问题。
下面是我正在使用的代码版本(精简版并适合于文章):
\documentclass{article}
\usepackage{setspace} % for custom spacing (spaces)
\setstretch{1.3} % for custom spacing
% Tables
\usepackage{multicol}
\usepackage{multirow}
\usepackage{booktabs}
\usepackage{rotating}
\usepackage{float}
\usepackage{adjustbox}
\usepackage{lipsum}
\AtBeginEnvironment{tabular}{\footnotesize}
\begin{document}
Test here
\begin{table}[H]
\centering
\caption{My table with \textit{H} option}
%\begin{adjustbox}{max width=\textwidth}
\begin{tabular}{@{}llrrrrr@{}}
\toprule
{\textbf{Dataset}} & {\textbf{Model}} & {\textbf{F-1}} & {\textbf{F-2}} & {\textbf{F-3}} & {\textbf{F-4}} & {\textbf{F-5}}\\
\midrule
\multirow[c]{8}{*}{\textit{Dataset1}} & Model0 & 0.805 & 0.800 & 0.840 & 0.817 & 0.853 \\
& Model1 & 0.839 & 0.813 & 0.855 & 0.879 & 0.822 \\
& Model2 & 0.840 & 0.811 & 0.855 & 0.880 & 0.825 \\
& Model3 & 0.845 & 0.812 & 0.849 & 0.806 & 0.843 \\
& Model4 & 0.846 & 0.814 & 0.850 & 0.808 & 0.844 \\
\cline{2-7}
& Model5 & 0.840 & 0.817 & 0.857 & 0.879 & 0.818 \\
& Model6 & 0.807 & 0.891 & 0.835 & 0.816 & 0.857 \\
& Model7 & 0.828 & 0.803 & 0.844 & 0.889 & 0.828 \\
\midrule
\multirow[c]{8}{*}{\textit{Dataset2}} & Model0 & 0.448 & 0.417 & 0.659 & 0.376 & 0.477 \\
& Model1 & 0.488 & 0.424 & 0.682 & 0.412 & 0.432 \\
& Model2 & 0.493 & 0.424 & 0.682 & 0.411 & 0.430 \\
& Model3 & 0.637 & 0.487 & 0.724 & 0.467 & 0.703 \\
& Model4 & 0.639 & 0.483 & 0.724 & 0.463 & 0.702 \\
\cline{2-7}
& Model5 & 0.481 & 0.429 & 0.682 & 0.403 & 0.416 \\
& Model6 & 0.452 & 0.419 & 0.657 & 0.380 & 0.475 \\
& Model7 & 0.495 & 0.467 & 0.701 & 0.437 & 0.664 \\
\midrule
\multirow[c]{8}{*}{\textit{Dataset3}} & Model0 & 0.885 & 0.806 & 0.829 & 0.793 & 0.811 \\
& Model1 & 0.814 & 0.815 & 0.840 & 0.851 & 0.872 \\
& Model2 & 0.814 & 0.812 & 0.837 & 0.851 & 0.872 \\
& Model3 & 0.838 & 0.819 & 0.850 & 0.809 & 0.839 \\
& Model4 & 0.837 & 0.818 & 0.849 & 0.808 & 0.838 \\
\cline{2-7}
& Model5 & 0.810 & 0.816 & 0.840 & 0.843 & 0.863 \\
& Model6 & 0.885 & 0.805 & 0.828 & 0.794 & 0.812 \\
& Model7 & 0.820 & 0.806 & 0.841 & 0.887 & 0.820 \\
\midrule
\multirow[c]{8}{*}{\textit{Dataset4}} & Model0 & 0.811 & 0.850 & 0.834 & 0.732 & 0.806 \\
& Model1 & 0.826 & 0.824 & 0.841 & 0.754 & 0.870 \\
& Model2 & 0.824 & 0.818 & 0.839 & 0.746 & 0.865 \\
& Model3 & 0.845 & 0.796 & 0.838 & 0.791 & 0.833 \\
& Model4 & 0.845 & 0.799 & 0.838 & 0.793 & 0.833 \\
\cline{2-7}
& Model5 & 0.851 & 0.873 & 0.851 & 0.826 & 0.802 \\
& Model6 & 0.810 & 0.842 & 0.826 & 0.730 & 0.804 \\
& Model7 & 0.843 & 0.827 & 0.841 & 0.812 & 0.827 \\
\bottomrule
\end{tabular}
%\end{adjustbox}
\end{table}
\lipsum[1]
\begin{table}[ht]
\centering
\caption{My table with \textit{ht} option}
%\begin{adjustbox}{max width=\textwidth}
\begin{tabular}{@{}llrrrrr@{}}
\toprule
{\textbf{Dataset}} & {\textbf{Model}} & {\textbf{F-1}} & {\textbf{F-2}} & {\textbf{F-3}} & {\textbf{F-4}} & {\textbf{F-5}}\\
\midrule
\multirow[c]{8}{*}{\textit{Dataset1}} & Model0 & 0.805 & 0.800 & 0.840 & 0.817 & 0.853 \\
& Model1 & 0.839 & 0.813 & 0.855 & 0.879 & 0.822 \\
& Model2 & 0.840 & 0.811 & 0.855 & 0.880 & 0.825 \\
& Model3 & 0.845 & 0.812 & 0.849 & 0.806 & 0.843 \\
& Model4 & 0.846 & 0.814 & 0.850 & 0.808 & 0.844 \\
\cline{2-7}
& Model5 & 0.840 & 0.817 & 0.857 & 0.879 & 0.818 \\
& Model6 & 0.807 & 0.891 & 0.835 & 0.816 & 0.857 \\
& Model7 & 0.828 & 0.803 & 0.844 & 0.889 & 0.828 \\
\midrule
\multirow[c]{8}{*}{\textit{Dataset2}} & Model0 & 0.448 & 0.417 & 0.659 & 0.376 & 0.477 \\
& Model1 & 0.488 & 0.424 & 0.682 & 0.412 & 0.432 \\
& Model2 & 0.493 & 0.424 & 0.682 & 0.411 & 0.430 \\
& Model3 & 0.637 & 0.487 & 0.724 & 0.467 & 0.703 \\
& Model4 & 0.639 & 0.483 & 0.724 & 0.463 & 0.702 \\
\cline{2-7}
& Model5 & 0.481 & 0.429 & 0.682 & 0.403 & 0.416 \\
& Model6 & 0.452 & 0.419 & 0.657 & 0.380 & 0.475 \\
& Model7 & 0.495 & 0.467 & 0.701 & 0.437 & 0.664 \\
\midrule
\multirow[c]{8}{*}{\textit{Dataset3}} & Model0 & 0.885 & 0.806 & 0.829 & 0.793 & 0.811 \\
& Model1 & 0.814 & 0.815 & 0.840 & 0.851 & 0.872 \\
& Model2 & 0.814 & 0.812 & 0.837 & 0.851 & 0.872 \\
& Model3 & 0.838 & 0.819 & 0.850 & 0.809 & 0.839 \\
& Model4 & 0.837 & 0.818 & 0.849 & 0.808 & 0.838 \\
\cline{2-7}
& Model5 & 0.810 & 0.816 & 0.840 & 0.843 & 0.863 \\
& Model6 & 0.885 & 0.805 & 0.828 & 0.794 & 0.812 \\
& Model7 & 0.820 & 0.806 & 0.841 & 0.887 & 0.820 \\
\midrule
\multirow[c]{8}{*}{\textit{Dataset4}} & Model0 & 0.811 & 0.850 & 0.834 & 0.732 & 0.806 \\
& Model1 & 0.826 & 0.824 & 0.841 & 0.754 & 0.870 \\
& Model2 & 0.824 & 0.818 & 0.839 & 0.746 & 0.865 \\
& Model3 & 0.845 & 0.796 & 0.838 & 0.791 & 0.833 \\
& Model4 & 0.845 & 0.799 & 0.838 & 0.793 & 0.833 \\
\cline{2-7}
& Model5 & 0.851 & 0.873 & 0.851 & 0.826 & 0.802 \\
& Model6 & 0.810 & 0.842 & 0.826 & 0.730 & 0.804 \\
& Model7 & 0.843 & 0.827 & 0.841 & 0.812 & 0.827 \\
\bottomrule
\end{tabular}
%\end{adjustbox}
\end{table}
\end{document}
下面是一个包含错误尺寸表格的页面图片(使用 制作[ht]
):
如何在不破坏行距的情况下更改表格的位置说明符?
补充说明:我注意到这个问题来自于使用包设置空间(不知何故只适用于H表格位置说明符),但我确实需要使用这个包,否则文本会过于压缩。有人知道我该如何解决这个问题吗?
答案1
精确选择setspace
在浮动中恢复单倍间距。由于[H]
实际上没有浮动,因此不会发生恢复。
您可以通过改回相关命令来“修复”这个问题。
\documentclass{article}
\usepackage{setspace} % for custom spacing (spaces)
\usepackage{multirow}
\usepackage{booktabs}
% cancel the modification by setspace
\makeatletter
\let\@xfloat\latex@xfloat
\makeatother
% all tabulars in footnote size -- are you really sure?
\AtBeginEnvironment{tabular}{\footnotesize}
\setstretch{1.3} % for custom spacing
\begin{document}
\begin{table}[ht]
\centering
\caption{My table with \textit{ht} option}
\begin{tabular}{@{}llrrrrr@{}}
\toprule
{\textbf{Dataset}} & {\textbf{Model}} & {\textbf{F-1}} & {\textbf{F-2}} &
{\textbf{F-3}} & {\textbf{F-4}} & {\textbf{F-5}}\\
\midrule
\multirow[c]{8}{*}{\textit{Dataset1}}
& Model0 & 0.805 & 0.800 & 0.840 & 0.817 & 0.853 \\
& Model1 & 0.839 & 0.813 & 0.855 & 0.879 & 0.822 \\
& Model2 & 0.840 & 0.811 & 0.855 & 0.880 & 0.825 \\
& Model3 & 0.845 & 0.812 & 0.849 & 0.806 & 0.843 \\
& Model4 & 0.846 & 0.814 & 0.850 & 0.808 & 0.844 \\
\cline{2-7}
& Model5 & 0.840 & 0.817 & 0.857 & 0.879 & 0.818 \\
& Model6 & 0.807 & 0.891 & 0.835 & 0.816 & 0.857 \\
& Model7 & 0.828 & 0.803 & 0.844 & 0.889 & 0.828 \\
\midrule
\multirow[c]{8}{*}{\textit{Dataset2}}
& Model0 & 0.448 & 0.417 & 0.659 & 0.376 & 0.477 \\
& Model1 & 0.488 & 0.424 & 0.682 & 0.412 & 0.432 \\
& Model2 & 0.493 & 0.424 & 0.682 & 0.411 & 0.430 \\
& Model3 & 0.637 & 0.487 & 0.724 & 0.467 & 0.703 \\
& Model4 & 0.639 & 0.483 & 0.724 & 0.463 & 0.702 \\
\cline{2-7}
& Model5 & 0.481 & 0.429 & 0.682 & 0.403 & 0.416 \\
& Model6 & 0.452 & 0.419 & 0.657 & 0.380 & 0.475 \\
& Model7 & 0.495 & 0.467 & 0.701 & 0.437 & 0.664 \\
\midrule
\multirow[c]{8}{*}{\textit{Dataset3}}
& Model0 & 0.885 & 0.806 & 0.829 & 0.793 & 0.811 \\
& Model1 & 0.814 & 0.815 & 0.840 & 0.851 & 0.872 \\
& Model2 & 0.814 & 0.812 & 0.837 & 0.851 & 0.872 \\
& Model3 & 0.838 & 0.819 & 0.850 & 0.809 & 0.839 \\
& Model4 & 0.837 & 0.818 & 0.849 & 0.808 & 0.838 \\
\cline{2-7}
& Model5 & 0.810 & 0.816 & 0.840 & 0.843 & 0.863 \\
& Model6 & 0.885 & 0.805 & 0.828 & 0.794 & 0.812 \\
& Model7 & 0.820 & 0.806 & 0.841 & 0.887 & 0.820 \\
\midrule
\multirow[c]{8}{*}{\textit{Dataset4}}
& Model0 & 0.811 & 0.850 & 0.834 & 0.732 & 0.806 \\
& Model1 & 0.826 & 0.824 & 0.841 & 0.754 & 0.870 \\
& Model2 & 0.824 & 0.818 & 0.839 & 0.746 & 0.865 \\
& Model3 & 0.845 & 0.796 & 0.838 & 0.791 & 0.833 \\
& Model4 & 0.845 & 0.799 & 0.838 & 0.793 & 0.833 \\
\cline{2-7}
& Model5 & 0.851 & 0.873 & 0.851 & 0.826 & 0.802 \\
& Model6 & 0.810 & 0.842 & 0.826 & 0.730 & 0.804 \\
& Model7 & 0.843 & 0.827 & 0.841 & 0.812 & 0.827 \\
\bottomrule
\end{tabular}
\end{table}
\end{document}
我认为,并不是很漂亮。
答案2
如果有人遇到同样的问题,我将在这里留下对我有用的解决方案:
根据@egreg的说法,浮点数中的单倍间距被恢复,这消除了对 的精确选择setspace
。由于[H]
并不是真正的浮点数,所以在这种情况下不会发生恢复,但它会发生在其他定位符说明符中。
通过@campa 链接,我找到了一种更简单的“修复”方法来解决此行为,即\setstretch
在每个表格环境中强制执行:
\AtBeginEnvironment{tabular}{\footnotesize} % already in code
\AtBeginEnvironment{tabular}{\setstretch{1.2}} % add this line