luatex tex.sprint'ing \SetCell produce resultados diferentes

luatex tex.sprint'ing \SetCell produce resultados diferentes

Haré un contenedor para tabularrayla \SetCellmacro usando lualatex. Sin embargo, usarlo tex.sprintpara producir \SetCell[c=2]{c}produce resultados diferentes a escribirlo directamente. ¿Alguna idea sobre cómo puedo hacer que los dos resultados coincidan?

ingrese la descripción de la imagen aquí

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}

Respuesta1

Según el tabularraymanual del paquete (v2024A, 2024-02-16), sec. 2.1 "Interfaces antiguas y nuevas",

Igual que tabulary arrayentornos, todos los comandos de la tabla.debecolocarse al principio del texto de la celda. Además, nuevos comandos de tabla.debedefinirse con \NewTableCommand.

\SetCelles uno de los comandos de tabla integrados y su \SCcomando, un contenedor que \SetCelltambién debe ser un comando de tabla, por lo que debe definirse con \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}

ingrese la descripción de la imagen aquí

información relacionada