以下代码生成一个表:
\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}