CSV 阅读器偏移表中的前两行

CSV 阅读器偏移表中的前两行

我正在尝试使用 CSV 阅读器(来自csvsimple包)将一些数据打印到表中。但是,我观察到第一列的前两个单元格中存在奇怪的偏移:

\documentclass[12pt,a4paper]{report}
\usepackage{csvsimple}
\usepackage{filecontents}

\begin{document}

\begin{filecontents*}[overwrite]{data.csv}
  x,y,z
  42,43,44
  42,43,44
  42,43,44
  42,43,44
  42,43,44
\end{filecontents*}

\begin{table}[h]
  \centering
  \begin{tabular}{|l|l|l|}
    \hline
    $x$ & $y$ & $z$
    \tabularnewline
    \hline\hline
    42  & 43  & 44  \tabularnewline\hline
    \csvreader[
      head to column names,
      late after line=\tabularnewline\hline]
    {data.csv}{}{
    \x  & \y  & \z
    }
  \end{tabular}
\end{table}


\end{document}

偏移量

这个问题显然来自\csvreader宏(删除第一行硬编码数据不会影响偏移量);使用p{0.5cm}而不是 可以l解决这个问题,但我最好坚持使用l。我在这里遗漏了什么?

我的 TeX 是pdfTeX, Version 3.14159265-2.6-1.40.20 (TeX Live 2019/Debian) (preloaded format=pdflatex 2020.10.20)csvsimplePackage: csvsimple 2019/04/09 version 1.21 LaTeX CSV file processing

UPD:理想情况下,我想保留表格主体和标题的分离,因为这是一个更大的难题的一小部分,我希望能够设计一个复杂的表格标题)

答案1

在此处输入图片描述

\documentclass{article}
\usepackage{csvsimple}

\begin{document}

\begin{filecontents*}[overwrite]{test.csv}
  x,y,z
  42,43,44
  42,43,44
  42,43,44
  42,43,44
  42,43,44
\end{filecontents*}

 \csvautotabular{test.csv}
\csvreader[
tabular = |l|l|l|,
table head = \hline $X$&$Y$ &$Z$\\\hline\hline,
late after line = \\\hline
]{test.csv}{}{%
\csvcoli&\csvcolii & \csvcoliii
}
\end{document}

根据 OP 要求进行编辑

\documentclass{article}
\usepackage{csvsimple}

\begin{document}

\begin{filecontents*}[overwrite]{test.csv}
  x,y,z
  42,43,44
  42,43,44
  42,43,44
  42,43,44
  42,43,44
\end{filecontents*}

 \csvautotabular{test.csv}
 %
 \begin{tabular}{|l|l|l|}\hline%
                $x$ & $y$ & $z$ \\\hline\hline
 \csvreader[
            late after line = \\\hline
            ]
            {test.csv}{}{%
 \csvcoli & \csvcolii & \csvcoliii
 }%
 \end{tabular}
 \end{document}

![在此处输入图片描述

答案2

这是使用 的方法readarray。请确保使用 v3.1 2021-09-17。

\begin{filecontents*}[overwrite]{data.csv}
  x,y,z
  42,43,44
  42,43,44
  42,43,44
  42,43,44
  42,43,44
\end{filecontents*}

\documentclass[12pt,a4paper]{report}
\usepackage{readarray}
\def\firstrow{\hline}
\renewcommand\typesetrowsepchar{\\\firstrow\hline\gdef\firstrow{}}
\renewcommand\typesetcolsepchar{&}
\renewcommand\typesetcell[1]{$#1$}

\begin{document}
\begin{table}[h]
  \centering
  \readarraysepchar{,}
  \readdef{data.csv}\tabdata
  \readarray*\tabdata\tabarray[-,\ncols]
  \begin{tabular}{|l|l|l|}
    \hline
    \typesetarray\tabarray
    \\\hline
  \end{tabular}
\end{table}
\end{document}

在此处输入图片描述

\hline如果从 的定义中去掉\typesetrowsepchar,则得到

在此处输入图片描述

答案3

尽管@js bibra 的回答从技术上解决了这个问题,原来是由于行声明中的换行符(即传递给的最后一个参数\csvreader)而产生了额外的间距。只需更改

\csvreader[
  head to column names,
  late after line=\tabularnewline\hline]
{data.csv}{}{
  \x  & \y  & \z
}

\csvreader[
  head to column names,
  late after line=\tabularnewline\hline]
{data.csv}{}{%
  \x  & \y  & \z
}

无需任何进一步修改即可解决问题。

使固定

更多信息:行末百分号(%)有什么用?

相关内容