我正在构建(使用一些 Python 魔法)一份在同一页面上包含多个表格的报告。每个表格必须具有相同的整体宽度,但它们的列数不同。
通过指定列宽m{Xcm}
,我期望表格的整体宽度相同,只要所有列宽之和相等。
实际上,我的 3 张桌子的宽度不一样,我不知道这是为什么。
以下是 MWE:
\documentclass[]{article}
\usepackage[table]{xcolor}
\usepackage{hyperref}
\usepackage{array}
\begin{document}
\begin{center}
\begin{tabular}[]{|m{1cm} | m{14cm} |} \hline \vspace{4pt} \texttt{Title} &
\vspace{4pt} \texttt{Description} \\[4pt] \hline
\end{tabular}
\begin{tabular}{|m{3cm}|m{3cm}|m{3cm}|m{3cm}|m{3cm}|}\hline
1 & 2 & 3 & 4 & 5 \\
\scriptsize{Minor} &
\scriptsize{Low} &
\scriptsize{High} &
\scriptsize{Medium} &
\scriptsize{Easy} \\ \hline
\end{tabular}
\begin{tabular}{|m{15cm}|} \hline
\vspace{3pt} \textbf{Description:}
\url{https://www.google.com}
\\[3pt] \hline
\vspace{3pt} \parbox[t]{15cm}{ \textbf{More info :}
Long text about something
} \vspace{3pt} \\ \hline
\vspace{3pt} \textbf{Target :}
More text again
\\[3pt] \hline
\end{tabular}
\begin{tabular}{|m{15cm}|} \hline
\textbf{Conclusion :} \\
Conclusion text
\\ \hline
\end{tabular}
\end{center}
\end{document}
所有小桌子总长均为15厘米:
- 1厘米+14厘米
- 5 x 3厘米
- 15厘米
我该怎么做才能让它们都tabular
具有相同的尺寸?
答案1
考虑到tabcolsep
asn arraywidth
s (asDavid Carlisle 在评论中已经提到),你最终会得到以下 MWE 和输出:
\documentclass[]{article}
\usepackage[table]{xcolor}
\usepackage{array}
\usepackage{calc}
\usepackage{hyperref}
\begin{document}
\begin{center}
\begin{tabular}[]{|m{1cm-2\tabcolsep} | m{14cm-2\tabcolsep-\arrayrulewidth} |} \hline \vspace{4pt} \texttt{Title} &
\vspace{4pt} \texttt{Description} \\[4pt] \hline
\end{tabular}
\begin{tabular}{|m{3cm-2\tabcolsep-\arrayrulewidth}|m{3cm-2\tabcolsep-\arrayrulewidth}|m{3cm-2\tabcolsep-\arrayrulewidth}|m{3cm-2\tabcolsep-\arrayrulewidth}|m{3cm-2\tabcolsep}|}\hline
1 & 2 & 3 & 4 & 5 \\
\scriptsize{Minor} &
\scriptsize{Low} &
\scriptsize{High} &
\scriptsize{Medium} &
\scriptsize{Easy} \\ \hline
\end{tabular}
\begin{tabular}{|m{15cm-2\tabcolsep}|} \hline
\vspace{3pt} \textbf{Description:}
\url{https://www.google.com}
\\[3pt] \hline
\vspace{3pt} \parbox[t]{15cm}{ \textbf{More info :}
Long text about something
} \vspace{3pt} \\ \hline
\vspace{3pt} \textbf{Target :}
More text again
\\[3pt] \hline
\end{tabular}
\begin{tabular}{|m{15cm-2\tabcolsep}|} \hline
\textbf{Conclusion :} \\
Conclusion text
\\ \hline
\end{tabular}
\end{center}
\end{document}
但是,这个 MWE 产生的输出存在很多缺陷:首先,表格比文本宽度要宽,这将导致溢出到右边距,并出现一堆框过满警告。此外,“标题”列现在太窄,单词放不下。最后,列声明部分变得更长,可读性更差。
因此我更喜欢tabularx
结合使用cellspace
,如下面的 MWE 和输出所示:
\documentclass[]{article}
\usepackage[table]{xcolor}
\usepackage{array}
\usepackage{tabularx}
\usepackage{cellspace}
\setlength\cellspacetoplimit{4pt}
\setlength\cellspacebottomlimit{4pt}
\usepackage{hyperref}
\begin{document}
\noindent
\begin{tabularx}{\textwidth}{|Sl|S{X}|}
\hline
\texttt{Title} & \texttt{Description} \\
\hline
\end{tabularx}
\noindent
\begin{tabularx}{\textwidth}{|*{5}{X|}}\hline
1 & 2 & 3 & 4 & 5 \\
\scriptsize{Minor} &
\scriptsize{Low} &
\scriptsize{High} &
\scriptsize{Medium} &
\scriptsize{Easy} \\ \hline
\end{tabularx}
\noindent
\begin{tabularx}{\textwidth}{|S{X}|}
\hline
\textbf{Description:} \url{https://www.google.com} \\
\hline
\textbf{More info :} Long text about something \\
\hline
\textbf{Target :} More text again \\
\hline
\end{tabularx}
\noindent
\begin{tabularx}{\textwidth}{|X|}
\hline
\textbf{Conclusion :} \\
Conclusion text \\
\hline
\end{tabularx}
\end{document}