5

I've just discovered tabularray and i love it.

The use of keys to parameter my (x300) tables is made easy.

However, I miss something in the documentation.

We can define

\NewTblrTheme{fancy}{  
\DefTblrTemplate{conthead}{default}{[Continued]}  
\SetTblrStyle{firsthead}{font=\bfseries}  
\SetTblrStyle{firstfoot}{fg=blue2}  
\SetTblrStyle{middlefoot}{\itshape}  
\SetTblrStyle{caption-tag}{red2}}

for some features of the tables that can be used by callin [theme = fancy].

But how can I create something (like styles) for other elements

mystyle1/.style = {
        colspec = {rX[c]X[c]X[c]}, 
        width = 0.75\linewidth,
        row{1} = {font=\bfseries},
        column{1} = {font=\bfseries},
        row{odd} = {green!10}, 
        row{even} = {green!20}, 
}
mystyle2/.style = {
        colspec = {rXXX}, 
        width = \linewidth,
        % row{1} = {font=\bfseries},
        % column{1} = {font=\bfseries},
        row{odd} = {blue!10}, 
        row{even} = {blue!20}, 
}

enter image description here

Can I also control inside this style the behavior of \toprule, \midrule and \bottomrule ?

MWE

\documentclass{article}

\usepackage{xcolor} \usepackage{tabularray} \UseTblrLibrary{booktabs}

\begin{document}

\begin{longtblr}{ %mystyle1 %mystyle2 colspec = {rX[c]X[c]X[c]}, width = 0.75\linewidth, row{1} = {font=\bfseries}, column{1} = {font=\bfseries}, row{odd} = {green!10}, row{even} = {green!20}, }

\toprule
& S\&P & Fitch & Moody's \\ 
\midrule
Prime & AAA & AAA & Aaa \\ 
\multirow{3}{*}{High grade} & AA+ & AA+ & Aa1 \\ 
& AA & AA & Aa2 \\ 
& AA- & AA- & Aa3 \\ 
\multirow{3}{*}{Upper medium grade} & A+ & A+ & A1 \\ 
& A & A & A2 \\ 
& A- & A- & A3 \\ 
\multirow{3}{*}{Lower medium grade} & BBB+ & BBB+ & Baa1 \\ 
& BBB & BBB & Baa2 \\ 
& BBB- & BBB- & Baa3 \\ 
\bottomrule

\end{longtblr} \end{document}

JeT
  • 3,020
  • 1
    Off-topic: command \multirow{3}{*}{...} will be with new realize of tabularray (at March 1st) obsolete. Use tabularray replacement \SetCell[r=3]{bg=green!10} ... instead. – Zarko Feb 19 '22 at 22:16

2 Answers2

8

You can use \NewTblrEnviron to define a new environment, and use \SetTblrInner to set the default styles:

\documentclass{article}

\usepackage{xcolor} \usepackage{tabularray} \UseTblrLibrary{booktabs}

\NewTblrEnviron{mytblr} \SetTblrOuter[mytblr]{long} \SetTblrInner[mytblr]{ colspec = {rX[c]X[c]X[c]}, width = 0.85\linewidth, row{1} = {font=\bfseries}, column{1} = {font=\bfseries}, row{odd} = {green!10}, row{even} = {green!20}, rowhead = 1, hline{1,Z} = {0.08em}, % toprule and bottomrule hline{2} = {0.05em}, % midrule
}

\begin{document}

\begin{mytblr}[ caption = {My Caption}, ]{ % more specs }
& S&P & Fitch & Moody's \ Prime & AAA & AAA & Aaa \ \SetCell[r=3]{r}High grade & AA+ & AA+ & Aa1 \ & AA & AA & Aa2 \ & AA- & AA- & Aa3 \ \SetCell[r=3]{r}Upper medium grade & A+ & A+ & A1 \ & A & A & A2 \ & A- & A- & A3 \ \SetCell[r=3]{r}Lower medium grade & BBB+ & BBB+ & Baa1 \ & BBB & BBB & Baa2 \ & BBB- & BBB- & Baa3 \ \end{mytblr}

\end{document}

enter image description here

L.J.R.
  • 10,932
7

Second Version (better names and error message)

Use the \DefTblrInnerStyle macro to define a style (locally). To apply a defined style, use the style key in the mandatory argument of tblr environment.

\documentclass{standalone}
\usepackage{xcolor}
\usepackage{tabularray}
\pagestyle{empty}

\ExplSyntaxOn \clist_gput_left:Nn \g__tblr_table_known_keys_clist { style } \keys_define:nn { tblr } { style .code:n = __tblr_apply_style:n { #1 } } \msg_new:nnn { tblr } { undefined inner style } { undefined ~ tblr ~ inner ~ style ~ '#1' ! } \cs_new_protected:Npn __tblr_apply_style:n #1 { \tl_if_exist:cTF { l__tblr_inner_style_ #1 tl } { \keys_set:nv { tblr } { l__tblr_inner_style #1 tl } } { \msg_error:nnn { tblr } { undefined inner style } { #1 } } } \NewDocumentCommand \DefTblrInnerStyle { m m } { \tl_clear_new:c { l__tblr_inner_style #1 tl } \tl_set:cx { l__tblr_inner_style #1 _tl } { #2 } } \ExplSyntaxOff

\begin{document} \DefTblrInnerStyle{test 1}{row{1}={r,bg=blue!50},column{2}={fg=red}} \DefTblrInnerStyle{test 2}{row{1}={l,bg=lime},column{2}={fg=blue}} \DefTblrInnerStyle{test 3}{style=test 1,style=test 2} { \DefTblrInnerStyle{test 3}{style=test 2,style=test 1} \begin{tblr}{colspec={ccc},style=test 3,hlines,vlines} abbb & b & c \ a & baba & cdsdd \end{tblr} } \begin{tblr}{colspec={ccc},style=test 3,hlines,vlines} abbb & b & c \ a & baba & cdsdd \end{tblr} \end{document}

enter image description here

Paul Gaborit
  • 70,770
  • 10
  • 176
  • 283