我尝试使用 Latex3“对象”模拟矩阵之类的东西。看来我可以嵌套prop "objects"
进去tl "object"
——至少它不会抛出错误。
但是,我不知道如何再次访问它们。
\ExplSyntaxOn
\tl_new:N \l_my_array_tl
\prop_new:N \l_my_dict_prop
\prop_new:N \l_my_dict_two_prop
% define a prop "object"
\prop_set_from_keyval:Nn \l_my_dict_prop {val1=some~value, val2=another~value, val3=a~third~value}
% put prop "objects" into the tl "object"
\tl_put_right:NV \l_my_array_tl \l_my_dict_prop
\tl_put_right:NV \l_my_array_tl \l_my_dict_prop
% now i am lost. How can I access the prop "object" from the tl "object"
% is this even possible? I'd like to save \tl_item:N \l_my_array_tl in \l_my_dict_two_prop
\ExplSyntaxOff
有没有办法实现这样的矩阵模拟?
答案1
事实上,没有出现任何错误是无关紧要的。
除了寄存器之外,TeX 只知道如何在宏中存储材料,并且\l_my_dict_prop
它是一个宏,就像这样\l_myarray_tl
。
如果你\tl_show:N \l_myarray_tl
在第一\tl_put_right:NV
条指令后添加,你会看到
\l_my_array_tl=\s__prop \__prop_pair:wn val1\s__prop {some
value}\__prop_pair:wn val2\s__prop {another value}\__prop_pair:wn val3\s__prop
{a third value}.
其定义与本质上相同\l_my_dict_prop
。
属性列表是具有非常特定结构的宏:首先\s__prop
声明宏包含的内容(例如,如果使用不当,将引发错误);然后以以下形式显示数据
\__prop_pair:wn <key>\s__prop{value}
但是任何程序员(团队除外)都不应该依赖这种将来可能会改变的特定格式。
如果你倾倒内容地下室里的一些箱子,你不能指望以后能找回它们。
根据您的需要,您可能只需要一个属性列表,只要您以合适的方式使用键来表示各个部分,这基本上就是包的想法starray
。