luatex tex.sprint'ing \SetCell дает другой результат

luatex tex.sprint'ing \SetCell дает другой результат

Я буду делать обертку вокруг tabularrayмакроса \SetCellс помощью lualatex. Использование tex.sprintдля производства, \SetCell[c=2]{c}однако, дает другой результат, чем ввод его напрямую. Есть мысли о том, как мне сделать так, чтобы два результата совпадали?

введите описание изображения здесь

МВЭ:

\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}

решение1

Согласно tabularrayруководству по пакету (v2024A, 2024-02-16), раздел 2.1 «Старые и новые интерфейсы»,

То же, что tabularи arrayсреды, все команды таблицыдолженбыть помещены в начало текста ячейки. Также новые команды таблицыдолженбыть определено с помощью \NewTableCommand.

\SetCellявляется одной из встроенных табличных команд, и ваша \SCкоманда, оболочка для \SetCellкоторой также должна быть табличной командой, поэтому она должна быть определена с помощью \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}

введите описание изображения здесь

Связанный контент