举一个简单的例子,假设\f(x)
是一条二次曲线,定义如下
\def\f(#1){-#1*(#1-8)/4}
对于每个元素\ix
,{0,1,2,3,4,5,6,7,8}
都有一个点(\ix,\f(\ix))
,该点是 1 厘米见方正方形的中心。
如何用和\psframe
来表达的左下角点和右上角点?\ix
\f(\ix)
注意:请不要建议其他更简单的解决方案,例如使用\rput
放置正方形,因为我对 PSTricks 点表达式感兴趣。如果可能的话,应避免使用 RPN 符号。
为了节省您的时间,我为您提供了如下的框架(不起作用)。
\documentclass[pstricks,border=12pt]{standalone}
\usepackage{pst-plot}%loads multido automatically
\begin{document}
\def\f(#1){-#1*(#1-8)/4}
\begin{pspicture}
\multido{\ix=0+1}{9}{
% the following expression is wrong!
\psframe[dimen=middle](*\ix-0.5 {\f(x)-0.5})(*\ix+0.5 {\f(x)+0.5})
}
\psplot[algebraic]{0}{8}{\f(x)}
\end{pspicture}
\end{document}
我想要得到的输出如下:
答案1
\listfiles
\documentclass{article}
\usepackage{pst-plot}
\SpecialCoor
\begin{document}
\def\f(#1){-#1*(#1-8)/4}
\begin{pspicture}(-1,-2)(10,5)
\psforeach{\ix}{0,1,..,9}{%
\rput(*\ix\space {\f(x)}){\psframe[dimen=middle](-0.5,-0.5)(0.5,0.5)}}
\psplot[algebraic]{0}{8}{\f(x)}
\end{pspicture}
\begin{pspicture}(-1,-2)(10,5)
\psforeach{\ix}{0,1,..,9}{%
\psframe[dimen=middle](*{\ix\space 0.5 sub} {\f(\ix)-0.5})
(*{\ix\space 0.5 add} {\f(\ix)+0.5})}
\psplot[algebraic]{0}{8}{ \f(x) }
\end{pspicture}
\end{document}
答案2
使用代数函数的后记公式,然后使用“原始 PS”符号引用坐标:
\documentclass{article}
\usepackage{pst-plot}% http://ctan.org/pkg/pst-plot
% The following package (multido) is loaded by pst-plot
%\usepackage{multido}% http://ctan.org/pkg/multido
\begin{document}
\def\f(#1){-#1*(#1-8)/4}% function f(x)=-x*(x-8)/4
% PS definition of f(x): x neg x 8 sub 4 div mul
\def\halfsize{0.5\space}% Modify this for smaller squares
\begin{pspicture}
\multido{\ix=0+1}{9}{%
\psframe[linewidth=0.5pt,linecolor=red!50]% Red squares
(!\ix\space \halfsize sub \ix\space neg \ix\space 8 sub 4 div mul \halfsize sub)% bottom left
(!\ix\space \halfsize add \ix\space neg \ix\space 8 sub 4 div mul \halfsize add)% upper right
}
\psplot[algebraic]{0}{8}{\f(x)}% Plot function
\end{pspicture}
\end{document}
后记表述\f(x)=-x*(x-8)/4
为
x 负 x 8 减 4 除 乘
现在,您可以使用后记符号/坐标指定节点位置(!<x> <y>)
(请原谅 ASCII 艺术):
( x - 0.5 , - x * (x - 8) / 4 - 0.5 )
| x - 0.5 | - x * (x - 8) / 4 - 0.5 |
| x - 0.5 | - x * (x - 8) / 4 |0.5| - |
| x - 0.5 | - x | (x - 8) / 4 |0.5| - |
| x - 0.5 | - x | x - 8 | |0.5| - |
| x |0.5| - | x | - | x |8| - |4| / | * |0.5| - |
(x,y) ~ (!\ix\space 0.5 sub \ix\space neg \ix\space 8 sub 4 div mul 0.5 sub)
要求您\space
在控制序列之后使用以引入空格,否则元素会被连接在一起,从而导致输出不正确(或者有时输入无法编译)。另外,请注意,,
坐标<x>
和之间没有逗号分隔<y>
;它们只是放在堆栈上 - 首先<x>
然后<y>
。