我目前遇到一个问题,当使用时,我只能获得表中显示的列的csvsimple
标题\csvautotabular
。
我用来生成此代码的当前代码是
\documentclass{report}
\usepackage[utf8]{inputenc}
\usepackage{csvsimple}
\begin{document}
\csvautotabular[respect all]{test_utf8.csv}
\end{document}
我已经使用了 test.csv
Name,Battery %,Last updated
L1 A / B (C),5%,"Sept. 1, 2021, 00:00 a.m."
G D,12%,"Aug. 31, 2021, 9:09 a.m."
L2 E / F (G),80%,"Feb. 21, 2021, 10:00 a.m."
我相信它具有我的其他 csv 文件所需的通用格式。
答案1
两个改变解决了这个问题:
更改
\csvautotabular[respect all]{test_utf8.csv}
为\csvautotabular[respect percent]{test_utf8.csv}
(以及其他应被解释为普通字符的特殊字符)。隐藏不是分隔符的逗号:
Name,Battery %,Last updated L1 A B (C),5%,{Sept. 1, 2021, 0000 a.m.} G D,12%,{Aug. 31, 2021, 909 a.m.} L2 E F (G),80%,{Feb. 21, 2021, 1000 a.m.}
因为您需要用花括号来屏蔽可能包含逗号的块以便不将其作为分隔符处理,所以您不应该选择respect all
。
答案2
我想利用这个空间来展示一下该readarray
包最近添加的(v3.0 2021-08-08)创建tabular
s 的功能。由于该文件包含原始%
标记并使用引号分组"..."
,因此我需要进行一些设置才能消化它。
基本上,\readdef
宏将文件的内容放入中\def
,而\readarray
宏将的内容放入\def
数组中。
该宏是新引入的,并使用名为的\typesetarray
辅助宏(也用于 3-D)来格式化排版,因为它们插入在行、列和/或平面之间。\typesetrowsepchar
\typesetcolsepchar
\typesetplanesepchar
已编辑,将 catcode 内容放在其自己的宏中,从而减轻调用设置的负担。因此,\readdef
调用被替换为,\readdefquotespercents
以便自动将原始%
标记消化为字符并使用引号分组。
重新编辑以使用魔法来定义宏内的\lowercase
活动字符。"
\begin{filecontents*}[overwrite]{junk.dat}
Name,Battery %,Last updated
L1 A / B (C),5%,"Sept. 1, 2021, 00:00 a.m."
G D,12%,"Aug. 31, 2021, 9:09 a.m."
L2 E / F (G),80%,"Feb. 21, 2021, 10:00 a.m."
\end{filecontents*}
\documentclass{article}
\usepackage{readarray}[2021-08-08]
\readarraysepchar{,}
\renewcommand\typesetrowsepchar{\\\hline}
\renewcommand\typesetcolsepchar{&}
\newcommand\readdefquotespercents[2]{%
\catcode`\"=\active
\begingroup\lccode`\~=`"
\lowercase{\endgroup\def~##1~}{{##1}}%
\catcode`\%=12 \readdef{#1}#2\catcode`\%=14
\catcode`\"=12
\edef\tabdata{\tabdata}% CONVERT QUOTED PHRASES
}
\begin{document}
\readdefquotespercents{junk.dat}\tabdata
\readarray\tabdata\tabarray[-,\ncols]% PLACE def INTO ARRAY
\begin{tabular}{|c|c|c|}
\hline
\typesetarray\tabarray\\
\hline
\end{tabular}
\end{document}