不久前,@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}