% !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} \usepackage{tkz-euclide} \usetikzlibrary{hobby} \usepackage[group-minimum-digits=4]{siunitx} \usepackage{fancyvrb} \usepackage{fancyhdr} %fancy \fancyhf{} \renewcommand{\headrulewidth}{0pt} %\lhead{\sffamily \small [ProfLycee]} %\chead{\entete{\classe{} - \annee}} %\rhead{\sffamily \small - \thepage{} -} \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{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.2} \def\PLdate{15 Août 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. \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} \smallskip \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} \smallskip \begin{codeidee} J'ai utilisé les {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 {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} \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 {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} \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} \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} \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 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} \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 \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} \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 {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 {package} \ctex{pythontex} et notamment sa spécificité pour compiler, il existe le {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 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{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 {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 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{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 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 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 {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 tous 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}[] \pavePL[] ... \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}[] \tetraPL[] ... \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 \textit{simplifier} un calcul sous forme de fraction irréductible. \end{codeidee} \begin{codetex}[listing only] \convertfraction[