下面给出的简化示例目前仅使用 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}