.csv
我正在尝试使用以下文件创建表csvsimple。这是我的文件内容:
Degrees,10,20,30,40,50,60,70,80,90
Time,1.33,0.90,0.72,0.63,0.50,0.43,0.41,0.40,0.38
这是列数未知但行数已知的表格。有没有办法在 LaTex 中根据此表格创建表格?标题Degrees
和行数Time
也应加粗。
非常感谢。
答案1
我建议对文件进行两次循环。第一次循环用于计算列数,第二次循环用于设置表格。
下面的代码实现了一个新的宏\docolumncount
,它将文件名作为第一个参数,并将列数减 1 保存到第二个参数中,这里\mycolumncount
。
这用于设置表格:
\begin{filecontents*}{example.csv}
Degrees,10,20,30,40,50,60,70,80,90
Time,1.33,0.90,0.72,0.63,0.50,0.43,0.41,0.40,0.38
\end{filecontents*}
\documentclass{article}
\usepackage{booktabs,etoolbox,array}
\usepackage{csvsimple}
\makeatletter
\newcommand\docolumncount[2]{%
\csvloop{
file=#1,
command=,
after reading={\numdef\mycolumncount{\csv@columncount-1}},
}%
}
\makeatother
\begin{document}
\docolumncount{example.csv}{\mycolumncount}
\begin{tabular}{>{\bfseries}l*{\mycolumncount}{r}}
\toprule
\csvloop{
file=example.csv,
no head,
column count=\the\numexpr\mycolumncount+1\relax,
check column count,
command=\csvlinetotablerow,
late after line=\\,
late after last line=\\\bottomrule,
}
\end{tabular}
\end{document}
当然,为了方便起见,计数和餐桌布置可以放入一个宏中。
答案2
只需设置大量的列;如果您没有填满所有列,TeX 不会抱怨。
\begin{filecontents*}{\jobname.csv}
Degrees,10,20,30,40,50,60,70,80,90
Time,1.33,0.90,0.72,0.63,0.50,0.43,0.41,0.40,0.38
\end{filecontents*}
\documentclass{article}
\usepackage{booktabs,array}
\usepackage{csvsimple}
\begin{document}
\section{Good typesetting with \texttt{booktabs}}
\begin{tabular}{>{\bfseries}l*{99}{r}}
\toprule
\csvloop{
file=\jobname.csv,
no head,
command=\csvlinetotablerow,
late after line=\\,
late after last line=\\\bottomrule,
}
\end{tabular}
\section{Bad typesetting with rules}
\begin{tabular}{|>{\bfseries}l|*{99}{r|}}
\hline
\csvloop{
file=\jobname.csv,
no head,
command=\csvlinetotablerow,
late after line=\\\hline,
late after last line=\\\hline,
}
\end{tabular}
\end{document}
注意:我以前\jobname
只是不破坏系统上的文件;更改\jobname
为实际文件名。filecontents*
环境用于使示例自成一体。