表格中有多列,对齐问题

表格中有多列,对齐问题

以下代码生成一个表:

在此处输入图片描述

\begin{table}[!t]
% increase table row spacing, adjust to taste
\renewcommand{\arraystretch}{1.3}
\caption{An Example of a Table}
\label{table_example}
\centering
\begin{tabular}{|c|c|c|c|c|}
%\toprule
\hline
a & b & c & \multicolumn{2}{c|}{abcdefg fewfewfe}\\
%\midrule
& & & st1 & st2\\

\hline
a         & 1  & 2 &  3 & 4  \\
b         & 1  & 2 &  3 & 4 \\
%\bottomrule
\hline
\end{tabular}
\end{table}

我不知道为什么 st1 和 st2 的列没有正确对齐。当我将“abcdefg fewfewfe”替换为单个单词“abcde”时,对齐会很好。

答案1

如果您需要最后两列具有完全相等的宽度,并且它们恰好被字符串跨越abcdefg fewfewfe,那么您可以按照下面的示例进行操作。

在此处输入图片描述

\documentclass{article}
\usepackage{array}
\newcolumntype{C}[1]{>{\centering\arraybackslash}p{#1}}

\newlength{\mylen}
\settowidth\mylen{abcdefg fewfewfe}
\addtolength\mylen{-2\tabcolsep}
\addtolength\mylen{-\arrayrulewidth}
\setlength\mylen{\dimexpr\mylen/2\relax}

\begin{document}
\begin{table}[!t]
% increase table row spacing, adjust to taste
\renewcommand{\arraystretch}{1.3}
\caption{An Example of a Table}
\label{table_example}
\centering
\begin{tabular}{|c|c|c|C{\mylen}|C{\mylen}|}
%\toprule
\hline
a & b & c & \multicolumn{2}{c|}{abcdefg fewfewfe}\\
%\midrule
& & & st1 & st2\\
\hline
a         & 1  & 2 &  3 & 4  \\
b         & 1  & 2 &  3 & 4 \\
%\bottomrule
\hline
\end{tabular}
\end{table}
\end{document}

2023 年 4 月附录回答@MorganRogers 的后续问题:为了实现您的目标,我建议您替换代码块

\newlength\mylen
\settowidth\mylen{abcdefg fewfewfe}
\addtolength\mylen{-2\tabcolsep}
\addtolength\mylen{-\arrayrulewidth}
\setlength\mylen{\dimexpr\mylen/2\relax}

\newlength\mylen % or some other suitable name
\usepackage{calc}
\newcommand\CalcHalfWidth[2]{\setlength{#1}%
   {(\widthof{#2}-2\tabcolsep-\arrayrulewidth)/2}}

然后发出指令

\CalcHalfWidth{\mylen}{abcdefg fewfewfe}

在您希望设置相关列对的(可用)列宽的位置。当然,您可以自由选择除 之外的其他长度名称\mylen,并且您必须用abcdefg fewfewfe跨越相关列对的字符串替换 。

答案2

Tabular 会自动调整列宽以适应单元格内容。它没有足够的信息来使 st1 和 st2 列相对于多列标题等距分布。它先适应 st1,然后调整 st2 以适应多列标题的其余部分。您的示例不适用于单词标题。删除 abcdefg 和 fewfewfe 之间的空格即可看到相同的行为。

如果您指定两列的宽度相等,那么您就会得到您想要的行为。

\documentclass{article}

% The four lines came from 
% http://tex.stackexchange.com/questions/12703/how-to-create-fixed-width-table-columns-with-text-raggedright-centered-raggedlef
% I changed the m{#1} to p{#1}
\usepackage{array}
\newcolumntype{L}[1]{>{\raggedright\let\newline\\\arraybackslash\hspace{0pt}}p{#1}}
\newcolumntype{C}[1]{>{\centering\let\newline\\\arraybackslash\hspace{0pt}}p{#1}}
\newcolumntype{R}[1]{>{\raggedleft\let\newline\\\arraybackslash\hspace{0pt}}p{#1}}

\begin{document}
\begin{table}
% increase table row spacing, adjust to taste
\renewcommand{\arraystretch}{1.3}
\caption{An Example of a Table}
\label{table_example}
\centering
\begin{tabular}{|c|c|c|C{1cm}|C{1cm}|}
%\toprule
\hline
a & b & c & \multicolumn{2}{c|}{abcdefg fewfewfe}\\
%\midrule
& & & st1 & st2\\

\hline
a         & 1  & 2 &  3 & 4  \\
b         & 1  & 2 &  3 & 4 \\
%\bottomrule
\hline
\end{tabular}
\end{table}\end{document}

在此处输入图片描述

答案3

因为标题 (abcdefg fewfewfe) 比列宽,所以最后一列被加宽了。下面是一个解决方案,您可能会喜欢也可能不喜欢。

\documentclass{article}

\usepackage{minibox}
\begin{document}
\begin{table}[!t]
% increase table row spacing, adjust to taste
\renewcommand{\arraystretch}{1.3}
\caption{An Example of a Table}
\label{table_example}
\centering
\begin{tabular}{|c|c|c|c|c|}
%\toprule
\hline
a & b & c & \multicolumn{2}{c|}{\minibox{abcdefg\\fewfewfe}}\\
%\midrule
& & & st1 & st2\\

\hline
a         & 1  & 2 &  3 & 4  \\
b         & 1  & 2 &  3 & 4 \\
%\bottomrule
\hline
\end{tabular}
\end{table}


\end{document}

相关内容