Мне помогли сделать макрос для обработки списка аргументов, разделенных на ;
в itemize
окружении. Для достижения этого xparse
был использован.
Когда я попытался обернуть списки аргументов в макрос, ничего не произошло. Как это исправить?
МВЭ:
\documentclass{article}
\usepackage{xparse}
\newcommand\insertitem[1]{\item #1}
% xparse-command I had help with
\NewDocumentCommand\myList{>{\SplitList{;}}m}
{\vspace*{-\baselineskip}
\begin{itemize}
\ProcessList{#1}{ \insertitem }
\end{itemize}
}
\newcommand\someStuff{One; two; three}
\begin{document}
\myList{One; two; three}
Now trying to expand macro content
\myList{\someStuff}
\end{document}
В \myList{One; two; three}
результате получается желаемый itemize
список и d. Последний пример \myList{\someStuff}
не работает. Я считаю, что решение моей проблемы, вероятно, кроется где-то в вопросеПередача нескольких аргументов из ProcessList (xparse) в макрос. Результат для использования в табличном виде, но я пока не могу понять где...
EDIT: предполагаемое использование для хранения аргументов в макросе в основном для того, чтобы немного облегчить мне жизнь. Я сделал шаблонную структуру для плана прогресса по предметам, которые я преподаю, где мне нужно распечатать, например, желаемые основные компетенции, которые мои студенты должны были достичь в течение запланированного периода. Поскольку эти компетенции (и многое другое) упакованы в беспорядочную longtable
среду, и я планирую сделать шаблон в классе, когда у меня будет время научиться, как это делать, для меня было бы очень удобно иметь блок в начале документа, который выглядит примерно так:
\maincompetences{Competence one; competence two, etc.}
\learninggoals{Main goal one; main goal two; etc.}
решение1
TeX не расширяет аргументы, когда поглощает их. Так что во втором случае передается аргумент, \SplitArgument
который \someStuff
не содержит точек с запятой.
Можно было бы принудительно расширить первый токен в аргументе, но это может создать другие проблемы.
Решение более низкого уровня.
\documentclass{article}
\usepackage{xparse}
\ExplSyntaxOn
\NewDocumentCommand{\myList}{sm}
{
\begin{itemize}
\IfBooleanTF{#1}
{
\holene_mylist:o { #2 } % expand the argument (once)
}
{
\holene_mylist:n { #2 }
}
\end{itemize}
}
\seq_new:N \l_holene_mylist_input_seq
\cs_new_protected:Npn \holene_mylist:n #1
{
\seq_set_split:Nnn \l_holene_mylist_input_seq { ; } { #1 }
\seq_map_inline:Nn \l_holene_mylist_input_seq
{
\item ##1
}
}
\cs_generate_variant:Nn \holene_mylist:n { o }
\ExplSyntaxOff
\newcommand\someStuff{One; two; three}
\begin{document}
\myList{One; two; three}
Now trying to expand macro content
\myList*{\someStuff}
\end{document}
Тырешают, расширять аргумент или нет, с помощью *-варианта.