意外挂起乳胶编译与属性列表检索

意外挂起乳胶编译与属性列表检索

这与我之前的一个问题。从之前这个问题的评论中,我明白我的做法完全是错误的。所以何必费心发布问题呢,对吧?

我发布这个问题是因为,在我尝试调试和创建解决方法时,我有一些看似基本等效的方法,但是当我通过 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 

也就是说,你处于一个无限循环中,不断扩展一个扩展为自身的命令。

相关内容