这与我之前的一个问题。从之前这个问题的评论中,我明白我的做法完全是错误的。所以何必费心发布问题呢,对吧?
我发布这个问题是因为,在我尝试调试和创建解决方法时,我有一些看似基本等效的方法,但是当我通过 LaTeX 运行文档时,我得到了不同的行为。
这是MWE:
\documentclass{article}
\usepackage{pstricks,pst-node}
\usepackage{xparse}
\ExplSyntaxOn
\prop_new:N \g__sunset_plist
\tl_new:N \l__temporary_tl
\NewDocumentCommand{\setattr}{ mm }
{
\prop_gput:Nnn \g__sunset_plist {#1} {#2}
}
\DeclareExpandableDocumentCommand{\gettr}{ m }
{
\prop_get:Nn \g__sunset_plist { #1 } \l__temporary_tl
}
\DeclareExpandableDocumentCommand{\gettrdebug}{ m }
{
\msg_term:x { I've ~ been ~ passed ~ #1}
\prop_get:NnN \g__sunset_plist { #1 } \l__temporary_tl
\tl_use:N \l__temporary_tl
}
\ExplSyntaxOff
\setattr{my_linestyle}{linestyle=dashed,linecolor=blue}
\setattr{my_line}{\psline[linestyle=dashed,linecolor=blue](A)(B)}
\pagestyle{empty}
\begin{document}
\begin{pspicture}(10,10)
\pnode(0,0){A}
\pnode(10,10){B}
\pnode(10,0){C}
\pnode(0,10){D}
\gettr{my_line} %% <-- works as expected
\psline[\gettr{my_linestyle}](C)(D) %% <-- not working
\psline[\gettrdebug{my_linestyle}](C)(D) %% <-- not working
\end{pspicture}
\end{document}
在此 MWE 中,\psline[\gettr{....}]...
生成错误:
! Package xkeyval Error: `linestyle=dashed,linecolor=blue' undefined in familie
s `,pstricks,pst-node'.
See the xkeyval package documentation for explanation.
Type H <return> for immediate help.
...
l.36 \psline[\gettr{my_linestyle}](
C)(D) %% <-- not working
正如我之前解释的那样,这完全是错误的。但让我困惑的是,它\psline[\gettrdebug{...}]...
只是挂起了。
这两个函数本质上不是在做同样的事情吗?为什么一个会产生可恢复的错误,而另一个似乎挂起了?
答案1
玩夸克时要小心,它们会咬人。加起来\tracingall
你就会发现
\g__sunset_plist ->\q_prop my_linestyle\q_prop {linestyle=dashed,linecolor=blue
}\q_prop my_line\q_prop {\psline [linestyle=dashed,linecolor=blue](A)(B)}\q_pro
p
\q_prop ->\q_prop
\q_prop ->\q_prop
\q_prop ->\q_prop
\q_prop ->\q_prop
\q_prop ->\q_prop
\q_prop ->\q_prop
\q_prop ->\q_prop
\q_prop ->\q_prop
\q_prop ->\q_prop
\q_prop ->\q_prop
\q_prop ->\q_prop
\q_prop ->\q_prop
\q_prop ->\q_prop
\q_prop ->\q_prop
\q_prop ->\q_prop
\q_prop ->\q_prop
也就是说,你处于一个无限循环中,不断扩展一个扩展为自身的命令。