賢いテーブル行の書式設定ソリューション

賢いテーブル行の書式設定ソリューション

少し前に、@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}

関連情報