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}
\mystrangeitemize
també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 \item
comando seja gerado).
Em ambos os casos, se você quiser declarar itens contendo vários parágrafos ( \par
os tokens devem ser aceitáveis no argumento de \mystrangeitemize
), substitua m
por +m
in \NewDocumentCommand \mystrangeitemize { m }
.
etoolbox
também pode \docsvlist
ser usado para essa finalidade, e você também poderá ver alguém postar uma solução baseada em listofitems
. :-)