在 pst-solides3D 圆柱体上循环书写

在 pst-solides3D 圆柱体上循环书写

我正在尝试使用 pst-solides3d 在循环中创建和标记圆柱体。标签应包含循环的实际计数器编号。因此,我尝试使用运行编号命名圆柱体,然后引用该名称。我不认为这是一个纯粹的 pst-solides3d 问题,但可能与“正常” pstricks 甚至 TikZ 相同

到目前为止,我尝试定义一个计数器、一个宏和一个 latex3 宏来解决这个问题,但都没有奏效。在下面的代码中,我展示了我到目前为止所做的一切。

对于那些不了解 pst-solides3D 包的人来说,文本在实体上的投影方式是通过\psProjection[object=texte, text=The text to be displayed, plan=cylPlane](0,0)平面名称 ( ) 引用文本应显示的位置plan=。平面本身是通过以下命令从实体表面派生的,\psSolid[object=plan, action=none, definition=solidface, args=cyl1 0, name=cylinder]其中表示引用的对象是 cyl1(=solid),其面 0 将用于派生平面。您可以通过传递给实体args=cyl1 0的选项 显示实体面的编号。numfaces=all

\documentclass[pstricks]{standalone}
\usepackage{pst-solides3d, expl3}

% counter
\newcounter{count}

% macro
\newcommand{\cyl}[1]{
cyl{#1}
}

\newcommand{\vPlane}[1]{
vPlane{#1}
}

% macro latex3
\ExplSyntaxOn
\def\cyl#1{cylNew{#1}}
\def\vPlane#1{vPlaneNew{#1}}
\ExplSyntaxOff


\begin{document}

    % try with counter
    \begin{pspicture}(-2,-6)(9,2)
        \multido{\i=0+1}{4}{
            \setcounter{count}{\i}
            \psSolid[object=cylindre, r=.5, h=.1, name=cyl\Roman{count}](0,\i,0)
            \psSolid[object=plan, action=none, definition=solidface, args=cyl\Roman{count} 0, name=vPlane\Roman{count}]
            \psProjection[object=texte, text=Variant \Roman{count}, plan=vPlane\Roman{count}](0,0)
            }
    \end{pspicture}

    % try with macro
    \begin{pspicture}(-2,-6)(9,2)
        \multido{\i=0+1}{4}{
            \psSolid[object=cylindre, r=.5, h=.1, name=\cyl{\i}](0,\i,0)
            \psSolid[object=plan,action=none, definition=solidface, args=\cyl{\i} 0, name=\vPlane{\i}]
            \psProjection[object=texte, text=Variant, plan=\vPlane{\i}](0,0)
            }
    \end{pspicture} 

    % try with latex3 macro
    \begin{pspicture}(-2,-6)(9,2)
        \multido{\i=0+1}{4}{
            \setcounter{count}{\i}
            \psSolid[object=cylindre, r=.5, h=.1, name=cylNew{\i}](0,\i,0)
            \psSolid[object=plan, action=none, definition=solidface, args=\cylNew{\i} 0, name=\vPlaneNew{\i}]
            \psProjection[object=texte, text=Variant, plan=\vPlaneNew{\i}](0,0)
            }
    \end{pspicture}
\end{document}

对于如何做到这一点有什么建议吗?

这是气缸的图片(没有标签)。

在此处输入图片描述

答案1

您必须使用可选参数solidmemory。否则变量仅对每个对象而言是本地的。

\documentclass[pstricks]{standalone}
\usepackage{pst-solides3d}    
\begin{document}

\begin{pspicture}(-2,-4)(9,2)
\psset{Decran=35,viewpoint=15 40 20 rtp2xyz,solidmemory}  
\multido{\i=0+1}{4}{%
      \psSolid[object=cylindre, r=.5, h=0.1, name=cyl\i](0,\i,0)%
      \psSolid[object=plan, action=none, definition=solidface, args=cyl\i\space 0, name=vPlane\i]%
      \psProjection[object=texte, text=Variant \i, fontsize=6,plan=vPlane\i](0,0)%
}
\end{pspicture}

\end{document}

在此处输入图片描述

顺便说一句:你的“expl3-code”有没有什么与 LaTeX3 有关,并且您的示例代码有一些错误!

相关内容