luatex tex.sprint'ing \SetCell 产生不同的结果

luatex tex.sprint'ing \SetCell 产生不同的结果

我将使用 来包装tabularray\SetCelllualatex。但是,使用tex.sprintproduce\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}

在此处输入图片描述

相关内容