Expl3,Tabularray – How to Fix Misplaced Alignment Tab Character & with Tabularray and Expl3

expl3tabularray

I'm trying to pass as a parameter a list of rows in tabularray. (the same list will be used a 2nd time)

With Showing `\_tl` variables that contain `&` and `\hline` tokens
I tried to use this code given by egreg with tabular, it doesn't work with tabularray.

With The package tabularray doesn't seem to work on Overleaf
I tried with \NewDocumentEnvironment.

I found \c_math_subscript_token but not the equivalent for &

% !TeX program = lualatex
\documentclass[11pt]{article}
%https://tex.stackexchange.com/questions/402866/showing-tl-variables-that-contain-and-hline-tokens
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\usepackage{tabularray}
\ExplSyntaxOn
\NewDocumentCommand\myTable{}
  {
    \tl_set:Nn \l_rn_tabular_tl {1&2&3&4\\}
    \begin{tabular}{|c||c|c|c|}
      \tl_use:N \l_rn_tabular_tl
    \end{tabular}
    \par
    \tl_set:Nn \l_rn_tabular_tl {1&2&3&4\\}
    \begin{tblr}{|c||c|c|c|}
      1&2&3&4\\
      %\tl_use:N \l_rn_tabular_tl%<-- no work
    \end{tblr}
  }

%https://tex.stackexchange.com/questions/635842/the-package-tabularray-doesnt-seem-to-work-on-overleaf
\NewDocumentEnvironment{fancytblr}{+b}{
Before Text
\begin{tblr}{hlines}
#1
\end{tblr}
After Text
}{}

\begin{document}
\myTable


\tl_set:Nn \l_rn_tabular_tl {One & Two & Three \\}
\begin{fancytblr}
  One & Two & Three \\
  %\tl_use:N \l_rn_tabular_tl%<-- no work
\end{fancytblr}
\ExplSyntaxOff
\end{document}

Best Answer

Here are various strategies you can apply, none of which is specific to tabularray. In all cases, the idea is to prepare the desired known-valid input before tabularray parses it in its own way.

\documentclass{article}
\usepackage{tabularray}

\ExplSyntaxOn
\tl_new:N \l_my_tabular_tl

\NewDocumentCommand \myTable { }
  {
    \tl_set:Nn \l_my_tabular_tl {1&2&3&4\\}
    \use:x
      {
        \exp_not:n { \begin{tblr}{|c|c|c|c|} 1&2&3&4\\ }
        \exp_not:V \l_my_tabular_tl
        \exp_not:n { \end{tblr} }
      }
  }

\cs_new_protected:Npn \my_typeset_table:n #1
  {
    \begin{tblr}{|c|c|c|c|}
      1 & 2 & 3 & 4 \\
      #1
    \end{tblr}
  }

\cs_generate_variant:Nn \my_typeset_table:n { V }

% Uncomment if you want document-level access to \my_typeset_table:V
% \cs_new_eq:NN \myTableV \my_typeset_table:V

\cs_new_protected:Npn \my_typeset_table_generic:nn #1#2
  {
    \group_begin:
      \cs_set_protected:Npn \__my_typeset_table_generic_tmp_func:n ##1 {#1}
      \__my_typeset_table_generic_tmp_func:n {#2}
    \group_end:
  }

\cs_generate_variant:Nn \my_typeset_table_generic:nn { nV }

\NewDocumentEnvironment { fancytblr } { m +b }
  {
    Before~Text
    \cs_set_protected:Npn \__my_fancytblr_table_tmp_func:n ##1
      {
        \begin{tblr}{hlines} #2 ##1 \end{tblr}
      }
    \__my_fancytblr_table_tmp_func:V #1
    After~Text
  }
  { }

\cs_new_eq:NN \__my_fancytblr_table_tmp_func:n \use_none:n
\cs_generate_variant:Nn \__my_fancytblr_table_tmp_func:n { V }

\ExplSyntaxOff

\begin{document}

\myTable
\par\medskip

\ExplSyntaxOn

\tl_set:Nn \l_my_tabular_tl { 1 & 2 & 3 & 4 \\ }
\my_typeset_table:V \l_my_tabular_tl

\par\medskip

\my_typeset_table_generic:nn
  {
    \begin{tblr}{|c|c|c|}
      a & b & c \\
      #1
    \end{tblr}
  }
  { 8 & 9 & 10 \\ }

\par\medskip

\tl_set:Nn \l_my_tabular_tl { 11 & 12 & 13 \\ }
\my_typeset_table_generic:nV
  {
    \begin{tblr}{|c|c|c|}
      A & B & C \\
      #1
    \end{tblr}
  }
  \l_my_tabular_tl

\par\medskip

\tl_set:Nn \l_my_tabular_tl { ONE & TWO & THREE \\ }

\begin{fancytblr}{\l_my_tabular_tl}
  One & Two & Three \\
\end{fancytblr}

\ExplSyntaxOff

\end{document}

enter image description here

P.S.: don't forget to declare expl3 variables.

Related Question