luatex tex.sprint'ing \SetCell produz resultados diferentes

luatex tex.sprint'ing \SetCell produz resultados diferentes

Estarei fazendo um wrapper em torno tabularrayda \SetCellmacro usando lualatex. Usar tex.sprintpara produzir \SetCell[c=2]{c}, no entanto, produz resultados diferentes do que digitá-lo diretamente. Alguma idéia de como posso fazer com que os dois resultados correspondam?

insira a descrição da imagem aqui

MWE:

\documentclass{scrartcl}
\usepackage{luacode}
\usepackage{tabularray}

\begin{luacode*}
  function setcell(s)
    tex.sprint('\\SetCell[c='..s..']{c}')
  end
\end{luacode*}
\NewDocumentCommand{\SC}{O{}}{\luadirect{setcell(\luastring{#1})}}

\begin{document}

SetCell demonstration:\\
\begin{tblr}{|lll|}
  \SetCell[c=2]{c} MULTI & & z \\
  a & b & c\\
\end{tblr}

tex.sprinting SetCell thru lualatex:\\
\begin{tblr}{|lll|}
  \SC[2] MULTI & & z \\
  a & b & c\\
\end{tblr}

\end{document}

Responder1

De acordo com o tabularraymanual do pacote (v2024A, 16/02/2024), sec. 2.1 "Interfaces antigas e novas",

Igual a ambientes tabulare array, todos os comandos de tabeladeveser colocado no início do texto da célula. Além disso, novos comandos de tabeladeveser definido com \NewTableCommand.

\SetCellé um dos comandos de tabela integrados e seu \SCcomando, um wrapper, \SetCelltambém precisa ser um comando de tabela, portanto, deve ser definido com \NewTableCommand.

% !TeX program = lualatex
\documentclass{scrartcl}
\usepackage{luacode}
\usepackage{tabularray}

\begin{luacode*}
  function setcell(s)
    tex.sprint('\\SetCell[c='..s..']{c}')
  end
\end{luacode*}
\NewTableCommand{\SC}[1][]{\luadirect{setcell(\luastring{#1})}}

\begin{document}

SetCell demonstration:\\
\begin{tblr}{|lll|}
  \SetCell[c=2]{c} MULTI & & z \\
  a & b & c\\
\end{tblr}

tex.sprinting SetCell thru lualatex:\\
\begin{tblr}{|lll|}
  \SC[2] MULTI & & z \\
  a & b & c\\
\end{tblr}

\end{document}

insira a descrição da imagem aqui

informação relacionada