通过命令创建列表

通过命令创建列表

有没有办法我可以做类似的事情

\createlist{listone} % A description list specifically
\additem{listone}{item1}{description1}
\additem{listone}{item2}{description2}
 .
 .
 .
\makelist{listone}

我真的不知道该如何开始用谷歌搜索这个(试过但失败了)。如果你能给我指出任何文档或告诉我是否有可能创建这样的函数,那就太棒了!谢谢!

此外,如果您能指出该问题的正确标签,我将非常感激。


编辑:

这个想法是,你可以有各种“列表”,你可以在其中添加任意数量的项目.tex。然后,当你使用命令时,你决定输出该描述列表\makelist

答案1

xparse您可以使用和 来完成expl3

\documentclass{article}
\usepackage{xparse}

\ExplSyntaxOn

\NewDocumentCommand{\createlist}{m}
 {
  \seq_new:c { g_mo_list_#1_seq }
 }
\NewDocumentCommand{\additem}{mmm}
 {
  \seq_gput_right:cn { g_mo_list_#1_seq } { {#2}{#3} }
 }
\NewDocumentCommand{\makelist}{m}
 {
  \begin{description}
  \seq_map_function:cN { g_mo_list_#1_seq } \__mo_list_item:n
  \end{description}
 }
\cs_new:Nn \__mo_list_item:n { \__mo_list_item:nn #1 }
\cs_new:Nn \__mo_list_item:nn { \item[#1] #2 }

\ExplSyntaxOff

\begin{document}

\createlist{listone} % A description list specifically
\additem{listone}{item1}{description1}
\additem{listone}{item2}{description2}

\makelist{listone}

\end{document}

在此处输入图片描述

更灵活的实现,您可以改变列表的格式。

键的值command可以使用#1#2来引用项目的两个部分。

\documentclass{article}
\usepackage{xparse}

\ExplSyntaxOn

\NewDocumentCommand{\createlist}{m}
 {
  \seq_new:c { g_mo_list_#1_seq }
 }
\NewDocumentCommand{\additem}{mmm}
 {
  \seq_gput_right:cn { g_mo_list_#1_seq } { \__mo_list_do:nn {#2}{#3} }
 }
\NewDocumentCommand{\makelist}{O{}m}
 {
  \group_begin:
  \keys_set:nn { mo/list } { #1 }
  \l__mo_list_pre_tl
  \seq_use:cn { g_mo_list_#2_seq } { }
  \l__mo_list_post_tl
  \group_end:
 }
\keys_define:nn { mo/list }
 {
  pre     .tl_set:N  = \l__mo_list_pre_tl,
  post    .tl_set:N  = \l__mo_list_post_tl,
  command .code:n    = \cs_set:Nn \__mo_list_do:nn { #1 },
  pre     .initial:n = { \begin{description} },
  post    .initial:n = { \end{description} },
  command .initial:n = \item[#1] #2,
 }
\ExplSyntaxOff


\begin{document}

\createlist{listone} % A description list specifically
\additem{listone}{item1}{description1}
\additem{listone}{item2}{description2}

\makelist{listone}

\bigskip

\makelist[
  pre=\begin{tabular}{ll} Item & Description \\ \hline,
  post=\end{tabular},
  command=#1 & #2 \\,
]{listone}

\end{document}

在此处输入图片描述

相关内容