有一个 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 ...
我尝试使用\fbox
es 和minipage
s,但结果有些混乱,因为我不知道如何计算行数(\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}