我将使用 来包装tabularray
的\SetCell
宏lualatex
。但是,使用tex.sprint
produce\SetCell[c=2]{c}
会产生与直接输入 out 不同的结果。关于如何使两个结果匹配,您有什么想法吗?
梅威瑟:
\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}