我正在尝试使用 导入 csv csvsimple
,并且已经克服了 csv 分隔符的挑战(通过在每个字段周围添加花括号),但现在我遇到了一个公认的奇怪问题。我会更详细地解释,但一个简化的示例足以说明这个问题。
我改编了答案中的示例信息找到这里,但将 csv 数据分离为独立文件。
设jobname.csv
是:
11.0; 12.3; $x^2$; seven$
1.2; 33.11; five; six
让我们的 .tex 文件成为:
\documentclass{article}
\usepackage{booktabs}
\usepackage{csvsimple}
\begin{document}
\begin{tabular}{cccc}
\toprule
1 & 2 & 3 & 4 \\
\midrule
\csvreader[
separator=semicolon,
no head,
late after line=\\,
]{jobname.csv}{}{%
\csvcoli & \csvcolii & \csvcoliii & \csvcoliv
}
\bottomrule
\end{tabular}
\bigskip
\end{document}
当我运行这个时一切都很好。
当我包含一个数组或一些使用&
和的类似环境时,就会出现这个问题\\
。
将内容更改jobname.csv
为:
11.0; 12.3; $x^2$; \begin{array}{cc}2 & 4 \\ 6 & 8\end{array}
1.2; 33.11; five; six
当我运行这个时,一切都是不太好据我所知,\\
导致了问题,然后 TeX 尝试将解释&
为表格环境的一部分。
我理解这类似于这个问题,但我担心自动转换我的 csv 数据以适应这些数据会非常困难,因为我的实际项目已经包含大约 300 个 LaTeX 片段单元。
答案1
首先需要在文件中$
添加环境:array
jobname.csv
11.0; 12.3; $x^2$; $\begin{array}{cc}2 & 4 \\ 6 & 8\end{array}$
1.2; 33.11; five; six
使用csvsimple-l3
(2.1.0 2021-07-06)你可以得到你想要的:
\documentclass{article}
\usepackage{booktabs}
\usepackage[l3]{csvsimple}
\begin{document}
\csvreader[
tabular=cccc,
table head=\toprule 1 & 2 & 3 & 4 \\ \midrule,
separator=semicolon,
no head,
late after line=\\,
late after last line=\\\bottomrule,
]{jobname.csv}{}{%
\csvcoli & \csvcolii & \csvcoliii & \expandafter\unexpanded\expandafter{\csvcoliv}
}
\end{document}
答案2
以下是使用 的替代方法readarray
。
%dbA
\begin{filecontents*}[overwrite]{databaseA.csv}
11.0; 12.3; $x^2$; $\begin{array}{cc}2 & 4 \\ 6 & 8\end{array}$
1.2; 33.11; five; six
\end{filecontents*}
\documentclass{article}
\usepackage{readarray}[2021-08-08]
\renewcommand\typesetrowsepchar{\\}
\renewcommand\typesetcolsepchar{&}
\begin{document}
\readarraysepchar{;}
\readdef{databaseA.csv}\dbA
\readarray\dbA\arrayA[-,\ncols]
\begin{tabular}{cccc}
\hline
\typesetarray\arrayA\\
\hline
\end{tabular}
\end{document}