我只是想使用 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 不可扩展
如所述这里。