Команда «Itemize» с переменным количеством элементов

Команда «Itemize» с переменным количеством элементов

Я хочу создать команду, которой я могу дать переменное количество входных данных, и она поместит их в подробный список. Что-то вроде

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

будет производить

В то время как что-то вроде

\myitemize{First item}{Second item}

будет производить

Я также не придирчив к форматированию. Это может быть что-то вроде

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

Я просто не хочу вручную изменять, \begin{itemize} \end{itemize}чтобы включить еще одну строку и еще одну \item. Спасибо!

решение1

Первый подход реализован вМакрос, который принимает переменное количество аргументов и создает таблицу с одной строкой на аргумент. Обязательно прочтите все комментарии там. В частности, это, возможно,не очень хороший стиль разметки.

Второй подход легко реализовать expl3(даже не нужно указывать количество элементов), например, так:

\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Также можно реализовать следующим образом:

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

(добавленный пустой элемент приводит \itemк выводу первой команды).

В обоих случаях, если вы хотите иметь возможность объявлять элементы, содержащие несколько абзацев ( \parтогда токены должны быть приемлемы в аргументе \mystrangeitemize), замените mна +min \NewDocumentCommand \mystrangeitemize { m }.

Скриншот

etoolbox's \docsvlistтакже можно использовать для этой цели, и вы также можете увидеть, как кто-то публикует решение, основанное на listofitems. :-)

Связанный контент