
Ich werde einen Wrapper um tabularray
das \SetCell
Makro von erstellen, indem ich verwende lualatex
. Die Verwendung von tex.sprint
zum Erzeugen \SetCell[c=2]{c}
erzeugt jedoch ein anderes Ergebnis, als wenn ich es direkt in out eingebe. Irgendwelche Ideen, wie ich die beiden Ergebnisse aneinander anpassen kann?
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}
Antwort1
Laut tabularray
Pakethandbuch (v2024A, 2024-02-16), Abschnitt 2.1 „Alte und neue Schnittstellen“,
Gleich wie
tabular
undarray
Umgebungen, alle Tabellenbefehlemussan den Anfang des Zellentextes gesetzt werden. Außerdem können neue Tabellenbefehlemussmit definiert werden\NewTableCommand
.
\SetCell
ist einer der integrierten Tabellenbefehle und Ihr \SC
Befehl, ein Wrapper für \SetCell
muss ebenfalls ein Tabellenbefehl sein, daher muss er mit definiert werden \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}