PSTricks 人物的条件

PSTricks 人物的条件

我曾尝试仅基于几个参数创建 PSTricks 图形,但遇到了问题。

代码

\documentclass{article}

\usepackage{auto-pst-pdf,pstricks-add}
\usepackage{expl3}

\ExplSyntaxOn
  \cs_new_eq:NN
    \calc
  \fp_eval:n
\ExplSyntaxOff

% Parameters
\def\radius{1.5 }
\def\doublelayers{2}
\def\columns{2}

\begin{document}

\begin{figure}[htbp]
\def\diameter{\calc{2*\radius}}
\def\distance{\calc{2*3^(1/2)*\radius}}
\def\width{\calc{(2*\columns+1)*\radius}}
\def\height{\calc{(2+3^(1/2)*(\doublelayers-1))*\radius}}
 \centering
  \begin{pspicture}(\width,\height)
   \rput(\radius,\radius){
     \multido{\rC=0+\diameter}{\columns}{
       \multido{\rD=0+\distance}{\doublelayers}{
         \psdot(\rC,\rD)
         \pscircle(\rC,\rD){\radius}
       }
     }
   }
   \rput(!2 \radius mul 1 3 sqrt add \radius mul){
     \multido{\rE=0+\diameter}{\columns}{
       \multido{\rF=0+\distance}{\doublelayers}{
         \psdot(\rE,\rF)
         \pscircle(\rE,\rF){\radius}
       }
     }
   }
  \end{pspicture}
\end{figure}

\end{document}

该文件应使用

pdflatex -shell-escape <filename>.tex

问题

如何将代码从使用更改\doublelayers为使用单身的层数?重点是,如果有 2n 层,则应该在最左边绘制 n 层,并且 n 层缩进\radius;如果有 2n-1 层,则应该在左边绘制 n 层,并且 n-1 层缩进。

例子:如果我有三层,代码应该从图形的左侧开始绘制两行圆圈,并在中间绘制一行圆圈,缩进。

下图显示了 2 个双层。如果是 3 个单层,则顶行不应该存在。

在此处输入图片描述

更新

我已经转发了这篇文章到LaTeX 社区因为这个帖子似乎已经“死了”,所以我去那里试试。

答案1

我实在不明白你在要求什么。

这就是你所要求的吗?

在此处输入图片描述

如果是上图的情况,有一个非常简单的解决方案:

\documentclass{article}

\usepackage{auto-pst-pdf,pstricks-add}
\usepackage{expl3}

\ExplSyntaxOn
  \cs_new_eq:NN
    \calc
  \fp_eval:n
\ExplSyntaxOff

% Parameters
\def\radius{1.5 }
\def\doublelayers{3}
\def\columns{2}
\pagestyle{empty}
\begin{document}

\begin{figure}[htbp]
\def\diameter{\calc{2*\radius}}
\def\distance{\calc{2*\radius}}%{\calc{2*3^(1/2)*\radius}}
\def\width{\calc{(2*\columns+1)*\radius}}
\def\height{\calc{(2+3^(1/2)*(\doublelayers-1))*\radius}}
 \centering
  \begin{pspicture}(\width,\height)
   \rput(\radius,\radius){
     \multido{\rC=0+\diameter}{\columns}{
       \multido{\rD=0+\distance}{\doublelayers}{
         \psdot(\rC,\rD)
         \pscircle(\rC,\rD){\radius}
       }
     }
   }
%   \rput(!2 \radius mul 1 3 sqrt add \radius mul){
%     \multido{\rE=0+\diameter}{\columns}{
%       \multido{\rF=0+\distance}{\doublelayers}{
%         \psdot(\rE,\rF)
%         \pscircle(\rE,\rF){\radius}
%       }
%     }
%   }
  \end{pspicture}
\end{figure}

\end{document}

您是否要求一些或多或少动态的东西,以便您可以指定您想要的层数?

好的。我想我更了解你想要什么了。这是 MWE。它需要一些改进,但我现在很累。我明天再回来。

\documentclass{article}
\usepackage{xcolor}
\usepackage{auto-pst-pdf,pstricks-add}
\usepackage{expl3}

\ExplSyntaxOn
  \cs_new_eq:NN
    \calc
  \fp_eval:n
\ExplSyntaxOff

% Parameters
\def\radius{0.75 }
\def\doublelayers{5}
\newcounter{bluedoublelayers}
\ifodd\doublelayers\relax%
    \setcounter{bluedoublelayers}{\number\numexpr\doublelayers-1\relax}%
    \else%
    \setcounter{bluedoublelayers}{\doublelayers}%
    \fi
\def\columns{2}
\pagestyle{empty}
\begin{document}

\begin{figure}[htbp]
\def\diameter{\calc{2*\radius}}
\def\distance{\calc{2*3^(1/2)*\radius}}
\def\width{\calc{(2*\columns+1)*\radius}}
\def\height{\calc{(2+3^(1/2)*(\doublelayers-1))*\radius}}
 \centering
  \begin{pspicture}(\width,\height)
   \rput(\radius,\radius){
     \multido{\rC=0+\diameter}{\columns}{
       \multido{\rD=0+\distance}{\doublelayers}{
         \psdot(\rC,\rD)
         \pscircle(\rC,\rD){\radius}
       }
     }
   }
   \rput(!2 \radius mul 1 3 sqrt add \radius mul){
     \psset{linecolor=blue}
     \multido{\rE=0+\diameter}{\columns}{
       \multido{\rF=0+\distance}{\thebluedoublelayers}{
                \psdot(\rE,\rF)
                \pscircle(\rE,\rF){\radius}
       }
     }
   }
  \end{pspicture}
\end{figure}

\end{document}

当设置doublelayers为时2,结果是:

在此处输入图片描述

当设置doublelayers为时3,结果是:

在此处输入图片描述

相关内容