屬性清單上的映射呼叫:控制輸出中值的位置

屬性清單上的映射呼叫:控制輸出中值的位置

剛開始深入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

到目前為止,我想我明白這裡發生了什麼事。但現在我陷入了困境。無論 的定義發生什麼\mweitemvalue總是會在每個映射迭代步驟結束時轉儲到輸出流中。

我在這裡錯過了哪一步?我想像普通宏參數一樣使用傳遞給\mweitemby 的參數,\prop_map_function:NNIE我可以自己決定將其放入擴展代碼的何處。

答案1

by 呼叫的函數\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}

在此輸入影像描述

相關內容