67 lines
1.6 KiB
TeX
67 lines
1.6 KiB
TeX
\ExplSyntaxOn
|
|
|
|
% Special Columns
|
|
\newcolumntype {Y} { > {\centering\arraybackslash } X }
|
|
\newcolumntype {`} { > {\global\let\currentrowstyle\relax } }
|
|
\newcolumntype {^} { > {\currentrowstyle} }
|
|
|
|
% Matches {, }, >, , and any other character
|
|
\regex_const:Nn \c__preamble_regex {>\s*{.*}\s*\S|\S}
|
|
|
|
\newcommand{\rowstyle}[1]
|
|
{
|
|
\gdef\currentrowstyle{#1}#1\ignorespaces
|
|
}
|
|
|
|
% Table options
|
|
\keys_define:nn { rpg / table }
|
|
{
|
|
color .tl_set:N = \l__rpg_table_color_tl,
|
|
color .initial:n = tablecolor,
|
|
color .value_required:n = true,
|
|
header .tl_set:N = \l__rpg_table_header_tl,
|
|
header .value_required:n = true,
|
|
width .dim_set:N = \l__rpg_table_width_dim,
|
|
width .value_required:n = true,
|
|
}
|
|
|
|
% Table Definition
|
|
\NewDocumentEnvironment {RpgTable} { o m }
|
|
{
|
|
\group_begin:
|
|
|
|
\dim_set:Nn \l__rpg_table_width_dim { \linewidth }
|
|
\tl_if_novalue:nF {#1}
|
|
{ \keys_set:nn { rpg / table } {#1} }
|
|
|
|
\par \vspace { 9pt plus 3pt minus 3pt } \noindent
|
|
|
|
\tl_if_empty:NF \l__rpg_table_header_tl
|
|
{
|
|
\group_begin:
|
|
\RpgFontTableTitle \l__rpg_table_header_tl \nopagebreak
|
|
\par \vspace{ 5pt plus 2pt minus 2pt } \noindent
|
|
\group_end:
|
|
}
|
|
|
|
\RpgFontTableBody
|
|
|
|
\rowcolors {1} {} {\l__rpg_table_color_tl}
|
|
|
|
\regex_extract_all:NnNTF \c__preamble_regex {#2} \l_tmpa_seq
|
|
{
|
|
\tl_set:Nn \l_tmpa_tl {\seq_use:Nn \l_tmpa_seq {^}}
|
|
\use:x { \exp_not:n {\tabularx{\l__rpg_table_width_dim}}{`\l_tmpa_tl}}
|
|
\rowstyle{\RpgFontTableHeader}
|
|
}
|
|
{
|
|
\tabularx {\l__rpg_table_width_dim} {#2}
|
|
}
|
|
|
|
}
|
|
{
|
|
\endtabularx \vspace { 9pt plus 3pt minus 3pt }
|
|
|
|
\group_end:
|
|
}
|