表格内的子表格/动态调整表格列宽

表格内的子表格/动态调整表格列宽

我已经摆弄下表一段时间了,遇到了一些小问题。

\documentclass{article}
\usepackage{threeparttable}
\usepackage{multirow}
\begin{document}

\begin{table}[!ht]
  \caption{
  \textbf{Pheno file format}}
  \begin{threeparttable}
  \begin{tabular}{|l|l|c|}\hline\hline
\textbf{Pheno file headers} &   \multicolumn{2}{|c|}{\textbf{Notes}} \\ \hline\hline
sex                &   \multicolumn{2}{|l|}{The sex column is restricted to the following values.} \\ \hline\hline
                   &   \multicolumn{1}{|l|}{Sex}    & \multicolumn{1}{p{1cm}|}{Value} \\ \hline\hline
                   &   Male                         & \multicolumn{1}{p{1cm}|}{1}                               \\ \hline
                   &   \multicolumn{1}{|l|}{Female} & \multicolumn{1}{p{1cm}|}{2}    \\ \hline
                   &   \multicolumn{1}{|l|}{Missing}& \multicolumn{1}{|p{1cm}|}{-1}   \\ \hline
studyid            &   \multicolumn{2}{|l|}{\multirow{1}{*}{Description of the study the data belongs to - eg. 'Hapmap6.0'.}} \\
                   &   \multicolumn{2}{|l|}{If studyid is not given, 'unknown' is used.} \\ \hline
studyid            &   \multicolumn{2}{p{\dimexpr\textwidth-2\tabcolsep\relax}|}{Description of the study the data belongs to - eg. 'Hapmap6.0'.
                                       If studyid is not given, 'unknown' is used.} \\ \hline
%\cline{3-4}
  \end{tabular}
  \end{threeparttable}
\end{table}

\end{document}

问题:

  1. 因此,我有点像在表格中嵌入子表格。我最初将它作为单独的表格,但后来我将其插入主表格中。它是带有标题Sex和的表格Value。如果我可以调整第三个边距的宽度,使其仅达到必要的宽度,并且如果该表格左侧的所有行(从下方的双线开始)Sex/Value都不存在,那就太好了。另一个问题是第三列中的数字没有左对齐。所以我希望它看起来像

     -----------------------------------------------------------------------------
    | Pheno file headers  |                    Notes                             |
    ==============================================================================
    | sex                 | The sex column is restricted to the following values |
    ==============================================================================
                          | Sex    |  Value |
                          | Male   |    1   |
                          | Female |    2   |
                          | Missing|   -1   |
    ------------------------------------------------------------------------------
    | Studyid             | Some stuff                                           |
    ------------------------------------------------------------------------------
    

    这能以不太复杂的方式完成吗?

  2. 我有两个单元格示例(以 studyid 开头),横跨两行两列。我想我更喜欢底部的那个。这是最好的做法吗?它肯定比上面的那个简单。

答案1

也许是一个建议,但这是当前设置的替代方案。我已经使用tabularx允许可变宽度的tabular列(通过列类型X),使用环境填充到某个固定值tabularx。此外,booktabs垂直方向提供更整洁的表格分布,同时实际上限制了垂直规则的使用(由于规则定义)。无论哪种方式,表格布局都有助于列对齐,从而消除了使用垂直规则的要求。

内部tabular已调整为提供自然宽度的水平对齐,就像您的 ASCII 艺术解释所建议的那样。

在此处输入图片描述

\documentclass{article}
\usepackage{threeparttable}% http://ctan.org/pkg/threeparttable
\usepackage{booktabs}% http://ctan.org/pkg/booktabs
\usepackage{tabularx}% http://ctan.org/pkg/tabularx
\usepackage[labelfont=normal,font=bf]{caption}%http://ctan.org/pkg/caption
\captionsetup[table]{skip=0pt}

\begin{document}

\begin{table}[!ht]
  \caption{Pheno file format}
  \begin{threeparttable}
    \begin{tabularx}{\textwidth}{lX}
      \toprule
      \textbf{Pheno file headers} & \multicolumn{1}{c}{\textbf{Notes}} \\
      \midrule
      sex                         & The sex column is restricted to the following values: \\[\jot]
                                  & \begin{tabular}{lc}
                                      Sex     & Value \\ \midrule
                                      Male    & $\phantom{-}1$ \\
                                      Female  & $\phantom{-}2$ \\
                                      Missing & $-1$
                                    \end{tabular} \\[\jot]
      \midrule
      studyid                     & Description of the study the data belongs to - eg. \texttt{Hapmap6.0}. \\
                                  & If studyid is not given, \texttt{unknown} is used. \\
      \midrule
      studyid                     & Description of the study the data belongs to - eg. \texttt{Hapmap6.0}. \\
                                  & If studyid is not given, \texttt{unknown} is used. \\
      \bottomrule
    \end{tabularx}
  \end{threeparttable}
\end{table}

\end{document}

使用\phantom{-}会留下正确数量的水平(和垂直)空间,而-无需实际排版。这允许对齐嵌套中的条目tabular,同时使其居中。

\jot的长度为3pt。将其与 一起使用\\,例如\\[\jot],将tabular行分隔符垂直向下移动3pt。使用长度寄存器(如\jot)比明确使用 更好\\[3pt],因为您可以在一个位置修改\jot(例如使用\setlength{\jot}{5pt}),并且它将在使用它的任何地方生效。重新定义,而不必到处手动修改3pt垂直跳跃。

可以对嵌套/内部的布局进行更改tabular(例如,如果您希望它在外部水平居中tabularx,尽管现有的对齐方式似乎足够了)。

最后,没有必要使用multirow再说了,原因更明显。在我看来,输入代码更简单,更容易理解。

相关内容