Llamada de mapa en una lista de propiedades: control sobre la posición del valor en la salida

Llamada de mapa en una lista de propiedades: control sobre la posición del valor en la salida

Recién comencé a sumergirme en expl3. Tengo una lista de propiedades y un código contenedor de comandos de documento. Completo la lista y la recorro con \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}
  • Resultado esperado: lista de estilos de descripción de keyparesvalue
  • Salida real: lista de elementos indexados por key, pero que se muestranvalue dos veces.
  • Mala no solución: valuese muestra una vez si uso \mweitemDumben lugar de \mweitem.

Hasta aquí creía entender lo que pasa aquí. Pero ahora estoy bloqueado. Independientemente de lo que suceda en la definición de \mweitem, valuesiempre se volcará en el flujo de salida al final de cada paso de iteración del mapeo.

¿Qué paso me perdí aquí? Me gustaría utilizar el argumento pasado \mweitemcomo \prop_map_function:NNun argumento macro normal,es decirque puedo decidir por mí mismo dónde colocarlo en el código expandido.

Respuesta1

La función llamada por \prop_map_function:NNdebe ser una función de dos argumentos. Al primer argumento se le pasará la clave, al segundo el valor. No es necesario llamar \mwe_get:n.

Cambié los nombres de las funciones para cumplir con las recomendaciones.

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

ingrese la descripción de la imagen aquí

información relacionada