使用带分隔符的字符串自动生成表格内的列表项

使用带分隔符的字符串自动生成表格内的列表项

这是对该问题的后续回答:使用分隔符从字符串创建项目符号列表

我有一个 CSV 文件,我从中生成了一些表格。其中一些表格单元格将包含应逐项列出的项目。

梅威瑟:

\documentclass{scrreprt}
\usepackage{csvsimple}
\usepackage{etoolbox}
\DeclareListParser{\ListParser}{|}
\newcommand{\listItems}[1]{
    \parbox{10cm}{
        \begin{itemize}
            \newcommand*{\do}[1]{\item[] ##1}
            \expandafter\ListParser\expandafter{#1}
            \ListParser{#1}
        \end{itemize}
    }
}
\begin{document}
  \csvreader[head to column names]{content/usecases.csv}{}{%
    \begin{table}
      \begin{tabular}{|l|l|}
        \hline
        Name     & \ucname \\ \hline
        Trigger  & \listItems{\trigger} \\ \hline
      \end{tabular}
    \end{table}
  }
\end{document}

CSV 示例:

ucname,trigger
test,This is|A test
test2,Barely
test3,No List
test4,List|Again|Here

但是,当前代码给我的输出是整个字符串的\trigger两倍,并且没有分隔符。

答案1

您需要扩展处理的列表两次,并且只处理列表一次:

\documentclass{scrreprt}
\usepackage{filecontents}
\begin{filecontents*}{usecases.csv}
ucname,trigger
test,This is|A test
test2,Barely
test3,No List
test4,List|Again|Here
\end{filecontents*}

\usepackage{csvsimple}
\usepackage{etoolbox}
\DeclareListParser{\ListParser}{|}
\newcommand{\listItems}[1]{%
  \parbox{10cm}{%
    \begin{itemize}%
      \renewcommand{\do}[1]{\item[] ##1}
      \expandafter\expandafter\expandafter\ListParser\expandafter\expandafter\expandafter{#1}
    \end{itemize}%
  }%
}
\begin{document}
\csvreader[head to column names]{usecases.csv}{}{%
  \begin{table}
    \begin{tabular}{|l|l|}
      \hline
      Name     & \ucname \\ \hline
      Trigger  & \listItems{\trigger} \\ \hline
    \end{tabular}
  \end{table}
}
\end{document}

在此处输入图片描述

相关内容