如何存储逐字LaTeX3 属性列表中的代码?
我的目标是将人名存储在属性列表内的属性中。这意味着重音符号和空格都必须存储在键中name
。这是我的代码:
\ExplSyntaxOn
\prop_new:N \aaa
\prop_put:Nnn \aaa {name} {Alfr\'ed R\'enyi}
\prop_item:Nn \aaa {name}
\ExplSyntaxOff
输出未显示“Alfréd”和“Rényi”之间的空格。我怀疑这是由于\ExplSyntaxOn
让 LaTeX 忽略空格造成的。我被困在这里。有什么想法吗?
答案1
要么使用\space
或~
,否则空间会被expl3
制度所吞噬。
\prop
我还根据expl3
命名约定更改了 -list 变量的“错误”名称,\l_jaeya_name_prop
例如。
\documentclass{article}
\usepackage{expl3}
\begin{document}
\ExplSyntaxOn
\prop_new:N \l_jaeya_name_prop
\prop_put:Nnn \l_jaeya_name_prop {name} {Alfr\'ed\space R\'enyi}
\prop_put:Nnn \l_jaeya_name_prop {othername} {Arthur~Gumby}
\prop_item:Nn \l_jaeya_name_prop {name}~and~\prop_item:Nn \l_jaeya_name_prop {othername}
\ExplSyntaxOff
\end{document}
更好的方法是使用包装器来存储和检索内容:
\documentclass{article}
\usepackage{expl3}
\ExplSyntaxOn
\prop_new:N \l_jaeya_name_prop
\cs_new:Npn \storename #1#2{% The % isn't necessary, just for convenience for more complicated macros to remember where which bracket starts.
\prop_put:Nnn \l_jaeya_name_prop {#1} {#2}
}
\cs_new:Npn \retrievename #1{%
\prop_item:Nn \l_jaeya_name_prop {#1}
}
\ExplSyntaxOff
\begin{document}
\storename{name}{Alfr\'ed R\'enyi}
\storename{othername}{Arthur Gumby}
\retrievename{name} and \retrievename{othername}
\end{document}