summaryrefslogtreecommitdiff
path: root/graphics/pgf/contrib/fenetrecas/tex/FenetreCas.sty
diff options
context:
space:
mode:
Diffstat (limited to 'graphics/pgf/contrib/fenetrecas/tex/FenetreCas.sty')
-rw-r--r--graphics/pgf/contrib/fenetrecas/tex/FenetreCas.sty274
1 files changed, 274 insertions, 0 deletions
diff --git a/graphics/pgf/contrib/fenetrecas/tex/FenetreCas.sty b/graphics/pgf/contrib/fenetrecas/tex/FenetreCas.sty
new file mode 100644
index 0000000000..56b12746f5
--- /dev/null
+++ b/graphics/pgf/contrib/fenetrecas/tex/FenetreCas.sty
@@ -0,0 +1,274 @@
+% Author : C. Pierquet
+% licence : Released under the LaTeX Project Public License v1.3c
+% or later, see http://www.latex-project.org/lppl.txtf
+
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{FenetreCas}[2023/03/17 0.1.0 Simuer une fenetre CAS type Geogebra ou Xcas]
+% 0.1.0 Version initiale
+
+%------Option(s)
+
+%------Packages utiles
+\RequirePackage{tikz}
+\RequirePackage{xstring}
+\RequirePackage{xintexpr}
+\RequirePackage{simplekv}
+\RequirePackage{settobox}
+%librairies tikz
+\usetikzlibrary{calc,positioning}
+
+%%------FENÊTRE CALCUL FORMEL GEOGEBRA
+%compteurs pour les n° de lignes
+\newcounter{geogebracfnum}
+
+%--création de l'environnement, en TikZ
+\newsavebox{\maboiteggbtitre}
+\newlength{\hauteurboiteggbtitre}
+
+%def des clés
+\defKV[paramfengeogebracf]{%
+ Largeur=\def\GEOCFlarg{#1},%
+ CouleurEntete=\def\GEOCFcoulentete{#1},%
+ LargeurNumero=\def\GEOCFlargnum{#1},%
+ CouleurNumero=\def\GEOCFcoulnum{#1},%
+ PoliceEntete=\def\GEOCFfontenete{#1},%
+ PoliceNumero=\def\GEOCFpolnum{#1},%
+ Titre=\def\GEOCFtitre{#1}
+}
+\setKVdefault[paramfengeogebracf]{%
+ Largeur=10,%
+ CouleurEntete=lightgray!25,%
+ LargeurNumero=1,%
+ CouleurNumero=cyan!5,%
+ PoliceEntete=\bfseries\large\sffamily,%
+ PoliceNumero=\Large\sffamily,%
+ Titre={$\triangleright$ Calcul formel},%
+ Entete=true
+}
+
+\NewDocumentEnvironment{CalculFormelGeogebra}{ O{} D<>{} }
+{%
+ \useKVdefault[paramfengeogebracf]%
+ \setKV[paramfengeogebracf]{#1}% on paramètres les nouvelles clés et on les simplifie
+ \setcounter{geogebracfnum}{0}%on repart avec le compteur à 0
+ \sbox{\maboiteggbtitre}{\GEOCFfontenete\GEOCFtitre}\settoboxtotalheight{\hauteurboiteggbtitre}{\maboiteggbtitre}
+ \begin{tikzpicture}[#2]
+ %ENTETE
+ \ifboolKV[paramfengeogebracf]{Entete}
+ {
+ \def\HCroix{\the\hauteurboiteggbtitre}%
+ \draw[semithick,fill=\GEOCFcoulentete] (0,0) rectangle (\GEOCFlarg,{2.25*\the\hauteurboiteggbtitre}) ;%
+ \draw (0,{2.25*0.5*\the\hauteurboiteggbtitre}) node[right=4pt,font=\GEOCFfontenete] {\GEOCFtitre} ;%
+ %crois fermeture
+ \coordinate (CROIXGEO) at ($({\GEOCFlarg},{2.25*0.5*\the\hauteurboiteggbtitre})+({-\the\hauteurboiteggbtitre},0)$) ;
+ \draw[semithick] ($(CROIXGEO)+({-0.35*\the\hauteurboiteggbtitre},{0.35*\the\hauteurboiteggbtitre})$)--++({0.7*\HCroix},{-0.7*\HCroix}) ;
+ \draw[semithick] ($(CROIXGEO)+({-0.35*\the\hauteurboiteggbtitre},{-0.35*\the\hauteurboiteggbtitre})$)--++({0.7*\HCroix},{0.7*\HCroix}) ;
+ \draw[semithick] ($(CROIXGEO)+({-0.5*\the\hauteurboiteggbtitre},{0.5*\the\hauteurboiteggbtitre})$)rectangle++({\HCroix},{-\HCroix}) ;
+ }
+ {}
+}%
+{%
+ \end{tikzpicture}%
+}
+
+%--création des lignes, une par une
+%commande externe pour les hauteurs
+\newsavebox{\maboiteggbcmd}
+\newsavebox{\maboiteggbres}
+\newlength{\hauteurboiteggbcmd}
+\newlength{\hauteurboiteggbres}
+\newlength{\offsetcfgeogebra}
+
+%def des clés
+\defKV[paramlgeogebra]{%
+ HauteurLigne=\def\GEOCFhauteur{#1},%
+ TailleCommande=\def\GEOCFtaillecmd{#1},%
+ TailleResultat=\def\GEOCFtailleres{#1},%
+ ElargirAuto=\def\GEOCFelargirauto{#1},%
+ MargeV=\def\GEOCFoffset{#1},%
+ MargeH=\def\GEOCFoffseth{#1}
+}
+\setKVdefault[paramlgeogebra]{%
+ HauteurLigne=2,%
+ TailleCommande=\normalsize,%
+ TailleResultat=\large,%
+ ElargirAuto=1,%
+ HauteurAuto=true,%
+ MargeV=6pt,%
+ MargeH=0.2
+}
+
+\NewDocumentCommand\LigneCalculsGeogebra{ O{} m m }{%
+ %clés
+ \useKVdefault[paramlgeogebra]%
+ \setKV[paramlgeogebra]{#1}% on paramètres les nouvelles clés et on les simplifie
+ %récupération des tailles des lignes cmd et res poour ajustement
+ \setlength{\offsetcfgeogebra}{\GEOCFoffset}
+ \ifboolKV[paramlgeogebra]{HauteurAuto}
+ {%
+ \sbox{\maboiteggbcmd}{\pgfinterruptpicture \GEOCFtaillecmd#2\endpgfinterruptpicture}\settoboxtotalheight{\hauteurboiteggbcmd}{\maboiteggbcmd}
+ \sbox{\maboiteggbres}{\pgfinterruptpicture \GEOCFtailleres#3\endpgfinterruptpicture}\settoboxtotalheight{\hauteurboiteggbres}{\maboiteggbres}
+ \def\GEOCFhauteur{\GEOCFelargirauto*(\the\hauteurboiteggbcmd+\the\hauteurboiteggbres+4*\the\offsetcfgeogebra)}
+ }
+ {}
+ %compteur et raccourcis
+ \addtocounter{geogebracfnum}{1}%
+ \def\GGBL{\thegeogebracfnum}%
+ \def\GGBLA{\inteval{\GGBL-1}}%
+ %déclaration des nœuds (les "4" coins des blocs numéros)
+ \xintifboolexpr{\GGBL == 1}%si c'est la première ligne
+ {\coordinate (A0\GGBL) at (0,0);}
+ {\coordinate (A0\GGBL) at (A1\GGBLA) ;}
+ \coordinate (A1\GGBL) at ($(A0\GGBL) + (0,{-\GEOCFhauteur})$);
+ \coordinate (A2\GGBL) at ($(A0\GGBL) + ({\GEOCFlargnum},0)$);
+ \coordinate (A3\GGBL) at ($(A1\GGBL) + ({\GEOCFlargnum},0)$);
+ %les tracés
+ \draw[semithick,fill=\GEOCFcoulnum] (A0\GGBL) rectangle (A3\GGBL) node[midway,font=\GEOCFpolnum] {\GGBL} ;
+ \draw[semithick] (A2\GGBL) rectangle++({\GEOCFlarg-\GEOCFlargnum},{-\GEOCFhauteur}) ;
+ %les commande/résultat
+ \ifboolKV[paramlgeogebra]{HauteurAuto}
+ {%
+ \draw ($(A2\GGBL) + ({\GEOCFoffseth},{-\the\offsetcfgeogebra-0.5*\GEOCFelargirauto*\the\hauteurboiteggbcmd})$) node[font=\GEOCFtaillecmd,right] {#2} ;
+ \draw ($(A3\GGBL) + ({\GEOCFoffseth},{\the\offsetcfgeogebra+0.5*\GEOCFelargirauto*\the\hauteurboiteggbres})$) node[font=\GEOCFtailleres,right] {#3} ;
+ }
+ {%
+ \draw ($(A2\GGBL) + ({\GEOCFoffseth},{-0.25*\GEOCFhauteur})$) node[font=\GEOCFtaillecmd,right] {#2} ;
+ \draw ($(A2\GGBL) + ({\GEOCFoffseth},{-0.66*\GEOCFhauteur})$) node[font=\GEOCFtailleres,right] {#3} ;
+ }
+}
+
+%%------FENÊTRE CALCUL FORMEL XCAS
+\newcounter{xcascfnum}
+%def des clés
+\defKV[paramfenxcascf]{%
+ Largeur=\def\XCCFlarg{#1},%
+ EspaceLg=\def\XCCFesplg{#1},%
+ Couleur=\def\XCCFcouleur{#1},%
+ PoliceEntete=\def\XCCFfontenete{#1},%
+ TexteOptions=\def\XCCFtxtopts{#1}
+}
+\setKVdefault[paramfenxcascf]{%
+ Largeur=14,%
+ EspaceLg=2pt,%
+ Couleur=darkgray,%
+ Menu=true,%
+ Entete=true,%
+ NoirBlanc=false,%
+ PoliceEntete=\scriptsize,%
+ Sep=true,%
+ TexteOptions={Config : exact real RAD 12 xcas}
+}
+
+\NewDocumentEnvironment{CalculFormelXcas}{ O{} D<>{} }
+{%
+ \useKVdefault[paramfenxcascf]%
+ \setKV[paramfenxcascf]{#1}% on paramètres les nouvelles clés et on les simplifie
+ \setcounter{xcascfnum}{0}%on repart avec le compteur à 0
+ %couleurs
+ \ifboolKV[paramfenxcascf]{NoirBlanc}%si NB=true
+ {
+ \def\CoulXCASPt{lightgray!20}\def\CoulXCASSave{lightgray!20}\def\CoulXCASMid{lightgray!20}\def\CoulXCASStop{black}
+ }
+ {
+ \def\CoulXCASPt{cyan!20}\def\CoulXCASSave{green!20}\def\CoulXCASMid{violet!20}\def\CoulXCASStop{red}
+ }
+ \begin{tikzpicture}[#2]
+ \tikzstyle{xcastitre}=[font=\XCCFfontenete\ttfamily,inner sep=1pt,outer sep=0pt]
+ %LE BLOC "TITRE"
+ \ifboolKV[paramfenxcascf]{Entete}%si titre=true
+ {%
+ \node[semithick,draw=\XCCFcouleur,fill=\CoulXCASPt,above right,xcastitre] (PTIN) at ($(0,0)+(0,2pt)$) {\strut {\,?\,}} ;
+ \node[semithick,draw=\XCCFcouleur,fill=\CoulXCASSave,xcastitre,right=2pt] (SAUV) at (PTIN.east) {\strut \,Sauver\,} ;
+ \node[semithick,draw=\XCCFcouleur,fill=lightgray!20,xcastitre,above left] (CLOSE) at ($({\XCCFlarg},0)+(0,2pt)$) {\strut \,$\mathtt{\times}$\,} ;
+ \node[semithick,draw=\XCCFcouleur,fill=lightgray!20,xcastitre,left=6pt] (KBD) at (CLOSE.west) {\strut \:\:Kbd\:\:} ;
+ \node[semithick,draw=\XCCFcouleur,fill=lightgray!20,xcastitre,left=2pt] (STOP) at (KBD.west) {\strut \,\textcolor{\CoulXCASStop}{STOP}\,} ;
+ \draw[semithick,\XCCFcouleur,fill=\CoulXCASMid] ($(SAUV.north east)+({2pt},0)$) rectangle ($(STOP.south west)+({-2pt},0)$) node[midway,xcastitre,black] {\strut \XCCFtxtopts} ;
+ }
+ {}
+}%
+{%
+ \end{tikzpicture}%
+}
+
+\newsavebox{\maboitecmdxcas}
+\newsavebox{\maboiteresxcas}
+\newlength{\hauteurboitecmdxcas}
+\newlength{\hauteurboiteresxcas}
+\newlength{\offsetcfxcas}
+
+\defKV[paramlgxcas]{%
+ TailleCommande=\def\XCCFtaillecmd{#1},%
+ TailleResultat=\def\XCCFtailleres{#1},%
+ ElargirAuto=\def\XCCFelargirauto{#1},%
+ MargeV=\def\XCCFoffset{#1},%
+ MargeH=\def\XCCFoffseth{#1},%
+ CouleurCmd=\def\XCCFcoulcmd{#1},%
+ CouleurRes=\def\XCCFcoulres{#1},%
+ PosRes=\def\XCCFposres{#1}
+}
+
+\setKVdefault[paramlgxcas]{%
+ TailleCommande=\normalsize,%
+ TailleResultat=\large,%
+ ElargirAuto=1,%
+ MargeV=6pt,%
+ MargeH=0.15,%
+ CouleurCmd=red,%
+ CouleurRes=blue,%
+ PosRes=centre
+}
+
+\NewDocumentCommand\LigneCalculsXcas{ O{} m m }{%
+ %clés
+ \useKVdefault[paramlgxcas]%
+ \setKV[paramlgxcas]{#1}% on paramètres les nouvelles clés et on les simplifie
+ %récupération des tailles des lignes cmd et res poour ajustement
+ \setlength{\offsetcfxcas}{\XCCFoffset}
+ \sbox{\maboitecmdxcas}{\pgfinterruptpicture \XCCFtaillecmd #2\endpgfinterruptpicture}\settoboxtotalheight{\hauteurboitecmdxcas}{\maboitecmdxcas}
+ \sbox{\maboiteresxcas}{\pgfinterruptpicture \XCCFtailleres #3\endpgfinterruptpicture}\settoboxtotalheight{\hauteurboiteresxcas}{\maboiteresxcas}
+ \def\XCCFhauteur{\XCCFelargirauto*(\the\hauteurboitecmdxcas+\the\hauteurboiteresxcas+4*\the\offsetcfxcas)}
+ %couleurs forcées
+ \ifboolKV[paramfenxcascf]{NoirBlanc}%si NB=true
+ {\def\XCCFcoulcmd{black}\def\XCCFcoulres{black}}{}
+ %compteur et raccourcis
+ \addtocounter{xcascfnum}{1}%
+ \def\XCL{\thexcascfnum}%
+ \def\XCLA{\inteval{\XCL-1}}%
+ %déclaration des nœuds (les "4" coins des blocs numéros)
+ \xintifboolexpr{\XCL == 1}%si c'est la première ligne
+ {\coordinate (A0\XCL) at (0,0);}
+ {\coordinate (A0\XCL) at ($(A1\XCLA)+(0,{-\XCCFesplg})$) ;}
+ \coordinate (A1\XCL) at ($(A0\XCL) + (0,{-\XCCFhauteur})$);
+ \coordinate (A2\XCL) at ($(A0\XCL) + ({\XCCFlarg},0)$);
+ \coordinate (A3\XCL) at ($(A1\XCL) + ({\XCCFlarg},0)$);
+ %les tracés
+ \draw[semithick,\XCCFcouleur] (A0\XCL) rectangle (A3\XCL) ;
+ %LA COMMANDE À GAUCHE
+ \draw ($(A0\XCL) + ({\XCCFoffseth},{-\the\offsetcfxcas-0.5*\XCCFelargirauto*\the\hauteurboitecmdxcas})$) node[\XCCFcoulcmd,font=\XCCFtaillecmd,right] {#2} ;
+ %LE RÉSULTAT
+ \IfStrEq{\XCCFposres}{centre}%si posrep=center
+ {%
+ \draw ($(A1\XCL) + ({0.5*\XCCFlarg},{\the\offsetcfxcas+0.5*\XCCFelargirauto*\the\hauteurboiteresxcas})$) node[\XCCFcoulres,font=\XCCFtailleres] {#3} ;
+ }{}
+ \IfStrEq{\XCCFposres}{gauche}%si posrep=left
+ {%
+ \draw ($(A1\XCL) + ({{\XCCFoffseth}},{\the\offsetcfxcas+0.5*\XCCFelargirauto*\the\hauteurboiteresxcas})$) node[\XCCFcoulres,font=\XCCFtailleres,right] {#3} ;
+ }{}
+ \IfStrEq{\XCCFposres}{droite}%si posrep=right
+ {%
+ \draw ($(A1\XCL) + ({\XCCFlarg-{\XCCFoffseth}},{\the\offsetcfxcas+0.5*\XCCFelargirauto*\the\hauteurboiteresxcas})$) node[\XCCFcoulres,font=\XCCFtailleres,left] {#3} ;
+ }{}
+ %LA LIGNE DE SÉPARATION
+ \ifboolKV[paramfenxcascf]{Sep}%si sep=true
+ {\draw[semithick,\XCCFcouleur] ($(A0\XCL)+(0,{-2*\the\offsetcfxcas-\XCCFelargirauto*\the\hauteurboitecmdxcas})$)--++({\XCCFlarg},0);}
+ {}
+ %LE BOUTON MENU
+ \ifboolKV[paramfenxcascf]{Menu}%si menu=true
+ {
+ \draw[semithick] (A3\XCL) node[draw=\XCCFcouleur,black,fill=lightgray!25,outer sep=0pt,inner sep=2pt,draw,above left,font=\tiny\sffamily\bfseries] {MENU} ;
+ }{}
+ %LE PETIT NUMÉRO
+ \draw[semithick] (A0\XCL) node[draw=\XCCFcouleur,fill=\CoulXCASMid,outer sep=0pt,inner sep=2pt,draw,below left,font=\footnotesize\sffamily] {\XCL} ;
+}
+
+\endinput \ No newline at end of file