我尝试将 CSV 文件格式化为表格,但遇到了一个问题,即csvsimple
在文件中出现 % 符号后,包会重复头部元素。考虑以下 MWE(从我原来的 classicthesis 文件中大大减少):
\documentclass[paper=a4]{scrreprt}
\RequirePackage{tabularx}
\usepackage{filecontents}
\RequirePackage{csvsimple}
\csvset{every csv/.style={
separator=semicolon,
respect percent
}}
\begin{filecontents*}[overwrite]{Courses.csv}
A;B;C;D;E;F;G;Portion;H;I
a;b;c;d;e;f;g;100%;1,00;3,00
a;b;c;d;e;f;g;100%;2,00;4,00
\end{filecontents*}
\begin{document}
\begin{table}[h]
\centering
\begin{tabularx}{\textwidth}{XXXXXXXXXX}
\csvreader[no head, late after line=\\]{Courses.csv}{}{\csvlinetotablerow}\\
\end{tabularx}
\end{table}
\end{document}
请注意,第一和第二个数据行(表格的第二行和第三行)中缺少 % 符号,并且最后两列填充的是列标题而不是内容。我验证了 csvsimple 是否配置为尊重 % 符号(请参阅包选项),并且 filecontents 的输出实际上是正确的。(注意:即使respect all
不改变此行为)
奇怪的是,如果我删除该no head
标志,csvsimple 会正确打印第一个表行,但会跳过所有剩余行。即使我添加了 100 行,也只会打印 1 行:
我有点不知道还能尝试什么。如何配置/说服 csvsimple 正确打印表格中的所有行?
答案1
cvssimple 在本地设置百分比字符的 catcode,而在单元格组成组的表格中,它又丢失了。在 tabularx 之前更改它:
\documentclass[paper=a4]{scrreprt}
\RequirePackage{tabularx}
\usepackage{filecontents}
\RequirePackage{csvsimple}
\csvset{every csv/.style={
separator=semicolon,
respect percent
}}
\begin{filecontents*}[overwrite]{Courses.csv}
A;B;C;D;E;F;G;Portion;H;I
a;b;c;d;e;f;g;100%;1,00;3,00
a;b;c;d;e;f;g;100%;2,00;4,00
\end{filecontents*}
\begin{document}
\begin{table}[h]
\centering
\catcode`\%=12
\begin{tabularx}{\textwidth}{XXXXXXXXXX}
\csvreader[no head, late after line=\\]{Courses.csv}{}{\csvlinetotablerow}\\
\end{tabularx}
\end{table}
\end{document}