![tabularray 的 tblr 强制参数中的宏不起作用](https://linux22.com/image/453618/tabularray%20%E7%9A%84%20tblr%20%E5%BC%BA%E5%88%B6%E5%8F%82%E6%95%B0%E4%B8%AD%E7%9A%84%E5%AE%8F%E4%B8%8D%E8%B5%B7%E4%BD%9C%E7%94%A8.png)
最小工作示例:
%! 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 生成行可能的相关问题:
- tabularray:展开多个宏
- tabularray:通过 catchfile 读取存储在宏中的表
- tabularray 和 expl3 对齐制表符 &. 位置错误
- 在 expl3 中的 keyval 输入中扩展宏的最佳方法是什么
更新
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}