Erweitern Sie das Makro in das xparse \SplitList-Makro

Erweitern Sie das Makro in das xparse \SplitList-Makro

Ich hatte Hilfe beim Erstellen eines Makros, um eine Liste von Argumenten, die durch ;in einer itemizeUmgebung getrennt sind, zu verarbeiten. Um dies zu erreichen, xparsewurde verwendet.

Als ich versuchte, die Argumentlisten in ein Makro einzubinden, passierte jedoch nichts. Wie kann ich das beheben?

MWE:

\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}

Im \myList{One; two; three}Ergebnis steht wie gewünscht eine itemized-Liste. Das letzte Beispiel \myList{\someStuff}funktioniert nicht. Ich glaube, die Lösung für mein Problem liegt wahrscheinlich irgendwo in der FrageÜbergabe mehrerer Argumente aus ProcessList (xparse) an ein Makro. Das Ergebnis soll tabellarisch verwendet werden., aber ich verstehe derzeit nicht, wo ...

EDIT: Der beabsichtigte Zweck der Speicherung von Argumenten in einem Makro besteht im Wesentlichen darin, mir das Leben ein wenig zu erleichtern. Ich habe eine Vorlagenstruktur für einen Fortschrittsplan in den Fächern erstellt, die ich unterrichte, in der ich beispielsweise die gewünschten Hauptkompetenzen ausdrucken muss, die meine Schüler während des geplanten Zeitraums erreicht haben sollten. Da diese Kompetenzen (und mehr) in eine unübersichtliche longtableUmgebung eingebettet sind und ich vorhabe, die Vorlage in eine Klasse umzuwandeln, wenn ich Zeit habe, genau das zu lernen, wäre es für mich sehr praktisch, am Anfang des Dokuments einen Block zu haben, der ungefähr so ​​aussieht:

\maincompetences{Competence one; competence two, etc.}
\learninggoals{Main goal one; main goal two; etc.}

Antwort1

TeX erweitert Argumente nicht, wenn es sie aufnimmt. Im zweiten Fall wird also ein Argument übergeben, \SplitArgumentdas \someStuffkeine Semikolons enthält.

Man könnte die Erweiterung des ersten Tokens im Argument erzwingen, dies könnte jedoch andere Probleme verursachen.

Eine Lösung auf niedrigerem Niveau.

\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}

Bildbeschreibung hier eingeben

Duentscheiden, ob das Argument mit der *-Variante erweitert wird oder nicht.

verwandte Informationen