
Estarei fazendo um wrapper em torno tabularray
da \SetCell
macro usando lualatex
. Usar tex.sprint
para 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?
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 tabularray
manual do pacote (v2024A, 16/02/2024), sec. 2.1 "Interfaces antigas e novas",
Igual a ambientes
tabular
earray
, 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 \SC
comando, um wrapper, \SetCell
també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}