表格 csvreader:循环遍历列

表格 csvreader:循环遍历列

我有一个名为“data.csv”的 csv 文件,其中包含以下数据:
1,2,3
4,5,6

我正在使用 Latex 编写下表\csvreader

\begin{table}
\centering
\begin{tabular}{|c|c|c|}
\hline
Sue & Karl & Tim \\
\hline
\csvreader[
    no head,
    late after line=\\,
    late after last line=,
    ]{data.csv}{}{\csvcoli & \csvcolii & \csvcoliii} \\
\hline
\end{tabular}
\end{table}

这正确地产生了我想要的结果,即:
在此处输入图片描述

但是,我不想手动输入,而是\csvcoli & \csvcolii & \csvcoliii\csvreader通过 for 循环来实现。所以我写了以下代码:

\newcommand{\mycommand}[1]{
    \foreach \i in {1,...,#1}{
        \ifnum\i > 1 
            \& 
        \fi
        \csname csvcol\romannumeral\i\endcsname
    }
}


\begin{table}
\centering
\begin{tabular}{|c|c|c|}
\hline
Sue & Karl & Tim \\
\hline
\csvreader[
    no head,
    late after line=\\,
    late after last line=,
    ]{data.csv}{}{\mycommand{3}} \\
\hline
\end{tabular}
\end{table}

然而,这会产生以下结果:
在此处输入图片描述

你能帮帮我吗?提前谢谢了。

答案1

使用该软件包可以方便地完成此readarray操作。

\begin{filecontents*}[overwrite]{data.csv}
1,2,3
4,5,6
\end{filecontents*}
\documentclass{article}
\usepackage{readarray}
\readarraysepchar{,}
\readdef{data.csv}\mydata
\readarray*\mydata\myarray[-,\ncols]
\renewcommand\typesetrowsepchar{\\}
\renewcommand\typesetcolsepchar{&}
\begin{document}
\begin{table}
\centering
\begin{tabular}{|c|c|c|}
\hline
Sue & Karl & Tim \\
\hline
\typesetarray\myarray\\
\hline
\end{tabular}
\end{table}
\end{document}

在此处输入图片描述

答案2

csvsimple-l3提供\csvlinetotablerow您想要的功能。csvsimple-l3可以加载\usepackage[l3]{csvsimple}usepackage{csvsimple-l3}

\begin{filecontents*}[noheader,overwrite]{data.csv}
1,2,3
4,5,6
\end{filecontents*}

\documentclass{article}
\usepackage{csvsimple-l3}

\begin{document}
Original, using \verb|\csvcoli & \csvcolii & \csvcoliii|\par
\begin{tabular}{|c|c|c|}
  \hline
  Sue & Karl & Tim \\
  \hline
  \csvreader[
      no head,
      late after line=\\,
      late after last line=,
      ]{data.csv}{}{\csvcoli & \csvcolii & \csvcoliii} \\
  \hline
\end{tabular}
\medskip

Using \verb|\csvlinetotablerow|\par
\begin{tabular}{|c|c|c|}
  \hline
  Sue & Karl & Tim \\
  \hline
  \csvreader[
      no head,
      late after line=\\,
      late after last line=,
      ]{data.csv}{}{\csvlinetotablerow} \\
  \hline
\end{tabular}
\medskip

Using \verb|\csvautotabular|\par
\csvautotabular*[
  table head={\hline Sue & Karl & Tim \\ \hline}
]{data.csv}
\end{document}

在此处输入图片描述

相关内容