Eu uso os pacotes csvsimple-l3 e tabularray para gerar a tabela de saída. No código Latex, defini que após a terceira linha do arquivo CSV de entrada, uma nova linha seja adicionada na tabela. Usei a condição: \ifnumequal{\thecsvinputline}{3}{}{}, porém, a linha adicionada não aparece na tabela de saída. Por que?
Meu código látex:
\documentclass{article}
\begin{filecontents*}{CSVfile.csv}
a1,b,c,d
a2,b,c,d
a3,b,c,d
a4,b,c,d
a5,b,c,d
\end{filecontents*}
\usepackage{csvsimple-l3}
\usepackage{tabularray}
\usepackage{xcolor}
\usepackage{etoolbox}
\begin{document}
\csvreader[%
no head,
generic collected table= longtblr,
generic table options={[label=none]{colspec={X[1,c,m]X[1,c,m]X[1,c,m]X[1,c,m]},
row{1}={font=\bfseries},
hlines,vlines,
width=\textwidth,
colsep=2.5pt,
rowsep=2.5pt,
}},
%
late after line=\\,
late after first line=\\,
late after last line=\\,
table head={Col 1&Col 2&Col 3&Col 4}\\,
after line=\ifnumequal{\thecsvinputline}{3}{%
\\\hline\SetCell[c=4]{c}\textbf{Add a new table row}&&&\\%
}{},
]{CSVfile.csv}
{}{%
\csvcoli&\csvcolii&\csvcoliii &\csvcoliv
}
\end{document}
Esta é a aparência da tabela de saída. Nenhuma linha foi adicionada.
Se alguém puder ajudar e dar um exemplo adequado, será muito útil. É importante que os pacotes csvsimple-l3 e tabularray sejam usados no exemplo.
Responder1
Não quer dizer que você gostaria de fazer desta forma, mas talvez seja possível atingir o objetivo com o readarray
pacote:
\begin{filecontents*}{CSVfile.csv}
a1,b,c,d
a2,b,c,d
a3,b,c,d
a4,b,c,d
a5,b,c,d
\end{filecontents*}
\documentclass{article}
\usepackage{readarray}
\readarraysepchar{,}
\begin{document}
\readdef{CSVfile.csv}\mdatadat
\readarray*\mdatadat\mdata[-,\ncols]
\def\headerdat{Col1, Col2, Col3, Col4}
\readarray*\headerdat\headerrow[-,4]
\def\insertdat{\textbf{Add a new table row},x,y,z}
\readarray*\insertdat\insertrow[-,4]
\def\insertrowafter{3}
\initarray\mbefore[\insertrowafter,\ncols]
\mergearray\mdata\mbefore[1,1]
\initarray\mafter[\the\numexpr\nrows-\insertrowafter\relax,\ncols]
\mergearray\mdata\mafter[-\the\numexpr\insertrowafter-1\relax,1]
\renewcommand\typesetrowsepchar{\\\hline}
\renewcommand\typesetcolsepchar{&}
\begin{tabular}{|c|c|c|c|}
\hline
\typesetarray\headerrow\typesetrowsepchar
\typesetarray\mbefore\typesetrowsepchar
\typesetarray\insertrow\typesetrowsepchar
\typesetarray\mafter\typesetrowsepchar
\end{tabular}
\end{document}
Responder2
Entretanto, não desisti de procurar uma solução. A persistência valeu a pena e consegui encontrar uma solução que quero mostrar e disponibilizar para quem precisar.
\begin{filecontents*}{file0.csv}
a1,b,c,d
a2,b,c,d
a3,b,c,d
a4,b,c,d
a5,b,c,d
\end{filecontents*}
\documentclass{article}
\usepackage{csvsimple-l3}
\usepackage{tabularray}
\usepackage{xcolor}
\usepackage{ifthen}
\usepackage{readarray}
\readarraysepchar{,}
\usepackage{etoolbox}
\usepackage{array}
\begin{document}
\csvreader[%
no head,
generic collected table= longtblr,
generic table options={[label=none]{colspec=
{X[1,c,m]X[1,c,m]X[1,c,m]X[1,c,m]},
row{1}={font=\bfseries},
hlines,vlines,
width=\textwidth,
colsep=2.5pt,
rowsep=2.5pt,
}},
%
late after line=\\,
late after first line=\\,
late after last line=\\,
table head={Col 1&Col 2&Col 3&Col 4}\\,
]{file0.csv}
{}{%
\ifnumequal{\thecsvinputline}{3}{\SetCell[c=4]
{c,font=\noexpand\bfseries}Add a new table row&&&\\}{}
\csvcoli&\csvcolii&\csvcoliii &\csvcoliv}
}
\end{document}