
Я буду делать обертку вокруг 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}