Comando Itemize com número variável de itens

Comando Itemize com número variável de itens

Estou procurando criar um comando que possa fornecer um número variável de entradas e colocá-las em uma lista detalhada. Algo como

\myitemize{First item}{Second item}{Third item}

produziria

Enquanto algo como

\myitemize{First item}{Second item}

produziria

Também não sou exigente com a formatação. Poderia ser algo como

\myitemize[First item, second item, third item]{3}

Só não quero alterar manualmente o \begin{itemize} \end{itemize}para incluir outra linha e outro arquivo \item. Obrigado!

Responder1

A primeira abordagem é implementada emMacro que recebe um número variável de argumentos e cria uma tabela com uma linha por argumento. Não deixe de ler todos os comentários lá. Em particular, isto é possivelmentenão é um ótimo estilo de marcação.

A segunda abordagem é fácil de implementar expl3(você nem precisa especificar o número de elementos), por exemplo:

\documentclass{article}
\usepackage{xparse}

\ExplSyntaxOn

\seq_new:N \l__ryanj_tmp_seq

\cs_new_protected:Npn \ryanj_output_items:n #1
  {
    \seq_set_from_clist:Nn \l__ryanj_tmp_seq {#1}
    \seq_use:Nn \l__ryanj_tmp_seq { \item }
  }

\NewDocumentCommand \mystrangeitemize { m }
  {
    \begin{itemize}
    \item
    \ryanj_output_items:n {#1}
    \end{itemize}
  }

\ExplSyntaxOff

\begin{document}
  \mystrangeitemize{First item, Second item, Third item,
                    {Item, containing, commas.}}
\end{document}

\mystrangeitemizetambém poderia ser implementado desta forma:

\NewDocumentCommand \mystrangeitemize { m }
  {
    \begin{itemize}
    \ryanj_output_items:n { {}, #1 }
    \end{itemize}
  }

(o item vazio adicionado faz com que o primeiro \itemcomando seja gerado).

Em ambos os casos, se você quiser declarar itens contendo vários parágrafos ( \paros tokens devem ser aceitáveis ​​no argumento de \mystrangeitemize), substitua mpor +min \NewDocumentCommand \mystrangeitemize { m }.

Captura de tela

etoolboxtambém pode \docsvlistser usado para essa finalidade, e você também poderá ver alguém postar uma solução baseada em listofitems. :-)

informação relacionada