texlive[70198] Master/texmf-dist: profsio (27feb24)

commits+karl at tug.org commits+karl at tug.org
Tue Feb 27 21:46:43 CET 2024


Revision: 70198
          https://tug.org/svn/texlive?view=revision&revision=70198
Author:   karl
Date:     2024-02-27 21:46:43 +0100 (Tue, 27 Feb 2024)
Log Message:
-----------
profsio (27feb24)

Modified Paths:
--------------
    trunk/Master/texmf-dist/doc/latex/profsio/ProfSio-doc-fr.pdf
    trunk/Master/texmf-dist/doc/latex/profsio/ProfSio-doc-fr.tex
    trunk/Master/texmf-dist/tex/latex/profsio/ProfSio.sty

Modified: trunk/Master/texmf-dist/doc/latex/profsio/ProfSio-doc-fr.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/profsio/ProfSio-doc-fr.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/profsio/ProfSio-doc-fr.tex	2024-02-27 18:38:19 UTC (rev 70197)
+++ trunk/Master/texmf-dist/doc/latex/profsio/ProfSio-doc-fr.tex	2024-02-27 20:46:43 UTC (rev 70198)
@@ -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 @@
 \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 @@
 \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 @@
 
 \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}

Modified: trunk/Master/texmf-dist/tex/latex/profsio/ProfSio.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profsio/ProfSio.sty	2024-02-27 18:38:19 UTC (rev 70197)
+++ trunk/Master/texmf-dist/tex/latex/profsio/ProfSio.sty	2024-02-27 20:46:43 UTC (rev 70198)
@@ -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{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



More information about the tex-live-commits mailing list.