table
我有一个由、ThreePartTable
和构成的(水平)大表格longtabu
。我希望它适合一页。为此,我尝试使用 增加边距adjustwidth
,然后使用 扩展表格的长度1.1\textwidth
,请参阅下面的代码示例。
但是,所有调整似乎都应用于右边距,因此例如{adjustwidth}{-1cm}{}
产生与 相同的输出adjustwidth{}{-1cm}
。类似地,{adjustwidth}{-1cm}{-1cm}
和{adjustwidth}{-2cm}{}
都{adjustwidth}{}{-2cm}
生成相同的输出,所有边距减少都在页面右侧进行,因此表格的原始左对齐保持不变。
底线是我想增加边距以允许表格适合一页,同时保持其在页面居中。有人能指出为什么下面的代码没有实现这一点吗?
代码示例:
\documentclass{article}
\usepackage{booktabs}
\usepackage{chngpage}
\usepackage{float}
\usepackage{longtable}
\usepackage{tabu}
\usepackage{threeparttablex}
\begin{document}
\begin{adjustwidth}{-1cm}{-1cm}
\begin{table}[H]
\scriptsize
\centering
\begin{ThreePartTable}
\begin{longtabu} to 1.1\textwidth
{X[0.5,C]
X[1.75,L]
X[1.2,L]
X[1.175,L]
X[2.325,L]
X[0.75,C]
X[0.9,C]}
\rowfont[c]{\bfseries}
Field1
& Field2
& Field3
& Field4
& Field5
& Field6\tnote{1}
& Field7\tnote{2,3}
\\
\toprule
\endhead
\bottomrule
\endfoot
\bottomrule
\\
\endlastfoot
Field1.Value1
& Field2.Value1
& Field3.Value1
& Field4.Value1
& Field5.Value1
& Field6.Value1
& Field7.Value1
\\
[...]
\bottomrule
\end{longtabu}
\begin{tablenotes}
\item[1] FootNote1
\item[2] FootNote2
\item[3] Footnote3
\end{tablenotes}
\end{ThreePartTable}
\captionsetup{font=normal}
\caption{Caption1}
\label{tab:table_1}
\end{table}
\end{adjustwidth}
\end{document}
答案1
\adjustwidth
作品里面表格环境。adjustwidth
环境会更改环境内的文本块/边距,但table
它是浮动的,会移动到已更改的边距之外(不知道它们)。以下是您的 MWE 的修改和扩展(但对我来说有问题longtabu
),显示adjustwidth
内部table
确实有效。
% adjustwidthprob2.tex SE 517141 adjustwidth & tables
\documentclass{article}
\usepackage{lipsum}
\usepackage{booktabs}
\usepackage{chngpage}
\usepackage{float}
\usepackage{longtable}
\usepackage{tabu}
\usepackage{threeparttablex}
\begin{document}
\lipsum[1]
%\begin{adjustwidth}{-1cm}{-1cm}
\begin{table}[H]
\begin{adjustwidth}{-1cm}{-1cm}
\scriptsize
\centering
\begin{ThreePartTable}
\begin{longtabu} to 1.1\textwidth
{X[0.5,C]
X[1.75,L]
X[1.2,L]
X[1.175,L]
X[2.325,L]
X[0.75,C]
X[0.9,C]}
\rowfont[c]{\bfseries}
Field1
& Field2
& Field3
& Field4
& Field5
& Field6\tnote{1}
& Field7\tnote{2,3}
\\
\toprule
\endhead
\bottomrule
\endfoot
\bottomrule
\\
\endlastfoot
Field1.Value1
& Field2.Value1
& Field3.Value1
& Field4.Value1
& Field5.Value1
& Field6.Value1
& Field7.Value1
\\
[...]
\bottomrule
\end{longtabu}
\begin{tablenotes}
\item[1] FootNote1
\item[2] FootNote2
\item[3] Footnote3
\end{tablenotes}
\end{ThreePartTable}
\captionsetup{font=normal}
\caption{Caption1}
\label{tab:table_1}
\end{adjustwidth}
\end{table}
%\end{adjustwidth}
\lipsum[2]
\begin{table}
\begin{adjustwidth}{-1cm}{-1cm}
\centering
Start of table. \lipsum[1]
\caption{An odd table}
\end{adjustwidth}
\end{table}
\end{document}
答案2
一种解决方法是改用fullwidth
包。还请注意,由于包更改了\textwidth
,因此您应该不是将表格设置为有宽度1.1\textwidth
但保持原样,\textwidth
这样它就不会进一步溢出加宽的框。
\documentclass{article}
\usepackage{showframe}
\usepackage{booktabs}
\usepackage{float}
\usepackage{fullwidth}
\usepackage{longtable}
\usepackage{tabu}
\usepackage{threeparttablex}
\usepackage{caption}
\begin{document}
\begin{fullwidth}[leftmargin=-2cm, rightmargin=-2cm, width=\linewidth+4cm]
\begin{table}[H]
\scriptsize
\begin{ThreePartTable}
\begin{longtabu} to \textwidth
{X[0.5,C]
X[1.75,L]
X[1.2,L]
X[1.175,L]
X[2.325,L]
X[0.75,C]
X[0.9,C]}
\rowfont[c]{\bfseries}
Field1
& Field2
& Field3
& Field4
& Field5
& Field6\tnote{1}
& Field7\tnote{2,3}
\\
\toprule
\endhead
\bottomrule
\endfoot
\bottomrule
\\
\endlastfoot
Field1.Value1
& Field2.Value1
& Field3.Value1
& Field4.Value1
& Field5.Value1
& Field6.Value1
& Field7.Value1
\\
\bottomrule
\end{longtabu}
\begin{tablenotes}
\item[1] FootNote1
\item[2] FootNote2
\item[3] Footnote3
\end{tablenotes}
\end{ThreePartTable}
\captionsetup{font=normal}
\caption{Caption1}
\label{tab:table_1}
\end{table}
\end{fullwidth}
\end{document}
输出如下所示(带框架)
答案3
- 如果您喜欢在一页上有表格,那么您不需要
longtable
(它不应该在table
环境内) adjustwidth
应该在table
浮动环境中- 我不会使用
tabu
这个包。它没有得到维护,而且尽管新版article
文档类修复了一些问题,但它仍然有缺陷 - 列宽调整的总和应为整数(即 7,在下面的 MWE 中,我认为所有列的宽度相等。例如,您可以更改宽度
>{\hsize=0.5\hsize}C
您应该遵守规则,即列宽调整的总和应为整数(即 7,因为您有 7 列)
梅威瑟:
\documentclass{article}
\usepackage{ragged2e} % <---
\usepackage{booktabs,
tabularx, % <---
threeparttablex}
\newcolumntype{C}{>{\Centering\hspace{0pt}}X} % <---
\newcolumntype{L}{>{\RaggedRight\hspace{0pt}}X} % <---
\newcolumntype{R}{>{\RaggedLeft\hspace{0pt}}X} % <---
\usepackage[strict]{chngpage} % <---
\usepackage{caption} % <---
%---------------- show page layout. don't use in a real document!
\usepackage{showframe}
\renewcommand\ShowFrameLinethickness{0.15pt}
\renewcommand*\ShowFrameColor{\color{red}}
%---------------------------------------------------------------%
\usepackage{lipsum}
\begin{document}
\lipsum[66]
\begin{table}[ht]
\scriptsize
\centering
\begin{adjustwidth}{-1cm}{-3cm}
\begin{ThreePartTable}
\begin{tabularx}{\linewidth}{@{} C LLLL CC @{}}
\toprule
\textbf{Field1} & \textbf{Field2} & \textbf{Field3} & \textbf{Field4} & \textbf{Field5}
& \textbf{Field}\tnote{1} & \textbf{Field7}\tnote{2,3} \\
\midrule
Field1.Value1
& Field2.Value1
& Field3.Value1
& Field4.Value1
& Field5.Value1
& Field6.Value1
& Field7.Value1 \\
\bottomrule
\end{tabularx}
\begin{tablenotes}[flushleft,para]\footnotesize
\item[1] FootNote1
\item[2] FootNote2
\item[3] Footnote3
\end{tablenotes}
\end{ThreePartTable}
\captionsetup{font=normal}
\caption{Caption1}
\label{tab:table_1}
\end{adjustwidth}
\end{table}
\lipsum[67]
\end{document}
(红线表示页面布局)