Вызов карты в списке свойств: контроль положения значения в выходных данных

Вызов карты в списке свойств: контроль положения значения в выходных данных

Только начал погружаться в expl3. У меня есть список свойств и код оболочки команд документа. Я заполняю список и прохожу по нему с помощью \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}
  • Ожидаемый результат: список пар в keyстиле valueописания
  • Фактический вывод: Список элементов, проиндексированных key, но отображаемыхvalue дважды.
  • Плохое нерешение: valueотображается один раз, если я использую \mweitemDumbвместо \mweitem.

До этого я думал, что понимаю, что здесь происходит. Но теперь я в тупике. Независимо от того, что происходит в определении \mweitem, valueвсегда будет сбрасываться в выходной поток в конце каждого шага итерации отображения.

Какой шаг я здесь пропустил? Я хотел бы использовать аргумент, \mweitemпереданный\prop_map_function:NN обычный аргумент макроса,то естьчто я могу сам решить, куда его поместить в расширенном коде.

решение1

Функция, вызываемая функцией, \prop_map_function:NNдолжна быть функцией с двумя аргументами. Первый аргумент будет передан ключом, второй — значением. Не нужно вызывать \mwe_get:n.

Я изменил названия функций в соответствии с рекомендациями.

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

введите описание изображения здесь

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