读取和(自定义)格式化 CSV(不是 \csvautotabular)

读取和(自定义)格式化 CSV(不是 \csvautotabular)

假设我有一篇很长的文章,真的无聊的数据列表 - 比如说 CSV,但当可以自动完成时,转换为其他格式是一种选择 - 并且我想在我的 LaTeX 文档中准备一个部分,使用它作为数据源。

csvautotabular 并不完全符合我的要求,我希望能够以自定义的方式做到这一点 - 例如:

foo,酒吧,baz;
嘭,嘭,嘭;

对于输入和输出(又名:在 .dvi 中),看起来像这样:

\开始{某些环境}
\command1{foo} \command2{bar} \command3{baz}
\somecommand % 结束记录 1
\command1{压缩} \command2{轰隆} \command3{砰}
\somecommand % 结束记录 2
\结束{某些环境}

\someenvironment可能是或可能不是表格环境,并且command1是我或其他人已经定义的命令和别名。

我想避免用某种语言准备一个脚本来读取我的数据并输出上述内容(诚然,很容易),因为我正在与其他人合作,我不希望他们每次需要编译他们的 LaTeX 文件时都在数据上运行脚本。

任何暗示,无论多小,都会受到赞赏。

谢谢!

答案1

请使用csvsimple版本1.12 (2014/07/14)(或更新版本)。

在我的代码中,我创建了一个辅助宏\commandThreeX,用于删除输入行末尾的分号。其余部分非常简单,使用\csvreader

\begin{filecontents*}{example.csv}
foo,bar,baz;
zip,boom,bang;
\end{filecontents*}

\documentclass{article}
\usepackage{csvsimple}

%%%% Your Macros %%%%
\newenvironment{someenvironment}{BEGINENV\par}{\par ENDENV}

\newcommand\commandOne[1]{ONE(#1)}
\newcommand\commandTwo[1]{TWO(#1)}
\newcommand\commandThree[1]{THREE(#1)}
\newcommand\somecommand{ENDRECORD\par}

%%%% Auxiliary %%%%
\def\commandThreeX#1;{\commandThree{#1}}


\begin{document}

\begin{someenvironment}
\csvreader[no head]{example.csv}{}
  {%
    \commandOne{\csvcoli}%
    \commandTwo{\csvcolii}%
    \begingroup\edef\x{\endgroup\noexpand\commandThreeX\csvcoliii}\x%
    \somecommand%
  }
\end{someenvironment}

\end{document}

结果是:

在此处输入图片描述

相关内容