使用 listofitems 将列表输入到表格中

使用 listofitems 将列表输入到表格中

我在用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)。

由 pgfplotstable 生成的渲染表格环境

\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}

相关内容