expl3 屬性清單與擴展

expl3 屬性清單與擴展

盡量保持簡單。鑑於以下情況,註解掉的程式碼有什麼問題(不幸的是,兩者都不起作用),以及有什麼替代方法可以做到這一點? 「那個」是透過需要擴充的鍵來存取屬性清單。

\documentclass{article}
\usepackage{expl3}
\begin{document}

\ExplSyntaxOn


\tl_new:N \templist
\prop_new:N \tablestart
    \prop_put:Nnn \tablestart {u}{tablestart 1}
    \prop_put:Nnn \tablestart {u}{tablestart 2}
    \prop_put:Nnn \tablestart {u}{tablestart 3}
\tl_new:N \tablebody
\seq_new:N \entryuvw
    \seq_put_right:Nn \entryuvw {u}
    \seq_put_right:Nn \entryuvw {v}
    \seq_put_right:Nn \entryuvw {w}

\cs_new_protected:Nn \make_entry:n {
    \int_step_inline:nnnn { 1 } { 1 } { 3 } {
        \tl_set:Nx \templist {\seq_item:Nn \entryuvw {##1}}
        \templist
        %\prop_get:NxN \tablestart {\tl_use:N \templist} \tablebody
        %\prop_get:NVN \tablestart \templist \tablebody
    }
    \tablebody
}

\make_entry:n {}

\ExplSyntaxOff

needs an output line
\end{document}

答案1

你應該使用

\prop_get:NVN \tablestart \templist \tablebody

這相當於

\prop_get:NnN \tablestart {<contents of \templist>} \tablebody

恐怕您的變數命名是錯誤的:請遵守expl3這方面的約定。

\documentclass{article}
\usepackage{expl3,xparse}

\ExplSyntaxOn

\tl_new:N \l_bob_templist_tl
\tl_new:N \l_bob_tablebody_tl
\prop_new:N \l_bob_tablestart_prop
\seq_new:N \l_bob_entryuvw_seq

\prop_put:Nnn \l_bob_tablestart_prop {u}{tablestart 1}
\prop_put:Nnn \l_bob_tablestart_prop {v}{tablestart 2}
\prop_put:Nnn \l_bob_tablestart_prop {w}{tablestart 3}

\seq_put_right:Nn \l_bob_entryuvw_seq {u}
\seq_put_right:Nn \l_bob_entryuvw_seq {v}
\seq_put_right:Nn \l_bob_entryuvw_seq {w}

\cs_new_protected:Nn \make_entry:
 {
  \int_step_inline:nnnn { 1 } { 1 } { 3 }
   {
    \tl_set:Nx \l_bob_templist_tl {\seq_item:Nn \l_bob_entryuvw_seq {##1}}
    \l_bob_templist_tl
    \prop_get:NVN \l_bob_tablestart_prop \l_bob_templist_tl \l_bob_tablebody_tl
    \l_bob_tablebody_tl
   }
}

\NewDocumentCommand{\makeentry}{}{\make_entry:}

\ExplSyntaxOff
\begin{document}

\makeentry

\end{document}

我製作了巨集來列印兩個標記清單變數的內容,以檢查結果是否符合預期。

在此輸入影像描述

相關內容