如何在 readarray 中排版单个平面?

如何在 readarray 中排版单个平面?

我正在将一个包含两组数据的文本文件读入 \LaTex。两组数据之间用空行分隔。我试图将一组数据排版到一个表中,将第二组数据排版到用 \hline 分隔的同一个表中。这可能吗?

这是我的数据:(抱歉,我不明白如何 \define 它才能形成真正的 mwe……)

10,100
5,100
2,99
0.85,98
0.425,92
0.25,60
0.15,31
0.075,9

0.0274,9.4
0.0176,9.1
0.0107,8.0
0.007,6.9
0.0059,5.6
0.0031,3.7
0.0013,2.5

以下是我的想法:

\documentclass[letterpaper,11pt]{standalone} 
\usepackage{readarray} 


\begin{document}
\readarraysepchar{,}
\renewcommand\typesetplanesepchar{\\\hline}
\renewcommand\typesetrowsepchar{\\}
\renewcommand\typesetcolsepchar{&}

\readdef{../01data/data.csv}\data
\readarray\data\array[-,\nrows,\ncols]

\centering
\begin{tabular}{c|c}
Seive& Passing\\
size & \\
(mm) & (\%)\\
\hline
\typesetarray\array[1,\nrows,\ncols]\\
\hline
\typesetarray\array[2,\nrows,\ncols]\\
\end{tabular}

\end{document}

输出如下

表格中有两次相同的数据,并且最后一个单元格后面有不需要的信息

我得到的输出不显示第二组数据,而只显示第一组数据。此外,输出最后显示了一些不需要的数据。有人能帮我理解发生了什么吗?

答案1

我不知道如何用 来做这件事readarray,但我可以用 来做expl3

\begin{filecontents*}{\jobname.dat}
10,100
5,100
2,99
0.85,98
0.425,92
0.25,60
0.15,31
0.075,9

0.0274,9.4
0.0176,9.1
0.0107,8.0
0.007,6.9
0.0059,5.6
0.0031,3.7
0.0013,2.5
\end{filecontents*}

\documentclass{article}

\ExplSyntaxOn

% user level command
\NewDocumentCommand{\tablefromfile}{m}
 {
  \cmp_table_from_file:n { #1 }
 }

% the input stream
\ior_new:N \g_cmp_table_from_file_ior
% the table body container
\tl_new:N \l_cmp_table_from_file_body_tl

% the internal function
\cs_new_protected:Nn \cmp_table_from_file:n
 {
  % keep changes to \endlinechar local
  \group_begin:
  % no end line character
  \int_set:Nn \endlinechar { -1 }
  % clear the body
  \tl_clear:N \l_cmp_table_from_file_body_tl
  % open the input stream
  \ior_open:Nn \g_cmp_table_from_file_ior { #1 }
  % read line by line and populate the body
  \ior_map_inline:Nn \g_cmp_table_from_file_ior
   {
    \__cmp_table_from_file_add:n { ##1 }
   }
  % close the stream
  \ior_close:N \g_cmp_table_from_file_ior
  % print the table
  \begin{tabular}{c|c}
  Seive & Passing \\
  size \\
  (mm) & (\%) \\
  \hline
  \tl_use:N \l_cmp_table_from_file_body_tl
  \end{tabular}
  % end the group
  \group_end:
 }

% the auxiliary function
\cs_new_protected:Nn \__cmp_table_from_file_add:n
 {
  \tl_if_blank:nTF { #1 }
   {% the line is empty: add \hline
    \tl_put_right:Nn \l_cmp_table_from_file_body_tl { \hline }
   }
   {% the line is not empty: split the comma list in the components
    % and add them to the body
    \tl_put_right:Nx \l_cmp_table_from_file_body_tl
     { \clist_item:nn { #1 } { 1 } & \clist_item:nn { #1 } { 2 } \exp_not:N \\ }
   }
 }
\ExplSyntaxOff

\begin{document}

\tablefromfile{\jobname.dat}

\end{document}

我使用filecontents*只是为了避免破坏我的文件,您可以在参数中使用任何文件名\tablefromfile

在此处输入图片描述

相关内容