% !TeX TXS-program:compile = txs:///pythonpdfse

\documentclass{article}
\usepackage[french]{babel}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[upright]{fourier}
\usepackage[scaled=0.875]{helvet}
\renewcommand\ttdefault{lmtt}
\usepackage[scaled=0.875]{cabin}
\usepackage[build]{ProfLycee}
\usetikzlibrary{hobby}
\usepackage{siunitx}
\usepackage{graphics}
\usepackage{hvlogos}
\usepackage{simplekv}
\usepackage{listofitems}
\usepackage{xintexpr}
\usepackage{codehigh}
\usepackage{hyperref}
\urlstyle{same}
\hypersetup{pdfborder=0 0 0}

\sisetup{locale=FR}
\usepackage{geometry}
\geometry{margin=1.5cm}
\usepackage{newverbs}
\newverbcommand{\pverb}{\color{purple}}{}
\newverbcommand{\rverb}{\color{red}}{}
\newverbcommand{\vverb}{\color{ForestGreen}}{}
\newverbcommand{\averb}{\color{CadetBlue}}{}
\newverbcommand{\overb}{\color{orange}}{}
\newverbcommand{\bverb}{\color{blue}}{}
\setlength{\parindent}{0pt}
\definecolor{LightGray}{gray}{0.9}

\def\PLversion{1.1.3}
\def\PLdate{2 Mai 2022}

\tcbset{vignettes/.style={%
		nobeforeafter,box align=base,boxsep=0pt,enhanced,sharp corners=all,rounded corners=southeast,%
		boxrule=0.75pt,left=7pt,right=1pt,top=0pt,bottom=0.25pt,%
	}
}
\tcbset{vignettelatex/.style={%
		fontupper={\vphantom{pf}\footnotesize\ttfamily},
		vignettes,%
		colframe=CadetBlue,coltitle=white,colback=CadetBlue!5,%
		overlay={\begin{tcbclipinterior}%
				\fill[fill=lightgray!50]($(interior.south west)$) rectangle node[rotate=90]{\tiny \sffamily{\textcolor{CadetBlue}{\scalebox{0.6}[0.75]{\textbf{\LaTeX}}}}} ($(interior.north west)+(5pt,0pt)$);%
		\end{tcbclipinterior}}
	}
}

\newtcblisting{codetex}[1][]{%
	colback=white,colframe=red!75!black,title={\small \faCode} Code \LaTeX,fonttitle=\sffamily\bfseries,left=3pt,right=3pt,top=2pt,bottom=2pt,#1}

\newtcolorbox{codesortie}[1][]{%
	colback=white,colframe=red!75!black,title={\small \faArrowAltCircleRight[regular]} Sortie \LaTeX,fonttitle=\sffamily\bfseries,left=3pt,right=3pt,top=2pt,bottom=2pt,#1}

\newtcolorbox{codeidee}[1][]{%
	colback=white,colframe=PeachPuff!75!black,title={\small \faLightbulb[regular]} Idée(s),fonttitle=\sffamily\bfseries,left=3pt,right=3pt,top=2pt,bottom=2pt,#1}

\newtcolorbox{codeinfo}[1][]{%
	colback=white,colframe=SteelBlue,title={\small \faPuzzlePiece} Information(s),fonttitle=\sffamily\bfseries,left=3pt,right=3pt,top=2pt,bottom=2pt,#1}

\newtcolorbox{codecles}[1][]{%
	colback=white,colframe=ForestGreen!75,title={\small \faPaperclip} Clés et options,fonttitle=\sffamily\bfseries,left=3pt,right=3pt,top=2pt,bottom=2pt,#1}

%petite vignette tex
\newcommand\ctex[1]{\tcbox[vignettelatex]{#1}}

%gestion de la fenêtre v2 directement dans le tikzpicture
\tikzset{%
	xmin/.store in=\xmin,xmin/.default=-5,xmin=-5,
	xmax/.store in=\xmax,xmax/.default=5,xmax=5,
	ymin/.store in=\ymin,ymin/.default=-5,ymin=-5,
	ymax/.store in=\ymax,ymax/.default=5,ymax=5,
	xgrille/.store in=\xgrille,xgrille/.default=1,xgrille=1,
	xgrilles/.store in=\xgrilles,xgrilles/.default=0.5,xgrilles=0.5,
	ygrille/.store in=\ygrille,ygrille/.default=1,ygrille=1,
	ygrilles/.store in=\ygrilles,ygrilles/.default=0.5,ygrilles=0.5,
	xunit/.store in=\xunit,unit/.default=1,xunit=1,
	yunit/.store in=\yunit,unit/.default=1,yunit=1
}
\newcommand\tgrilles[1][ultra thin,lightgray]{%
	\draw[xstep=\xgrilles,ystep=\ygrilles,#1] (\xmin,\ymin) grid (\xmax,\ymax);%
}
\newcommand\tgrillep[1][thin,gray]{%
	\draw[xstep=\xgrille,ystep=\ygrille,#1] (\xmin,\ymin) grid (\xmax,\ymax);%
}

\newcommand\genfenetre{%
	%styles
	\tikzset{noeudexpl/.style={purple,font=\sffamily\small}}
	\tikzset{portionexpl/.style={orange,thick,<->}}
	\tikzset{expl/.style={midway,inner sep=1pt,above right=0,orange,font=\sffamily\scriptsize,rotate=45}}
	\tikzset{coeffs/.style={CadetBlue!50!black,circle,draw=CadetBlue,thick,fill=CadetBlue!5,font=\small\ttfamily}}
	\tikzset{tangente/.style={teal,line width=1pt,dashed}}
	%grilles & axes
	\tgrilles[line width=0.3pt,lightgray!50]
	\tgrillep[line width=0.6pt,lightgray!50]
	\draw[line width=1.5pt,->,gray] (\xmin,0)--(\xmax,0) ;
	\draw[line width=1.5pt,->,gray] (0,\ymin)--(0,\ymax) ;
	\foreach \x in {0,1,...,10} {\draw[gray,line width=1.5pt] (\x,4pt) -- (\x,-4pt) ;}
	\foreach \y in {0,1,...,6} {\draw[gray,line width=1.5pt] (4pt,\y) -- (-4pt,\y) ;}
}

\newcommand\gennotice{%
	%notice
	\draw (0,1) node[noeudexpl,below] {point 1} ;
	\draw (4,3.667) node[noeudexpl,above] {point 2} ;
	\draw (7.5,1.75) node[noeudexpl,below] {point 3} ;
	\draw (9,2) node[noeudexpl,above] {point 4} ;
	\draw (10,0) node[noeudexpl,below] {point 5} ;
	\draw[portionexpl] (0,6)--(4,6) node[expl] {portion 1} ;
	\draw[portionexpl] (4,6)--(7.5,6) node[expl] {portion 2} ;
	\draw[portionexpl] (7.5,6)--(9,6) node[expl] {portion 3} ;
	\draw[portionexpl] (9,6)--(10,6) node[expl] {portion 4} ;
	\draw[orange,densely dashed,thick] (4,0)--(4,6) (7.5,0)--(7.5,6) (9,0)--(9,6) (10,0)--(10,6) ;
}

\newcommand\gentangentes{%
	%tangentes
	\draw[tangente] (0,1)--(1,1) ;
	\draw[tangente,domain=3:5] plot (\x,{-1/3*(\x-9)+2}) ;
	\draw[tangente] (6.5,1.75)--(8.5,1.75) ;
	\draw[tangente,domain=8:10] plot (\x,{-1/3*(\x-9)+2}) ;
	\draw[tangente,domain=9.5:10] plot (\x,{-10*(\x-10)+0}) ;%
}

\newcommand\listecoeffs[4]{%
	\draw (0,5.5) node[left,CadetBlue,font=\small\ttfamily] {Coeffs} ;
	\node[coeffs] at (2,5.5) {#1} ;
	\node[coeffs] at ({(4+7.5)/2},5.5) {#2} ;
	\node[coeffs] at ({(7.5+9)/2},5.5) {#3} ;
	\node[coeffs] at ({(9+10)/2},5.5) {#4} ;%
}

\title{%
\begin{minipage}{0.75\linewidth}
	\begin{tcolorbox}[colframe=yellow,colback=yellow!15]
		\begin{center}
			\begin{tabular}{c}
				\lstinline!ProfLycee!\\
				\\
				Quelques \textit{petites} commandes pour  \LaTeX{} (au lycée)
			\end{tabular}
		\end{center}
	\end{tcolorbox}
\end{minipage}
}
\author{
	\begin{tabular}{c}
		Cédric Pierquet\\
		{\ttfamily c pierquet -- at -- outlook . fr}
	\end{tabular}
}
\date{Version \PLversion{} -- \PLdate}

\newcommand\Cle[1]{{\bfseries\sffamily\textlangle #1\textrangle}}

\begin{document}

\thispagestyle{empty}

\maketitle

{\Large \bfseries Résumé : }

\medskip

\noindent Quelques commandes pour faciliter l'utilisation de \LaTeX{} pour les enseignants de mathématiques en lycée.

Quelques commandes pour des courbes \textit{lisses} avec gestion des extrema et des dérivées.

Quelques commandes pour simuler une fenêtre de logiciel de calcul formel, en \TikZ.

Quelques environnements (\textsf{tcbox}) pour présenter du code \textsf{python} ou \textsf{pseudocode}.

Quelques environnements (\textsf{tcbox}) pour présenter des commandes dans un terminal (\textsf{win} ou \textsf{mac} ou \textsf{linux}).

Un cartouche (\textsf{tcbox}) pour présenter des codes de partage \textsf{capytale}.

Une commande pour tracer un pavé en droit, en \TikZ, avec création des nœuds liés aux sommets.

Une commande pour simplifier des calculs sous forme fractionnaire.

Une commande pour simplifier l'écriture d'un ensemble, avec espaces \og automatiques \fg.

Une commande pour créer, en \TikZ, la \textit{toile} pour une suite récurrente.

\vfill

\hrule

\medskip

\begin{tblr}{width=\linewidth,colspec={X[c]X[c]X[c]X[c]X[c]X[c]},cells={font=\sffamily}}
	{\huge \LaTeX} & & & & &\\
	& {\huge \pdfLaTeX} & & & & \\
	& & {\huge \LuaLaTeX} & & & \\
	& & & {\huge \TikZ} & & \\
	& & & & {\huge \TeXLive} & \\
	& & & & & {\huge \MiKTeX} \\
\end{tblr}

\medskip

\hrule

\vfill

~

\newpage

\tableofcontents

\newpage

\section{Introduction}

\subsection{\og Philosophie \fg{} du package}

\begin{codeidee}
Ce \ctex{package}, très largement inspiré (et beaucoup moins abouti !) de l'excellent \ctex{ProfCollege} de C. Poulain et des excellents \ctex{tkz-*} d'A. Matthes, va définir quelques outils pour des situations particulières qui ne sont pas encore dans \ctex{ProfCollege}.

On peut le voir comme un (maigre) complément à \ctex{ProfCollege}, et je précise que la syntaxe est très proche (car pertinente de base) et donc pas de raison de changer une équipe qui gagne !

\medskip

Il se charge, dans le préambule, par \ctex{\textbackslash usepackage\{ProfLycee\}}. Il charge quelques \textsf{packages} utiles, mais j'ai fait le choix de laisser l'utilisateur gérer ses autres \textsf{packages}, comment notamment \ctex{amssymb} qui peut poser souci en fonction de la \textit{position} de son chargement.

L'utlisateur est libre de charger ses autres \textsf{packages} utiles et habituels, ainsi que ses \textsf{polices} et \textsf{encodages} habituels.
\end{codeidee}

\smallskip

\begin{codeinfo}
Le \textsf{package} \ctex{ProfLycee} charge les \textsf{packages} :

\begin{itemize}
	\item \ctex{xcolor} avec les options \textsf{[table,svgnames]} ;
	\item \ctex{tikz}, \ctex{pgf}, \ctex{xfp} ;
	\item \ctex{xparse}, \ctex{xkeyval}, \ctex{xstring}, \ctex{simplekv} ;
	\item \ctex{listofitems}, \ctex{xintexpr} ;
	\item \ctex{tabularray}, \ctex{fontawesome5}, \ctex{tcolorbox}.
\end{itemize}
\end{codeinfo}

\smallskip

\begin{codeidee}
J'ai utilisé les \ctex{packages} du phénoménal C. Tellechea, je vous conseille d'aller jeter un œil sur ce qu'il est possible de faire en \LaTeX{} avec \ctex{listofitems}, \ctex{randomlist}, \ctex{simplekv} et \ctex{xstring} !
\end{codeidee}

\smallskip

\begin{codetex}[listing only]
\documentclass{article}
\usepackage[french]{babel}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{ProfLycee}
...
\end{codetex}

\subsection{Options du package}

\begin{codeinfo}
Par défaut, \ctex{minted} est chargé et donc la compilation nécessite d'utiliser \textsf{shell-escape}. Cependant, si vous ne souhaitez pas utiliser les commandes nécessitant \ctex{minted} vous pouvez charger le package \ctex{ProfLycee} avec l'option \Cle{nominted}.
\end{codeinfo}

\smallskip

\begin{codetex}[listing only]
...
\usepackage[nominted]{ProfLycee}
...
\end{codetex}

\medskip

\begin{codeinfo}
En compilant (notamment avec les packages \ctex{minted} et \ctex{pythontex}) on peut spécifier des répertoires particuliers pour les (ou des) fichiers auxiliaires.

Avec l'option \Cle{build}, l'utilisateur a la possibilité de placer les fichiers temporaires de \ctex{minted} et \ctex{pythontex} dans un répertoire \textsf{build} du répertoire courant.
\end{codeinfo}

\smallskip

\begin{codetex}[listing only]
...
\usepackage[build]{ProfLycee}
...
\end{codetex}

\smallskip

\begin{codeinfo}
Les options précédentes sont cumulables, et, pour info, elles conditionnent le chargement des \textsf{packages} avec les options :

\begin{itemize}
	\item \ctex{\textbackslash setpythontexoutputdir\{./build/pythontex-files-\textbackslash jobname\}}
	\item \ctex{\textbackslash RequirePackage[outputdir=build]\{minted\}}
\end{itemize}
\end{codeinfo}

\subsection{Le système de \og clés/options \fg}

\begin{codeidee}
L'idée est de conserver -- autant que faire se peut -- l'idée de \Cle{Clés} qui sont :
%
\begin{itemize}
	\item modifiables ;
	\item définies (en majorité) par défaut pour chaque commande.
\end{itemize}

Pour certaines commandes, le système de \Cle{Clés} pose quelques soucis, de ce fait le fonctionnement est plus \textit{basique} avec un système d'\textsf{arguments} optionnels (entre \textsf{[\ldots]}) ou mandataires (entre \textsf{\{\ldots\}}).
\end{codeidee}

\smallskip

\begin{codeinfo}
Les \textsf{commandes} et \textsf{environnements} présentés seront explicités via leur \textsf{syntaxe} avec les \textsf{options} ou \textsf{arguments}.

Autant que faire se peut, des exemples/illustrations/remarques seront proposés à chaque fois.

\smallskip

Les \textsf{codes} seront présentés dans des \textsf{boîtes} \textcolor{red!75!black}{{\small \faCode} Code \LaTeX}, si possible avec la \textsf{sortie} dans la même boîte, et sinon la \textsf{sortie} sera visible dans des \textsf{boîtes} \textcolor{red!75!black}{{\small \faArrowAltCircleRight[regular]} Sortie \LaTeX}.

Les \textsf{clés} ou \textsf{options} seront présentées dans des \textsf{boîtes} \textcolor{ForestGreen}{{\small \faPaperclip} Clés}.
\end{codeinfo}

\subsection{Outils disponibles}

\begin{codeidee}
Le \ctex{package}, qui s'enrichira peut-être au fil du temps permet -- pour le moment -- de :

\begin{itemize}
	\item tracer des splines cubiques avec gestion \textit{assez fine} des tangentes ;
	\item tracer des tangentes (ou portions) de tangentes sur la même base que pour les splines ;
	\item simuler une fenêtre de logiciel formel (\textit{à la manière de} \textsf{XCas}) ;
	\item mettre en forme du code \textsf{python} ou \textsf{pseudocode} ;
	\item simuler une fenêtre de terminal (win/unix/osx) ;
	\item créer un cartouche \textit{à la manière de} Capytale ;
	\item créer rapidement un pavé droit ou un tétraèdre en \TikZ, avec gestion des nœuds.
\end{itemize}
\end{codeidee}

\smallskip

\begin{codeinfo}
À noter que certaines commandes disponibles sont liées à un environnement \ctex{tikzpicture}, elles ne sont pas autonomes mais permettent de conserver -- en parallèle -- toute commande liée à \TikZ{} !
\end{codeinfo}

\subsection{Compilateur(s)}

\begin{codeinfo}
Le package \ctex{ProfLycee} est compatible avec les compilateurs classiques : \textsf{latex}, \textsf{pdflatex} ou encore \textsf{lualatex}.

\smallskip

En ce qui concerne les codes \textsf{python} et/ou \textsf{pseudocode}, il faudra :

\begin{itemize}
	\item compiler en chaîne \textsf{pdflatex + pythontex + pdflatex} pour les environnements avec \ctex{pythontex} ;
	\item compiler avec  \textsf{shell-escape} (ou \textsf{write18}) pour les environnements avec \ctex{minted}.
\end{itemize}
\end{codeinfo}



\newpage

\section{L'outil \og splinetikz \fg}

\subsection{Courbe d'interpolation}

\begin{codeinfo}
On va utiliser les notions suivantes pour paramétrer le tracé \og automatique \fg{} grâce à  \ctex{..controls} :
%
\begin{itemize}
	\item il faut rentrer les \textcolor{purple}{\textsf{points de contrôle}} ;
	\item il faut préciser les \textcolor{ForestGreen}{\textsf{pentes des tangentes}} (pour le moment on travaille avec les mêmes à gauche et à droite\ldots) ;
	\item on peut paramétrer les \textcolor{CadetBlue}{\textsf{coefficients}} pour \og affiner \fg{} les portions.
\end{itemize}

\medskip

Pour déclarer les paramètres :
%
\begin{itemize}
	\item liste des points de contrôle par : \verb|liste=x1/y1/d1§x2/y2/d2§...|
	\begin{itemize}
		\item il faut au-moins deux points ;
		\item avec les points \pverb|(xi;yi)| et \vverb|f'(xi)=di|.
	\end{itemize}
	\item coefficients de contrôle par \verb|coeffs=...| :
	\begin{itemize}
		\item \averb|coeffs=x| pour mettre tous les coefficients à x ;
		\item \averb|coeffs=C1§C2§...| pour spécifier les coefficients par portion (donc il faut avoir autant de § que pour les points !) ;
		\item \averb|coeffs=C1G/C1D§...| pour spécifier les coefficients par portion et par partie gauche/droite ;
		\item on peut mixer avec \averb|coeffs=C1§C2G/C2D§...|.
	\end{itemize}
\end{itemize}
\end{codeinfo}

\subsection{Code, clés et options}

\begin{codetex}[listing only]
\begin{tikzpicture}
	...
	\splinetikz[liste=...,coeffs=...,affpoints=...,couleur=...,epaisseur=...,%
	            taillepoints=...,couleurpoints=...,style=...]
	...
\end{tikzpicture}
\end{codetex}

\smallskip

\begin{codecles}
Certains paramètres peuvent être gérés directement dans la commande \ctex{\textbackslash splinetikz} :
%
\begin{itemize}
	\item la couleur de la courbe par la \textsf{clé} \Cle{couleur} ;\hfill{}défaut \Cle{red}
	\item l'épaisseur de la courbe par la \textsf{clé} \Cle{epaisseur} ;\hfill{}défaut \Cle{1.25pt}
	\item du style supplémentaire pour la courbe peut être rajouté, grâce à la \textsf{clé} \Cle{style=} ;\hfill{}défaut \Cle{vide}
	\item les coefficients de \textit{compensation} gérés par la \textsf{clé} \Cle{coeffs} ;\hfill{}défaut \Cle{3}
	\item les points de contrôle ne sont pas affichés par défaut, mais \textsf{clé booléenne} \Cle{affpoints} permet de les afficher ;\hfill{}défaut \Cle{true}
	\item la taille des points de contrôle est géré par la \textsf{clé} \Cle{taillepoints}.\hfill{}défaut \Cle{2pt}
\end{itemize}
\end{codecles}

\subsection{Compléments sur les coefficients de \og compensation \fg}

\begin{codeidee}
Le choix a été fait ici, pour \textit{simplifier} le code, le travailler sur des courbes de Bézier.

Pour \textit{simplifier} la gestion des nombres dérivés, les points de contrôle sont gérés par leurs coordonnées \textit{polaires}, les \textsf{coefficients de compensation} servent donc -- grosso modo -- à gérer la position radiale.

\smallskip

Le coefficient \Cle{3} signifie que, pour une courbe de Bézier entre $x=a$ et $x=b$, les points de contrôles seront situés à une distance radiale de $\frac{b-a}{3}$.

Pour \textit{écarter} les points de contrôle, on peut du coup \textsf{réduire} le coefficient de compensation !

\medskip

Pour des intervalles \textit{étroits}, la \textit{pente} peut paraître abrupte, et donc le(s) coefficient(s) peuvent être modifiés, de manière fine.

\medskip

Si jamais il existe ou ou des points \textit{anguleux}, le plus simple est de créer les splines en plusieurs fois.
\end{codeidee}

\subsection{Exemples}

\begin{codetex}[tikz lower]
%code tikz
\def\x{0.9cm}\def\y{0.9cm}
\def\xmin{-1}\def\xmax{11}\def\xgrille{1}\def\xgrilles{0.5}
\def\ymin{-1}\def\ymax{5}\def\ygrille{1}\def\ygrilles{0.5}
%axes et grilles
\draw[xstep=\xgrilles,ystep=\ygrilles,line width=0.3pt,lightgray!50] (\xmin,\ymin) grid (\xmax,\ymax);
\draw[xstep=\xgrilles,ystep=\ygrilles,line width=0.6pt,lightgray!50] (\xmin,\ymin) grid (\xmax,\ymax);
\draw[line width=1.5pt,->,gray] (\xmin,0)--(\xmax,0) ;
\draw[line width=1.5pt,->,gray] (0,\ymin)--(0,\ymax) ;
\foreach \x in {0,1,...,10} {\draw[gray,line width=1.5pt] (\x,4pt) -- (\x,-4pt) ;}
\foreach \y in {0,1,...,4} {\draw[gray,line width=1.5pt] (4pt,\y) -- (-4pt,\y) ;}
\draw[darkgray] (1,-4pt) node[below,font=\sffamily] {1} ;
\draw[darkgray] (-4pt,1) node[left,font=\sffamily] {1} ;
%splines
\def\LISTE{0/1/0§4/3.667/-0.333§7.5/1.75/0§9/2/-0.333§10/0/-10}
\splinetikz[liste=\LISTE,affpoints=true,coeffs=3,couleur=red]
\end{codetex}

\smallskip

\begin{codeinfo}
Avec des explications utiles à la compréhension :

\begin{center}
	\begin{tikzpicture}[x=0.9cm,y=0.9cm,xmin=-1,xmax=11,xgrille=1,xgrilles=0.5,ymin=-1,ymax=7,ygrille=1,ygrilles=0.5]
		\genfenetre
		\splinetikz[liste=0/1/0§4/3.667/-0.333§7.5/1.75/0§9/2/-0.333§10/0/-10,affpoints=true]
		\gennotice
		\gentangentes
		\listecoeffs{3}{3}{3}{3}
	\end{tikzpicture}
\end{center}
\end{codeinfo}

\newpage

\subsection{Avec une gestion plus fine des \og coefficients \fg}

\begin{codeinfo}
Dans la majorité des cas, le \textit{coefficient} \textcircled{3} permet d'obtenir une courbe (ou une portion) très satisfaisante !

Dans certains cas, il se peut que la portion paraisse un peu trop \og abrupte \fg{}.

On peut dans ce cas \textit{jouer} sur les coefficients de cette portion pour \textit{arrondir} un peu tout cela (\textit{ie} diminuer le \textsf{coeff}\ldots)!

%\begin{itemize}
%	\item être donnés (pour utiliser le même partout) sous la forme \Cle{coeffs=C} ;
%	\item être donnés portion par portion, sous la forme \Cle{coeffs=C1§C2§...} ;
%	\item être donné de manière très fine, portion par portion et côté par côté, sous la forme \Cle{coeffs=C1G/C1D§C2G/C2D§...}.
%\end{itemize}

\begin{center}
	\begin{tikzpicture}[x=0.9cm,y=0.9cm,xmin=-1,xmax=11,xgrille=1,xgrilles=0.5,ymin=-1,ymax=7,ygrille=1,ygrilles=0.5]
		\genfenetre
		\draw (1,-4pt) node[below,font=\sffamily] {1} ;
		\draw (-4pt,1) node[left,font=\sffamily] {1} ;
		\def\LISTE{0/1/0§4/3.667/-0.333§7.5/1.75/0§9/2/-0.333§10/0/-10}
		\splinetikz[liste=\LISTE,affpoints=true,coeffs=3§3§3§2/1]
		\gennotice
		\listecoeffs{3/3}{3/3}{3/3}{2/1}
	\end{tikzpicture}
\end{center}
\end{codeinfo}

\smallskip

\begin{codetex}[listing only]
...
%splines
\def\LISTE{0/1/0§4/3.667/-0.333§7.5/1.75/0§9/2/-0.333§10/0/-10}
\splinetikz[liste=\LISTE,affpoints=true,coeffs=3§3§3§2/1]
...
\end{codetex}

\begin{codesortie}
\begin{center}
	\begin{tikzpicture}[x=0.9cm,y=0.9cm,xmin=-1,xmax=11,xgrille=1,xgrilles=0.5,ymin=-1,ymax=5,ygrille=1,ygrilles=0.5]
		%axes et grilles
		\draw[xstep=\xgrilles,ystep=\ygrilles,line width=0.3pt,lightgray!50] (\xmin,\ymin) grid (\xmax,\ymax);
		\draw[xstep=\xgrilles,ystep=\ygrilles,line width=0.6pt,lightgray!50] (\xmin,\ymin) grid (\xmax,\ymax);
		\draw[line width=1.5pt,->,gray] (\xmin,0)--(\xmax,0) ;
		\draw[line width=1.5pt,->,gray] (0,\ymin)--(0,\ymax) ;
		\foreach \x in {0,1,...,10} {\draw[gray,line width=1.5pt] (\x,4pt) -- (\x,-4pt) ;}
		\foreach \y in {0,1,...,4} {\draw[gray,line width=1.5pt] (4pt,\y) -- (-4pt,\y) ;}
		\draw[darkgray] (1,-4pt) node[below,font=\sffamily] {1} ;
		\draw[darkgray] (-4pt,1) node[left,font=\sffamily] {1} ;
%		\draw (1,-4pt) node[below,font=\sffamily] {1} ;
%		\draw (-4pt,1) node[left,font=\sffamily] {1} ;
		\def\LISTE{0/1/0§4/3.667/-0.333§7.5/1.75/0§9/2/-0.333§10/0/-10}
		\splinetikz[liste=\LISTE,affpoints=true,coeffs=3§3§3§2/1]
	\end{tikzpicture}
\end{center}
\end{codesortie}

\subsection{Conclusion}

\begin{codeinfo}
Le plus \og simple \fg{} est donc:
%
\begin{itemize}
	\item de déclarer la liste des points de contrôle, grâce à \ctex{\textbackslash def\textbackslash LISTE\{x1/y1:d1§x2/y2/d2§...\}} ;
	\item de  saisir la commande \ctex{\textbackslash splinetikz[liste=\textbackslash LISTE]} ;
	\item d'ajuster les options et coefficients en fonction du rendu !
\end{itemize}
\end{codeinfo}

\newpage

\section{L'outil \og tangentetikz \fg{}}

\subsection{Définitions}

\begin{codeidee}
En parallèle de l'outil \ctex{\textbackslash splinetikz}, il existe l'outil \ctex{\textbackslash tangentetikz} qui va permettre de tracer des tangentes à l'aide de la liste de points précédemment définie pour l'outil \ctex{\textbackslash splinetikz}.

\smallskip

NB : il peut fonctionner indépendamment de l'outil \ctex{\textbackslash splinetikz} puisque la liste des points de travail est gérée de manière autonome !
\end{codeidee}

\smallskip

\begin{codetex}[listing only]
\begin{tikzpicture}
	...
	\tangentetikz[liste=...,couleur=...,epaisseur=...,xl=...,xr=...,style=...,point=...]
	...
\end{tikzpicture}
\end{codetex}

\smallskip

\begin{codecles}
Cela permet de tracer la tangente :
%
\begin{itemize}
	\item au point numéro numéro \Cle{point} de la liste \Cle{liste}, de coordonnées \textsf{xi/yi} avec la pente \textsf{di} ;
	\item avec une épaisseur de \Cle{epaisseur}, une couleur \Cle{couleur} et un style additionnel \Cle{style} ;
	\item en la traçant à partir de \Cle{xl} avant \textsf{xi} et jusqu'à \Cle{xr} après \textsf{xi}.
\end{itemize}
\end{codecles}

\subsection{Exemple et illustration}

\begin{codetex}[listing only]
\begin{tikzpicture}
	...
	\def\LISTE{0/1.5/0§1/2/-0.333§2/0/-5}
	%spline
	\splinetikz[liste=\LISTE,affpoints=true,coeffs=3§2,couleur=red]
	%tangente
	\tangentetikz[liste=\LISTE,xl=0,xr=0.5,couleur=ForestGreen,style=dashed]
	\tangentetikz[liste=\LISTE,xl=0.5,xr=0.75,couleur=orange,style=dotted,point=2]
	\tangentetikz[liste=\LISTE,xl=0.33,xr=0,couleur=blue,style=densely dashed,point=3]
	...
\end{tikzpicture}
\end{codetex}

\begin{codesortie}
On obtient le résultat suivant (avec les éléments rajoutés utiles à la compréhension) :

\begin{center}
	\begin{tikzpicture}[x=3cm,y=2cm,xmin=0,xmax=2,xgrilles=0.25,ymin=0,ymax=2.25,ygrilles=0.25]
		\tikzset{noeudexpl/.style={purple,font=\sffamily\small}}
		\tgrilles
		\draw[line width=1.5pt,->,darkgray] (\xmin,0)--(\xmax,0) ;
		\draw[line width=1.5pt,->,darkgray] (0,\ymin)--(0,\ymax) ;
		\draw (0,1.5) node[noeudexpl,below] {point 1} ;
		\draw (1,2) node[noeudexpl,below] {point 2} ;
		\draw (2,0) node[noeudexpl,above left] {point 3} ;
		%spline
		\splinetikz[liste=0/1.5/0§1/2/-0.333§2/0/-5,affpoints=true,coeffs=3§2,couleur=red]
		%tangente
		\tangentetikz[liste=0/1.5/0§1/2/-0.333§2/0/-5,xl=0,xr=0.5,couleur=ForestGreen,style=dashed]
		\tangentetikz[liste=0/1.5/0§1/2/-0.333§2/0/-5,xl=0.5,xr=0.75,couleur=orange,style=dotted,point=2]
		\tangentetikz[liste=0/1.5/0§1/2/-0.333§2/0/-5,xl=0.33,xr=0,couleur=blue,style=densely dashed,point=3]
		%explications
		\draw[<->,very thick,darkgray] (0.5,2.2)--(1,2.2) node[midway,above,font=\sffamily] {xl} ;
		\draw[<->,very thick,darkgray] (1,2.2)--(1.75,2.2) node[midway,above,font=\sffamily] {xr};
		\draw[thick,darkgray] (1,4pt)--(1,-4pt) node[below,font=\sffamily] {1} ;
		\draw[thick,darkgray] (4pt,1)--(-4pt,1) node[left,font=\sffamily] {1} ;
	\end{tikzpicture}
\end{center}
\end{codesortie}

\subsection{Exemple avec les deux outils, et \og personnalisation \fg}

\begin{codetex}[listing only]
\tikzset{%
	xmin/.store in=\xmin,xmin/.default=-5,xmin=-5,
	xmax/.store in=\xmax,xmax/.default=5,xmax=5,
	ymin/.store in=\ymin,ymin/.default=-5,ymin=-5,
	ymax/.store in=\ymax,ymax/.default=5,ymax=5,
	xgrille/.store in=\xgrille,xgrille/.default=1,xgrille=1,
	xgrilles/.store in=\xgrilles,xgrilles/.default=0.5,xgrilles=0.5,
	ygrille/.store in=\ygrille,ygrille/.default=1,ygrille=1,
	ygrilles/.store in=\ygrilles,ygrilles/.default=0.5,ygrilles=0.5,
	xunit/.store in=\xunit,unit/.default=1,xunit=1,
	yunit/.store in=\yunit,unit/.default=1,yunit=1
}

\begin{tikzpicture}[x=0.5cm,y=0.5cm,xmin=0,xmax=16,xgrilles=1,ymin=0,ymax=16,ygrilles=1]
	\draw[xstep=\xgrilles,ystep=\ygrilles,line width=0.3pt,lightgray] (\xmin,\ymin) grid (\xmax,\ymax) ;
	\draw[line width=1.5pt,->,darkgray] (\xmin,0)--(\xmax,0) ;
	\draw[line width=1.5pt,->,darkgray] (0,\ymin)--(0,\ymax) ;
	\foreach \x in {0,2,...,14} {\draw[darkgray,line width=1.5pt] (\x,4pt) -- (\x,-4pt) ;}
	\foreach \y in {0,2,...,14} {\draw[darkgray,line width=1.5pt] (4pt,\y) -- (-4pt,\y) ;}
	%la liste pour la courbe d'interpolation
	\def\liste{0/6/3§3/11/0§7/3/0§10/0/0§14/14/6}
	%les tangentes "stylisées"
	\tangentetikz[liste=\liste,xl=0,xr=1,couleur=blue,style=dashed]
	\tangentetikz[liste=\liste,xl=2,xr=2,couleur=purple,style=dotted,point=2]
	\tangentetikz[liste=\liste,xl=2,xr=2,couleur=orange,style=<->,point=3]
	\tangentetikz[liste=\liste,xl=2,xr=0,couleur=ForestGreen,point=5]
	%la courbe en elle-même
	\splinetikz[liste=\liste,affpoints=true,coeffs=3,couleur=cyan,style=densely dotted]
\end{tikzpicture}
\end{codetex}

\begin{codesortie}
\begin{center}
\begin{tikzpicture}[x=0.5cm,y=0.5cm,xmin=0,xmax=16,xgrilles=1,ymin=0,ymax=16,ygrilles=1]
		\draw[xstep=\xgrilles,ystep=\ygrilles,line width=0.3pt,lightgray] (\xmin,\ymin) grid (\xmax,\ymax) ;
		\draw[line width=1.5pt,->,darkgray] (\xmin,0)--(\xmax,0) ;
		\draw[line width=1.5pt,->,darkgray] (0,\ymin)--(0,\ymax) ;
		\foreach \x in {0,2,...,14} {\draw[darkgray,line width=1.5pt] (\x,4pt) -- (\x,-4pt) ;}
		\foreach \y in {0,2,...,14} {\draw[darkgray,line width=1.5pt] (4pt,\y) -- (-4pt,\y) ;}
		\draw[darkgray] (2,-4pt) node[below,font=\sffamily] {2} ;
		\draw[darkgray] (-4pt,2) node[left,font=\sffamily] {2} ;
		%la liste pour la courbe d'interpolation
		\def\liste{0/6/3§3/11/0§7/3/0§10/0/0§14/14/6}
		%les tangentes "stylisées"
		\tangentetikz[liste=\liste,xl=0,xr=1,couleur=blue,style=dashed]
		\tangentetikz[liste=\liste,xl=2,xr=2,couleur=purple,style=dotted,point=2]
		\tangentetikz[liste=\liste,xl=2,xr=2,couleur=orange,style=<->,point=3]
		\tangentetikz[liste=\liste,xl=2,xr=0,couleur=ForestGreen,point=5]
		%la courbe en elle-même
		\splinetikz[liste=\liste,affpoints=true,coeffs=3,couleur=cyan,style=densely dotted]
	\end{tikzpicture}
\end{center}
\end{codesortie}

\newpage

\section{L'outil \og Calcul Formel \fg}

\subsection{Introduction}

\begin{codeidee}
L'idée des commandes suivantes est de définir, dans un environnement \TikZ, une présentation proche de celle d'un logiciel de calcul formel comme \textsf{XCas} ou \textsf{Geogebra}.

\smallskip

Les sujets d'examens, depuis quelques années, peuvent comporter des \textit{captures d'écran} de logiciel de calcul formel, l'idée est ici de reproduire, de manière autonome, une telle présentation.

\smallskip

À la manière du \textsf{package} \ctex{tkz-tab}, l'environnement de référence est un environnement \TikZ, dans lequel les lignes dont créées petit à petit, à l'aide de nœuds qui peuvent être réutilisés à loisir ultérieurement.
\end{codeidee}

\subsection{La commande \og paramCF \fg}

\begin{codeinfo}
La première chose à définir est l'ensemble des paramètres \textit{globaux} de la fenêtre de calcul formel, à l'aide de \Cle{Clés}.
\end{codeinfo}

\smallskip

\begin{codetex}[listing only]
...
\begin{tikzpicture}[...]
	\paramCF[.......]
	...
\end{tikzpicture}
\end{codetex}

\smallskip

\begin{codecles}
Les \Cle{Clés} disponibles sont :
\begin{itemize}
	\item \Cle{larg} : largeur de l'environnement ; \hfill{}défaut \Cle{16}
	\item \Cle{esplg} : espacement vertical entre les lignes ;\hfill{}défaut \Cle{2pt}
	\item \Cle{premcol} \& \Cle{hpremcol} : largeur et hauteur de la case du \textit{petit numéro} ;\hfill{}défaut \Cle{0.3} \&  \Cle{0.4}
	\item \Cle{taille} : taille du texte ;\hfill{}défaut \Cle{\textbackslash normalsize}
	\item \Cle{couleur} : couleur des traits de l'environnement ;\hfill{}défaut \Cle{darkgray}
	\item \Cle{titre} : booléen pour l'affichage d'un bandeau de titre ;\hfill{}défaut \Cle{false}
	\item \Cle{tailletitre} : taille du titre ;\hfill{}défaut \Cle{\textbackslash normalsize}
	\item \Cle{poscmd} : position horizontale de la commande d'entrée ;\hfill{}défaut \Cle{gauche}
	\item \Cle{posres} : position horizontale de la commande de sortie ;\hfill{}défaut \Cle{centre}
	\item \Cle{couleurcmd} : couleur de la commande d'entrée ;\hfill{}défaut \Cle{red}
	\item \Cle{couleurres} : couleur de la commande de sortie ;\hfill{}défaut \Cle{blue}
	\item \Cle{sep} : booléen pour l'affichage du trait de séparation E/S ;\hfill{}défaut \Cle{true}
	\item \Cle{menu} : booléen pour l'affichage du \textit{bouton} MENU ;\hfill{}défaut \Cle{true}
	\item \Cle{labeltitre} : libellé du titre.\hfill{}défaut \Cle{Résultats obtenus avec un logiciel de Calcul Formel}
\end{itemize}
\end{codecles}

\subsection{La commande \og ligneCF \fg}

\begin{codeinfo}
Une fois les paramètres déclarés, il faut créer les différentes lignes, grâce à la \ctex{\textbackslash ligneCF}.
\end{codeinfo}

\smallskip

\begin{codetex}[listing only]
\begin{tikzpicture}[...]
	\paramCF[.......]
	\ligneCF[...]
	...
\end{tikzpicture}
\end{codetex}

\smallskip

\begin{codecles}
Les (quelques) \Cle{Clés} disponibles sont :

\begin{itemize}
	\item \Cle{hc} : hauteur de la ligne de commande d'entrée ;\hfill{}défaut \Cle{0.75}
	\item \Cle{hr} : hauteur de la ligne de commande de sortie ;\hfill{}défaut \Cle{0.75}
	\item deux \textsf{arguments}, celui de la commande d'entrée et celui de la commande de sortie.
\end{itemize}
%
Chaque argument \textsf{COMMANDE} \& \textsf{RÉSULTAT} peut être formaté (niveau police) de manière indépendante.
\end{codecles}

\smallskip

\begin{codetex}[tikz lower]
%code tikz
\paramCF[titre=true,couleurcmd=olive,couleurres=orange]
\ligneCF{COMMANDE 1}{RÉSULTAT 1}
\ligneCF[hc=0.75,hr=1]{\texttt{(x+1)\CFchap2}}{$\mathtt{x^2+2x+1}$}   %\CFchap := ^ en mathtt
\end{codetex}

\subsection{Visualisation des paramètres}

\begin{codeinfo}
Pour \textit{illustrer} un peu les \Cle{clés}, un petit schéma, avec les différents nœuds crées par les \textsf{macros}.

\begin{center}
	\begin{tikzpicture}[x=1cm,y=1cm,line width=1pt]
	\paramCF[larg=12cm,couleur=lightgray,esplg=12pt,menu=false]
	\ligneCF{}{}
	\ligneCF[hc=1,hr=1.25]{}{}
	%explications
	\foreach \noeud in {01,11,21,31,41,51,02,12,22,32,42,52}
		\draw[blue] (A\noeud) node[font=\ttfamily] {A\noeud} ;
\end{tikzpicture}
\end{center}

\begin{center}
	\begin{tikzpicture}[x=1cm,y=1cm,line width=1pt]
	\paramCF[titre=true,larg=12cm,esplg=10pt,premcol=0.5,hpremcol=0.7,couleur=lightgray]
	\ligneCF{COMMANDE 1}{RÉSULTAT 1}
	\ligneCF[hc=0.85,hr=1.05]{COMMANDE 2}{RÉSULTAT 2}
	%explications
	\draw[CadetBlue,<->] ($(A22) + (0,-12pt)$) -- ($(A52) + (0,-12pt)$) node[midway,below,font=\sffamily] {\Cle{larg}} ;
	\draw[CadetBlue,<->] ($(A51) + (12pt,0)$) -- ($(A32) + (12pt,0)$) node[midway,right,font=\sffamily] {\Cle{esplg}} ;
	\draw[CadetBlue,<->] ($(A02) + (0,2pt)$) -- ($(A02) + (0,2pt) + ({-\CFpremcol},0) $) node[midway,above,font=\sffamily] {\Cle{premcol}} ;
	\draw[CadetBlue,<->] ($(A02) + ({-\CFpremcol},0) + (-2pt,0)$) -- ($(A02) + ({-\CFpremcol},{-\CFhpremcol}) +(-2pt,0)$) node[midway,left,font=\sffamily] {\Cle{hpremcol}} ;
	\draw[CadetBlue,<->] ($(A31) + (12pt,0)$) -- ($(A41) + (12pt,0)$) node[midway,right,font=\sffamily] {\Cle{hc}} ;
	\draw[CadetBlue,<->] ($(A41) + (12pt,0)$) -- ($(A51) + (12pt,0)$) node[midway,right,font=\sffamily] {\Cle{hr}} ;
	\draw[CadetBlue,<->] ($(A32) + (12pt,0)$) -- ($(A42) + (12pt,0)$) node[midway,right,font=\sffamily] {\Cle{hc}} ;
	\draw[CadetBlue,<->] ($(A42) + (12pt,0)$) -- ($(A52) + (12pt,0)$) node[midway,right,font=\sffamily] {\Cle{hr}} ;
	\draw[CadetBlue,->] ($(A12) + (0,-12pt)$) to[bend left=10] ($(A12) + (0,-12pt) + (-18pt,-12pt)$) node[below left,font=\sffamily] {\Cle{couleur}} ;
	\draw[CadetBlue,->] ($(A52) + (-0.65,0.25)$) to[bend left=10] ($(A52) + (-0.65,0.25) + (-18pt,12pt)$) node[inner sep=0pt,above left=1pt,font=\sffamily] {\Cle{menu}} ;
	\draw[CadetBlue,->] ($(A12) + (16pt,0)$) to[bend left=10] ($(A12) + (16pt,0) + (18pt,-12pt)$) node[inner sep=0pt,below right=1pt,font=\sffamily] {\Cle{sep}} ;
	\draw[CadetBlue,->] ($(A01) + (8pt,2pt) + (0,1em)$) to[bend left=10] ($(A01) + (8pt,2pt) + (0,1em) + (-18pt,12pt)$) node[inner sep=0pt,above=1pt,font=\sffamily] {\Cle{titre} \& \Cle{tailletitre} \& \Cle{labeltitre}} ;
\end{tikzpicture}
\end{center}
\end{codeinfo}

\newpage

\section{Code \& Console Python}

\subsection{Introduction}

\begin{codeidee}
Le \textsf{package} \ctex{pythontex} permet d'insérer et d'exécuter du code Python. On peut :

\begin{itemize}
	\item présenter du code python ;
	\item exécuter du code python dans un environnement type \og console \fg{} ;
	\item charger du code python, et éventuellement l'utiliser dans la console.
\end{itemize}
\end{codeidee}

\smallskip

\begin{codeinfo}
\textbf{Attention : }il faut dans ce cas une compilation en plusieurs étapes, comme par exemple \textsf{pdflatex puis pythontex puis pdflatex} !

Voir par exemple \url{http://lesmathsduyeti.fr/fr/informatique/latex/pythontex/} !
\end{codeinfo}

\smallskip

\begin{codeinfo}
Compte tenu de la \textit{relative complexité} pour gérer les options (par paramètres/clés\ldots) des \textit{tcbox} et des \textit{fancyvrb}, le style est \og fixé \fg{} tel quel, et seules la taille et la position de la \textit{tcbox} sont modifiables. Si toutefois vous souhaitez personnaliser davantage, il faudra prendre le code correspondant et appliquer vos modifications !

Cela peut donner -- en tout cas -- des idées de personnalisation en ayant une base \textit{pré}existante !
\end{codeinfo}

\subsection{Présentation de code Python via pythontex}

\begin{codeidee}
L'environnement \ctex{\textbackslash envcodepythontex} (chargé par \ctex{ProfLycee}, avec l'option \textit{autogobble}) permet de présenter du code python, dans une \ctex{tcolorbox} avec un style particulier.
\end{codeidee}

\smallskip

\begin{codetex}[listing only]
\begin{envcodepythontex}[largeur=...,centre=...,lignes=...]
...
\end{envcodepythontex}
\end{codetex}

\smallskip

\begin{codecles}
Comme précédemment, des \Cle{Clés} qui permettent de \textit{légèrement} modifier le style :

\begin{itemize}
	\item \Cle{largeur} : largeur de la \textit{tcbox} ;\hfill{}défaut \Cle{\textbackslash linewidth}
	\item \Cle{centre} : booléen pour centrer ou non la \textit{tcbox} ;\hfill{}défaut \Cle{true}
	\item \Cle{lignes} : booléen pour afficher ou non les numéros de ligne.\hfill{}défaut \Cle{true}
\end{itemize}
\end{codecles}

\smallskip

\begin{codetex}[listing only]
\begin{envcodepythontex}[largeur=12cm]
	#environnement Python(tex) centré avec numéros de ligne
	def f(x) :
		return x**2
\end{envcodepythontex}
\end{codetex}

\smallskip

\begin{codesortie}
\begin{envcodepythontex}[largeur=12cm]
	#environnement Python(tex) centré avec numéros de ligne
	def f(x) :
		return x**2
\end{envcodepythontex}
\end{codesortie}

\medskip

\begin{codetex}[listing only]
\begin{envcodepythontex}[largeur=12cm,lignes=false,centre=false]
	#environnement Python(tex) non centré sans numéro de ligne
	def f(x) :
		return x**2
\end{envcodepythontex}
\end{codetex}

\smallskip

\begin{codesortie}
\begin{envcodepythontex}[largeur=12cm,lignes=false,centre=false]
	#environnement Python(tex) non centré sans numéro de ligne
	def f(x) :
		return x**2
\end{envcodepythontex}
\end{codesortie}

\newpage

\subsection{Présentation de code Python via minted}

\begin{codeinfo}
Pour celles et ceux qui ne sont pas à l'aise avec le \textsf{package} \ctex{pythontex} et notamment sa spécificité pour compiler, il existe le \textsf{package} \ctex{minted} qui permet de présenter du code, et notamment python (il nécessite quand même une compilation avec l'option \ctex{--shell-escape} ou \ctex{-write18}).
\end{codeinfo}

\smallskip

\begin{codeidee}
L'environnement \ctex{\textbackslash envcodepythonminted} permet de présenter du code python, dans une \ctex{tcolorbox} avec un style (\textit{minted}) particulier.
\end{codeidee}

\smallskip

\begin{codetex}[listing only]
\begin{envcodepythonminted}(*)[largeur][options]
...
\end{envcodepythonminted}
\end{codetex}

\smallskip

\begin{codecles}
Plusieurs \Cle{arguments} (optionnels) sont disponibles :

\begin{itemize}
	\item la version \textit{étoilée} qui permet de pas afficher les numéros de lignes ;
	\item le premier argument optionnel concerne la \Cle{largeur} de la \ctex{tcbox} ;\hfill{}défaut \Cle{12cm}
	\item le second argument optionnel concerne les \Cle{options} de la \ctex{tcbox} en \textit{langage tcolorbox}.\hfill{}défaut \Cle{vide}
\end{itemize}
\end{codecles}

\medskip

\begin{codetex}[listing only]
\begin{envcodepythonminted}[12cm][center]
	#environnement Python(minted) centré avec numéros, de largeur 12cm
	def f(x) :
		return x**2
\end{envcodepythonminted}
\end{codetex}

\smallskip

\begin{codesortie}
\begin{envcodepythonminted}[12cm][center]
	#environnement Python(minted) centré avec numéros
	def f(x) :
		return x**2
\end{envcodepythonminted}
\end{codesortie}

\medskip

\begin{codetex}[listing only]
\begin{envcodepythonminted}*[0.8\linewidth][]
	#environnement Python(minted) sans numéro, de largeur 0.8\linewidth
	def f(x) :
		return x**2
\end{envcodepythonminted}
\end{codetex}

\smallskip

\begin{codesortie}
\begin{envcodepythonminted}*[0.8\linewidth][]
	#environnement Python(minted) sans numéro, de largeur 0.8\linewidth
	def f(x) :
		return x**2
\end{envcodepythonminted}
\end{codesortie}

\subsection{Console d'exécution Python}

\begin{codeidee}
\ctex{pythontex} permet également de \textit{simuler} (en exécutant également !) du code python dans une \textit{console}.

C'est l'environnement \ctex{\textbackslash envconsolepythontex} qui permet de le faire.
\end{codeidee}

\smallskip

\begin{codetex}[listing only]
\begin{envconsolepythontex}[largeur=...,centre=...,label=...]
...
\end{envconsolepythontex}
\end{codetex}

\smallskip

\begin{codecles}
Les \Cle{Clés} disponibles sont :

\begin{itemize}
	\item \Cle{largeur} : largeur de la \textit{console} ;\hfill{}défaut \Cle{\textbackslash linewidth}
	\item \Cle{centre} : booléen pour centrer ou non la \textit{console} ;\hfill{}défaut \Cle{true}
	\item \Cle{label} : booléen pour afficher ou non le titre.\hfill{}défaut \Cle{true}
\end{itemize}
\end{codecles}

\medskip

\begin{codetex}[listing only]
\begin{envconsolepythontex}[largeur=14cm,centre=false]
	#console Python(tex) non centrée avec label
	from math import sqrt
	1+1
	sqrt(12)
\end{envconsolepythontex}
\end{codetex}

\smallskip

\begin{codesortie}
\smallskip
\begin{envconsolepythontex}[largeur=14cm,centre=false]
	#console Python(tex) non centrée avec label
	from math import sqrt
	1+1
	sqrt(12)
\end{envconsolepythontex}
\end{codesortie}

\medskip

\begin{codetex}[listing only]
\begin{envconsolepythontex}[largeur=14cm,label=false]
	#console Python(tex) centrée sans label
	table = [[1,2],[3,4]]
	table[0][0]
\end{envconsolepythontex}
\end{codetex}

\smallskip

\begin{codesortie}
\smallskip
\begin{envconsolepythontex}[largeur=14cm,label=false]
	#console Python(tex) centrée sans label
	table = [[1,2],[3,4]]
	table[0][0]
\end{envconsolepythontex}
\end{codesortie}

\newpage

\section{Pseudo-Code}

\subsection{Introduction}

\begin{codeinfo}
Le \textsf{package} \ctex{listings} permet d'insérer et de présenter du code, et avec \ctex{tcolorbox} on peut obtenir une présentation similaire à celle du code Python. Pour le moment la \textit{philosophie} de la commande est un peu différente de celle du code python, avec son système de \Cle{Clés}, car l'environnement \ctex{tcblisting} est un peu différent\ldots
\end{codeinfo}

\subsection{Présentation de Pseudo-Code}

\begin{codeidee}
L'environnement \ctex{\textbackslash envpseudocode} permet de présenter du (pseudo-code) dans une \ctex{tcolorbox}.
\end{codeidee}

\smallskip

\begin{codeinfo}
De plus, le package \ctex{listings} avec \ctex{tcolorbox} ne permet pas de gérer le paramètre \textit{autogobble}, donc il faudra être vigilant quant à la position du code (pas de tabulation en fait\ldots)
\end{codeinfo}

\smallskip

\begin{codetex}[listing only]
\begin{envpseudocode}(*)[largeur][options]
%attention à l'indentation, gobble ne fonctionne pas...
...
\end{envpseudocode}
\end{codetex}

\smallskip

\begin{codecles}
Plusieurs \Cle{arguments} (optionnels) sont disponibles :

\begin{itemize}
	\item la version \textit{étoilée} qui permet de pas afficher les numéros de lignes ;
	\item le premier argument optionnel concerne la \Cle{largeur} de la \ctex{tcbox} ;\hfill{}défaut \Cle{12cm}
	\item le second argument optionnel concerne les \Cle{options} de la \ctex{tcbox} en \textit{langage tcolorbox}.\hfill{}défaut \Cle{vide}
\end{itemize}
\end{codecles}

\medskip

\begin{codetex}[listing only]
\begin{envpseudocode} %non centré, de largeur par défaut (12cm) avec lignes
List = [...]          # à déclarer au préalable
n = longueur(List)
Pour i allant de 0 à n-1 Faire
	Afficher(List[i])
FinPour
\end{envpseudocode}
\end{codetex}

\smallskip

\begin{codesortie}
\begin{envpseudocode}
List = [...]          # à déclarer au préalable
n = longueur(List)
Pour i allant de 0 à n-1 Faire
	Afficher(List[i])
FinPour
\end{envpseudocode}
\end{codesortie}

\medskip

\begin{codetex}[listing only]
\begin{envpseudocode}*[15cm][center] %centré, de largeur 15cm sans ligne
List = [...]          # à déclarer au préalable
n = longueur(List)
Pour i allant de 0 à n-1 Faire
	Afficher(List[i])
FinPour
\end{envpseudocode}
\end{codetex}

\smallskip

\begin{codesortie}
\begin{envpseudocode}*[15cm][center]
List = [...]          # à déclarer au préalable
n = longueur(List)
Pour i allant de 0 à n-1 Faire
	Afficher(List[i])
FinPour
\end{envpseudocode}
\end{codesortie}

\subsection{Compléments}

\begin{codeinfo}
À l'instar de \textsf{packages} existants, la \textit{philosophie} ici est de laisser l'utilisateur gérer \textit{son} langage pseudo-code.

J'ai fait le choix de ne pas définir des \textsf{mots clés} à mettre en valeur car cela reviendrait à \textit{imposer} des choix ! Donc ici, pas de coloration syntaxique ou de mise en évidence de mots clés, uniquement un formatage libre de pseudo-code.
\end{codeinfo}

\smallskip

\begin{codeidee}
Évidemment, le code source est récupérable et adaptable à volonté, en utilisant les possibilités du package \ctex{listings}.

\smallskip

Celles et ceux qui sont déjà à l'aise avec les \textsf{packages} \ctex{listings} ou \ctex{minted} doivent déjà avoir leur environnement personnel prêt ! 

Il s'agit ici de présenter une version \og clé en main \fg{}.
\end{codeidee}

\newpage

\section{Terminal Windows/UNiX/OSX}

\subsection{Introduction}

\begin{codeidee}
L'idée des \textsf{commandes} suivantes est de permettre de simuler des fenêtres de \textsf{Terminal}, que ce soit pour Windows, Ubuntu ou OSX.

\smallskip

L'idée de base vient du \textsf{package} \ctex{termsim}, mais ici la gestion du \textsf{code} et des \textsf{fenêtres} est légèrement différente.

\smallskip

Le \textsf{contenu} est géré par le package \ctex{listings}, sans langage particulier, et donc sans coloration syntaxique particulière.

\smallskip

Comme pour le pseudo-code, pas d'\textsf{autogobble}, donc commandes à aligner à gauche !
\end{codeidee}

\subsection{Commandes}

\begin{codetex}[listing only]
\begin{PLtermwin}[largeur]{titre=...}[options]
...
\end{PLtermwin}

\begin{PLtermunix}[largeur]{titre=...}[options]
...
\end{PLtermunix}

\begin{PLtermosx}[largeur]{titre=...}[options]
...
\end{PLtermosx}
\end{codetex}

\begin{codecles}
Peu d'options pour ces commandes :

\begin{itemize}
	\item le premier, optionnel, est la \Cle{largeur} de la \ctex{tcbox} ;\hfill{}défaut \Cle{\textbackslash linewidth}
	\item le deuxième, mandataire, permet de spécifier le titre par la clé \Cle{titre}.\hfill{}défaut \Cle{Terminal Windows/UNiX/OSX}
	\item le troisième, optionnel, concerne les \Cle{options} de la \ctex{tcbox} en \textit{langage tcolorbox}.\hfill{}défaut \Cle{vide}
\end{itemize}
\end{codecles}

\medskip

\begin{codeinfo}
Le \textsf{code} n'est pas formaté, ni mis en coloration syntaxique.

De ce fait tout les caractères sont autorisés, même si l'éditeur pourra détecter le \% comme le début d'un commentaire, tout sera intégré dans le code mis en forme !
\end{codeinfo}

\medskip

\begin{codetex}[listing only]
\begin{PLtermunix}[12cm]{titre=Terminal Ubuntu}[center] %12cm, avec titre modifié et centré
test@DESKTOP:~$ ping -c 2 ctan.org
PING ctan.org (5.35.249.60) 56(84) bytes of data.
\end{PLtermunix}
\end{codetex}

\medskip

\begin{codesortie}
\begin{PLtermunix}[12cm]{titre=Terminal Ubuntu}[center]
test@DESKTOP:~$ ping -c 2 ctan.org
PING ctan.org (5.35.249.60) 56(84) bytes of data.
\end{PLtermunix}
\end{codesortie}

\begin{codetex}[listing only]
\begin{PLtermwin}[15cm]{} %largeur 15cm avec titre par défaut
Microsoft Windows [version 10.0.22000.493]
(c) Microsoft Corporation. Tous droits réservés.
C:\Users\test>ping ctan.org

Envoi d’une requête 'ping' sur ctan.org [5.35.249.60] avec 32 octets de données :
Réponse de 5.35.249.60 : octets=32 temps=35 ms TTL=51
Réponse de 5.35.249.60 : octets=32 temps=37 ms TTL=51
Réponse de 5.35.249.60 : octets=32 temps=35 ms TTL=51
Réponse de 5.35.249.60 : octets=32 temps=39 ms TTL=51

Statistiques Ping pour 5.35.249.60:
Paquets : envoyés = 4, reçus = 4, perdus = 0 (perte 0%),
Durée approximative des boucles en millisecondes :
Minimum = 35ms, Maximum = 39ms, Moyenne = 36ms
\end{PLtermwin}

\begin{PLtermosx}[0.5\linewidth]{titre=Terminal MacOSX}[flush right] %1/2-largeur et titre modifié et droite
[test@server]$ ping -c 2 ctan.org
PING ctan.org (5.35.249.60) 56(84) bytes of data.
\end{PLtermosx}
\end{codetex}

\begin{codesortie}
\begin{PLtermwin}[15cm]{}
Microsoft Windows [version 10.0.22000.493]
(c) Microsoft Corporation. Tous droits réservés.
C:\Users\test>ping ctan.org

Envoi d’une requête 'ping' sur ctan.org [5.35.249.60] avec 32 octets de données :
Réponse de 5.35.249.60 : octets=32 temps=35 ms TTL=51
Réponse de 5.35.249.60 : octets=32 temps=37 ms TTL=51
Réponse de 5.35.249.60 : octets=32 temps=35 ms TTL=51
Réponse de 5.35.249.60 : octets=32 temps=39 ms TTL=51

Statistiques Ping pour 5.35.249.60:
Paquets : envoyés = 4, reçus = 4, perdus = 0 (perte 0%),
Durée approximative des boucles en millisecondes :
Minimum = 35ms, Maximum = 39ms, Moyenne = 36ms
\end{PLtermwin}

\begin{PLtermunix}[12cm]{titre=Terminal Ubuntu}[center]
test@DESKTOP:~$ ping -c 2 ctan.org
PING ctan.org (5.35.249.60) 56(84) bytes of data.
\end{PLtermunix}

\begin{PLtermosx}[0.5\linewidth]{titre=Terminal MacOSX}[flush right]
[test@server]$ ping -c 2 ctan.org
PING ctan.org (5.35.249.60) 56(84) bytes of data.
\end{PLtermosx}
\end{codesortie}

\newpage

\section{Cartouche Capytale}

\subsection{Introduction}

\begin{codeidee}
L'idée est d'obtenir des \textsf{cartouches} tels que \textsf{Capytale} les présente, pour partager un code afin d'accéder à une activité \textsf{python}.
\end{codeidee}

\subsection{Commandes}

\begin{codetex}[listing only]
\liencapytale(*)[options]{code}
\end{codetex}

\begin{codecles}
Peu d'options pour ces commandes :

\begin{itemize}
	\item la version \textit{étoilée} qui permet de  passer de la police \Cle{sffamily} à la police \Cle{ttfamily}, et donc dépendante des fontes du document ;
	\item le deuxième, optionnel, permet de rajouter des caractères après le code (comme un \textsf{espace}) ;\hfill{}défaut \Cle{vide}
	\item le troisième, mandataire, est le \textsf{code} à afficher.
\end{itemize}
\end{codecles}

\begin{codetex}[listing only]
\liencapytale{abcd-12345}           #lien simple, en sf

\liencapytale[~]{abcd-12345}        #lien avec ~ à la fin, en sf

\liencapytale*{abcd-12345}          #lien simple, en tt

\liencapytale*[~]{abcd-12345}       #lien avec ~ à la fin, en tt
\end{codetex}

\begin{codesortie}
\liencapytale{abcd-12345}

\liencapytale[~]{abcd-12345}

\liencapytale*{abcd-12345}

\liencapytale*[~]{abcd-12345}
\end{codesortie}

\begin{codeinfo}
Le \textsf{cartouche} peut être \og cliquable \fg{} grâce à \ctex{href}.
\end{codeinfo}

\begin{codetex}[listing only]
\usepackage{hyperref}
\urlstyle{same}
...
\href{https://capytale2.ac-paris.fr/web/c/abcd-12345}{\liencapytale{abcd-12345}}
\end{codetex}

\begin{codesortie}
\href{https://capytale2.ac-paris.fr/web/c/abcd-12345}{\liencapytale{abcd-12345}}
\end{codesortie}

\newpage

\section{Pavé droit \og simple \fg{}}

\subsection{Introduction}

\begin{codeidee}
L'idée est d'obtenir un pavé droit, dans un environnement \TikZ, avec les nœuds créés et nommés directement pour utilisation ultérieure.
\end{codeidee}

\subsection{Commandes}

\begin{codetex}[listing only]
...
\begin{tikzpicture}[<options>]
	\paveCF[<options>]
	...
\end{tikzpicture}
\end{codetex}

\begin{codecles}
Quelques \Cle{clés} sont disponibles pour cette commande :

\begin{itemize}
	\item \Cle{largeur} : largeur du pavé ;\hfill{}défaut \Cle{2}
	\item \Cle{profondeur} : profondeur du pavé ;\hfill{}défaut \Cle{1}
	\item \Cle{hauteur} : hauteur du pavé ;\hfill{}défaut \Cle{1.25}
	\item \Cle{angle} : angle de fuite de la perspective ;\hfill{}défaut \Cle{30}
	\item \Cle{fuite} : coefficient de fuite de la perspective ;\hfill{}défaut \Cle{0.5}
	\item \Cle{sommets} : liste des sommets (avec délimiteur § !) ;\hfill{}défaut \Cle{A§B§C§D§E§F§G§H}
	\item \Cle{epaisseur} : épaisseur des arêtes (en \textit{langage simplifié} \TikZ) ;\hfill{}défaut \Cle{thick}
	\item \Cle{aff} : booléen pour afficher les noms des sommets ;\hfill{}défaut \Cle{false}
	\item \Cle{plein} : booléen pour ne pas afficher les arêtes \textit{invisibles} ;\hfill{}défaut \Cle{false}
	\item \Cle{cube} : booléen pour préciser qu'il s'agit d'un cube (seule la valeur \Cle{largeur} est util(isé)e).\hfill{}défaut \Cle{false}
\end{itemize}
\end{codecles}

\begin{codetex}[tikz lower]
%code tikz
\pavePL
\end{codetex}

\begin{codetex}[tikz lower]
%code tikz
\pavePL[cube,largeur=3]
\end{codetex}

\begin{codeinfo}
La ligne est de ce fait à insérer dans un environnement \TikZ, avec les options au choix pour cet environnement.

Le code crée les nœuds relatifs aux sommets, et les nomme comme les sommets, ce qui permet de les réutiliser pour éventuellement compléter la figure !
\end{codeinfo}

\subsection{Influence des paramètres}

\begin{codetex}[listing only]
\begin{tikzpicture}[line join=bevel]
	\pavePL[aff,largeur=4,profondeur=3,hauteur=2,epaisseur={ultra thick}]
\end{tikzpicture}
\end{codetex}

\medskip

\begin{codesortie}
\begin{tikzpicture}[line join=bevel]
	\pavePL[aff,largeur=4,profondeur=3,hauteur=2,epaisseur={ultra thick}]
\end{tikzpicture}
\end{codesortie}

\begin{codetex}[listing only]
\begin{center}
	\begin{tikzpicture}[line join=bevel]
		\pavePL[plein,aff,largeur=7,profondeur=3.5,hauteur=4,sommets=Q§S§D§F§G§H§J§K]
		\draw[thick,red,densely dotted] (G)--(J) ;
		\draw[thick,blue,densely dotted] (K)--(H) ;
	\end{tikzpicture}
\end{center}
\end{codetex}

\medskip

\begin{codesortie}
\begin{center}
	\begin{tikzpicture}[line join=bevel]
		\pavePL[plein,aff,largeur=7,profondeur=3.5,hauteur=4,sommets=Q§S§D§F§G§H§J§K]
		\draw[thick,red,densely dotted] (G)--(J) ;
		\draw[thick,blue,densely dotted] (K)--(H) ;
	\end{tikzpicture}
\end{center}
\end{codesortie}

\newpage

\section{Tétraèdre \og simple \fg{}}

\subsection{Introduction}

\begin{codeidee}
L'idée est d'obtenir un tétraèdre, dans un environnement \TikZ, avec les nœuds créés et nommés directement pour utilisation ultérieure.
\end{codeidee}

\subsection{Commandes}

\begin{codetex}[listing only]
...
\begin{tikzpicture}[<options>]
	\tetraPL[<options>]
	...
\end{tikzpicture}
\end{codetex}

\begin{codecles}
Quelques \Cle{clés} sont disponibles pour cette commande :

\begin{itemize}
	\item \Cle{largeur} : \textit{largeur} du tétraèdre ;\hfill{}défaut \Cle{4}
	\item \Cle{profondeur} : \textit{profondeur} du tétraèdre ;\hfill{}défaut \Cle{1.25}
	\item \Cle{hauteur} : \textit{hauteur} du tétraèdre ;\hfill{}défaut \Cle{3}
	\item \Cle{alpha} : angle \textit{du sommet de devant} ;\hfill{}défaut \Cle{40}
	\item \Cle{beta} : angle \textit{du sommet du haut} ;\hfill{}défaut \Cle{60}
	\item \Cle{sommets} : liste des sommets (avec délimiteur § !) ;\hfill{}défaut \Cle{A§B§C§D}
	\item \Cle{epaisseur} : épaisseur des arêtes (en \textit{langage simplifié} \TikZ) ;\hfill{}défaut \Cle{thick}
	\item \Cle{aff} : booléen pour afficher les noms des sommets ;\hfill{}défaut \Cle{false}
	\item \Cle{plein} : booléen pour ne pas afficher l'arête \textit{invisible} .\hfill{}défaut \Cle{false}
\end{itemize}
\end{codecles}

\begin{codetex}[tikz lower]
%code tikz
\tetraPL
\end{codetex}

\begin{codetex}[tikz lower]
%code tikz
\tetraPL[aff,largeur=2,profondeur=0.625,hauteur=1.5]
\end{codetex}

\begin{codetex}[tikz lower]
%code tikz
\tetraPL[plein,aff,largeur=5,beta=60]
\end{codetex}

%\begin{codeinfo}
%La ligne est de ce fait à insérer dans un environnement \TikZ, avec les options au choix pour cet environnement.
%
%Le code créé les nœuds relatifs aux sommets, et les nomme comme les sommets, ce qui permet de les réutiliser pour éventuellement compléter la figure !
%\end{codeinfo}

\subsection{Influence des paramètres}

\begin{codeinfo}
Pour \textit{illustrer} un peu les \Cle{clés}, un petit schéma, avec les différents paramètres utiles.

\begin{center}
	\begin{tikzpicture}[x=1.25cm,y=1.25cm,line width=1pt,line join=bevel]
		\tetraPL[largeur=5,profondeur=1.95,hauteur=2.75,alpha=45,beta=70]
		\draw[draw=none] (A)--(C) node[midway,sloped,above,font=\small\sffamily,CadetBlue] {largeur} ;
		\draw[draw=none] (A)--(B) node[midway,sloped,below,font=\small\sffamily,CadetBlue] {profondeur} ;
		\draw[draw=none] (A)--(D) node[midway,sloped,above,font=\small\sffamily,CadetBlue] {hauteur} ;
		\draw[purple] (0.5,0) arc (0:-45:0.5) ;
		\draw (-22.5:0.5) node[purple,right] {$\alpha$} ;
		\draw[orange] (0.75,0) arc (0:70:0.75) ;
		\draw (35:0.75) node[orange,right] {$\beta$} ;
	\end{tikzpicture}
\end{center}
\end{codeinfo}

\begin{codetex}[listing only]
\begin{center}
	\begin{tikzpicture}[line join=bevel]
		\tetraPL[aff,largeur=7,profondeur=3,hauteur=5,epaisseur={ultra thick},alpha=20,beta=30]
		\draw[very thick,ForestGreen,<->] ($(A)!0.5!(D)$)--($(B)!0.5!(D)$) ;
	\end{tikzpicture}
\end{center}
\end{codetex}

\medskip

\begin{codesortie}
\begin{center}
	\begin{tikzpicture}[line join=bevel]
		\tetraPL[aff,largeur=7,profondeur=3,hauteur=5,epaisseur={ultra thick},alpha=20,beta=30]
		\draw[very thick,ForestGreen,<->] ($(A)!0.5!(D)$)--($(B)!0.5!(D)$) ;
	\end{tikzpicture}
\end{center}
\end{codesortie}
%
%\begin{codetex}[listing only]
%	\begin{center}
%		\begin{tikzpicture}[line join=bevel]
%			\pavePL[plein,aff,largeur=7,profondeur=3.5,hauteur=4,sommets=Q§S§D§F§G§H§J§K]
%			\draw[thick,red,densely dotted] (G)--(J) ;
%			\draw[thick,blue,densely dotted] (K)--(H) ;
%		\end{tikzpicture}
%	\end{center}
%\end{codetex}
%
%\medskip
%
%\begin{codesortie}
%	\begin{center}
%		\begin{tikzpicture}[line join=bevel]
%			\pavePL[plein,aff,largeur=7,profondeur=3.5,hauteur=4,sommets=Q§S§D§F§G§H§J§K]
%			\draw[thick,red,densely dotted] (G)--(J) ;
%			\draw[thick,blue,densely dotted] (K)--(H) ;
%		\end{tikzpicture}
%	\end{center}
%\end{codesortie}

\newpage

\section{Fractions, ensembles}

\subsection{Fractions}

\begin{codeidee}
L'idée est d'obtenir une commande pour simplifier un calcul sous forme de fraction irréductible.
\end{codeidee}

\begin{codetex}[listing only]
\convertfraction[<option>]{<argument>}
\end{codetex}

\begin{codecles}
Peu d'options pour ces commandes :

\begin{itemize}
	\item le premier argument, optionnel, permet de spécifier le mode de sortie de la fraction \textsf{[t]} pour \textsf{tfrac} et \textsf{[d]} pour \textsf{dfrac} ;
	\item le second, mandataire, est le \textsf{calcul} ou la \textsf{division} à convertir.
\end{itemize}

À noter que la macro est dans un bloc \textsf{ensuremath} donc les \textsf{\$\ldots\$} ne sont pas nécessaires.
\end{codecles}

\begin{codetex}[listing only]
\convertfraction{111/2145}
\convertfraction{111/3}
$\frac{111}{2145}=\convertfraction{111/2145}$
$\frac{3}{15}=\convertfraction[]{3/15}$
$\tfrac{3}{15}=\convertfraction[t]{3/15}$                   #formatage en \tfrac
$\dfrac{3}{15}=\convertfraction[d]{3/15}$                   #formatage en \dfrac
$\dfrac{0,42}{0,015}=\convertfraction[d]{0.42/0.015}$
$\dfrac{0,41}{0,015}=\convertfraction[d]{0.41/0.015}$
$\dfrac{1}{7}+\dfrac{3}{8}=\convertfraction[d]{1/7+3/8}$
$\convertfraction[d]{1+1/2}$
$\convertfraction{0.1/0.7+30/80}$
\end{codetex}

\begin{codesortie}
\convertfraction{111/2145}

\smallskip

\convertfraction{111/3}

\smallskip

$\frac{111}{2145}=\convertfraction{111/2145}$

\smallskip

$\frac{3}{15}=\convertfraction[]{3/15}$

\smallskip

$\tfrac{3}{15}=\convertfraction[t]{3/15}$

\smallskip

$\dfrac{3}{15}=\convertfraction[d]{3/15}$

\smallskip

$\dfrac{0,42}{0,015}=\convertfraction[d]{0.42/0.015}$

\smallskip

$\dfrac{0,41}{0,015}=\convertfraction[d]{0.41/0.015}$

\smallskip

$\dfrac{1}{7}+\dfrac{3}{8}=\convertfraction[d]{1/7+3/8}$

\smallskip

$\convertfraction[d]{1+1/2}$

\smallskip

$\convertfraction{0.1/0.7+30/80}$
\end{codesortie}

\begin{codeinfo}
A priori le package \ctex{xint} permet de s'en sortir pour des calculs \og simples \fg, je ne garantis pas que tout calcul ou toute division donne un résultat \textit{satisfaisant} !
\end{codeinfo}

\pagebreak

\subsection{Ensembles}

\begin{codeidee}
L'idée est d'obtenir une commande pour simplifier l'écriture d'un ensemble d'éléments, en laissant gérer les espaces.

Les délimiteurs de l'ensemble créé sont toujours \textsf{\{~~\}}.
\end{codeidee}

\begin{codetex}[listing only]
\ensPL[<clés>]{<liste>}
\end{codetex}

\begin{codecles}
Peu d'options pour ces commandes :

\begin{itemize}
	\item le premier argument, optionnel, permet de spécifier les \Cle{Clés} :
	\begin{itemize}
		\item clé \Cle{sep} qui correspond au délimiteur des éléments de l'ensemble ; \hfill{}défaut \Cle{;}
		\item clé \Cle{option} qui est un code (par exemple \textsf{strut}\dots) inséré avant les éléments ;\hfill{}défaut \Cle{vide}
		\item un booléen \Cle{mathpunct} qui permet de préciser si on utilise l'espacement mathématique \textsf{mathpunct};\hfill{}défaut \Cle{true}
	\end{itemize}
	\item le second, mandataire, est la \textsf{liste} des éléments, séparés par \textsf{/}.
\end{itemize}
\end{codecles}

\begin{codetex}[listing only]
$\ensPL{a/b/c/d/e}$
$\ensPL[mathpunct=false]{a/b/c/d/e}$
$\ensPL[sep={,}]{a/b/c/d/e}$
$\ensPL[option={\strut}]{a/b/c/d/e}$
$\ensPL{ \frac{1}{1+\frac{1}{3}} / b / c / d / \frac{1}{2} }$
\end{codetex}

\begin{codesortie}
$\ensPL{a/b/c/d/e}$

\smallskip

$\ensPL[mathpunct=false]{a/b/c/d/e}$

\smallskip

$\ensPL[sep={,}]{a/b/c/d/e}$

\smallskip

$\ensPL[option={\strut}]{a/b/c/d/e}$

\smallskip

$\ensPL{ \displaystyle\frac{1}{1+\frac{1}{3}} / b / c / d / \displaystyle\frac{1}{2} }$
\end{codesortie}

\begin{codeinfo}
Attention cependant au comportement de la commande avec des éléments en mode \textsf{mathématique}, ceux-ci peuvent générer une erreur si \textsf{displaystyle} n'est pas utilisé\ldots
\end{codeinfo}

\newpage

\section{Suites récurrentes et \og toile \fg}

\subsection{Idée}

\begin{codeidee}
L'idée est d'obtenir une commande pour tracer (en \TikZ) la \og toile \fg{} permettant d'obtenir -- graphiquement -- les termes d'une suite récurrente définie par une relation $u_{n+1}=f(u_n)$.

\smallskip

Comme pour les autres commandes \TikZ, l'idée est de laisser l'utilisateur définir et créer son environnement \TikZ, et d'insérer la commande \ctex{recurrPL} pour afficher la \og toile \fg.
\end{codeidee}

\subsection{Commandes}

\begin{codetex}[listing only]
...
\begin{tikzpicture}[<options>]
	...
	\recurrPL[<clés>][<options du tracé>][<option supplémentaire des termes>]
	...
\end{tikzpicture}
\end{codetex}

\begin{codecles}
Plusieurs \Cle{arguments} (optionnels) sont disponibles :

\begin{itemize}
	\item le premier argument optionnel définit les \Cle{Clés} de la commande :
	\begin{itemize}
		\item la clé \Cle{fct} qui définit la fonction $f$ ;\hfill{}défaut \Cle{vide}
		\item la clé \Cle{nom} qui est le \textit{nom} de la suite ;\hfill{}défaut \Cle{u}
		\item la clé \Cle{no} qui est l'indice initial ;\hfill{}défaut \Cle{0}
		\item la clé \Cle{uno} qui est la valeur du terme initial ;\hfill{}défaut \Cle{vide}
		\item la clé \Cle{nb} qui est le nombre de termes à construire ;\hfill{}défaut \Cle{5}
		\item la clé \Cle{poslabel} qui correspond au placement des labels par rapport à l'axe des abscisses ;\hfill{}défaut \Cle{below}
		\item la clé \Cle{decallabel} qui correspond au décalage des labels par rapport aux abscisses ;\hfill{}défaut \Cle{6pt}
		\item la clé \Cle{taillelabel} qui correspond à la taille des labels ;\hfill{}défaut \Cle{small}
		\item un booléen \Cle{afftermes} qui permet d'afficher les termes de la suite sur l'axe $(Ox)$.\hfill{}défaut \Cle{true}
	\end{itemize}
	\item le deuxième argument optionnel concerne les \Cle{options} du tracé de l'\textit{escalier} en \textit{langage \TikZ} ;
	
	\hfill{}défaut \Cle{thick,color=magenta} ;
	\item le troisième argument optionnel concerne les \Cle{options} du tracé des termes en \textit{langage \TikZ}.
	
	\hfill{}défaut \Cle{dotted}.
\end{itemize}
\end{codecles}

\begin{codeinfo}
Il est à noter que le \textsf{code} n'est pas autonome, et doit être intégré dans un environnement \ctex{tikzpicture}.

\smallskip

L'utilisateur est donc libre de définir ses styles pour l'affichage des éléments de son graphique, et il est libre également de rajouter des éléments en plus du tracé de la \textit{toile} !

\smallskip

La macro ne permet -- pour le moment -- ni de tracer la bissectrice, ni de tracer la courbe$\ldots$

En effet, il y aurait trop d'options pour ces deux éléments, et l'idée est quand même de conserver une commande \textit{simple} ! Donc l'utilisateur se chargera de tracer et de personnaliser sa courbe et sa bissectrice !
\end{codeinfo}

\subsection{Exemples}

\begin{codeinfo}
On va tracer la \textit{toile} des 4 premiers termes de la suite récurrente $\begin{dcases} u_1 = 1 \\ u_{n+1} = \sqrt{5u_n}+1 \text{ pour tout entier } n \geqslant 1\end{dcases}$.
\end{codeinfo}

\begin{codetex}[tikz lower]
%code tikz
\def\x{1.5cm}\def\y{1.5cm}
\def\xmin{0}\def\xmax{10}\def\xgrille{1}\def\xgrilles{0.5}
\def\ymin{0}\def\ymax{8}\def\ygrille{1}\def\ygrilles{0.5}
%axes et grilles
\draw[xstep=\xgrilles,ystep=\ygrilles,line width=0.3pt,lightgray!50] (\xmin,\ymin) grid (\xmax,\ymax);
\draw[xstep=\xgrilles,ystep=\ygrilles,line width=0.6pt,lightgray!50] (\xmin,\ymin) grid (\xmax,\ymax);
\draw[line width=1.5pt,->,darkgray] (\xmin,0)--(\xmax,0) ;
\draw[line width=1.5pt,->,darkgray] (0,\ymin)--(0,\ymax) ;
\foreach \x in {0,1,...,9} {\draw[darkgray,line width=1.5pt] (\x,4pt) -- (\x,-4pt) ;}
\foreach \y in {0,1,...,7} {\draw[darkgray,line width=1.5pt] (4pt,\y) -- (-4pt,\y) ;}
%fonction définie et réutilisable
\def\f{sqrt(5*\x)+1}
%toile
\recurrPL[fct={\f},no=1,uno=1,nb=4,decallabel=4pt]
%éléments supplémentaires
\draw[very thick,blue,domain=0:8,samples=250] plot (\x,{\f}) ;
\draw[very thick,ForestGreen,domain=0:8,samples=2] plot (\x,\x) ;
\end{codetex}

\begin{codeinfo}
Peut-être que -- ultérieurement -- des options \textit{booléennes} seront disponibles pour un tracé \textit{générique} de la courbe et de la bissectrice, mais pour le moment la \textsf{macro} ne fait \textit{que} l'escalier.
\end{codeinfo}

\subsection{Influence des paramètres}

\begin{codetex}[listing only]
\begin{center}
	\begin{tikzpicture}[x=4cm,y=3cm]
	%axes + grilles + graduations
	...
	%fonction
	\def\f{-0.25*\x*\x+\x}
	%tracés
	\begin{scope}
		\clip (0,0) rectangle (2.5,1.25) ;
		\draw[line width=1.25pt,blue,domain=0:2.5,samples=200] plot (\x,{\f}) ;
	\end{scope}
	\recurrPL[fct={\f},no=0,uno=2,nb=5,poslabel=above right,decallabel=0pt]
\end{tikzpicture}
\end{center}
\end{codetex}

\medskip

\begin{codesortie}
\begin{center}
	\begin{tikzpicture}[x=4cm,y=3cm]
	\draw[xstep=0.25,ystep=0.25,line width=0.3pt,lightgray!50] (0,0) grid (2.5,1.25);
	\draw[thick,->] (0,0)--(2.5,0) ;
	\draw[thick,->] (0,0)--(0,1.25) ;
	\foreach \x in {0,1,2}
	\draw[line width=1.25pt] (\x,4pt) -- (\x,-4pt) node[below] {\num{\x}} ;
	\foreach \y in {0,0.5,1.0}
	\draw[line width=1.25pt] (4pt,\y) -- (-4pt,\y) node[left] {\num{\y}} ;
	\draw[line width=1.25pt,red](0,0) -- (1.25,1.25) ;
	%fonction
	\def\f{-0.25*\x*\x+\x}
	%tracés
	\begin{scope}
		\clip (0,0) rectangle (2.5,1.25) ;
		\draw[line width=1.25pt,blue,domain=0:2.5,samples=200] plot (\x,{\f}) ;
	\end{scope}
	\recurrPL[fct={\f},no=0,uno=2,nb=5,poslabel=above right,decallabel=0pt]
\end{tikzpicture}
\end{center}
\end{codesortie}

\begin{codetex}[listing only]
\begin{center}
	\begin{tikzpicture}[x=5cm,y=1.5cm]
		...
		\def\f{-0.25*\x*\x+\x}
		\recurrPL%
			[fct={\f},no=0,uno=1,nb=7,poslabel=above right,decallabel=0pt,afftermes=false]%
			[line width=1.25pt,ForestGreen,densely dashed][]
		\draw[line width=1.25pt,blue,domain=0:2.25,samples=2] plot(\x,{\x});
		\draw[line width=1.25pt,red,domain=0.8:2.5,samples=250] plot(\x,{\f});
	\end{tikzpicture}
\end{center}
\end{codetex}

\begin{codesortie}
\begin{center}
	\begin{tikzpicture}[x=5cm,y=1.5cm]
		%axes et grille
		\draw[xstep=0.5,ystep=0.25,line width=0.3pt,lightgray!50] (0,0) grid (2.5,2.25);
		\draw[thick,->] (0,0)--(2.5,0) ;
		\draw[thick,->] (0,0)--(0,2.25) ;
		\foreach \x in {0,0.5,...,2}
			\draw[line width=1.25pt] (\x,4pt) -- (\x,-4pt) node[below] {\num{\x}};
		\foreach \y in {0,0.5,...,2}
			\draw[line width=1.25pt] (4pt,\y) -- (-4pt,\y) node[left] {\num{\y}};
		%fonction
		\def\f{1+1/\x}
		%tracés
		\recurrPL[fct={\f},no=0,uno=1,nb=7,poslabel=above right,decallabel=0pt,afftermes=false][line width=1.25pt,ForestGreen,densely dashed][]
		\draw[line width=1.25pt,blue,domain=0:2.25,samples=2] plot(\x,{\x});
		\draw[line width=1.25pt,red,domain=0.8:2.5,samples=250] plot(\x,{\f});
	\end{tikzpicture}
\end{center}
\end{codesortie}

\newpage

\section{Historique}

{\small \bverb|v1.1.3|~:~~~~Ajout des commandes \textsf{convertfraction}, \textsf{ensPL} et \textsf{recurrPL} (changement de numérotation du package également)

{\small \bverb|v1.1.1|~:~~~~Modification mineure de l'environnement CF, avec prise de charge de la taille du texte !

{\small \bverb|v1.1.0|~:~~~~Ajout d'une commande \textsf{tetraPL} pour créer des tétraèdres (avec nœuds) en \TikZ

{\small \bverb|v1.0.9|~:~~~~Ajout d'une commande \textsf{pavePL} pour créer des pavés droits (avec nœuds) en \TikZ

{\small \bverb|v1.0.8|~:~~~~Ajout d'une commande \textsf{liencapytale} pour créer des cartouches de lien "comme capytale"

{\small \bverb|v1.0.7|~:~~~~Ajout d'une option \textsf{build} pour placer certains fichiers auxiliaires dans un répertoire \textsf{./build}

{\small \bverb|v1.0.6|~:~~~~Ajout d'une option \textsf{nominted} pour ne pas charger \ctex{minted} (pas besoin de compiler avec \textsf{shell-escape})

{\small \bverb|v1.0.5|~:~~~~Ajout d'un environnement pour Python (minted)

{\small \bverb|v1.0.4|~:~~~~Ajout des environnements pour Terminal (win, osx, unix)

{\small \bverb|v1.0.3|~:~~~~Ajout des environnements pour PseudoCode

{\small \bverb|v1.0.2|~:~~~~Ajout des environnements pour Python (pythontex)

{\small \bverb|v1.0.1|~:~~~~Modification mineure liée au chargement de \ctex{xcolor}

{\small \bverb|v1.0  |~:~~~~Version initiale}

\end{document}