texlive[70211] branches/branch2023.final/Master/texmf-dist: profsio
commits+karl at tug.org
commits+karl at tug.org
Tue Feb 27 21:49:40 CET 2024
Revision: 70211
https://tug.org/svn/texlive?view=revision&revision=70211
Author: karl
Date: 2024-02-27 21:49:40 +0100 (Tue, 27 Feb 2024)
Log Message:
-----------
profsio (branch) (27feb24)
Modified Paths:
--------------
branches/branch2023.final/Master/texmf-dist/doc/latex/profsio/ProfSio-doc-fr.pdf
branches/branch2023.final/Master/texmf-dist/doc/latex/profsio/ProfSio-doc-fr.tex
branches/branch2023.final/Master/texmf-dist/tex/latex/profsio/ProfSio.sty
Modified: branches/branch2023.final/Master/texmf-dist/doc/latex/profsio/ProfSio-doc-fr.pdf
===================================================================
(Binary files differ)
Modified: branches/branch2023.final/Master/texmf-dist/doc/latex/profsio/ProfSio-doc-fr.tex
===================================================================
--- branches/branch2023.final/Master/texmf-dist/doc/latex/profsio/ProfSio-doc-fr.tex 2024-02-27 20:49:21 UTC (rev 70210)
+++ branches/branch2023.final/Master/texmf-dist/doc/latex/profsio/ProfSio-doc-fr.tex 2024-02-27 20:49:40 UTC (rev 70211)
@@ -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: branches/branch2023.final/Master/texmf-dist/tex/latex/profsio/ProfSio.sty
===================================================================
--- branches/branch2023.final/Master/texmf-dist/tex/latex/profsio/ProfSio.sty 2024-02-27 20:49:21 UTC (rev 70210)
+++ branches/branch2023.final/Master/texmf-dist/tex/latex/profsio/ProfSio.sty 2024-02-27 20:49:40 UTC (rev 70211)
@@ -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.