Fügen Sie in der Ausgabetabelle nach der angegebenen Zeile eine Zeile hinzu

Fügen Sie in der Ausgabetabelle nach der angegebenen Zeile eine Zeile hinzu

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.

Bildbeschreibung hier eingeben

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 readarrayPaket 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}

Bildbeschreibung hier eingeben

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}

Bildbeschreibung hier eingeben

verwandte Informationen