我正在尝试使用 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 有关,并且您的示例代码有一些错误!