Wednesday, 12 November 2014

How to convert PSTricks figures as GIF animated pictures?


2 Answers

up vote 26 down vote accepted
Assume that you want to create an animation as follows.
enter image description here

Step 1:

Create a PDF file consists of at lease 2 pages. Compiling the following input file with either latex-dvips-ps2pdf or xelatex produces a PDF file with 30 pages. Each page represent one frame.
% input.tex
\documentclass[pstricks,border=0pt]{standalone}
\usepackage{pstricks-add,fp}

\FPeval{Size}{3.00}
\FPeval{N}{30}
\FPeval{Delta}{round(Size/N:2)}

\begin{document}
\multido{\r=\Size+-\Delta}{\N}
{
    \begin{pspicture}(-\Size,-\Size)(\Size,\Size)
        \psframe*[linecolor=yellow](-\Size,-\Size)(\Size,\Size)
        \pscircle*{\r}
    \end{pspicture}
}
\end{document}
enter image description here

Step 2:

Install ImageMagick.

Step 3:

Convert the PDF to GIF using the following command:
convert -delay <integer> -loop 0 -density <integer> -alpha <on,off,remove> input.pdf output.gif
Remarks:
  • -delay <integer> specifies the delay between 2 consecutive frames in 1/100 second.
  • -density <integer> specifies the resolution.
  • -alpha <on,off,remove> specifies whether or not you enable, disable or remove the alpha channel.
enter image description here

Another example:

enter image description here
\documentclass[border=0pt,pstricks]{standalone}
\usepackage{pst-coil,pstricks-add}
\usepackage[nomessages]{fp}
\newcommand\const[3][6]{%
    \expandafter\FPeval\csname#2\endcsname{round(#3:#1)}%
    \pstVerb{/#2 \csname#2\endcsname\space def}%
}
\newcommand\Const[3][7]{\begingroup\edef\temp{\endgroup\noexpand\const[#1]{#2}{#3}}\temp}

\Const{CoilArm}{0.250}
\Const{CoilWidth}{0.300}
\Const{CoilTurn}{50/3}
\Const{DeltaY}{0.5}
\Const{Amplitude}{1.5}
\Const{FPS}{25}% frame rate must be synced with the convert's delay!
\Const{Vx}{2}% propagation speed
\Const{Period}{1}% second

\def\Y#1{-\DeltaY-\Amplitude*cos(2*\psPi*#1/\Period)+2}

\psset
{
    coilarm=\CoilArm,
    coilwidth=\CoilWidth,
}


\newcommand\System[4][0]{% #1: box, #2: x, #3: y, #4: label
    \uput[90](#2,4.25){#4}
    \Const{CoilHeight}{(4-(#3)-2*CoilArm)/(CoilWidth*CoilTurn)}
    \pszigzag[coilheight=\CoilHeight,linejoin=2](#2,4)(#2,#3)
    \ifnum#1=1
    \bgroup
        \psset{origin={#2,#3}}
        \psframe[dimen=inner,fillstyle=solid,fillcolor=black](-0.5,0)(0.5,-1)
        \psdot[linecolor=yellow](0,-0.5)
    \egroup
    \fi
}

\Const{DeltaTime}{1/\FPS}
\Const[0]{TotalFrames}{\FPS*\Period}

\begin{document}
\multido{\n=0.000+\DeltaTime}{\TotalFrames}{%
\begin{pspicture*}[showgrid=false](-1.5,-2)(3.5,5)
    \psframe[fillstyle=vlines,hatchsep=2pt,hatchwidth=0.5\pslinewidth,hatchcolor=gray,hatchangle=45](0,4)(2,4.25)
    \Const{Yn}{\Y{\n}}%
    \System[1]{1}{\Yn}{}
    \psplot[algebraic,linecolor=red,plotpoints=1000]{-1.5}{3.5}{\Y{((-\Vx*\n+x-1)/\Vx)}-0.5}
\end{pspicture*}}

\end{document}
Use convert -delay 4 -loop 0 -density 200 -alpha remove shm.pdf shm.gif. The -delay 4 represents the rate of 25 frame per second. The formula is FPS = 100 / DELAY.
shareimprove this answer

1  
OK, you could just say "use Image Magick" =) Thanks! –  Physicsworks Sep 21 '12 at 17:53
4  
"use Image Magick" should be submitted as a comment rather than an answer that I actually want. –  Who is crazy first Sep 22 '12 at 15:49
    
@AdorableCreature,follow your steps, I can't get animated GIF. I only get the first page picture of the 30 pages pdf file in my GIF file. How to solve it? Thanks. –  Pig Cry Jan 7 '13 at 4:23
    
@PigCry: Make sure you had 30 pages in your PDF and you typied the convert command correctly. –  Who is crazy first Jan 7 '13 at 4:44
    
@AdorableCreature: yes, I have 30 pages. The convert command is convert -delay 100 -loop 0 -density 200 -alpha on input.pdf output.gif. –  Pig Cry Jan 7 '13 at 5:13
Just in case you need a PDF animation then use the following template.
% this filename is main.tex
% compile it with pdflatex -shell-escape main

\documentclass[preview]{standalone}

\usepackage{filecontents}

\begin{filecontents*}{temporary.tex}
% put you compilable PSTricks input file here!
\end{filecontents*}


\usepackage{animate}

\immediate\write18{latex temporary}
\immediate\write18{dvips temporary}
\immediate\write18{ps2pdf temporary.ps}

\begin{document}
\animategraphics[controls,autoplay,loop,scale=1]{<frame rate>}{temporary}{}{}
\end{document}
For example,
% this filename is main.tex
% compile it with pdflatex -shell-escape main

\documentclass[preview]{standalone}

\usepackage{filecontents}

\begin{filecontents*}{temporary.tex}
\documentclass[border=0pt,pstricks]{standalone}
\usepackage{pst-coil,pstricks-add}
\usepackage[nomessages]{fp}
\newcommand\const[3][6]{%
    \expandafter\FPeval\csname#2\endcsname{trunc(#3:#1)}%
    \pstVerb{/#2 \csname#2\endcsname\space def}%
}
\newcommand\Const[3][3]{\begingroup\edef\temp{\endgroup\noexpand\const[#1]{#2}{#3}}\temp}

\Const{CoilArm}{0.250}
\Const{CoilWidth}{0.300}
\Const{CoilTurn}{50/3}
\Const{DeltaY}{0.5}
\Const{Amplitude}{1.5}
\Const{FPS}{25}
\Const{Vx}{2}% propagation speed
\Const{Period}{1}% second

\def\Y#1{-\DeltaY-\Amplitude*cos(2*\psPi*#1/\Period)+2}

\psset
{
    coilarm=\CoilArm,
    coilwidth=\CoilWidth,
}


\newcommand\System[4][0]{% #1: box, #2: x, #3: y, #4: label
    \uput[90](#2,4.25){#4}
    \Const{CoilHeight}{(4-(#3)-2*CoilArm)/(CoilWidth*CoilTurn)}
    \pszigzag[coilheight=\CoilHeight,linejoin=2](#2,4)(#2,#3)
    \ifnum#1=1
    \bgroup
        \psset{origin={#2,#3}}
        \psframe[dimen=inner,fillstyle=solid,fillcolor=black](-0.5,0)(0.5,-1)
        \psdot[linecolor=yellow](0,-0.5)
    \egroup
    \fi
}

\Const[3]{DeltaTime}{1/\FPS}
\Const[0]{TotalFrames}{\FPS*\Period}

\begin{document}
\multido{\n=0.000+\DeltaTime}{\TotalFrames}{%
\begin{pspicture*}[showgrid=false](-1.5,-2)(3.5,5)
    \psframe[fillstyle=vlines,hatchsep=2pt,hatchwidth=0.5\pslinewidth,hatchcolor=gray,hatchangle=45](0,4)(2,4.25)
    \Const{Yn}{\Y{\n}}%
    \System[1]{1}{\Yn}{}
    \psplot[algebraic,linecolor=red,plotpoints=1000]{-1.5}{3.5}{\Y{((-\Vx*\n+x-1)/\Vx)}-0.5}
\end{pspicture*}}

\end{document}
\end{filecontents*}


\usepackage{animate}

\immediate\write18{latex temporary}
\immediate\write18{dvips temporary}
\immediate\write18{ps2pdf temporary.ps}

\begin{document}
\animategraphics[controls,autoplay,loop,scale=1]{25}{temporary}{}{}
\end{document}
And compile it with pdflatex -shell-escape main.
shareimprove this answer

    
there is no need to load package fp when it is not really needed \documentclass[pstricks,border=0pt]{standalone} \usepackage{pstricks-add} \makeatletter \def\Size{3} \def\N{30} \def\Delta{\strip@pt\dimexpr \Size pt/\N} \makeatother [...] more animations are here: tug.org/PSTricks/main.cgi?file=Animation/gif/gif –  Herbert Sep 21 '12 at 18:00
    
Thanks for this trick. I put \newcommand\const[3][3]{% \expandafter\FPeval\csname#2\endcsname{round(#3:#1)}% \pstVerb{/#2 \csname#2\endcsname\space def}% } in a package to make my project consistent. –  Who is crazy first Sep 21 '12 at 18:06
    
looks like " why an easy solution when a complicated one is possible ..." ;-) –  Herbert Sep 21 '12 at 18:13

How to convert pstricks animation to GIF file?

2 Answers

up vote 26 down vote accepted
Assume that you want to create an animation as follows.
enter image description here

Step 1:

Create a PDF file consists of at lease 2 pages. Compiling the following input file with either latex-dvips-ps2pdf or xelatex produces a PDF file with 30 pages. Each page represent one frame.
% input.tex
\documentclass[pstricks,border=0pt]{standalone}
\usepackage{pstricks-add,fp}

\FPeval{Size}{3.00}
\FPeval{N}{30}
\FPeval{Delta}{round(Size/N:2)}

\begin{document}
\multido{\r=\Size+-\Delta}{\N}
{
    \begin{pspicture}(-\Size,-\Size)(\Size,\Size)
        \psframe*[linecolor=yellow](-\Size,-\Size)(\Size,\Size)
        \pscircle*{\r}
    \end{pspicture}
}
\end{document}
enter image description here

Step 2:

Install ImageMagick.

Step 3:

Convert the PDF to GIF using the following command:
convert -delay <integer> -loop 0 -density <integer> -alpha <on,off,remove> input.pdf output.gif
Remarks:
  • -delay <integer> specifies the delay between 2 consecutive frames in 1/100 second.
  • -density <integer> specifies the resolution.
  • -alpha <on,off,remove> specifies whether or not you enable, disable or remove the alpha channel.
enter image description here

Another example:

enter image description here
\documentclass[border=0pt,pstricks]{standalone}
\usepackage{pst-coil,pstricks-add}
\usepackage[nomessages]{fp}
\newcommand\const[3][6]{%
    \expandafter\FPeval\csname#2\endcsname{round(#3:#1)}%
    \pstVerb{/#2 \csname#2\endcsname\space def}%
}
\newcommand\Const[3][7]{\begingroup\edef\temp{\endgroup\noexpand\const[#1]{#2}{#3}}\temp}

\Const{CoilArm}{0.250}
\Const{CoilWidth}{0.300}
\Const{CoilTurn}{50/3}
\Const{DeltaY}{0.5}
\Const{Amplitude}{1.5}
\Const{FPS}{25}% frame rate must be synced with the convert's delay!
\Const{Vx}{2}% propagation speed
\Const{Period}{1}% second

\def\Y#1{-\DeltaY-\Amplitude*cos(2*\psPi*#1/\Period)+2}

\psset
{
    coilarm=\CoilArm,
    coilwidth=\CoilWidth,
}


\newcommand\System[4][0]{% #1: box, #2: x, #3: y, #4: label
    \uput[90](#2,4.25){#4}
    \Const{CoilHeight}{(4-(#3)-2*CoilArm)/(CoilWidth*CoilTurn)}
    \pszigzag[coilheight=\CoilHeight,linejoin=2](#2,4)(#2,#3)
    \ifnum#1=1
    \bgroup
        \psset{origin={#2,#3}}
        \psframe[dimen=inner,fillstyle=solid,fillcolor=black](-0.5,0)(0.5,-1)
        \psdot[linecolor=yellow](0,-0.5)
    \egroup
    \fi
}

\Const{DeltaTime}{1/\FPS}
\Const[0]{TotalFrames}{\FPS*\Period}

\begin{document}
\multido{\n=0.000+\DeltaTime}{\TotalFrames}{%
\begin{pspicture*}[showgrid=false](-1.5,-2)(3.5,5)
    \psframe[fillstyle=vlines,hatchsep=2pt,hatchwidth=0.5\pslinewidth,hatchcolor=gray,hatchangle=45](0,4)(2,4.25)
    \Const{Yn}{\Y{\n}}%
    \System[1]{1}{\Yn}{}
    \psplot[algebraic,linecolor=red,plotpoints=1000]{-1.5}{3.5}{\Y{((-\Vx*\n+x-1)/\Vx)}-0.5}
\end{pspicture*}}

\end{document}
Use convert -delay 4 -loop 0 -density 200 -alpha remove shm.pdf shm.gif. The -delay 4 represents the rate of 25 frame per second. The formula is FPS = 100 / DELAY.
shareimprove this answer

1  
OK, you could just say "use Image Magick" =) Thanks! –  Physicsworks Sep 21 '12 at 17:53
4  
"use Image Magick" should be submitted as a comment rather than an answer that I actually want. –  Who is crazy first Sep 22 '12 at 15:49
    
@AdorableCreature,follow your steps, I can't get animated GIF. I only get the first page picture of the 30 pages pdf file in my GIF file. How to solve it? Thanks. –  Pig Cry Jan 7 '13 at 4:23
    
@PigCry: Make sure you had 30 pages in your PDF and you typied the convert command correctly. –  Who is crazy first Jan 7 '13 at 4:44
    
@AdorableCreature: yes, I have 30 pages. The convert command is convert -delay 100 -loop 0 -density 200 -alpha on input.pdf output.gif. –  Pig Cry Jan 7 '13 at 5:13
Just in case you need a PDF animation then use the following template.
% this filename is main.tex
% compile it with pdflatex -shell-escape main

\documentclass[preview]{standalone}

\usepackage{filecontents}

\begin{filecontents*}{temporary.tex}
% put you compilable PSTricks input file here!
\end{filecontents*}


\usepackage{animate}

\immediate\write18{latex temporary}
\immediate\write18{dvips temporary}
\immediate\write18{ps2pdf temporary.ps}

\begin{document}
\animategraphics[controls,autoplay,loop,scale=1]{<frame rate>}{temporary}{}{}
\end{document}
For example,
% this filename is main.tex
% compile it with pdflatex -shell-escape main

\documentclass[preview]{standalone}

\usepackage{filecontents}

\begin{filecontents*}{temporary.tex}
\documentclass[border=0pt,pstricks]{standalone}
\usepackage{pst-coil,pstricks-add}
\usepackage[nomessages]{fp}
\newcommand\const[3][6]{%
    \expandafter\FPeval\csname#2\endcsname{trunc(#3:#1)}%
    \pstVerb{/#2 \csname#2\endcsname\space def}%
}
\newcommand\Const[3][3]{\begingroup\edef\temp{\endgroup\noexpand\const[#1]{#2}{#3}}\temp}

\Const{CoilArm}{0.250}
\Const{CoilWidth}{0.300}
\Const{CoilTurn}{50/3}
\Const{DeltaY}{0.5}
\Const{Amplitude}{1.5}
\Const{FPS}{25}
\Const{Vx}{2}% propagation speed
\Const{Period}{1}% second

\def\Y#1{-\DeltaY-\Amplitude*cos(2*\psPi*#1/\Period)+2}

\psset
{
    coilarm=\CoilArm,
    coilwidth=\CoilWidth,
}


\newcommand\System[4][0]{% #1: box, #2: x, #3: y, #4: label
    \uput[90](#2,4.25){#4}
    \Const{CoilHeight}{(4-(#3)-2*CoilArm)/(CoilWidth*CoilTurn)}
    \pszigzag[coilheight=\CoilHeight,linejoin=2](#2,4)(#2,#3)
    \ifnum#1=1
    \bgroup
        \psset{origin={#2,#3}}
        \psframe[dimen=inner,fillstyle=solid,fillcolor=black](-0.5,0)(0.5,-1)
        \psdot[linecolor=yellow](0,-0.5)
    \egroup
    \fi
}

\Const[3]{DeltaTime}{1/\FPS}
\Const[0]{TotalFrames}{\FPS*\Period}

\begin{document}
\multido{\n=0.000+\DeltaTime}{\TotalFrames}{%
\begin{pspicture*}[showgrid=false](-1.5,-2)(3.5,5)
    \psframe[fillstyle=vlines,hatchsep=2pt,hatchwidth=0.5\pslinewidth,hatchcolor=gray,hatchangle=45](0,4)(2,4.25)
    \Const{Yn}{\Y{\n}}%
    \System[1]{1}{\Yn}{}
    \psplot[algebraic,linecolor=red,plotpoints=1000]{-1.5}{3.5}{\Y{((-\Vx*\n+x-1)/\Vx)}-0.5}
\end{pspicture*}}

\end{document}
\end{filecontents*}


\usepackage{animate}

\immediate\write18{latex temporary}
\immediate\write18{dvips temporary}
\immediate\write18{ps2pdf temporary.ps}

\begin{document}
\animategraphics[controls,autoplay,loop,scale=1]{25}{temporary}{}{}
\end{document}
And compile it with pdflatex -shell-escape main.
shareimprove this answer

    
there is no need to load package fp when it is not really needed \documentclass[pstricks,border=0pt]{standalone} \usepackage{pstricks-add} \makeatletter \def\Size{3} \def\N{30} \def\Delta{\strip@pt\dimexpr \Size pt/\N} \makeatother [...] more animations are here: tug.org/PSTricks/main.cgi?file=Animation/gif/gif –  Herbert Sep 21 '12 at 18:00
    
Thanks for this trick. I put \newcommand\const[3][3]{% \expandafter\FPeval\csname#2\endcsname{round(#3:#1)}% \pstVerb{/#2 \csname#2\endcsname\space def}% } in a package to make my project consistent. –  Who is crazy first Sep 21 '12 at 18:06
    
looks like " why an easy solution when a complicated one is possible ..." ;-) –  Herbert Sep 21 '12 at 18:13

Making GIF animated figures using LaTeX

How to convert pstricks animation to GIF file? up vote 20 down vote favorite 12 As an example, let's take this animation. How can I convert it to GIF file? pstricks conversion animations gif shareimprove this question edited Jan 7 '13 at 8:34 Peter Jansson 3,47952036 asked Sep 21 '12 at 17:28 Physicsworks 474315 1 Related: tex.stackexchange.com/q/23727/2975 – Martin Scharrer♦ Sep 21 '12 at 18:05 add a comment 2 Answers active oldest votes up vote 26 down vote accepted Assume that you want to create an animation as follows. enter image description here Step 1: Create a PDF file consists of at lease 2 pages. Compiling the following input file with either latex-dvips-ps2pdf or xelatex produces a PDF file with 30 pages. Each page represent one frame. % input.tex \documentclass[pstricks,border=0pt]{standalone} \usepackage{pstricks-add,fp} \FPeval{Size}{3.00} \FPeval{N}{30} \FPeval{Delta}{round(Size/N:2)} \begin{document} \multido{\r=\Size+-\Delta}{\N} { \begin{pspicture}(-\Size,-\Size)(\Size,\Size) \psframe*[linecolor=yellow](-\Size,-\Size)(\Size,\Size) \pscircle*{\r} \end{pspicture} } \end{document} enter image description here Step 2: Install ImageMagick. Step 3: Convert the PDF to GIF using the following command: convert -delay -loop 0 -density -alpha input.pdf output.gif Remarks: -delay specifies the delay between 2 consecutive frames in 1/100 second. -density specifies the resolution. -alpha specifies whether or not you enable, disable or remove the alpha channel. enter image description here Another example: enter image description here \documentclass[border=0pt,pstricks]{standalone} \usepackage{pst-coil,pstricks-add} \usepackage[nomessages]{fp} \newcommand\const[3][6]{% \expandafter\FPeval\csname#2\endcsname{round(#3:#1)}% \pstVerb{/#2 \csname#2\endcsname\space def}% } \newcommand\Const[3][7]{\begingroup\edef\temp{\endgroup\noexpand\const[#1]{#2}{#3}}\temp} \Const{CoilArm}{0.250} \Const{CoilWidth}{0.300} \Const{CoilTurn}{50/3} \Const{DeltaY}{0.5} \Const{Amplitude}{1.5} \Const{FPS}{25}% frame rate must be synced with the convert's delay! \Const{Vx}{2}% propagation speed \Const{Period}{1}% second \def\Y#1{-\DeltaY-\Amplitude*cos(2*\psPi*#1/\Period)+2} \psset { coilarm=\CoilArm, coilwidth=\CoilWidth, } \newcommand\System[4][0]{% #1: box, #2: x, #3: y, #4: label \uput[90](#2,4.25){#4} \Const{CoilHeight}{(4-(#3)-2*CoilArm)/(CoilWidth*CoilTurn)} \pszigzag[coilheight=\CoilHeight,linejoin=2](#2,4)(#2,#3) \ifnum#1=1 \bgroup \psset{origin={#2,#3}} \psframe[dimen=inner,fillstyle=solid,fillcolor=black](-0.5,0)(0.5,-1) \psdot[linecolor=yellow](0,-0.5) \egroup \fi } \Const{DeltaTime}{1/\FPS} \Const[0]{TotalFrames}{\FPS*\Period} \begin{document} \multido{\n=0.000+\DeltaTime}{\TotalFrames}{% \begin{pspicture*}[showgrid=false](-1.5,-2)(3.5,5) \psframe[fillstyle=vlines,hatchsep=2pt,hatchwidth=0.5\pslinewidth,hatchcolor=gray,hatchangle=45](0,4)(2,4.25) \Const{Yn}{\Y{\n}}% \System[1]{1}{\Yn}{} \psplot[algebraic,linecolor=red,plotpoints=1000]{-1.5}{3.5}{\Y{((-\Vx*\n+x-1)/\Vx)}-0.5} \end{pspicture*}} \end{document} Use convert -delay 4 -loop 0 -density 200 -alpha remove shm.pdf shm.gif. The -delay 4 represents the rate of 25 frame per second. The formula is FPS = 100 / DELAY. shareimprove this answer edited Jan 7 '13 at 4:42 answered Sep 21 '12 at 17:47 Who is crazy first 8898265 1 OK, you could just say "use Image Magick" =) Thanks! – Physicsworks Sep 21 '12 at 17:53 4 "use Image Magick" should be submitted as a comment rather than an answer that I actually want. – Who is crazy first Sep 22 '12 at 15:49 @AdorableCreature,follow your steps, I can't get animated GIF. I only get the first page picture of the 30 pages pdf file in my GIF file. How to solve it? Thanks. – Pig Cry Jan 7 '13 at 4:23 @PigCry: Make sure you had 30 pages in your PDF and you typied the convert command correctly. – Who is crazy first Jan 7 '13 at 4:44 @AdorableCreature: yes, I have 30 pages. The convert command is convert -delay 100 -loop 0 -density 200 -alpha on input.pdf output.gif. – Pig Cry Jan 7 '13 at 5:13 show 5 more comments up vote 8 down vote Just in case you need a PDF animation then use the following template. % this filename is main.tex % compile it with pdflatex -shell-escape main \documentclass[preview]{standalone} \usepackage{filecontents} \begin{filecontents*}{temporary.tex} % put you compilable PSTricks input file here! \end{filecontents*} \usepackage{animate} \immediate\write18{latex temporary} \immediate\write18{dvips temporary} \immediate\write18{ps2pdf temporary.ps} \begin{document} \animategraphics[controls,autoplay,loop,scale=1]{}{temporary}{}{} \end{document} For example, % this filename is main.tex % compile it with pdflatex -shell-escape main \documentclass[preview]{standalone} \usepackage{filecontents} \begin{filecontents*}{temporary.tex} \documentclass[border=0pt,pstricks]{standalone} \usepackage{pst-coil,pstricks-add} \usepackage[nomessages]{fp} \newcommand\const[3][6]{% \expandafter\FPeval\csname#2\endcsname{trunc(#3:#1)}% \pstVerb{/#2 \csname#2\endcsname\space def}% } \newcommand\Const[3][3]{\begingroup\edef\temp{\endgroup\noexpand\const[#1]{#2}{#3}}\temp} \Const{CoilArm}{0.250} \Const{CoilWidth}{0.300} \Const{CoilTurn}{50/3} \Const{DeltaY}{0.5} \Const{Amplitude}{1.5} \Const{FPS}{25} \Const{Vx}{2}% propagation speed \Const{Period}{1}% second \def\Y#1{-\DeltaY-\Amplitude*cos(2*\psPi*#1/\Period)+2} \psset { coilarm=\CoilArm, coilwidth=\CoilWidth, } \newcommand\System[4][0]{% #1: box, #2: x, #3: y, #4: label \uput[90](#2,4.25){#4} \Const{CoilHeight}{(4-(#3)-2*CoilArm)/(CoilWidth*CoilTurn)} \pszigzag[coilheight=\CoilHeight,linejoin=2](#2,4)(#2,#3) \ifnum#1=1 \bgroup \psset{origin={#2,#3}} \psframe[dimen=inner,fillstyle=solid,fillcolor=black](-0.5,0)(0.5,-1) \psdot[linecolor=yellow](0,-0.5) \egroup \fi } \Const[3]{DeltaTime}{1/\FPS} \Const[0]{TotalFrames}{\FPS*\Period} \begin{document} \multido{\n=0.000+\DeltaTime}{\TotalFrames}{% \begin{pspicture*}[showgrid=false](-1.5,-2)(3.5,5) \psframe[fillstyle=vlines,hatchsep=2pt,hatchwidth=0.5\pslinewidth,hatchcolor=gray,hatchangle=45](0,4)(2,4.25) \Const{Yn}{\Y{\n}}% \System[1]{1}{\Yn}{} \psplot[algebraic,linecolor=red,plotpoints=1000]{-1.5}{3.5}{\Y{((-\Vx*\n+x-1)/\Vx)}-0.5} \end{pspicture*}} \end{document} \end{filecontents*} \usepackage{animate} \immediate\write18{latex temporary} \immediate\write18{dvips temporary} \immediate\write18{ps2pdf temporary.ps} \begin{document} \animategraphics[controls,autoplay,loop,scale=1]{25}{temporary}{}{} \end{document} And compile it with pdflatex -shell-escape main. shareimprove this answer edited Oct 21 '13 at 9:07 community wiki 3 revs Marienplatz there is no need to load package fp when it is not really needed \documentclass[pstricks,border=0pt]{standalone} \usepackage{pstricks-add} \makeatletter \def\Size{3} \def\N{30} \def\Delta{\strip@pt\dimexpr \Size pt/\N} \makeatother [...] more animations are here: tug.org/PSTricks/main.cgi?file=Animation/gif/gif – Herbert Sep 21 '12 at 18:00 Thanks for this trick. I put \newcommand\const[3][3]{% \expandafter\FPeval\csname#2\endcsname{round(#3:#1)}% \pstVerb{/#2 \csname#2\endcsname\space def}% } in a package to make my project consistent. – Who is crazy first Sep 21 '12 at 18:06 looks like " why an easy solution when a complicated one is possible ..." ;-) – Herbert Sep 21 '12 at 18:13 add a comment

Sunday, 2 November 2014

Thirukural Widget

Thirukkural widget