Добавить одну строку в выходную таблицу после указанной строки

Добавить одну строку в выходную таблицу после указанной строки

Я использую пакеты csvsimple-l3 и tabularray для генерации выходной таблицы. В коде Latex я определил, что после третьей строки входного CSV-файла в таблицу добавляется одна новая строка. Я использовал условие: \ifnumequal{\thecsvinputline}{3}{}{}, однако добавленная строка не появляется в выходной таблице. Почему?

Мой код Latex:

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

Вот как выглядит выходная таблица. Ни одна строка не была добавлена.

введите описание изображения здесь

Если кто-то может помочь и привести подходящий пример, это будет очень полезно. Важно, чтобы в примере использовались пакеты csvsimple-l3 и tabularray.

решение1

Не то чтобы вам хотелось сделать это именно так, но, возможно, с помощью этого readarrayпакета можно достичь цели:

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

введите описание изображения здесь

решение2

Тем временем я не сдавался в поисках решения. Настойчивость окупилась, и мне удалось найти решение, которое я хочу показать и сделать доступным для всех, кто в этом нуждается.

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

введите описание изображения здесь

Связанный контент