Map-Aufruf einer Eigenschaftenliste: Kontrolle über die Position des Wertes in der Ausgabe

Map-Aufruf einer Eigenschaftenliste: Kontrolle über die Position des Wertes in der Ausgabe

Habe gerade angefangen, mich in expl3 zu vertiefen. Ich habe eine Eigenschaftenliste und einen Wrappercode für Dokumentbefehle. Ich fülle die Liste auf und durchlaufe sie mit \prop_map_function:NN:

%!lualatex %
\documentclass{article}
\usepackage{xparse}
\usepackage{expl3}
\ExplSyntaxOn
\prop_new:N \g_mwe_list_prop
\cs_new:Npn \mwe_push#1#2{\prop_put:Nnn \g_mwe_list_prop{#1}{#2}}
\cs_new:Npn \mwe_get#1   {\prop_item:Nn \g_mwe_list_prop{#1}    }
\NewDocumentCommand\mweadd{m +m}{\mwe_push{#1}{#2}} % +m = allow second mandatory argument to contain paragraph material
\NewDocumentCommand\mweitem{m}{\item[#1]\mwe_get{#1}}
\NewDocumentCommand\mweitemDumb{m}{\item[#1]}
\ExplSyntaxOff

\begin{document}
% Filling the list
\mweadd{key1}{value1}
\mweadd{key2}{value2

with

paragraph}
\mweadd{key3}{value3}

\begin{description}
\ExplSyntaxOn
\prop_map_function:NN \g_mwe_list_prop \mweitem % Call \mweitem for all property list elements
\ExplSyntaxOff
\end{description}
\end{document}
  • Erwartete Ausgabe: Beschreibungsartige Liste von key-Paarenvalue
  • Tatsächliche Ausgabe: Liste der Elemente, die von indiziert sind key, aber angezeigt werdenvalue zweimal.
  • Schlechte Nicht-Lösung: valuewird einmal angezeigt, wenn ich \mweitemDumbanstelle von verwende \mweitem.

Bis hierhin dachte ich, ich hätte verstanden, was hier passiert. Aber jetzt bin ich ratlos. Unabhängig davon, was in der Definition von passiert \mweitem, valuewird am Ende jedes Mapping-Iterationsschritts immer in den Ausgabestrom ausgegeben.

Welchen Schritt habe ich hier übersehen? Ich möchte das \mweitemvon übergebene Argument \prop_map_function:NNwie ein normales Makroargument verwenden.dhdass ich selbst entscheiden kann, wo ich es in den erweiterten Code einfüge.

Antwort1

Die aufgerufene Funktion \prop_map_function:NNsollte eine Funktion mit zwei Argumenten sein. Dem ersten Argument wird der Schlüssel übergeben, dem zweiten der Wert. Ein Aufruf von ist nicht erforderlich \mwe_get:n.

Ich habe die Funktionsnamen geändert, um den Empfehlungen zu entsprechen.

\documentclass{article}
\usepackage{xparse}
\usepackage{expl3}
\ExplSyntaxOn
\prop_new:N \g_mwe_list_prop
\cs_new_protected:Npn \mwe_push:nn #1#2
 {
  \prop_put:Nnn \g_mwe_list_prop {#1} {#2}
 }
\cs_new:Npn \mwe_get:n #1
 {
  \prop_item:Nn \g_mwe_list_prop{#1}
 }

\NewDocumentCommand\mweadd{m +m}
 {% +m = allow second mandatory argument to contain paragraph material
  \mwe_push:nn {#1}{#2}
 } 
\NewDocumentCommand\mweitem{m +m}
 {
  \item[#1] #2
 }
\NewDocumentCommand\mweitemDumb{m}{\item[#1]}

\ExplSyntaxOff

\begin{document}
% Filling the list
\mweadd{key1}{value1}
\mweadd{key2}{value2

with

paragraph}
\mweadd{key3}{value3}

\begin{description}
\ExplSyntaxOn
\prop_map_function:NN \g_mwe_list_prop \mweitem % Call \mweitem for all property list elements
\ExplSyntaxOff
\end{description}
\end{document}

Bildbeschreibung hier eingeben

verwandte Informationen