我尝试将 CSV 数据导入表格。CSV 文件没有标题,我想在不编辑 CSV 文件的情况下在表格中包含标题。我该怎么做?
以下是基于我迄今为止的方法的 MWE:
\documentclass{article}
\usepackage{csvsimple}
\usepackage{booktabs}
\begin{filecontents*}[overwrite]{test.csv}
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12
\end{filecontents*}
\begin{document}
\section*{Table with 12 columns}
\csvreader[no head,
tabular = *{12}{c}
table head = \toprule\bfseries Col a & \bfseries Col b & \bfseries Col c & \bfseries Col d & \bfseries Col e & \bfseries Col f & \bfseries Col g & \bfseries Col h & \bfseries Col i & \bfseries Col j & \bfseries Col k & \bfseries Col l\\\midrule,
table foot = \bottomrule]
{test.csv}
{1=\cola,2=\colb,3=\colc,4=\cold,5=\cole,6=\colf,7=\colg,8=\colh,9=\coli,10=\colj,11=\colk,12=\coll}
{\cola & \colb & \colc & \cold & \cole & \colf & \colg & \colh & \coli & \colj & \colk & \coll}
\section*{Table with 9 columns}
\csvreader[no head,
tabular = *{9}{c}
table head = \toprule \bfseries Col 1& \bfseries Col 2& \bfseries Col 3& \bfseries Col 4& \bfseries Col 5& \bfseries Col 6& \bfseries Col 7& \bfseries Col 8& \bfseries Col 9\\\midrule,
table foot = \bottomrule]
{test.csv}
{1=\cola,2=\colb,3=\colc,4=\cold,5=\cole,6=\colf,7=\colg,8=\colh,9=\coli}
{\cola & \colb & \colc & \cold & \cole & \colf & \colg & \colh & \coli}
\end{document}
这是错误的输出:
另外,您可能会注意到,如果我导入 9 列,则所有列都会被导入。但是,如果我导入所有 12 列,则只有 10 列会被导入。如何修复此问题?
答案1
只需添加缺失的逗号(tabular = *{12}{c},
)并使用最新版本:cvsimple-l3
添加geometry
以更改边距。否则表格将溢出页面。
\documentclass{article}
\usepackage{csvsimple-l3} % new version
\usepackage{booktabs}
\usepackage[left=3.00cm, right=3.00cm, top=4.00cm, bottom=3.00cm]{geometry}% to change the margins
\begin{filecontents*}[overwrite]{test.csv}
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12
\end{filecontents*}
\begin{document}
\section*{Table with 12 columns}
\csvreader[no head,
tabular = *{12}{c}, %<<<<<<<<<<<<<<<<<<
table head = \toprule\bfseries Col a & \bfseries Col b & \bfseries Col c & \bfseries Col d & \bfseries Col e & \bfseries Col f & \bfseries Col g & \bfseries Col h & \bfseries Col i & \bfseries Col j & \bfseries Col k & \bfseries Col l\\\midrule,
table foot = \bottomrule]
{test.csv}
{1=\cola,2=\colb,3=\colc,4=\cold,5=\cole,6=\colf,7=\colg,8=\colh,9=\coli,10=\colj,11=\colk,12=\coll}
{\cola & \colb & \colc & \cold & \cole & \colf & \colg & \colh & \coli & \colj & \colk & \coll}
\section*{Table with 9 columns}
\csvreader[no head,
tabular = *{9}{c}, %<<<<<<<<<<<<<<<<<<
table head = \toprule \bfseries Col 1& \bfseries Col 2& \bfseries Col 3& \bfseries Col 4& \bfseries Col 5& \bfseries Col 6& \bfseries Col 7& \bfseries Col 8& \bfseries Col 9\\\midrule,
table foot = \bottomrule]
{test.csv}
{1=\cola,2=\colb,3=\colc,4=\cold,5=\cole,6=\colf,7=\colg,8=\colh,9=\coli}
{\cola & \colb & \colc & \cold & \cole & \colf & \colg & \colh & \coli}
\end{document}
答案2
不确定你这里是否真的有问题。也许我忽略了什么。
(您的 MWE 被破坏了,因为 CSV 的生成实际上不是 MWE 的一部分; test.csv
它只是一个先决条件文件)
无论如何,回顾一下一些工作示例:
参考(示例等)https://github.com/TFS/csvsimple/blob/master/doc/latex/csvsimple/csvsimple-l3.tex
关于你的问题,我想到了这一点:
我已将您的 MWE 简化为一个非常小的工作示例:
一、前提条件:
$ cat > test.csv
1, 2
3, 4
5, 6
^D
然后是 LaTeX:
\documentclass{article}
\usepackage{csvsimple}
\usepackage{booktabs}
\begin{document}
\section*{Table with 2 columns}
\csvreader[no head,
tabular = {cc},
table head = \toprule\bfseries Col a & \bfseries Col b \\ \midrule,
table foot = \bottomrule]
{test.csv}{%
1=\cola, 2=\colb
} { \cola & \colb }
\end{document}
做了:
$ latex mwe.tex
结果包含列标题Col a
和Col b
您想要的内容。
我个人不会将列标题与数据分开,但这是一个与数据和描述数据的标题的一致性有关的样式问题。无论如何,这与您的问题无关。
我认为你没问题。只需重新检查一下你的结果。为了简洁起见,我将其缩减为两列。真正的缺陷似乎是使用:
tabular = *{12}{c}
我尝试过:tabular = *{2}{c}
仅针对 two 并收到数组 arg 中非法字符的错误。将其更改为{cc}
。编辑您的以适应。