我有以下代码:
\documentclass[a4paper,12pt,fleqn,twoside,openright]{book}
\usepackage{caption}
\begin{document}
\begin{table}
\centering
\caption{table}
\label{table:table}
\begin{tabular}{c|c|c}
\textbf{1} & \textbf{2} & \textbf{3} \\ \hline \hline
A & blahblahblahblahblahblahblah blahblahblahblahblahblahblahblah & blahblahblahblah blahblahblahblahblahblah \\ \hline
B & b & b \\ \hline
C & c & c
\end{tabular}
\end{table}
\end{document}
表格未包含在页边距之间。我希望它自动适应页面宽度,或者,我希望能够手动固定每列的宽度,这样每个单元格中的文本在必要时可以填充几行单元格。
答案1
欢迎来到 TeX.SE!
您要做的事情通常可以通过tabularx
包来实现。它提供了一个X
采用自动计算宽度的列。每列的宽度X
都是根据环境参数计算得出的tabularx
,减去其他非列的空间预留X
,然后在X
列之间平均分配。您可以使用列说明符前的语法进一步修改X
列>
,例如通过将列居中:>{\centering}X
。请注意,如果最后一列也以这种方式修改,则需要包含\arraybackslash
已解释的原因,例如,这里,或在tabularx
手册中。
booktabs
我还擅自装载了包并插入它\midrule
以替换原始表中的垂直条。
\documentclass[a4paper,12pt,fleqn,twoside,openright]{book}
\usepackage{caption}
\usepackage{tabularx,booktabs}
\begin{document}
\begin{table}
\centering
\caption{table}
\label{table:table}
\begin{tabularx}{\textwidth}{>{\centering}X>{\centering}X>{\centering\arraybackslash}X}
\toprule
\textbf{1} & \textbf{2} & \textbf{3} \\ \midrule
A & A very long line that automatically breaks & Somtimes it can be a good idea to consider having less characters in a table cell if at all possible\\
B & b & b \\
C & c & c \\
\bottomrule
\end{tabularx}
\end{table}
\end{document}
作为进一步的修改,您的列规范也可能看起来像:
\begin{tabularx}{\textwidth}{l >{\centering}X>{\centering\arraybackslash}X}
因为第一列不包含任何多行文本。在这种情况下,两列的宽度X
将是
(\textwidth minus 6\tabcolsep minus (width of first l column)) divided by 2
如果你希望其中一列有固定的宽度,你可以使用通常的方法p{width}
,例如
\begin{tabularx}{\textwidth}{p{1cm} >{\centering}X>{\centering\arraybackslash}X}
其余列的宽度X
将根据剩余空间进行更新。
答案2
考虑使用 p{0.4\textwidth} 选项,而不是简单的 |c|。您可能还会发现booktab 包很有帮助。您的桌子会看起来更漂亮。
\documentclass[a4paper,12pt,fleqn,twoside,openright]{book}
\usepackage{caption}
\begin{document}
\begin{table}
\centering
\caption{table}
\label{table:table}
\begin{tabular}{c|p{0.4\textwidth}|p{0.4\textwidth}}
\textbf{1} & \textbf{2} & \textbf{3} \\ \hline \hline
A & blahblahblahblahblahblahblah blahblahblahblahblahblahblahblah & blahblahblahblah blahblahblahblahblahblah \\ \hline
B & b & b \\ \hline
C & c & c
\end{tabular}
\end{table}
\end{document}
答案3
tabulary
类似于tabularx
,但会尝试垂直平衡单元格,也就是说,包含更多文本的单元格将自动变宽。您也可以考虑使用booktabs
以获得更美观的外观。
\documentclass[a4paper,12pt,fleqn,twoside,openright]{book}
\usepackage{caption,tabulary}
\begin{document}
\begin{table}
\centering
\caption{table}
\label{table:table}
\begin{tabulary}{\textwidth}{c|C|C}
\textbf{1} & \textbf{2} & \textbf{3} \\ \hline \hline
A & blahbla hbl ahbl ahbl ahb lahblah bla hblahb lahb la hblah blahb lahb lah & blah bla hblah blah bla hbla h blah blahbl ahblah \\ \hline
B & b & b \\ \hline
C & c & c
\end{tabulary}
\end{table}
\end{document}