编辑

编辑

下面给出的简化示例目前仅使用 11 次迭代来绘制最多 3 个茎(垂直段)。看来我的代码效率不够高,所以我想将迭代次数从 11 次减少到 3 次。这可能吗?

\documentclass[pstricks,margin=5mm]{standalone}
\usepackage{multido}
\usepackage[nomessages]{fp}

\makeatletter
\newcommand\Ruler[1]{%
\FPeval\Start{trunc(#1*10:0)}%
\FPeval\Stop{trunc(#1+1:1)}%
\bgroup
\psset{xunit=.1\psxunit}
\begin{pspicture}[linecap=1](0,-.5)(10,.5)
    \psline(10,0)
    \multido{\ix=0+1,\i=\Start+1}{11}{%
        \pst@mod{\i}{10}\rem
        \ifnum\rem=0
            \psline(\ix,0)(\ix,9pt)
            \uput[90](\ix,6pt){\the\numexpr\i/10}
        \else
            \pst@mod{\i}{5}\rem
            \ifnum\rem=0
                \psline(\ix,0)(\ix,4pt)
            \fi
        \fi
    }
        \psline[linecolor=red]{<-}(0,-2pt)(0,-10pt)
        \uput[-90](0,-6pt){\textcolor{red}{#1}}
        \psline[linecolor=red]{<-}(10,-2pt)(10,-10pt)
        \uput[-90](10,-6pt){\textcolor{red}{\Stop}}
\end{pspicture}\egroup}
\makeatother

\begin{document}
\Ruler{3.0}
\Ruler{3.1}
\Ruler{3.5}
\Ruler{3.6}
\end{document}

在此处输入图片描述

在此处输入图片描述

在此处输入图片描述

在此处输入图片描述

编辑

\Ruler{x}1cm将从 开始绘制一把长度为 的截尺x

答案1

我认为你不需要使用multido它。

\documentclass[pstricks,margin=5mm]{standalone}
\usepackage[nomessages]{fp}

\makeatletter
\newcommand\Ruler[1]{%
\FPeval\Start{trunc(#1*10:0)}%
\FPeval\Stop{trunc(#1+1:1)}%
\bgroup
\psset{xunit=.1\psxunit}
\begin{pspicture}[linecap=1](0,-.5)(10,.5)
    \psline(10,0)
    \pst@mod{\Start}{10}\rem
    \FPeval\xStart{trunc(10-\rem:0)}%
    \psline(\xStart,0)(\xStart,9pt)
    \FPeval\xLab{trunc(#1:0)}%
    \uput[90](\xStart,6pt){\the\numexpr\xLab+1}
    \ifnum\rem=0
        \psline(0,0)(0,9pt)
        \psline(10,0)(10,9pt)
        \uput[90](0,6pt){\xLab}
        \psline(5,0)(5,4pt)
    \else
        \ifnum\rem=5
            \psline(0,0)(0,4pt)
            \psline(10,0)(10,4pt)
        \else
            \FPeval\xMid{trunc(10-\rem+5:0)}%
            \pst@mod{\xMid}{10}\xMid%
            \psline(\xMid,0)(\xMid,4pt)
        \fi
    \fi
    \psline[linecolor=red]{<-}(0,-2pt)(0,-10pt)
    \uput[-90](0,-6pt){\textcolor{red}{#1}}
    \psline[linecolor=red]{<-}(10,-2pt)(10,-10pt)
    \uput[-90](10,-6pt){\textcolor{red}{\Stop}}
\end{pspicture}\egroup}
\makeatother

\begin{document}
\Ruler{3.0}
\Ruler{3.1}
\Ruler{3.5}
\Ruler{3.6}
\end{document}

在此处输入图片描述

相关内容