Datatool 垂直分割页面

Datatool 垂直分割页面

有一个 CSV 文件,其中有 1-6 条记录,我需要加载它并在信件页面上显示为两列(每列中的每一行都是一个块,其中包含来自 CSV 行的所有文本),右列仅出现 4-6 条记录,这意味着首先我需要填充第一列,然后再填充第二列,所以使用简单表格不是一个选择(也许我错了)。

CSV:

field_name1, field_name2,field_name3
smth1, smth2,smth3
smthelse1,smthelse2,smthelse3
rec1,rec2,rec3
abc1,abc2,abc3
...,...,...
...,...,...

将显示为

smth1         abc1
smth2         abc2
smth3         abc3

smthelse1     ...
smthelse2     ...
smthelse3     ...

rec1          ...
rec2          ...
rec3          ...

我尝试使用\fboxes 和minipages,但结果有些混乱,因为我不知道如何计算行数(\DTLifeq(current_row<=3)例如,如何填充左侧部分)。\DTLforeach正确生成此类结构的正确方法是什么?

答案1

您可以tabular像这样并排使用两个环境:

\documentclass{article}

\usepackage{datatool}

\begin{filecontents*}{test.csv}
field_name1, field_name2,field_name3
smth1, smth2,smth3
smthelse1,smthelse2,smthelse3
rec1,rec2,rec3
abc1,abc2,abc3
...,...,...
...,...,...
\end{filecontents*}

\DTLloaddb{mydata}{test.csv}

\begin{document}

\begin{tabular}[t]{l}
\DTLforeach*{mydata}
 {\Fieldi=field_name1,\Fieldii=field_name2,\Fieldiii=field_name3}
 {%
    \ifthenelse{\value{DTLrowi}<4}
    {%
      \Fieldi\\\Fieldii\\\Fieldiii\\\\%
    }%
    {}%
 }
\end{tabular}
\begin{tabular}[t]{l}
\DTLforeach*{mydata}
 {\Fieldi=field_name1,\Fieldii=field_name2,\Fieldiii=field_name3}
 {%
    \ifthenelse{\value{DTLrowi}>3}
    {%
      \Fieldi\\\Fieldii\\\Fieldiii\\\\%
    }%
    {}%
 }
\end{tabular}

\end{document}

结果:

结果图像

以下是针对任意数量的列的更通用的方法:

\documentclass{article}

\usepackage{datatool}

\begin{filecontents*}{test.csv}
field_name1, field_name2,field_name3
smth1, smth2,smth3
smthelse1,smthelse2,smthelse3
rec1,rec2,rec3
abc1,abc2,abc3
...,...,...
...,...,...
\end{filecontents*}

\DTLloaddb{mydata}{test.csv}

\begin{document}

\begin{tabular}[t]{l}
  \dtlgforint\dtlrownum=1\to3\step 1\do
  {%
    \dtlgetrow{mydata}{\dtlrownum}%
    \global\dtlcurrentrow=\dtlcurrentrow
    \dtlgforint\dtlcolumnnum=1\to\DTLcolumncount{mydata}\step 1\do
    {%
      \dtlgetentryfromcurrentrow{\thisvalue}{\dtlcolumnnum}%
      \thisvalue\\
    }%
    \\
  }%
\end{tabular}
\begin{tabular}[t]{l}
  \dtlgforint\dtlrownum=4\to6\step 1\do
  {%
    \dtlgetrow{mydata}{\dtlrownum}%
    \global\dtlcurrentrow=\dtlcurrentrow
    \dtlgforint\dtlcolumnnum=1\to\DTLcolumncount{mydata}\step 1\do
    {%
      \dtlgetentryfromcurrentrow{\thisvalue}{\dtlcolumnnum}%
      \thisvalue\\
    }%
    \\
  }%
\end{tabular}

\end{document}

相关内容