不久前,@robintw 问了一个实际问题: 将表格第一行全部设为粗体
它使用数组包巧妙地将格式化代码注入标题行列中。
巧妙的表格行格式解决方案
\usepackage{array}
\newcolumntype{$}{>{\global\let\currentrowstyle\relax}} % Always set currentrowstyle to \relax in case no \rowstyle is used
\newcolumntype{^}{>{\currentrowstyle}} % set \currentrowstyle to \bfseries or whatever (>{\bfseries}c)
\newcommand{\rowstyle}[1]{\gdef\currentrowstyle{#1}% set global definition for \currentrowstyle
#1\ignorespaces
}
有问题的代码
我希望看到多列和多行支持。我尝试了以下基于https://tex.stackexchange.com/a/4816/13552,但不起作用。
\documentclass{article}
\usepackage{array}
\newcolumntype{$}{>{\global\let\currentrowstyle\relax}}
\newcolumntype{^}{>{\currentrowstyle}}
\newcommand{\rowstyle}[1]{\gdef\currentrowstyle{#1}%
#1\ignorespaces
}
\begin{document}
\begin{tabular}{$l^c^c^r}
\rowstyle{\bfseries}
%\multicolumn{2}{^l}{span2} & \multicolumn{2}{^r}{span2} \\ % Uncomment this to see problem
col1 & col2 & col3 & col4 \\
dat1 & dat2 & dat3 & dat4 \\
\end{tabular}
\end{document}
答案1
$>
该问题与表格第一行中从未使用过列类型有关。
您可以使用以下方法解决此问题:
\multicolumn{2}{$l}{}
对于第一组跨列。但是,问题是事情以错误的顺序完成。\rowstyle{\bfseries}
现在位于第一个单元格的开始之前。为了解决这个问题,您可以将其包含在第一个单元格的规范中
\multicolumn{2}{$l}{\rowstyle{\bfseries}span2}
产生
如果我理解正确的话,这就是预期的结果。
完整代码
\documentclass{article}
\usepackage{array}
\newcolumntype{$}{>{\global\let\currentrowstyle\relax}}
\newcolumntype{^}{>{\currentrowstyle}}
\newcommand{\rowstyle}[1]{\gdef\currentrowstyle{#1}%
#1\ignorespaces
}
\begin{document}
\begin{tabular}{$l^c^c^r}
\multicolumn{2}{$l}{\rowstyle{\bfseries}span2} & \multicolumn{2}{^r}{span2} \\ % Uncomment this to see problem
col1 & col2 & col3 & col4 \\
dat1 & dat2 & dat3 & dat4 \\
\end{tabular}
\end{document}