
Haré un contenedor para tabularray
la \SetCell
macro usando lualatex
. Sin embargo, usarlo tex.sprint
para producir \SetCell[c=2]{c}
produce resultados diferentes a escribirlo directamente. ¿Alguna idea sobre cómo puedo hacer que los dos resultados coincidan?
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 tabularray
manual del paquete (v2024A, 2024-02-16), sec. 2.1 "Interfaces antiguas y nuevas",
Igual que
tabular
yarray
entornos, todos los comandos de la tabla.debecolocarse al principio del texto de la celda. Además, nuevos comandos de tabla.debedefinirse con\NewTableCommand
.
\SetCell
es uno de los comandos de tabla integrados y su \SC
comando, un contenedor que \SetCell
tambié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}