我有一张表格,其中两列 (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}