使用 tblr 插入 n 个空行

使用 tblr 插入 n 个空行

我只是想使用 tlbr 插入 n 个空行,如下所示:

\documentclass[letterpaper]{article}
\usepackage{expl3}


\ExplSyntaxOn
\cs_new_eq:NN \makerows \prg_replicate:nn 
\ExplSyntaxOff

\usepackage{tabularray}

\begin{document}

With tabular: 

\begin{tabular}{|c|c|c|c|}
\hline
a & b & c & d \\\hline
\makerows{5}{ & & &  \\\hline} 
\end{tabular}

With tblr:

\begin{tblr}{|c|c|c|c|}
\hline
a & b & c & d \\\hline
%\makerows{5}{ & & &  \\\hline} 

%% Gives
% ! Misplaced alignment tab character &.
% <argument>  &
%               & & \\\hline 

\end{tblr}

\end{document}

用的tabular时候可以,用的tblr时候不行。我该如何解决这个问题?

答案1

这似乎有效:

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{expl3,xparse}

\usepackage{tabularray}
\UseTblrLibrary{functional}

\IgnoreSpacesOn
\prgNewFunction \makerows {m} {
\intReplicate {#1} {{} &   &   &  \\\hline }
}
\IgnoreSpacesOff

\begin{document}

With tabular: 

\begin{tabular}{|c|c|c|c|}
\hline
a & b & c & d \\\hline
\makerows{5}
\end{tabular}

With tblr:

\begin{tblr}[evaluate=\makerows]{|c|c|c|c|}
\hline
a & b & c & d \\\hline
\makerows{5}
\end{tblr}

\end{document}

改编自第 46 页的 tabularray 手册中的示例。但是我不太清楚为什么我需要{}在空行的定义中使用空。

尽管如此,我想了解为什么最初的 latex3 方法不起作用。问题似乎与复制功能有关。

编辑

正如@JamesT 在上面的评论中提到的那样,使用lualatex似乎可以与扩展键一起使用:

\documentclass{article}
\usepackage{tabularray}


\usepackage{luacode}
\begin{luacode}
function makerows(n)
for i = 1, n
do
  tex.sprint("& & & \\\\\\hline")
end
end

\end{luacode}
  
\begin{document}
\begin{tblr}[expand=\directlua]{c|c|c|c}
a & b & c & d \\\hline
\directlua{makerows(10)}
\end{tblr}

\end{document}

编辑2

我也尝试pythontex不是即使使用扩展键也可以工作:

\documentclass{article}
\usepackage{tabularray}
\usepackage[gobble=auto]{pythontex}

\begin{pycode}
def makerows(n):
    for i in range(0,n):
        print(r"& & & \\\hline")
\end{pycode}
  
\begin{document}
\begin{tblr}[expand=\pyc]{c|c|c|c}
a & b & c & d \\\hline
\pyc{makerows(3)}
\end{tblr}

\end{document}

我猜它不起作用,因为

打印的内容保存在文件中,然后通过 \InputIfFileExists 包含。但 \InputIfFileExists 不可扩展

如所述这里

相关内容