luatex tex.sprint'ing \SetCell erzeugt ein anderes Ergebnis

luatex tex.sprint'ing \SetCell erzeugt ein anderes Ergebnis

Ich werde einen Wrapper um tabularraydas \SetCellMakro von erstellen, indem ich verwende lualatex. Die Verwendung von tex.sprintzum 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?

Bildbeschreibung hier eingeben

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 tabularrayPakethandbuch (v2024A, 2024-02-16), Abschnitt 2.1 „Alte und neue Schnittstellen“,

Gleich wie tabularund arrayUmgebungen, alle Tabellenbefehlemussan den Anfang des Zellentextes gesetzt werden. Außerdem können neue Tabellenbefehlemussmit definiert werden \NewTableCommand.

\SetCellist einer der integrierten Tabellenbefehle und Ihr \SCBefehl, ein Wrapper für \SetCellmuss 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}

Bildbeschreibung hier eingeben

verwandte Informationen