% !TeX TXS-program:compile = txs:///arara % arara: pdflatex: {shell: yes, synctex: no, interaction: batchmode} % arara: pythontex: {rerun: modified} if found('pytxcode', 'PYTHONTEX#py') % arara: pdflatex: {shell: yes, synctex: no, interaction: batchmode} if found('pytxcode', 'PYTHONTEX#py') % arara: pdflatex: {shell: yes, synctex: no, interaction: batchmode} if found('log', '(undefined references|Please rerun|Rerun to get)') \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} \usepackage{tkz-euclide} \usetikzlibrary{hobby} \usepackage[group-minimum-digits=4]{siunitx} \usepackage{fancyvrb} \usepackage{fancyhdr} %fancy \fancyhf{} \renewcommand{\headrulewidth}{0pt} \lfoot{\sffamily \small [ProfLycee]} \cfoot{\sffamily \small - \thepage{} -} \rfoot{\hyperlink{matoc}{\small\faArrowAltCircleUp[regular]}} \usepackage{graphics} \usepackage{hvlogos} \usepackage{simplekv} \usepackage{tabto} \usepackage{pgf,pgfplots} \pgfplotsset{ compat=newest, xlabel near ticks, ylabel near ticks } \usepackage{tkz-tab} \usepackage{listofitems} \usepackage{xintexpr} \usepackage{codehigh} \usepackage{scontents} \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.2.7} \def\PLdate{1\ier{} Octobre 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} %\AddToShipoutPicture{% %\begin{tikzpicture}[remember picture,overlay] % \node [anchor=center,yshift=1cm,xshift=-1.5cm] (box\thepage) at (current page.south east){\hyperlink{matoc}{\LARGE\faArrowAltCircleUp[regular]}}; %\end{tikzpicture}} \pagestyle{fancy} \maketitle \thispagestyle{empty} {\Large {\bfseries Résumé} : Quelques commandes pour faciliter l'utilisation de \LaTeX{} pour les enseignants de mathématiques en lycée.} \medskip \noindent 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. Une commande pour créer, en \TikZ, un cercle trigo avec options. Une commande pour afficher un petit schéma, en \TikZ, sur le signe d'une fonction affine ou d'un trinôme. Deux commandes pour, en \TikZ, créer des petits schémas \og de signe \fg. Une commande pour travailler sur les statistiques à deux variables (algébriques et graphiques). Quelques commandes pour convertir bin/dec/hex avec certains détails. Une commande pour, en \TikZ, créer un pixelart avec correction éventuelle. Une commande pour, en \TikZ, créer un SudoMaths non forcément $9\times9$. Des commandes pour effectuer des calculs de probas (lois binomiale, exponentielle, de Poisson, normale). \vspace{1.5cm} \hfill{}\textit{Merci à Anne pour ses retours et sa relecture !} \hfill{}\textit{Merci aux membres du groupe \faFacebook{} du \og Coin \LaTeX{} \fg{} pour leur aide et leurs idées !} \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 \phantomsection \hypertarget{matoc}{} \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 {packages} utiles, mais j'ai fait le choix de laisser l'utilisateur gérer ses autres {packages}, comme notamment \ctex{amssymb} qui peut poser souci en fonction de la \textit{position} de son chargement. L'utilisateur est libre de charger ses autres {packages} utiles et habituels, ainsi que ses \textsf{polices} et \textsf{encodages} habituels. \end{codeidee} \begin{codeinfo} Le {package} \ctex{ProfLycee} charge les {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} et \ctex{xintbinhex} ; \item \ctex{tabularray}, \ctex{fontawesome5}, \ctex{tcolorbox}. \end{itemize} \end{codeinfo} \begin{codeidee} J'ai utilisé les {packages} de 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} ou encore \ctex{xstring} ! \end{codeidee} \subsection{Chargement du package} \begin{codetex}[listing only] %exemple de chargement pour une compilation en (pdf)latex \documentclass{article} \usepackage[french]{babel} \usepackage[utf8]{inputenc} \usepackage[T1]{fontenc} \usepackage{ProfLycee} ... \end{codetex} \begin{codetex}[listing only] %exemple de chargement pour une compilation en (xe/lua)latex \documentclass{article} \usepackage[french]{babel} \usepackage{mathtools} \usepackage{fontspec} \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 \underline{souhaitez pas} utiliser les commandes nécessitant \ctex{minted} vous pouvez charger le package \ctex{ProfLycee} avec l'option \Cle{nominted}. \end{codeinfo} \begin{codetex}[listing only] ... \usepackage[nominted]{ProfLycee} ... \end{codetex} \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} \begin{codetex}[listing only] ... \usepackage[build]{ProfLycee} ... \end{codetex} \begin{codeinfo} Les options précédentes sont cumulables, et, pour info, elles conditionnent le chargement des {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\}}). \smallskip À noter que les : % \begin{itemize} \item les \Cle{Clés} peuvent être mises dans n'importe quel ordre, elles peuvent être omises lorsque la valeur par défaut est conservée ; \item les \textsf{arguments} doivent, eux, être positionnés dans le \textit{bon ordre}. \end{itemize} \end{codeidee} \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 {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 ; % \item créer rapidement un ensemble d'éléments, avec gestion des espaces ; % \item créer, dans un environnement \TikZ, la \og toile \fg{} pour une suite récurrente : % \item etc %\end{itemize} %\end{codeidee} \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} \subsection{Problèmes éventuels\ldots} \begin{codeinfo} Certaines \textsf{commandes} sont à intégrer dans un environnement \TikZ, afin de pouvoir rajouter des éléments, elles ont été testés dans des environnement \ctex{tikzpicture}, à vérifier que la gestion des axes par l'environnement \ctex{axis} est compatible\ldots \smallskip Certains packages ont une fâcheuse tendance à être tatillons sur leurs options (les \textit{fameux} \textsf{option clash for} \ldots) ou leur \textit{position} dans le chargement, donc attention notamment au chargement de \ctex{xcolor} et de \ctex{amsmath}. \smallskip En dehors de cela, ce sont des tests multiples et variés qui permettront de détecter d'éventuels bugs ! \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 \og affiner \fg{} les portions de courbe en paramétrant des \textcolor{CadetBlue}{\textsf{coefficients}} (voir un peu plus loin\ldots). \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} \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 la \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 \textit{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 (un 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.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} \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} \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} \begin{codetex}[listing only] \begin{tikzpicture} ... \tangentetikz[liste=...,couleur=...,epaisseur=...,xl=...,xr=...,style=...,point=...] ... \end{tikzpicture} \end{codetex} \begin{codecles} Cela permet de tracer la tangente : % \begin{itemize} \item au point 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 {package} \ctex{tkz-tab}, l'environnement de référence est un environnement \TikZ, dans lequel les lignes sont 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} \begin{codetex}[listing only] ... \begin{tikzpicture}[...] \paramCF[.......] ... \end{tikzpicture} \end{codetex} \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} \begin{codetex}[listing only] \begin{tikzpicture}[...] \paramCF[.......] \ligneCF[...] ... \end{tikzpicture} \end{codetex} \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} \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 Python \og simple \fg}\label{pythonsimple} \subsection{Introduction} \begin{codeidee} Le {package} \ctex{listings} permet d'insérer et de formater du code, notamment du code Python. En \textit{partenariat} avec \ctex{tcolorbox}, on peut donc présenter \textit{joliment} du code python ! \end{codeidee} \begin{codeinfo} Le package \ctex{listings} ne nécessite pas de compilation particulière, au contraire d'autres (comme \ctex{pythontex} ou \ctex{minted}) qui seront présentés à la section suivante. \end{codeinfo} \begin{codeinfo} Le style utilisé pour formater le code Python n'est pas modifiable. Il donne un rendu proche de celui des packages commes \ctex{pythontex} ou \ctex{minted}. \smallskip Donc, si plusieurs \textit{méthodes} sont utilisées pour insérer du code Python (via les sections suivantes), le rendu peut être légèrement différent. \end{codeinfo} \subsection{Présentation de code Python grâce à listings} \begin{codeidee} L'environnement \ctex{\textbackslash envcodepython} (chargé par \ctex{ProfLycee} permet de présenter du code python, dans une \ctex{tcolorbox} avec un style particulier. \end{codeidee} \begin{codetex}[listing only] \begin{envcodepython}(*)[largeur]{commandes tcbox} ... \end{envcodepython} \end{codetex} \begin{codecles} Plusieurs \Cle{arguments} sont disponibles : \begin{itemize} \item la version \textit{étoilée} qui permet de ne pas afficher les numéros de lignes ; \item le premier argument (optionnel), concerne la \Cle{largeur} de la \ctex{tcbox} ;\hfill{}défaut \Cle{\textbackslash linewidth} \item le second argument (mandataire), concerne des \Cle{options} de la \ctex{tcbox} en \textit{langage tcolorbox}, comme l'alignement. \end{itemize} \end{codecles} \begin{codeinfo} Les environnements \ctex{DeclareTCBListing} créés par \ctex{tcolorbox} et \ctex{listings} ne sont pas compatibles avec les options \Cle{gobble} (pour supprimer les tabulations d'environnement), donc il faut bien penser à \og aligner \fg{} le code à gauche, pour éviter des tabulations non esthétiques ! \end{codeinfo} \subsection{Insertion via un fichier \og externe \fg} \begin{codeidee} Pour des raison pratiques, il est parfois intéressant d'avoir le code Python dans un fichier externe au ficher \ctex{tex}, ou bien créé directement par le fichier \ctex{tex} (via \ctex{scontents}, notamment, mais non chargé par \ctex{ProfLycee}). Dans ce cas, il n'est pas nécessaire d'aligner le code \og à gauche \fg, en utilisant une commande alternative. \smallskip Si cette méthode est utilisée, il ne faut oublier de charger le package \ctex{scontents}. \end{codeidee} \begin{codetex}[listing only] \usepackage{scontents} %si script déclaré dans le fichier tex ... \envcodepythonfichier(*)[largeur]{commandes tcbox}{