自动使两个表格列宽相同

自动使两个表格列宽相同

我有一张表格,其中两列 (a) 和 (b) 的总宽度会根据上方图 X 的文本宽度而变化。我怎样才能让 (a) 和 (b) 始终具有相同的宽度?另外,我用红色圈出了一个垂直线未对齐的问题?

在此处输入图片描述

\documentclass[12pt,a4paper]{article}
\usepackage{graphicx}
\usepackage[table,xcdraw]{xcolor}
\renewcommand{\arraystretch}{1.5} 
\begin{document}

\begin{figure}
    \centering
    \includegraphics{example-image-a}
    \caption{Caption}
    \label{fig:my_label}
\end{figure}

\begin{table}
\centering
\begin{tabular}{rc|cc}
\multicolumn{1}{l}{} & \multicolumn{1}{l}{} & \multicolumn{2}{|c}{Figure~\ref{fig:my_label} sub-plot}                                    \\ \hline
Variable             & Unit                 & (a)                          & (b)                          \\ \hline
One          & m             & \cellcolor[HTML]{FFCCC9}Vary & 50                           \\
Two              & kg                    & 0.5                          & \cellcolor[HTML]{FFCCC9}Vary \\
Three           & Hz                   & 1000                        & 1000                        
\end{tabular}
\end{table}

\end{document}

答案1

您需要计算标题的宽度,因为当跨越列的总自然大小不适合多列条目时,多余的空间将进入最后一个跨越列。

仅当您发现不匹配时才这样做:否则您将得到错误的尺寸。

\documentclass[12pt,a4paper]{article}
\usepackage[table,xcdraw]{xcolor}
\usepackage{array}

\renewcommand{\arraystretch}{1.5} 

\newlength{\templen}

\begin{document}

\begin{figure}[htp]
\caption{Just for the number}\label{fig:my_label}
\end{figure}

\begin{table}[htp]
\centering

\settowidth{\templen}{Figure~\ref{fig:my_label} sub-plot}
\setlength{\templen}{\dimexpr(\templen-2\tabcolsep)/2}

\begin{tabular}{ r c | *{2}{>{\centering\arraybackslash}p{\templen}} }
 & & \multicolumn{2}{c}{Figure~\ref{fig:my_label} sub-plot}                   \\
\hline
Variable & Unit & (a)                          & (b)                          \\
\hline
One      & m    & \cellcolor[HTML]{FFCCC9}Vary & 50                           \\
Two      & kg   & 0.5                          & \cellcolor[HTML]{FFCCC9}Vary \\
Three    & Hz   & 1000                         & 1000                        
\end{tabular}
\end{table}

\end{document}

\ref*如果\settowidth您正在加载,请使用hyperref

在此处输入图片描述

您不需要\multicolumn空单元格。错位是由于必须在列(例外:起始规则)。

以下是我排版表格的方式。

\documentclass[12pt,a4paper]{article}
\usepackage[table,xcdraw]{xcolor}
\usepackage{booktabs}

\begin{document}

\begin{figure}[htp]
\caption{Just for the number}\label{fig:my_label}
\end{figure}

\begin{table}[htp]
\centering

\begin{tabular}{ @{} l c c c @{} }
\toprule
\multicolumn{4}{@{}c@{}}{Figure~\ref{fig:my_label} sub-plot} \\
\midrule
Variable & Unit & (a)                          & (b)                          \\
\midrule
One      & m    & \cellcolor[HTML]{FFCCC9}Vary & 50                           \\
Two      & kg   & 0.5                          & \cellcolor[HTML]{FFCCC9}Vary \\
Three    & Hz   & 1000                         & 1000                         \\
\bottomrule
\end{tabular}
\end{table}

\end{document}

但可能第一行的文本应该放在表格的标题中。

在此处输入图片描述

顺便说一句,您不需要将图形和表格放在不同的浮动中:atabular完全可以放在figure环境中。类似下面的内容可能会有用。

\documentclass[12pt,a4paper]{article}
\usepackage[table,xcdraw]{xcolor}
\usepackage{booktabs}
\usepackage{graphicx}

\begin{document}

\begin{figure}[htp]
\centering

\hspace*{\fill}%
\includegraphics[width=0.5\textwidth]{example-image-duck}%
\hspace*{\fill}%
\begin{tabular}[b]{ @{} l c c c @{} }
\toprule
Variable & Unit & (a)                          & (b)                          \\
\midrule
One      & m    & \cellcolor[HTML]{FFCCC9}Vary & 50                           \\
Two      & kg   & 0.5                          & \cellcolor[HTML]{FFCCC9}Vary \\
Three    & Hz   & 1000                         & 1000                         \\
\bottomrule
\end{tabular}%
\hspace*{\fill}

\caption{This is the image of a duck, with data next to it.}\label{fig:my_label}

\end{figure}

\end{document}

在此处输入图片描述

答案2

要使最后两列自动占据相同宽度,请使用中X的列规范tabularx。要进一步使其内容居中,只需X通过添加进行修改>{\centering\arraybackslash}X

\documentclass[12pt,a4paper]{article}
\usepackage{graphicx,tabularx}
\usepackage[table,xcdraw]{xcolor}
\renewcommand{\arraystretch}{1.5} 
\begin{document}

\begin{figure}
    \centering
    \includegraphics{example-image-a}
    \caption{Caption}
    \label{fig:my_label}
\end{figure}

\begin{table}
\centering
\begin{tabularx}{.6\linewidth}{rc| *{2}{>{\centering\arraybackslash}X} }
\multicolumn{1}{l}{} & \multicolumn{1}{l|}{} &   \multicolumn{2}{c}{Figure~\ref{fig:my_label} sub-plot}    \\ \hline
            Variable &         Unit          & (a)                          & (b)                          \\ \hline
                 One &           m           & \cellcolor[HTML]{FFCCC9}Vary & 50                           \\
                 Two &          kg           & 0.5                          & \cellcolor[HTML]{FFCCC9}Vary \\
               Three &          Hz           & 1000                         & 1000
\end{tabularx}
\end{table}

\end{document}

在此处输入图片描述

答案3

在此处输入图片描述

自动完成(在我看来)太复杂了,因为它取决于单元格的内容。这意味着,您需要测量所有内容并从中选择最宽的,然后采用所有列的宽度或确定表格宽度并使用tabularx表格环境。

更简单的是估计最宽单元格的宽度(通过计算字符数),然后在p{...}列类型中使用此宽度进行相应修改:

\documentclass[12pt,a4paper]{article}
\usepackage{graphicx}
\usepackage[table,xcdraw]{xcolor}
\renewcommand{\arraystretch}{1.5}

\begin{document}
    \begin{figure}
\centering
\includegraphics{example-image-duck}
\caption{Caption}
\label{fig:my_label}
    \end{figure}

    \begin{table}[htb]
\centering
\begin{tabular}{>{\raggedleft}p{3em}
                >{\centering}p{3em} |
           *{2}{>{\centering\arraybackslash}p{3em}}
                }
\multicolumn{2}{l|}{}   & \multicolumn{2}{c}{Figure~\ref{fig:my_label} sub-plot}        \\ \hline
Variable    & Unit      & (a)                           & (b)                           \\ \hline
One         & m         & \cellcolor[HTML]{FFCCC9}Vary  & 50                            \\
Two         & kg        & 0.5                           & \cellcolor[HTML]{FFCCC9}Vary  \\
Three       & Hz        & 1000                          & 1000
\end{tabular}
    \end{table}
\end{document}

相关内容