Ich verwende die Pakete csvsimple-l3 und tabularray, um die Ausgabetabelle zu generieren. Im Latex-Code habe ich definiert, dass nach der dritten Zeile der CSV-Eingabedatei eine neue Zeile zur Tabelle hinzugefügt wird. Ich habe die Bedingung verwendet: \ifnumequal{\thecsvinputline}{3}{}{}, die hinzugefügte Zeile erscheint jedoch nicht in der Ausgabetabelle. Warum?
Mein Latex-Code:
\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}
So sieht die Ausgabetabelle aus. Es wurde keine Zeile hinzugefügt.
Wenn jemand helfen und ein passendes Beispiel geben kann, wäre das sehr hilfreich. Es ist wichtig, dass im Beispiel die Pakete csvsimple-l3 und tabularray verwendet werden.
Antwort1
Das soll nicht heißen, dass Sie es auf diese Weise machen möchten, aber mit dem readarray
Paket kann man das Ziel möglicherweise erreichen:
\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}
Antwort2
In der Zwischenzeit habe ich die Suche nach einer Lösung nicht aufgegeben. Meine Beharrlichkeit hat sich gelohnt und ich habe eine Lösung gefunden, die ich allen, die sie brauchen, zeigen und zur Verfügung stellen möchte.
\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}