tabularray 的 tblr 强制参数中的宏不起作用

tabularray 的 tblr 强制参数中的宏不起作用

最小工作示例:

%! TeX program = lualatex
\documentclass{article}
\usepackage{pyluatex}
\usepackage{tabularray}
\usepackage{xcolor} 

\begin{document}

\let\rows\relax
\begin{python}
print("\\global\\def\\rows{Alpha & Beta & Gamma & Delta \\\\  Epsilon & Zeta  & Eta & Theta \\\\ Iota & Kappa & Lambda  & Mu \\\\  Nu & Xi & Omicron & Pi \\\\}")
\end{python}

\let\trivgroups\relax
\begin{python}
mystr = ""
for i in range(1,5):
  mystr += 'cell{'+str(i)+'}{'+str(i)+'} = {red4},'
print("\\global\\def\\trivgroups{"+mystr+"}")
\end{python}

\ExplSyntaxOff
% This works
% \begin{tblr}[expand=\rows]{colspec={|c|c|c|c|},
%     cell{1}{1}={red4},
%     cell{2}{2}={red4},
%     cell{3}{3}={red4},
%     cell{4}{4}={red4}
% }
\begin{tblr}[expand=\rows]{colspec={|c|c|c|c|},\trivgroups}
\rows
\end{tblr}

\end{document}

编译仍然有效

> lualatex --output-format=pdf --shell-escape pythontex-tabularray.tex

但是输出中没有颜色:

在此处输入图片描述

注释版本给出

在此处输入图片描述

后续问题使用 pyluatex 为 tabularray 生成行可能的相关问题:

更新

exptblr在我使用egreg 的答案中的新环境之前 ,我可以按如下方式旋转标题行中的文本:

\documentclass{article}
\usepackage{pyluatex}
\usepackage{tabularray}
\usepackage{xcolor}

\usepackage{rotating} 
\usepackage{makecell} 
\UseTblrLibrary{diagbox}
\setlength\rotheadsize{5cm}
\renewcommand\theadfont{}

\ExplSyntaxOn
\NewDocumentEnvironment{exptblr}{O{}m}
 {
  \use:x
   {
    \exp_not:N \begin{tblr}
    [\exp_not:n{#1}]
    {#2}
   }
 }
 {
  \end{tblr}
 }
\ExplSyntaxOff

\begin{document}

\let\rows\relax
\begin{python}
print("\\global\\def\\rows{Alpha & Beta & Gamma & Delta \\\\ Epsilon & Zeta  & Eta & Theta \\\\ Iota & Kappa & Lambda  & Mu \\\\ Nu & Xi & Omicron & Pi \\\\}")
\end{python}

\begin{python}
mystr = ""
for i in range(2,5):
  mystr += 'cell{'+str(i)+'}{'+str(i)+'} = {red4},'
\end{python}

\begin{tblr}[expand=\rows]{
  colspec={|c|c|c|c|},
  cell{1}{2-Z} = {halign=c,cmd=\rothead},
  hlines,vlines,
  % \py{mystr},
}
\diagbox[height=4cm,width=4cm]{subgroups $H$}{supergroups $G$} &
G1 Very Long & G2 Very Long & G3 Very Long \\
\rows
\end{tblr}

\end{document}

在此处输入图片描述

但是当我现在使用新环境时exptblr,出现以下错误:

! Use of \@gape doesn't match its definition.
\@ifnextchar ...eserved@d =#1\def \reserved@a {#2}
                                                  \def \reserved@b {#3}\futu...

l.45 }

?

答案1

tblr不会在其强制参数中扩展宏。

您可以定义一个新的环境:

\documentclass{article}
\usepackage{pyluatex}
\usepackage{tabularray}
\usepackage{xcolor}

\ExplSyntaxOn
\NewDocumentEnvironment{exptblr}{O{}m}
 {
  \use:x
   {
    \exp_not:N \begin{tblr}
    [\exp_not:n{#1}]
    {#2}
   }
 }
 {
  \end{tblr}
 }
\ExplSyntaxOff

\begin{document}

\let\rows\relax
\begin{python}
print("\\global\\def\\rows{Alpha & Beta & Gamma & Delta \\\\ Epsilon & Zeta  & Eta & Theta \\\\ Iota & Kappa & Lambda  & Mu \\\\ Nu & Xi & Omicron & Pi \\\\}")
\end{python}

\let\trivgroups\relax
\begin{python}
mystr = ""
for i in range(1,5):
  mystr += 'cell{'+str(i)+'}{'+str(i)+'} = {red4},'
print("\\global\\def\\trivgroups{"+mystr+"}")
\end{python}

\begin{exptblr}[expand=\rows]{colspec={|c|c|c|c|},\trivgroups}
\rows
\end{exptblr}

\end{document}

在此处输入图片描述

作为用户187803指出评论这可以简化为\py{mystr}。我还添加了一些更改:\let\rows\relax不需要 ,\global\def可以是\gdef

\documentclass{article}
\usepackage{pyluatex}
\usepackage{tabularray}
\usepackage{xcolor}

\ExplSyntaxOn
\NewDocumentEnvironment{exptblr}{O{}m}
 {
  \use:x
   {
    \exp_not:N \begin{tblr}
    [\exp_not:n{#1}]
    {#2}
   }
 }
 {
  \end{tblr}
 }
\ExplSyntaxOff

\begin{document}

\begin{python}
print("\\gdef\\rows{Alpha & Beta & Gamma & Delta \\\\ Epsilon & Zeta  & Eta & Theta \\\\ Iota & Kappa & Lambda  & Mu \\\\ Nu & Xi & Omicron & Pi \\\\}")
\end{python}

\begin{python}
mystr = ""
for i in range(1,5):
  mystr += 'cell{'+str(i)+'}{'+str(i)+'} = {red4},'
\end{python}

\begin{exptblr}[expand=\rows]{colspec={|c|c|c|c|},\py{mystr}}
\rows
\end{exptblr}

\end{document}

相关内容