将 datatool 与 tabularray 结合使用

将 datatool 与 tabularray 结合使用

这是对先前的问题,因为我很难理解问题和答案。示例文件有一个很多继续,我认为如果我们使用一个更简单的例子,答案会更容易理解。

假设我有一个文件,table.csv如下所示:

FirstName,LastName,Job
Bob,Builder,construction worker
Steve,Wumbo,Politician
Greembo,Flutes,Comedian

和一个 tex 文件,main.tex如下所示:

\documentclass{article}

\usepackage{tabularray}
\usepackage{datatool}

\DTLloaddb{table}{table.csv}

\begin{document}

\begin{tblr}{}
    First name & Last name & Occupation \\
    \DTLforeach{table}{%
    \firstname=FirstName,\lastname=LastName,\occupation=Job}{%
    \firstname & \lastname & \occupation \\}
\end{tblr}

\end{document}

当我尝试编译这个时,lualatex 失败了,并给出了错误

! Misplaced alignment tab character &.
<argument> ...ow\romannumeral \dtlforeachlevel }}\firstname &
                                                   \lastname & \occupation \...

l.15 \end
       {tblr}

结果吐出了一张很难看的表格。

为什么会发生这种情况?我该如何解决?

如果答案不仅仅是一段代码,而且还包括对工作代码的解释,我将不胜感激。

答案1

错误的原因在于\DTLforeach没有在正确的时间展开。包手册中对此进行了解释tabularray:“与传统的 tabular 环境相比,tabularray 环境需要查看每个&and \\”。

正如问题中提到的,这个问题和解决方案与如何在 tabularray 表中使用 DTLforeach(数据工具)?

\DTLforeach解决方案是首先在宏中收集的结果。此宏用 初始化\tl_new:N \tblrbody

在 中\DTLforeach,内容用 收集\tl_build_put_right:Ne。这里,\exp_not:V使用 来恢复 的内容\firstname\lastname\occupation防止扩展。对于提供的数据,这是不必要的,但如果数据包含 ,则这是必要的\emph{text}

此过程以 开始\tl_build_begin:N并以 结束\tl_build_end:N。此后,选项expand=\tblrbody被赋予放置 的tblr环境。\tblrbody

在此处输入图片描述

\documentclass[border=6pt]{standalone}
\usepackage{tabularray}
\usepackage{datatool}
\DTLloaddb{table}{table.csv}
\begin{document}
\ExplSyntaxOn
\tl_new:N \tblrbody
\tl_build_begin:N \tblrbody
  \DTLforeach{table}{
    \firstname=FirstName,
    \lastname=LastName,
    \occupation=Job
  }{
    \tl_build_put_right:Ne \tblrbody { \exp_not:V \firstname & \exp_not:V \lastname & \exp_not:V \occupation \\ }
  }
\tl_build_end:N \tblrbody
\ExplSyntaxOff
\begin{tblr}[expand=\tblrbody]{}
First name & Last name & Occupation\\
\tblrbody
\end{tblr}
\end{document}

相关内容