帶有屬性列表鍵的 For 循環

帶有屬性列表鍵的 For 循環

我正在使用屬性列表,我希望能夠建立一個命令來產生用於生成 for 循環的鍵列表。我目前正在使用 \prop_map_inline 生成所有鍵,但如果我在 for 循環中使用它,它會被解釋為單個項目,而不是多個項目的集合。

這是範例程式碼:

\documentclass{article}
\usepackage{ifthen}
\usepackage{xparse}

\ExplSyntaxOn
    \prop_new:N \g_persons_prop
    
    % Create a new person
    \NewDocumentCommand{\CreatePerson}{m} {
        \prop_gput:Nnn \g_persons_prop { #1 }
    }
    
    % Gets all persons
    \NewDocumentCommand{\GetAllPersonKeys}{}{
        \prop_map_inline:Nn \g_persons_prop {
            ##1, 
        }
    }
\ExplSyntaxOff

\CreatePerson{jd}{John Doe}
\CreatePerson{ad}{Albert Dull}
\CreatePerson{bu}{Ben Under}

\begin{document}
    I would like to have this:
    \makeatletter
        \begin{itemize}
            \@for\sun:={jd, ad, bu}\do{\item We have person: \sun. }
        \end{itemize}
     \makeatother
    
    But I get this instead:
    
    \makeatletter
        \begin{itemize}
            \@for\sun:={\GetAllPersonKeys}\do{\item We have person: \sun. }
        \end{itemize}
     \makeatother   

\end{document}

例子

答案1

您也可以映射 expl3 中的鍵:

\documentclass{article}
\usepackage{ifthen}
\usepackage{xparse}

\ExplSyntaxOn
    \prop_new:N \g_persons_prop

    % Create a new person
    \NewDocumentCommand{\CreatePerson}{m} {
        \prop_gput:Nnn \g_persons_prop { #1 }
    }

    \NewDocumentCommand{\MapAllPersonKeys}{m}{
        \prop_map_inline:Nn \g_persons_prop {
           #1
        }
    }
    
    
\ExplSyntaxOff

\CreatePerson{jd}{John Doe}
\CreatePerson{ad}{Albert Dull}
\CreatePerson{bu}{Ben Under}

\begin{document}
    I would like to have this:
    
      \makeatletter
        \begin{itemize}
            \@for\sun:={jd, ad, bu}\do{\item We have person: \sun. }
        \end{itemize}
     \makeatother
     
      \begin{itemize}
           \MapAllPersonKeys{\item we have person: #1!}
      \end{itemize}
    

\end{document}

在此輸入影像描述

相關內容