假设我有一篇很长的文章,真的无聊的数据列表 - 比如说 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}
结果是: