我尝试实施找到的解决方案这里包含多个列,但对我来说不起作用。它只是将第三列复制了三次。我做错了什么?我知道我不需要为这些数据专门制作一个长表,但这只是一个缩短的版本,我遇到的问题仍然存在。
\begin{filecontents*}{sample_data.csv}
Col1,Col2,Col3,ColPct
111,65,64,5\%
112,30,5,6\%
113,92,1,8.4\%
114,47,19,20\%
115,38,15,1\%
\end{filecontents*}
\documentclass{article}
\usepackage{csvsimple,longtable,booktabs}
\begin{document}
\csvreader[
longtable=lrrrr,
table head=
\toprule\bfseries Col1 &\bfseries Col2 & \bfseries Col3 & \bfseries ColPct\\
\midrule\endhead\bottomrule\endfoot,
late after line=\\,
before reading={\catcode`\#=12},after reading={\catcode`\#=6}
]{Data/sample_data.csv}{1=\Item,2=\Item, 3=\Item, 4=\Percentage}
{\Item & \Item & \Item & \Percentage}
\end{document}
答案1
对要导入的每一列使用唯一的宏,将产生所需的输出:
\begin{filecontents*}{sample_data.csv}
Col1,Col2,Col3,ColPct
111,65,64,5\%
112,30,5,6\%
113,92,1,8.4\%
114,47,19,20\%
115,38,15,1\%
\end{filecontents*}
\documentclass{article}
\usepackage{csvsimple,longtable,booktabs}
\begin{document}
\csvreader[
longtable=lrrrr,
table head=
\toprule\bfseries Col1 &\bfseries Col2 & \bfseries Col3 & \bfseries ColPct\\
\midrule\endhead\bottomrule\endfoot,
late after line=\\,
before reading={\catcode`\#=12},after reading={\catcode`\#=6}
]{sample_data.csv}{1=\ColOne, 2=\ColTwo, 3=\ColThree, 4=\Percentage}
{\ColOne & \ColTwo & \ColThree & \Percentage}
\end{document}
来自csvsimple 手册:
该
csvsimple
包用于处理 CSV 文件。此处理由键值分配控制 [...]
请参阅:简介,第 1 页
\csvreader[<options>]{<file name>}{<assignments>}{<command list>}
[...]<assignments>
由键值对给出<name>=<macro>
。这里,<name>
是来自标题行的条目或所寻址列的阿拉伯数字。<macro>
是一些获取所寻址列内容的 TEX 宏。[...]
请参阅:用于处理 CSV 文件的宏,第 8 页
如果您对两个不同的列使用相同的宏,则将第一列的内容分配给此宏。通过分配第二列的内容,您可以覆盖第一个分配。这将导致观察到的输出,其中具有相同宏的所有列都包含最后一列的内容。
答案2
顺便说一句,这是一个使用该包的示例datatool
。与相比,我发现它的方法更容易理解csvsimple
。
\begin{filecontents*}{sample_data.csv}
Col1,Col2,Col3,ColPct
111,65,64,5\%
112,30,5,6\%
113,92,1,8.4\%
114,47,19,20\%
115,38,15,1\%
\end{filecontents*}
\documentclass{article}
\usepackage{datatool,longtable,booktabs}
\begin{document}
\DTLloaddb{data}{sample_data.csv}
The table displayed straight up (using longtable).
\DTLdisplaylongdb{data}
The table displayed in a specific format.
\begin{tabular}{l*{3}{r}}
\toprule
\textbf{Col1} &\textbf{Col2} &\textbf{Col3} &\textbf{ColPct}
\DTLforeach*{data}{\1=Col1, \2=Col2, \3=Col3, \4=ColPct}
{%
\DTLiffirstrow{\\ \midrule}{\\}%
\1 & \2 & \3 & \4 %
}
\\ \bottomrule
\end{tabular}
\end{document}