1

I need your kind help to convert this doc using TikZ/PGF not pstricks, if possible:

\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage[a4paper]{geometry}
\usepackage{mathrsfs}
\usepackage{amsmath}
\usepackage{amssymb}
\usepackage{ifthen}
\usepackage{fp}
\usepackage{pstricks-add}
\usepackage[frenchb]{babel}
\usepackage[colorlinks]{hyperref}

%% macro trace tangente
\def\traceTangente(#1,#2,#3,#4){%
\ifthenelse{\lengthtest{#4pt>0pt}}{\FPeval\DemiTangenteV{(#3)*(#4)}
\FPeval\TangentXa{(#1)-(#4)}
\FPeval\TangentXb{(#1)+(#4)}
\FPeval\TangentYa{(#2)-(\DemiTangenteV)}
\FPround\TangentYa\TangentYa{3}
\FPeval\TangentYb{(#2)+(\DemiTangenteV)}
\FPround\TangentYb\TangentYb{3}
\psline{<->,linecolor=orange!50!red}(\TangentXa,\TangentYa)(\TangentXb,\TangentYb)}{}}
\makeatletter
%% macro interpolation
\def\Interpolation(#1,#2,#3)(#4,#5,#6){%
\edef\PolyInterp{(x+(-1)*(#4))^2*((1+(-2)*(x+(-1)*(#1))*(#1+(-1)*
(#4))/((#1+(-1)*(#4))^2))*#2+(x+(-1)*(#1))*#3)/((#1+(-1)*(#4))^2)+(x+
(-1)*(#1))^2*((1+(-2)*(x+(-1)*(#4))*(#4+(-1)*(#1))/((#1+(-1)*(#4))^2))
*#5+(x+(-1)*(#4))*#6)/((#1+(-1)*(#4))^2)}%
\psplot[algebraic=true,linecolor=cyan!50!blue,linewidth=1.2pt]{#1}{#4}{\PolyInterp}}
%% la macro principale
\def\HermiteDDL(#1,#2,#3,#4){\def\Hermite@xa{#1}\def\Hermite@ya{#2}\def\Hermite@za{#3}
\psdot(#1,#2)
\traceTangente(#1,#2,#3,#4)\Hermite@next}

\def\Hermite@next{\@ifnextchar ({\Hermite@job}{\Hermite@end}}

\def\Hermite@job(#1,#2,#3,#4){%
\psdot(#1,#2)
\Interpolation(\Hermite@xa,\Hermite@ya,\Hermite@za)(#1,#2,#3)
\def\Hermite@xa{#1}\def\Hermite@ya{#2}\def\Hermite@za{#3}
\traceTangente(#1,#2,#3,#4)\Hermite@next}
\def\Hermite@end{}

\makeatother

\begin{document}
\begin{center}
\begin{pspicture*}(-5,-5.5)(10.5,4.5)
\psgrid[gridlabels=0,subgriddiv=1,griddots=7](0,0)(-5,-5)(10,5)
\psaxes{->}(0,0)(-5,-5.5)(10,5)
\psaxes(0,0)(-5,-3)(9,5)
\HermiteDDL(-5,1,1,1)(-3,2,-2,1)(-1,-2,3,1)(0,2,1,1)(2,1,0,1)(4,0,0.666,3)(6,-2,-2,1)(9,2,0.5,1)(10,-1,-4,0)
\end{pspicture*}
\end{center}
\end{document}
5
  • Interestingly, this does not compile for me with TL 2016 on Windows but does compile on Overleaf: ! Undefined control sequence. <recently read> \c@lor@to@ps
    – wilx
    Aug 2, 2016 at 9:08
  • OK, this works with XeLaTeX.
    – wilx
    Aug 2, 2016 at 9:15
  • @wilx or latex, but not pslatex (! Undefined control sequence. <recently read> \c@lor@to@ps is just an alternative spelling for "please use latex not pslatex":-) Aug 2, 2016 at 9:17
  • It compiles fine with pdflatex, adding \usepackage{auto-pst-pdf} under MiKTeX.
    – Bernard
    Aug 2, 2016 at 9:20
  • @wilx: Did you load auto-pst-pdf?
    – Bernard
    Aug 2, 2016 at 9:21

1 Answer 1

2

Here is only a partial solution. I was not able to add the axes, I do not know TikZ that well. Uncommenting the \begin{axis} bits breaks the plot for me. UPDATE: Thanks to @TorbjørnT., the axes are now working.

Also, I had to inline the polynomial into the plot command because it would break and I could not know any other solution.

enter image description here

\documentclass{article}
\usepackage[a4paper]{geometry}
\usepackage{mathrsfs}
\usepackage{amsmath}
\usepackage{amssymb}
\usepackage{ifthen}
\usepackage{fp}
\usepackage[colorlinks]{hyperref}

\usepackage{tikz}


%% macro trace tangente
\def\traceTangente(#1,#2,#3,#4){%
\ifthenelse{\lengthtest{#4pt>0pt}}{\FPeval\DemiTangenteV{(#3)*(#4)}
\FPeval\TangentXa{(#1)-(#4)}
\FPeval\TangentXb{(#1)+(#4)}
\FPeval\TangentYa{(#2)-(\DemiTangenteV)}
\FPround\TangentYa\TangentYa{3}
\FPeval\TangentYb{(#2)+(\DemiTangenteV)}
\FPround\TangentYb\TangentYb{3}
\draw [<->,color=orange!50!red] (\TangentXa,\TangentYa) -- (\TangentXb,\TangentYb);}{}}

\makeatletter
%% macro interpolation
\def\Interpolation(#1,#2,#3)(#4,#5,#6){%
\draw[domain=#1:#4,smooth,variable=\x,color=cyan!50!blue,line width=1.2pt]%
  plot (\x,{(\x+(-1)*(#4))^2*((1+(-2)*(\x+(-1)*(#1))*(#1+(-1)*%
(#4))/((#1+(-1)*(#4))^2))*#2+(\x+(-1)*(#1))*#3)/((#1+(-1)*(#4))^2)+(\x+%
(-1)*(#1))^2*((1+(-2)*(\x+(-1)*(#4))*(#4+(-1)*(#1))/((#1+(-1)*(#4))^2))%
*#5+(\x+(-1)*(#4))*#6)/((#1+(-1)*(#4))^2)});}
%% la macro principale
\def\HermiteDDL(#1,#2,#3,#4){\def\Hermite@xa{#1}\def\Hermite@ya{#2}\def\Hermite@za{#3}%
\traceTangente(#1,#2,#3,#4)
\fill (#1,#2) circle[radius=1pt];
\Hermite@next
}

\def\Hermite@next{\@ifnextchar ({\Hermite@job}{\Hermite@end}}

\def\Hermite@job(#1,#2,#3,#4){%
\fill (#1,#2) circle[radius=1pt];  
\Interpolation(\Hermite@xa,\Hermite@ya,\Hermite@za)(#1,#2,#3)
\def\Hermite@xa{#1}\def\Hermite@ya{#2}\def\Hermite@za{#3}
\traceTangente(#1,#2,#3,#4)\Hermite@next}
\def\Hermite@end{}

\makeatother

\begin{document}
\begin{center}
  \begin{tikzpicture}
    \draw[help lines, color=gray!30, dashed] (-6.2,-5.1) grid (10.1,4.5);
    \draw [-stealth] (-6,0) -- (10,0);
    \draw [-stealth] (0,-5.3) -- (0,4.5);
    \foreach \x in {-6,...,-1,1,2,...,9}
    \draw (\x,2pt) -- (\x,-2pt) node[below]{$\x$};
    \foreach \y in {-5,...,-1,1,2,3,4}
       \draw (2pt,\y) -- (-2pt,\y) node[left]{$\y$};
    \HermiteDDL(-5,1,1,1)(-3,2,-2,1)(-1,-2,3,1)(0,2,1,1)(2,1,0,1)(4,0,0.666,3)(6,-2,-2,1)(9,2,0.5,1)(10,-1,-4,0) 
  \end{tikzpicture}
\end{center}
\end{document}

The above on Overleaf

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .