我想从带有分隔符的字符串创建项目符号列表。
我的示例中的分隔符是|
示例字符串:
This is|A bullet|List from|A string
我想让它变成像这样的项目符号列表:
- 这是
- 一颗子弹
- 列表来自
- 字符串
我需要做什么?需要一些额外的软件包吗?
我可以使用任何分隔符,但,
由于字符串来自使用 csvsimple 进行解析的 CSV 文件,因此这样会更容易。
MWE(在回答建议之后):
\documentclass{scrreprt}
\usepackage{csvsimple}
\usepackage{etoolbox}
\csvreader[head to column names]{content/usecases.csv}{}{%
\begin{table}
\begin{tabular}{|l|l|}
\hline
Name & \ucname \\ \hline
Pre conditions &
\begin{itemize}
\renewcommand*{\do}[1]{\item #1}%
\ListParser{\preconditions} %
\end{itemize} \\ \hline
\end{tabular}
\end{table}
}
\end{document}
CSV 示例:
ucname,precondition
test,This is|A test
test2,Barely
test3,No List
test4,List|Again|Here
后续内容发布于此处:使用带分隔符的字符串自动生成表格内的列表项
答案1
您可以使用包定义自己的列表解析器etoolbox
:
笔记:
- 你能列表元素中有逗号,和仍然使用逗号作为分隔符,通过应用额外的分组,如下面的第二个 MWE 所示。
代码:用作|
分隔符
\documentclass{article}
\usepackage{etoolbox}
\DeclareListParser{\MyListParser}{|}
\begin{document}
\begin{itemize}
\renewcommand*{\do}[1]{\item #1}%
\MyListParser{This, has a comma in it|A bullet, and also a comma|List from|A string}%
\end{itemize}
\end{document}
代码:用作,
分隔符
\documentclass{article}
\usepackage{etoolbox}
\DeclareListParser{\MyListParser}{,}
\begin{document}
\begin{itemize}
\renewcommand*{\do}[1]{\item #1}%
\MyListParser{{This, has a comma in it},{A bullet, and also a comma},{List from},{A string}}%
\end{itemize}
答案2
xparse
以下是使用和的方法expl3
。该命令\parselist
有一个可选参数(分隔符,默认为|
)和两个强制参数
列名,或者一般来说,包含分隔数据的控制序列和
要执行的代码,其中
#1
代表当前项(拆分后)。
在下面的例子中,标记为 ,##1
因为\parselist
是 的参数\csvreader
。
\documentclass{scrreprt}
\usepackage{csvsimple,array}
\usepackage{xparse}
\ExplSyntaxOn
\NewDocumentCommand{\parselist}{O{|}mm}
{% #1 is the delimiter, #2 is the column name, #3 is the code to use
\nielsen_parselist:nnn { #1 } { #2 } { #3 }
}
\seq_new:N \l__nielsen_data_seq
\cs_new_protected:Npn \nielsen_parselist:nnn #1 #2 #3
{
\seq_set_split:Nnf \l__nielsen_data_seq { #1 } { #2 }
\seq_map_inline:Nn \l__nielsen_data_seq { #3 }
}
\cs_generate_variant:Nn \seq_set_split:Nnn { Nnf }
\ExplSyntaxOff
\begin{document}
\csvreader[head to column names]{\jobname.csv}{}{%
\begin{table}
\centering
\begin{tabular}{|l|l|}
\hline
Name & \ucname \\ \hline
Pre conditions &
\begin{minipage}[t]{.3\textwidth}
\begin{itemize}
\parselist{\preconditions}{\item ##1}
\vspace{\smallskipamount}
\end{itemize}
\end{minipage} \\
\hline
\end{tabular}
\end{table}
}
\end{document}