summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex/profsio
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2024-02-27 20:46:43 +0000
committerKarl Berry <karl@freefriends.org>2024-02-27 20:46:43 +0000
commitb8922c191ca380eed2c80bc80fa004e4f5370d49 (patch)
tree77775366c30e627f731831f8aa08b85c212a3bf4 /Master/texmf-dist/tex/latex/profsio
parentb0f269ccd50b1a041b99c31c18baf507420573f4 (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.sty261
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