自动表格宽度

自动表格宽度

我有以下代码:

    \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}

在此处输入图片描述

相关内容