我目前正在自动生成报告,现在正尝试使我的数组具有一致的外观。我目前正在处理需要将页面设置为横向模式的部分,因此我正在使用pdflscape
。此外,为了处理数组中的分页符,我选择了longtable
包,以及booktabs
漂亮的外观。
基本上,我的数组可以包含 3 到 10 列,第二列包含大量文本,其他列几乎不包含任何文本。以下是显示最小和最大列的 MWE。
\documentclass[10pt]{report}
\usepackage{booktabs}
\usepackage{longtable}
\usepackage{pdflscape}
\usepackage{geometry}
\geometry{
a4paper,
left=20mm,
right=20mm,
top=20mm,
bottom=20mm,
}
\pagenumbering{gobble}
\begin{document}
\begin{landscape}
\begin{longtable}{lp{\dimexpr.5\textwidth}p{1.5cm}}
\toprule
C1 & C2 & C3 \\
\midrule
data & data & data \\
\bottomrule
\end{longtable}
\begin{longtable}{lp{\dimexpr.5\textwidth}p{1.5cm}p{1.5cm}p{1.5cm}p{1.5cm}p{1.5cm}p{1.5cm}p{1.5cm}p{1.5cm}}
\toprule
C1 & C2 & C3 & C4 & C5 & C6 & C7 & C8 & C9 & C10 \\
\midrule
data & data & data & data & data & data & data & data & data & data \\
\bottomrule
\end{longtable}
\end{landscape}
\end{document}
我的问题是,无论列数是多少,我希望第一列始终“锚定”在相同的水平填充处(基本上将数组左对齐),并且我的第二列适应文本宽度,如此精美的绘画所示:
显然,第二列包含的内容总是多于“数据”,所以我认为这种选择是合理的。我应该如何让第二列变得那么宽?
答案1
如果固定列的宽度,则可以计算第二列的宽度,只需减去其他列的总宽度,并考虑\tabcolsep
每个单元格两侧的填充。
\documentclass[10pt]{report}
\usepackage{booktabs}
\usepackage{longtable}
\usepackage{pdflscape}
\usepackage{geometry}
\geometry{
a4paper,
left=20mm,
right=20mm,
top=20mm,
bottom=20mm,
}
\pagenumbering{gobble}
\begin{document}
\begin{landscape}
\begin{longtable}{p{1.5cm}p{\dimexpr\columnwidth-1.5cm-(1.5cm)*1-6\tabcolsep\relax}*{1}{p{1.5cm}}}
\toprule
C1 & C2 & C3 \\
\midrule
data & data & data \\
\bottomrule
\end{longtable}
\begin{longtable}{p{1.5cm}p{\dimexpr\columnwidth-1.5cm-(1.5cm)*8-20\tabcolsep\relax}*{8}{p{1.5cm}}}
\toprule
C1 & C2 & C3 & C4 & C5 & C6 & C7 & C8 & C9 & C10 \\
\midrule
data & data & data & data & data & data & data & data & data & data \\
\bottomrule
\end{longtable}
\end{landscape}
\end{document}