diff options
author | Norbert Preining <norbert@preining.info> | 2024-02-28 03:01:23 +0000 |
---|---|---|
committer | Norbert Preining <norbert@preining.info> | 2024-02-28 03:01:23 +0000 |
commit | 0afdc3e8c2d8e96d0cd0a5f05f1481a4eecc51d2 (patch) | |
tree | 805f2acf8e0115574bc5781d1dfb87fbe2e63ba8 /graphics/pgf/contrib | |
parent | a64a01e8eaa2c096e7879421f075ebfa2a8bb7f0 (diff) |
CTAN sync 202402280301
Diffstat (limited to 'graphics/pgf/contrib')
-rw-r--r-- | graphics/pgf/contrib/profsio/doc/ProfSio-doc-fr.pdf | bin | 431266 -> 458182 bytes | |||
-rw-r--r-- | graphics/pgf/contrib/profsio/doc/ProfSio-doc-fr.tex | 141 | ||||
-rw-r--r-- | graphics/pgf/contrib/profsio/tex/ProfSio.sty | 261 |
3 files changed, 391 insertions, 11 deletions
diff --git a/graphics/pgf/contrib/profsio/doc/ProfSio-doc-fr.pdf b/graphics/pgf/contrib/profsio/doc/ProfSio-doc-fr.pdf Binary files differindex acec0d1d34..cd6109d08e 100644 --- a/graphics/pgf/contrib/profsio/doc/ProfSio-doc-fr.pdf +++ b/graphics/pgf/contrib/profsio/doc/ProfSio-doc-fr.pdf diff --git a/graphics/pgf/contrib/profsio/doc/ProfSio-doc-fr.tex b/graphics/pgf/contrib/profsio/doc/ProfSio-doc-fr.tex index eabdeb0661..96a87af15f 100644 --- a/graphics/pgf/contrib/profsio/doc/ProfSio-doc-fr.tex +++ b/graphics/pgf/contrib/profsio/doc/ProfSio-doc-fr.tex @@ -5,8 +5,8 @@ \documentclass[french,a4paper,11pt]{article} \usepackage[margin=2cm,includefoot]{geometry} -\def\TPversion{0.2.0} -\def\TPdate{7 février 2024} +\def\TPversion{0.2.1} +\def\TPdate{26 février 2024} %\usepackage[utf8]{inputenc} %\usepackage[T1]{fontenc} \usepackage{amsmath,amssymb} @@ -81,10 +81,10 @@ keywordstyle={\color{violet}},% classoffset=2,% alsoletter={-},% - morekeywords={\MPMPlaceTache,\MPMPlaceNotice,\MPMPlaceDuree,GrapheMPM,TableKarnaugh,\KarnaughCasesResult,\KarnaughBlocRegroup,\MPMPlaceTaches,\MPMPlaceDurees,GrapheTikz,\GrphPlaceSommets,\GrphTraceAretes,\tikzset,\DiagrammeSagittal,\draw,\DiagrammeSagittalCompo,\TableVerite,\SimplificationKarnaugh,\SimplificationBooleenne,\KarnaughCasesAuto,\MatriceAdjacence,\PuissanceMatrice,\NbCheminsLongueur,\FermetureTransitive,\ResolSystemeMatrices,\PresentProdMat},% + morekeywords={\MPMPlaceTache,\MPMPlaceNotice,\MPMPlaceDuree,GrapheMPM,TableKarnaugh,\KarnaughCasesResult,\KarnaughBlocRegroup,\MPMPlaceTaches,\MPMPlaceDurees,GrapheTikz,\GrphPlaceSommets,\GrphTraceAretes,\tikzset,\DiagrammeSagittal,\draw,\DiagrammeSagittalCompo,\TableVerite,\SimplificationKarnaugh,\SimplificationBooleenne,\KarnaughCasesAuto,\MatriceAdjacence,\PuissanceMatrice,\NbCheminsLongueur,\FermetureTransitive,\ResolSystemeMatrices,\PresentProdMat,\OpeBinDecHex},% keywordstyle={\color{green!50!black}},% classoffset=3,% - morekeywords={CouleurDurees,CouleurFleches,LargeurCases,Epaisseur,Police,CouleurDates,CouleurBords,NoirBlanc,Grille,DecalHorizDeb,DecalVertDeb,DecalHorizFin,DecalVertFin,Coude,SensCoude,Unite,Variables,Swap,Aide,CouleurCases,Decalage,Couleur,Type,Legende,PosVarLaterale,CouleurLegende,CouleurSommets,TypeSommets,Unite,CouleurFT,DimensionSommets,PositionFleches,EchelleFleches,TypeFleche,Droit,Milieu,AngleGauche,AngleDroite,Boucle,GrphStyleArc,GrphStyleSommet,Poids,GrphStylepoids,DistElem,DistEns,LargEns,NomAppli,CouleurE,CouleurAppli,CouleurF,CouleursFleches,TypeFleche,Epaisseur,Labels,Ensembles,PosLabels,PoliceLabels,Offset,NomApplis,CouleursAppli,VF,LargeursColonnes,CouleurEnonce,CodeAvant,CodeApres,StyleAlternatif,PoliceTT,Espace,Couleurs,Contraire,Enonce,Bordure,Sommets,Num,PoliceBordure,De,Vers,Formule,Brut,NomMatrice,Longueur,Complet,NomsMatrices,NomInverse,NomSysteme,Inconnues,OptionNiceMatrix},% + morekeywords={CouleurDurees,CouleurFleches,LargeurCases,Epaisseur,Police,CouleurDates,CouleurBords,NoirBlanc,Grille,DecalHorizDeb,DecalVertDeb,DecalHorizFin,DecalVertFin,Coude,SensCoude,Unite,Variables,Swap,Aide,CouleurCases,Decalage,Couleur,Type,Legende,PosVarLaterale,CouleurLegende,CouleurSommets,TypeSommets,Unite,CouleurFT,DimensionSommets,PositionFleches,EchelleFleches,TypeFleche,Droit,Milieu,AngleGauche,AngleDroite,Boucle,GrphStyleArc,GrphStyleSommet,Poids,GrphStylepoids,DistElem,DistEns,LargEns,NomAppli,CouleurE,CouleurAppli,CouleurF,CouleursFleches,TypeFleche,Epaisseur,Labels,Ensembles,PosLabels,PoliceLabels,Offset,NomApplis,CouleursAppli,VF,LargeursColonnes,CouleurEnonce,CodeAvant,CodeApres,StyleAlternatif,PoliceTT,Espace,Couleurs,Contraire,Enonce,Bordure,Sommets,Num,PoliceBordure,De,Vers,Formule,Brut,NomMatrice,Longueur,Complet,NomsMatrices,NomInverse,NomSysteme,Inconnues,OptionNiceMatrix,Base,AffRetenues,AffEgal,SymbDecal,LimiteCapac,CouleurRetenue,Interm},% keywordstyle={\color{orange}} },% #1 @@ -255,6 +255,8 @@ \section{Historique} +\verb|v0.2.1|~:~~~~Opérations posées (en binaire, hexadécimal et décimal) + \verb|v0.2.0|~:~~~~Systèmes 3x3 par matrices + \textit{présentation} d'un produit matriciel \verb|v0.1.9|~:~~~~Travail sur les matrices d'adjacence (chemins, puissances, fermeture) @@ -291,16 +293,18 @@ Le package \packagetex!ProfSio! propose quelques commandes pour travailler sur des points particuliers de Mathématiques enseignées en BTS SIO : \begin{itemize} + \item opérations posées en base 2/10/16 ; \item graphes d'ordonnancement par la méthode MPM ; \item expressions booléennes et tableaux de Karnaugh pour 3 variables ; \item graphes \textit{simples} orientés ou pondérés, des diagrammes sagittaux ; - \item tables de vérité (via \hologo{LuaLaTeX}). + \item tables de vérité (via \hologo{LuaLaTeX}) ; + \item etc \end{itemize} \vspace*{-\baselineskip}\leavevmode \end{noteblock} \begin{warningblock} -Le code ne propose par de \og résolution \fg{} du graphe MPM ou de représentation \og automatique \fg{} d'un graphe, il ne consiste \textit{qu'en} une mise en forme du graphe MPM, du tableau de Karnaugh ou du graphe. +Le code ne propose pas de \og résolution \fg{} du graphe MPM ou de représentation \og automatique \fg{} d'un graphe, il ne consiste \textit{qu'en} une mise en forme du graphe MPM, du tableau de Karnaugh ou du graphe. \smallskip @@ -325,7 +329,7 @@ Il n'existe pas d'option pour le package, et \packagetex!xcolor! n'est pas charg \packagetex!ProfSio! charge les packages suivantes : \begin{itemize} - \item \packagetex!tikz!, \packagetex!pgffor!, \packagetex!xintexpr!, \packagetex!tabularray!, \packagetex!simplekv!, \packagetex!xstring! et \packagetex!listofitems! ; + \item \packagetex!tikz!, \packagetex!pgffor!, \packagetex!xintexpr!, \packagetex!tabularray!, \packagetex!simplekv!, \packagetex!xstring!, \packagetex!calc! et \packagetex!listofitems! ; \item \packagetex!nicematrix!, \packagetex!siunitx! et \packagetex!luacode! (uniquement si le compilateur détecté est \hologo{LuaLaTeX}) ; \item les librairies \packagetex!tikz! : \begin{itemize} @@ -341,9 +345,7 @@ Il est compatible avec les compilations usuelles en \textsf{latex}, \textsf{pdfl \subsection{Fonctionnement global} \begin{tipblock} -Les environnements sont créés avec \TikZ, et la majorité des paramètres des tracés sont personnalisables : - -\hfill{}couleurs ; dimensions ; polices.\hfill~ +Les environnements sont créés avec \TikZ, et la majorité des paramètres des tracés sont personnalisables : \texttt{couleurs} ; \texttt{dimensions} ; \texttt{polices}. \end{tipblock} \begin{noteblock} @@ -359,6 +361,125 @@ Le choix a été fait de : \pagebreak +\section{Opérations posées} + +\subsection{Idée} + +\begin{tipblock} +L'idée est de proposer une commande poser une opération : + +\begin{itemize} + \item addition/soustraction/multiplication ; + \item avec retenues pour l'addition et la soustraction. +\end{itemize} +\vspace*{-\baselineskip}\leavevmode +\end{tipblock} + +\begin{DemoCode}[listing only] +%opération posée +\OpeBinDecHex[clés]{opération} +\end{DemoCode} + +\begin{DemoCode}[] +%Addition +\OpeBinDecHex{9999+851} +\end{DemoCode} + +\begin{DemoCode}[] +%Soustraction binaire +\OpeBinDecHex[Base=bin]{10010-1101} +\end{DemoCode} + +\begin{DemoCode}[] +%Multiplication hexa +\OpeBinDecHex[Base=hex]{ACDC*AF4} +\end{DemoCode} + +\subsection{Clés et options} + +\begin{cautionblock} +En ce qui concerne la commande, les \Cle{clés}, disponibles entre \Cle{[...]}, sont : + +\begin{itemize} + \item \Cle{Base} pour spécifier la base (\Cle{dec} par défaut) ; + \item \Cle{LimiteCapac} pour fixer une limite de chiffres (\Cle{0} pour aucune limite par défaut) ; + \item \Cle{SymbDecal} pour le symbole du décalages des multiplications (\Cle{.} par défaut) ; + \item \Cle{Offset} pour l'espacement horizontal entre les chiffres (\Cle{6pt} par défaut) ; + \item \Cle{CouleurRetenue} pour la couleur des retenues dans les additions (\Cle{red} par défaut) ; + \item \Cle{Interm} := booléen pour afficher les étapes intermédiaires des multiplications (\Cle{true} par défaut) ; + \item \Cle{AffRetenues} := booléen pour afficher les retenues des additions/soustractions (\Cle{true} par défaut) ; + \item \Cle{AffEgal} := booléen pour afficher le signe \texttt{=} du résultat (\Cle{true} par défaut). +\end{itemize} +\end{cautionblock} + +\subsection{Exemples} + +\begin{DemoCode}[] +%Addition décimale +\OpeBinDecHex{8475+6520} +\end{DemoCode} + +\begin{DemoCode}[] +%Addition binaire +\OpeBinDecHex[Base=bin]{1111+111} + +%Addition binaire, sans retenue(s) +\OpeBinDecHex[Base=bin,AffRetenues=false]{1111+111} +\end{DemoCode} + +\begin{DemoCode}[] +%Addition hexa +\OpeBinDecHex[Base=hex]{ABC+DE} +\end{DemoCode} + +\begin{DemoCode}[] +%Addition hexa, personnalisée +{\Huge\ttfamily +\OpeBinDecHex[Base=hex,AffEgal=false,Offset=0pt]{ABCD+FE}} +\end{DemoCode} + +\begin{DemoCode}[] +%Addition binaire, limité à 4 bits +\OpeBinDecHex[Base=bin,LimiteCapac=4,Offset=2pt]{1111+111} +\end{DemoCode} + +\begin{DemoCode}[] +%Soustraction binaire +\OpeBinDecHex[Base=bin]{10000-111} +\end{DemoCode} + +\begin{DemoCode}[] +%Multiplication binaire +\OpeBinDecHex[Base=bin,LimiteCapac=6]{110011*101} +\end{DemoCode} + +\begin{DemoCode}[] +%Mutiplication hexa, symbole de décalage '0' +\textsf{\OpeBinDecHex[Base=hex,SymbDecal=0]{ABCD*FE}} +\end{DemoCode} + +\begin{DemoCode}[] +%Mutiplication hexa +\texttt{\OpeBinDecHex[Base=hex]{ABCD*FAFA}} +\end{DemoCode} + +\begin{DemoCode}[] +%Mutiplication hexa, limité à 4 'chiffres' +\texttt{\OpeBinDecHex[Base=hex,LimiteCapac=4]{ABCD*FAFA}} +\end{DemoCode} + +\begin{DemoCode}[] +%Mutiplication hexa, sans lignes intermédiaires +\textsf{\OpeBinDecHex[Base=hex,Interm=false]{ABCD*FE}} +\end{DemoCode} + +\begin{DemoCode}[] +%Soustraction hexa, sans signe '=', sans espacement horizontal +{\Huge\ttfamily\OpeBinDecHex[Base=hex,AffEgal=false]{ABCD-FE}} +\end{DemoCode} + +\pagebreak + \section{Graphe d'ordonnancement par méthode MPM} \subsection{Commande et fonctionnement global} diff --git a/graphics/pgf/contrib/profsio/tex/ProfSio.sty b/graphics/pgf/contrib/profsio/tex/ProfSio.sty index 51e9325cfb..3b7a52d610 100644 --- a/graphics/pgf/contrib/profsio/tex/ProfSio.sty +++ b/graphics/pgf/contrib/profsio/tex/ProfSio.sty @@ -3,7 +3,8 @@ % : Luatruthtable from Chetan Shirore and Dr. Ajit Kumar https://ctan.org/pkg/luatruthtable \NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{ProfSio}[2023/02/07 0.2.0 Pour les enseignants de Maths en BTS SIO] +\ProvidesPackage{ProfSio}[2023/02/26 0.2.1 Pour les enseignants de Maths en BTS SIO] +%0.2.1 Opérations posées (+,-,×) avec bin/hex/dec %0.2.0 Travail sur les systèmes 3x3 par matrices et la présentation d'un produit matriciel %0.1.9 Travail sur les chemins de longueur donnée + fermeture transitive %0.1.8 Possibilité de représenter une table de Karnaugh via son expression + corrections mineures @@ -24,9 +25,11 @@ \RequirePackage{xstring} \RequirePackage{listofitems} \RequirePackage{xintexpr} +\RequirePackage{xintbinhex} \RequirePackage{systeme} \RequirePackage{ifthen} \RequirePackage{siunitx} +\RequirePackage{calc} \RequirePackage{nicematrix} %------Librairies \usetikzlibrary{positioning,decorations.pathreplacing,decorations.markings,arrows,arrows.meta,calc,babel,shapes,shapes.geometric} @@ -2227,4 +2230,260 @@ end \end{tikzpicture}% } +%===OPÉRATIONS POSÉES (comme PfL) +\newlength{\siowidestcharwd} +\newlength{\siocharwd} +\newlength{\sioheightercharht} + +\defKV[sioposeoperation]{% + Base=\def\PoseOpeBase{#1},% + LimiteCapac=\def\PoseOpeLimit{#1},% + SymbDecal=\def\PoseOpeSymb{#1},% + Offset=\def\PoseOpeOffset{#1},% + CouleurRetenue=\def\PoseOpeColReten{#1} +} + +\setKVdefault[sioposeoperation]{% + Base=dec,% + SymbDecal=.,% + Interm=true,% + Offset=6pt,% + AffEgal=true,% + LimiteCapac=0,% + CouleurRetenue=red,% + AffRetenues=true +} + +\NewDocumentCommand\SioIntCalcMaxWidth{ m }{% + \StrLen{#1}[\tmplen]% + \setlength{\siowidestcharwd}{0pt} + \xintFor* ##1 in {\xintSeq{1}{\tmplen}}\do{% + \StrChar{#1}{##1}[\tmpchar]% + \settowidth{\siocharwd}{\tmpchar}% + \setlength{\siowidestcharwd}{\maxof{\siowidestcharwd}{\siocharwd}}% + + + }% +} + +\NewDocumentCommand\SioIntCreateBoxNumbers{ O{c} m }{% + \IfStrEqCase{\PoseOpeBase}{% + {dec}{\SioIntCalcMaxWidth{0123456789}}% + {bin}{\SioIntCalcMaxWidth{01}}% + {hex}{\SioIntCalcMaxWidth{0123456789ABCDEF}}% + }% + \addtolength{\siowidestcharwd}{\PoseOpeOffset/2}% + \StrLen{#2}[\tmplennumber]% + \xintFor* ##1 in {\xintSeq{1}{\tmplennumber}}\do{% + \StrChar{#2}{##1}[\tmpchiff]% + \makebox[\the\siowidestcharwd][#1]{\tmpchiff}% + }% +} + +\newcommand\SioAffRetenue[1]{% + \textcolor{\PoseOpeColReten}{\scalebox{0.5}[0.5]{#1}}% +} + +\NewDocumentCommand\SioIntCreateBoxNumbersRetenue{ m }{% + \IfStrEqCase{\PoseOpeBase}{% + {dec}{\SioIntCalcMaxWidth{0123456789}}% + {bin}{\SioIntCalcMaxWidth{01}}% + {hex}{\SioIntCalcMaxWidth{0123456789ABCDEF}}% + }% + \addtolength{\siowidestcharwd}{\PoseOpeOffset/2}% + \StrLen{#1}[\tmplennumber]% + \xintFor* ##1 in {\xintSeq{1}{\tmplennumber}}\do{% + \StrChar{#1}{##1}[\tmpchiff]% + \IfEq{\tmpchiff}{X}% + {\makebox[\the\siowidestcharwd][c]{\textcolor{\PoseOpeColReten}{\scalebox{0.5}[0.5]{}}}}% + {\makebox[\the\siowidestcharwd][c]{\textcolor{\PoseOpeColReten}{\scalebox{0.5}[0.5]{\tmpchiff}}}}% + }% +} + +\NewDocumentCommand\SioIntPoseAddition{ m m D<>{} }{% + \StrLen{#1}[\nbchiffA]% + %essai des retenues ?? + \xdef\ListeRetenues{X}% + \xintFor* ##1 in {\xintSeq{1}{\nbchiffA}}\do{% + \StrRight{#1}{##1}[\tmpinterA]% + \StrRight{#2}{##1}[\tmpinterB]% + \IfStrEqCase{\PoseOpeBase}{% + {dec}{\xdef\rescalcrete{\xinteval{\tmpinterA+\tmpinterB}}}% + {bin}{\xdef\rescalcrete{\xintDecToBin{\xinteval{\xintBinToDec{\tmpinterA}+\xintBinToDec{\tmpinterB}}}}}% + {hex}{\xdef\rescalcrete{\xintDecToHex{\xinteval{\xintHexToDec{\tmpinterA}+\xintHexToDec{\tmpinterB}}}}}% + }% + \StrLen{\rescalcrete}[\tmpnbchiffresinter]% + \xintifboolexpr{\tmpnbchiffresinter > ##1}% + {% + \StrGobbleRight{\rescalcrete}{##1}[\tmpretenue]% + \xdef\ListeRetenues{\tmpretenue\ListeRetenues}% + }% + {% + \xintifboolexpr{##1 == \nbchiffA}{}{\xdef\ListeRetenues{X\ListeRetenues}}% + }% + }% + %suite + \IfStrEqCase{\PoseOpeBase}{% + {dec}{\xdef\rescalcbin{\xinteval{#1+#2}}}% + {bin}{\xdef\rescalcbin{\xintDecToBin{\xinteval{\xintBinToDec{#1}+\xintBinToDec{#2}}}}}% + {hex}{\xdef\rescalcbin{\xintDecToHex{\xinteval{\xintHexToDec{#1}+\xintHexToDec{#2}}}}}% + }% + \xintifboolexpr{\PoseOpeLimit > 0 }{\StrRight{\rescalcbin}{\PoseOpeLimit}[\rescalcbin]}{}% + %\ensuremath{\begin{array}{@{\,}r@{\hspace{\PoseOpeOffset}}r@{\,}} + \ensuremath{\begin{NiceArray}[#3]{@{\,}r@{\hspace{\PoseOpeOffset}}r@{\,}} + \ifboolKV[sioposeoperation]{AffRetenues}{\RowStyle[cell-space-limits=0pt]{} & \SioIntCreateBoxNumbersRetenue{\ListeRetenues} \\[-0.5\sioheightercharht]}{} + \RowStyle[nb-rows=*,cell-space-limits=1pt]{} & \SioIntCreateBoxNumbers{#1} \\ + + & \SioIntCreateBoxNumbers{#2} \\ + \hline + \ifboolKV[sioposeoperation]{AffEgal}{=}{} & \SioIntCreateBoxNumbers{\rescalcbin} \\ + \end{NiceArray}}% + %\end{array}}% +} + +\NewDocumentCommand\SioIntPoseSoustraction{ m m D<>{} }{% + \IfStrEqCase{\PoseOpeBase}{% + {dec}{\xdef\rescalcbin{\xinteval{#1-#2}}}% + {bin}{\xdef\rescalcbin{\xintDecToBin{\xinteval{\xintBinToDec{#1}-\xintBinToDec{#2}}}}}% + {hex}{\xdef\rescalcbin{\xintDecToHex{\xinteval{\xintHexToDec{#1}-\xintHexToDec{#2}}}}}% + }% + %bourrage de zéros pour les retenues + \StrLen{#1}[\lenA]\StrLen{#2}[\lenB]% + \xdef\BwithZeros{#2}% + \xintifboolexpr{ \lenA > \lenB }% + {% + \xintFor* ##1 in {\xintSeq{1}{\xinteval{\lenA-\lenB}}}\do{\xdef\BwithZeros{0\BwithZeros}}% + }% + {}% + %suite + \xintifboolexpr{\PoseOpeLimit > 0 }{\StrRight{\rescalcbin}{\PoseOpeLimit}[\rescalcbin]}{}% + %\ensuremath{\begin{array}{@{\,}r@{\hspace{\PoseOpeOffset}}r@{\,}} + \ifboolKV[sioposeoperation]{AffRetenues}{% + \ensuremath{\begin{NiceArray}[#3]{@{\,}r@{\hspace{\PoseOpeOffset/2}}r@{\,}} + \RowStyle[nb-rows=*,cell-space-limits=1pt]{} + & \IfStrEqCase{\PoseOpeBase}{% + {dec}{\SioIntCalcMaxWidth{0123456789}}% + {bin}{\SioIntCalcMaxWidth{01}}% + {hex}{\SioIntCalcMaxWidth{0123456789ABCDEF}}% + }% + \addtolength{\siowidestcharwd}{\PoseOpeOffset/2}% + \StrLen{#1}[\tmplennumber]% + \xintFor* ##1 in {\xintSeq{1}{\tmplennumber}}\do{% + \xdef\tmplenctr{\inteval{\tmplennumber-##1+1}}% + \StrChar{#1}{##1}[\tmpchiff]% + \StrRight{#1}{\tmplenctr}[\tmpA]% + \StrRight{\BwithZeros}{\tmplenctr}[\tmpB]% + \IfStrEqCase{\PoseOpeBase}{% + {dec}{\xdef\rescalctmp{\xinteval{\tmpA-\tmpB}}}% + {bin}{\xdef\rescalctmp{\xinteval{\xintBinToDec{\tmpA}-\xintBinToDec{\tmpB}}}}% + {hex}{\xdef\rescalctmp{\xinteval{\xintHexToDec{\tmpA}-\xintHexToDec{\tmpB}}}}% + }% + \xintifboolexpr{ \rescalctmp >= 0 }% + {\makebox[\the\siowidestcharwd][r]{\tmpchiff}}% + %{\makebox[\the\siowidestcharwd][r]{${}_{\textcolor{\PoseOpeColReten}{\scalebox{0.5}[0.5]{\text{1}}}}$\kern-0.1em\tmpchiff}}% + {\makebox[\the\siowidestcharwd][r]{\raisebox{-0.5\height}{\textcolor{\PoseOpeColReten}{\scalebox{0.5}[0.5]{\text{1}}}}\kern-0.1em\tmpchiff}}% + } \\ + - & \IfStrEqCase{\PoseOpeBase}{% + {dec}{\SioIntCalcMaxWidth{0123456789}}% + {bin}{\SioIntCalcMaxWidth{01}}% + {hex}{\SioIntCalcMaxWidth{0123456789ABCDEF}}% + }% + \addtolength{\siowidestcharwd}{\PoseOpeOffset/2}% + \StrLen{#1}[\tmplennumber]% + \StrChar{#2}{\lenB}[\tmplastB]% + \xintFor* ##1 in {\xintSeq{1}{\xinteval{\tmplennumber-1}}}\do{% + \xdef\tmplenctr{\inteval{\tmplennumber-##1}}% + \StrChar{\BwithZeros}{##1}[\tmpchiff]% + \StrRight{#1}{\tmplenctr}[\tmpA]% + \StrRight{\BwithZeros}{\tmplenctr}[\tmpB]% + \IfStrEqCase{\PoseOpeBase}{% + {dec}{\xdef\rescalctmp{\xinteval{\tmpA-\tmpB}}}% + {bin}{\xdef\rescalctmp{\xinteval{\xintBinToDec{\tmpA}-\xintBinToDec{\tmpB}}}}% + {hex}{\xdef\rescalctmp{\xinteval{\xintHexToDec{\tmpA}-\xintHexToDec{\tmpB}}}}% + }% + \xintifboolexpr{ \rescalctmp >= 0 }% + {\makebox[\the\siowidestcharwd][r]{\xintifboolexpr{ ##1 <= \lenA-\lenB }{}{\tmpchiff}}}% + %{\makebox[\the\siowidestcharwd][r]{${}_{\textcolor{\PoseOpeColReten}{\scalebox{0.5}[0.5]{\text{1}}}}$\xintifboolexpr{ ##1 <= \lenA-\lenB }{}{\kern-0.1em\tmpchiff}}}% + {\makebox[\the\siowidestcharwd][r]{\raisebox{-0.5\height}{\textcolor{\PoseOpeColReten}{\scalebox{0.5}[0.5]{\text{1}}}}\xintifboolexpr{ ##1 <= \lenA-\lenB }{\kern0.25em}{\kern-0.1em\tmpchiff}}}% + }\makebox[\the\siowidestcharwd][r]{\tmplastB} \\ + + %\SioIntCreateBoxNumbers{#2} \\ + \hline + \ifboolKV[sioposeoperation]{AffEgal}{=}{} &\SioIntCreateBoxNumbers[r]{\rescalcbin} \\ + \end{NiceArray}}% + }% + {% + \ensuremath{\begin{NiceArray}[#3]{@{\,}r@{\hspace{\PoseOpeOffset}}r@{\,}} + \RowStyle[nb-rows=*,cell-space-limits=1pt]{} + & \SioIntCreateBoxNumbers{#1} \\ + - & \SioIntCreateBoxNumbers{#2} \\ + \hline + \ifboolKV[sioposeoperation]{AffEgal}{=}{} & \SioIntCreateBoxNumbers{\rescalcbin} \\ + \end{NiceArray}}% + }% + %\end{array}}% +} + +\NewDocumentCommand\SioIntPoseMultiplication{ m m D<>{} }{% + \StrLen{#1}[\nbligninit]% + \StrLen{#2}[\nbligninter]% + \IfStrEqCase{\PoseOpeBase}{% + {dec}{\xdef\rescalcbin{\xinteval{#1*#2}}}% + {bin}{\xdef\rescalcbin{\xintDecToBin{\xinteval{\xintBinToDec{#1}*\xintBinToDec{#2}}}}}% + {hex}{\xdef\rescalcbin{\xintDecToHex{\xinteval{\xintHexToDec{#1}*\xintHexToDec{#2}}}}}% + }% + \xintifboolexpr{\PoseOpeLimit > 0 }{\StrRight{\rescalcbin}{\PoseOpeLimit}[\rescalcbin]}{}% + %\ensuremath{\begin{array}{@{\,}r@{\hspace{\PoseOpeOffset}}r@{\,}} + \ensuremath{\begin{NiceArray}[#3]{@{\,}r@{\hspace{\PoseOpeOffset}}r@{\,}} + \RowStyle[nb-rows=*,cell-space-limits=1pt]{} + & \SioIntCreateBoxNumbers{#1} \\ + \times & \SioIntCreateBoxNumbers{#2} \\ + \ifboolKV[sioposeoperation]{Interm}% + {% + \hline + \xintFor* ##1 in {\xintSeq{1}{\nbligninter}}\do{% + \xintifboolexpr{##1 == 1}{}{+}& + \xdef\tmpindice{\inteval{\nbligninter-##1+1}}\StrChar{#2}{\tmpindice}[\tmpchiff]\IfStrEqCase{\PoseOpeBase}{{dec}{\xdef\rescalcbininter{\xinteval{#1*\tmpchiff}}}{bin}{\xdef\rescalcbininter{\xintDecToBin{\xinteval{\xintBinToDec{#1}*\xintBinToDec{\tmpchiff}}}}}{hex}{\xdef\rescalcbininter{\xintDecToHex{\xinteval{\xintHexToDec{#1}*\xintHexToDec{\tmpchiff}}}}}}% + \IfEq{\tmpchiff}{0}% + {\xdef\rescalcbininter{}\xintFor* ##2 in {\xintSeq{1}{\nbligninit}}\do{\xdef\rescalcbininter{0\rescalcbininter}}% + }{}% + \xintifboolexpr{\PoseOpeLimit > 0 }{\StrRight{\rescalcbininter}{\PoseOpeLimit}[\rescalcbininter]}{}% + \SioIntCreateBoxNumbers{\rescalcbininter} + \xintifboolexpr{##1 == 1}{}{\xintFor* ##2 in {\xintSeq{1}{##1-1}}\do{\makebox[\the\siowidestcharwd][c]{\PoseOpeSymb}}}\\ + }% + }% + {}% + \hline + \ifboolKV[sioposeoperation]{AffEgal}{=}{} & \SioIntCreateBoxNumbers{\rescalcbin} \\ + \end{NiceArray}}% + %\end{array}}% +} + +\NewDocumentCommand\OpeBinDecHex{ O{} m D<>{} }{% + \restoreKV[sioposeoperation]% + \setKV[sioposeoperation]{#1}% + \IfStrEqCase{\PoseOpeBase}{% + {dec}{\settoheight{\sioheightercharht}{\hbox{0123456789}}}% + {bin}{\settoheight{\sioheightercharht}{\hbox{01}}}% + {hex}{\settoheight{\sioheightercharht}{\hbox{0123456789ABCDEF}}}% + }% + \IfSubStr{#2}{+}% + {% + \StrCut{#2}{+}{\tmpcalcA}{\tmpcalcB}% + \SioIntPoseAddition{\tmpcalcA}{\tmpcalcB}<#3> + }% + {}% + \IfSubStr{#2}{-}% + {% + \StrCut{#2}{-}{\tmpcalcA}{\tmpcalcB}% + \SioIntPoseSoustraction{\tmpcalcA}{\tmpcalcB}<#3> + }% + {}% + \IfSubStr{#2}{*}% + {% + \StrCut{#2}{*}{\tmpcalcA}{\tmpcalcB}% + \SioIntPoseMultiplication{\tmpcalcA}{\tmpcalcB}<#3> + }% + {}% +} + \endinput
\ No newline at end of file |