diff options
author | Karl Berry <karl@freefriends.org> | 2024-02-27 20:46:43 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2024-02-27 20:46:43 +0000 |
commit | b8922c191ca380eed2c80bc80fa004e4f5370d49 (patch) | |
tree | 77775366c30e627f731831f8aa08b85c212a3bf4 /Master/texmf-dist/tex/latex/profsio | |
parent | b0f269ccd50b1a041b99c31c18baf507420573f4 (diff) |
profsio (27feb24)
git-svn-id: svn://tug.org/texlive/trunk@70198 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/latex/profsio')
-rw-r--r-- | Master/texmf-dist/tex/latex/profsio/ProfSio.sty | 261 |
1 files changed, 260 insertions, 1 deletions
diff --git a/Master/texmf-dist/tex/latex/profsio/ProfSio.sty b/Master/texmf-dist/tex/latex/profsio/ProfSio.sty index 51e9325cfb3..3b7a52d6109 100644 --- a/Master/texmf-dist/tex/latex/profsio/ProfSio.sty +++ b/Master/texmf-dist/tex/latex/profsio/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 |