我在用listofitems
包来解析列表。然后我想将结果输入到一个表中(具体细节取决于项目索引)。作为第一步,我尝试迭代这个列表并A &
为每个项目写入A
,但这会产生一条Undefined control sequence
错误消息。以下是最小(非)工作示例:
\documentclass{standalone}
\usepackage{listofitems}
\begin{document}
\readlist\list{a,b,c,d}
\begin{tabular}{*{5}{c}}
\foreachitem \listitem \in \list {\listitem &} & z
\end{tabular}
\end{document}
删除&
后\listitem &
编译并按预期生成abcd z
。所以我猜这是某种扩展问题。我该如何解决这个问题?
我们也欢迎您提出使用其他软件包的建议。
答案1
循环\foreachitem
从的一个单元格开始,tabular
并在另一个单元格中结束,这是不可能的。
我的建议是使用expl3
,这很简单
\documentclass{article}
\ExplSyntaxOn
\NewDocumentCommand{\definelist}{mm}
{
\clist_clear_new:c { l_smolensky_list_#1_clist }
\clist_set:cn { l_smolensky_list_#1_clist } { #2 }
}
\NewDocumentCommand{\uselist}{mm}
{
\clist_use:cn { l_smolensky_list_#1_clist } { #2 }
}
\NewExpandableDocumentCommand{\uselistsize}{m}
{
\clist_count:c { l_smolensky_list_#1_clist }
}
\ExplSyntaxOff
\definelist{list}{a,b,c,d}
\begin{document}
\begin{tabular}{*{\uselistsize{list}}{c}c}
\uselist{list}{&} & z
\end{tabular}
\end{document}
这些项目将由第二个强制参数中的标记分隔\uselist
。我还添加了\uselistsize
一个可能的用例。
不同之处在于\foreachitem
,它将\clist_use:cn
“一次性”生成标记,因此&
仅当命令\clist_use:cn
已完成其全部工作并且不存在重叠单元的问题时,才会看到标记。
listofitems
如果愿意,您还可以使用:
\documentclass{standalone}
\usepackage{listofitems}
\def\foreachitemdeliver#1#2{%
\begingroup
\def\foreachitemdeliverpartial{}%
\def\foreachitemdeliveraction##1{#2}%
\foreachitem\foreachitemitem\in#1{%
\edef\foreachitemdeliverpartial{%
\unexpanded\expandafter{\foreachitemdeliverpartial}%
\unexpanded\expandafter\expandafter\expandafter{%
\expandafter\foreachitemdeliveraction\expandafter{\foreachitemitem}%
}%
}%
}%
\expandafter\endgroup\foreachitemdeliverpartial
}
\begin{document}
\readlist\list{a,b,c,d}
\begin{tabular}{*{5}{c}}
\foreachitemdeliver\list{#1 &} z
\end{tabular}
\end{document}
答案2
我不知道listofitems
,但回答你的“使用其他软件包的建议”我建议你研究一下pgfplotstable
这是来自 CTAN 的 PGF/TikZ 角落。用户手册中的第 3 章涵盖了您的用例(读取表格数据、生成排版tabular
)。
\documentclass{article}
\usepackage{pgfplotstable}
\usepackage{pgfcalendar}
\usepackage{booktabs}
\begin{document}
\pgfplotstabletypeset[
columns={date,account3,account2,account1},
column type={r},
columns/date/.style={date type={\monthname\ \year}},
columns/account1/.style={fonts by sign={}{\color{red}}},
every head row/.style={before row=\toprule,after row=\midrule},
every last row/.style={after row=\bottomrule}
]{
date account1 account2 account3
2008-01-03 60 1200 400
2008-02-06 120 1600 410
2008-03-15 -10 1600 410
2008-04-0 11800 500 410
2008-05-20 2300 500 410
2008-06-15 800 1920 410
}
\hspace{1em}
\pgfplotstabletypeset[
col sep=comma,
string type,
every head row/.style={before row=\toprule},
every last row/.style={after row=\bottomrule}
]{%
a,b,c,d,e
d,e,f,f,g
}
\end{document}