texlive[69125] Master/texmf-dist: profsio (14dec23)

commits+karl at tug.org commits+karl at tug.org
Thu Dec 14 21:59:16 CET 2023


Revision: 69125
          https://tug.org/svn/texlive?view=revision&revision=69125
Author:   karl
Date:     2023-12-14 21:59:16 +0100 (Thu, 14 Dec 2023)
Log Message:
-----------
profsio (14dec23)

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	2023-12-14 20:59:07 UTC (rev 69124)
+++ trunk/Master/texmf-dist/doc/latex/profsio/ProfSio-doc-fr.tex	2023-12-14 20:59:16 UTC (rev 69125)
@@ -5,8 +5,8 @@
 
 \documentclass[french,a4paper,11pt]{article}
 \usepackage[margin=2cm,includefoot]{geometry}
-\def\TPversion{0.1.8}
-\def\TPdate{29 septembre 2023}
+\def\TPversion{0.1.9}
+\def\TPdate{13 décembre 2023}
 %\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},%
+		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},%
 		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},%
+		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},%
 		keywordstyle={\color{orange}}
 	},%
 	#1
@@ -159,7 +159,7 @@
 
 \vspace{0.15cm}
 
-{$\blacktriangleright$~~Créer des graphes simples ou des diagrammes sagittaux.
+{$\blacktriangleright$~~Créer des graphes simples ou des diagrammes sagittaux, travailler sur les matrices.
 
 \vspace{0.15cm}
 
@@ -255,6 +255,8 @@
 
 \section{Historique}
 
+\verb|v0.1.9|~:~~~~Travail sur les matrices d'adjacence (chemins, puissances, fermeture)
+
 \verb|v0.1.8|~:~~~~Possibilité de créer le tableau de Karnaugh via une expression booléenne  + Corrections mineures
 
 \verb|v0.1.7|~:~~~~Possibilité de simplifier une expression booléenne \textit{directement} + amélioration des espaces
@@ -1275,6 +1277,153 @@
 
 \pagebreak
 
+\section{Matrice d'adjacence, fermeture transitive}
+
+\subsection{Commandes et fonctionnement global}
+
+\begin{tipblock}
+L'idée est de proposer des commandes pour travailler avec l'aspect matriciel des graphes :
+
+\begin{itemize}
+	\item afficher la matrice d'adjacence, avec bordure éventuelle ;
+	\item calculer la puissance $n$-ième d'une matrice d'adjacence, avec bordure éventuelle ;
+	\item déterminer le nombre de chemins de longueur donnée dans un graphe ;
+	\item déterminer la matrice de la fermeture transitive, avec bordure éventuelle.
+\end{itemize}
+
+Quelques éléments de personnalisations sont disponibles.
+\end{tipblock}
+
+\begin{warningblock}
+La commande est accessible \textbf{uniquement} en cas d'une compilation en \hologo{LuaLaTeX} !
+
+\smallskip
+
+Une \textbf{double compilation} peut être nécessaire pour le placement correct des filets !
+
+\smallskip
+
+Les calculs matriciels sont effectués par le package \packagetex!lualinalg! (\url{https://ctan.org/pkg/lualinalg}), mais les sorties sont parfois \textit{modifiées} pour une présentation adaptée avec des matrices bordées.
+
+\smallskip
+
+Les matrices sont à déclarer sous une forme particulière, sous la forme \verb|{{ligne1},{ligne2},{...}}| avec \verb|ligne1={e1,e2,...}|.
+\end{warningblock}
+
+\subsection{Matrice d'adjacence, puissance}
+
+\begin{cautionblock}
+La commande dédiée à la l'affichage d'une matrice d'adjacence \motcletex!\MatriceAdjacence!.
+
+\smallskip
+
+La commande dédiée à la l'affichage d'une puissance d'une matrice d'adjacence \motcletex!\PuissanceMatrice!.
+\end{cautionblock}
+
+\begin{DemoCode}[listing only]
+%affichage de la matrice d'adjdacence
+\MatriceAdjacence[clés]{matrice}
+
+%affichage de la puissance
+\PuissanceMatrice[clés]{matrice}{exposant}
+\end{DemoCode}
+
+\begin{tipblock}
+Les \Cle{clés} (communes) disponibles sont :
+
+\begin{itemize}
+	\item \Cle{Bordure} := booléen pour border la matrice ; \hfill{}défaut : \Cle{false}
+	\item \Cle{Sommets} := sommets du graphe (uni-caractères) ; \hfill{}défaut : \Cle{ABCDE...}
+	\item \Cle{Num} := booléen pour formater avec \packagetex!siunitx! (si chargé !) ; \hfill{}défaut : \Cle{false}
+	\item \Cle{PoliceBordure} := spécifier la police (taille) de la bordure.\hfill{}défaut : \Cle{\textbackslash footnotesize}
+\end{itemize}
+
+Le deuxième argument, optionnel et entre \texttt{<...>} permet de spécifier la matrice (comme indiqué précédemment) avec laquelle on travaille.
+\end{tipblock}
+
+\begin{DemoCode}[]
+\def\MatriceAdj{{{0,1,1,1},{0,0,1,0},{0,1,0,1},{1,0,0,1}}}
+On considère la matrice d'adjacence $M = \MatriceAdjacence{\MatriceAdj}$.\par
+On considère la matrice d'adjacence $M = \MatriceAdjacence[Bordure]{\MatriceAdj}$.\par
+On considère la matrice d'adjacence $M = \MatriceAdjacence[Bordure,Sommets=JKLM]{\MatriceAdj}$.\par
+\end{DemoCode}
+
+\subsection{Chemins de longueur donnée}
+
+\begin{cautionblock}
+La commande dédiée au calcul du nombre de chemins de longueur donnée dans un graphe est \motcletex!\NbCheminsLongueur!.
+
+\smallskip
+
+Pour le moment la commande ne calcule \textit{que} le nombre de chemins de longueur donnée entre deux sommets.
+\end{cautionblock}
+
+\begin{DemoCode}[listing only]
+%calcul du nombre de chemins
+\NbCheminsLongueur[Longueur=...,De=...,Vers=...,clés]{matrice}
+\end{DemoCode}
+
+\begin{tipblock}
+Les \Cle{clés} disponibles sont :
+
+\begin{itemize}
+	\item \Cle{Sommets} := sommets du graphe (uni-caractères) ; \hfill{}défaut : \Cle{ABCDE...}
+	\item \Cle{Num} := booléen pour formater avec \packagetex!siunitx! (si chargé !).\hfill{}défaut : \Cle{false}
+\end{itemize}
+
+Les clés \Cle{De}, \Cle{Vers} et \Cle{Longueur} sont \textit{nécessaires} et doivent être cohérentes avec la liste des sommets.
+\end{tipblock}
+
+\begin{DemoCode}[]
+\def\MatriceAdjB{{{1,1,0,0,0},{1,0,1,0,0},{1,0,0,1,0},{1,1,0,0,0},{0,0,0,1,0}}}
+On donne $M = \MatriceAdjacence[Bordure,Sommets=JKLMN]{\MatriceAdjB}$.\par
+On a $M^5 = \PuissanceMatrice[Bordure,Sommets=JKLMN]{\MatriceAdjB}{5}$, il existe \NbCheminsLongueur[Longueur=5,De=J,Vers=L,Sommets=JKLMN]{\MatriceAdjB} chemins de longueur 5 allant de $J$ vers $L$.
+\end{DemoCode}
+
+\subsection{Matrice de fermeture transitive}
+
+\begin{cautionblock}
+La commande dédiée pour travailler sur la matrice de fermeture transitive d'un graphe est \motcletex!\FermetureTransitive!.
+
+\smallskip
+
+Quelques options de \textit{présentation} sont disponibles pour cette commande.
+\end{cautionblock}
+
+\begin{DemoCode}[listing only]
+%matrice de fermeture transitive
+\FermetureTransitive[clés]{matrice}
+\end{DemoCode}
+
+\begin{tipblock}
+Les \Cle{clés} disponibles sont :
+
+\begin{itemize}
+	\item \Cle{Sommets} := sommets du graphe (uni-caractères) ; \hfill{}défaut : \Cle{ABCDE...}
+	\item \Cle{Formule} := booléen pour afficher la formule ; \hfill{}défaut : \Cle{false}
+	\item \Cle{Brut} := booléen pour afficher le résultat brut de la calculatrice ; \hfill{}défaut : \Cle{false}
+	\item \Cle{Enonce} := booléen pour afficher le nom au début ; \hfill{}défaut : \Cle{false}
+	\item \Cle{NomMatrice} := nom de la matrice d'adjacence ; \hfill{}défaut : \Cle{M}
+	\item \Cle{Bordure} := booléen pour border la matrice ; \hfill{}défaut : \Cle{false}
+	\item \Cle{Sommets} := sommets du graphe (uni-caractères) ; \hfill{}défaut : \Cle{ABCDE...}
+	\item \Cle{PoliceBordure} := spécifier la police (taille) de la bordure.\hfill{}défaut : \Cle{\textbackslash footnotesize}
+\end{itemize}
+
+À noter qu'une clé booléenne, \Cle{Complet}, existe, et qui active \Cle{Formule} et \Cle{Enonce}.
+\end{tipblock}
+
+\begin{DemoCode}[]
+\def\MatriceAdjC{{{1,1,1,1},{0,0,0,1},{0,1,0,0},{0,0,1,0}}}
+
+\FermetureTransitive{\MatriceAdjC} et \FermetureTransitive[Brut]{\MatriceAdjC}
+
+On a \FermetureTransitive[Brut,Formule]{\MatriceAdjC}.
+
+Donc \FermetureTransitive[Complet,Bordure,Sommets=XYZF]{\MatriceAdjC}.
+\end{DemoCode}
+
+\pagebreak
+
 \section{Diagramme sagittal d'une application}
 
 \subsection{Commande et fonctionnement global}
@@ -1538,7 +1687,7 @@
 \begin{importantblock}
 Une \textbf{double compilation} peut être nécessaire pour le placement correct des filets !
 
-Les fonction \textsf{LUA} utilisées sont issues du \packagetex!luatruthtable!, elles sont légèrement modifiées pour \textit{coller} à une présentation plus classique.
+Les fonctions \textsf{LUA} utilisées sont issues du \packagetex!luatruthtable!, elles sont légèrement modifiées pour \textit{coller} à une présentation plus classique.
 \end{importantblock}
 
 \begin{DemoCode}[listing only]

Modified: trunk/Master/texmf-dist/tex/latex/profsio/ProfSio.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/profsio/ProfSio.sty	2023-12-14 20:59:07 UTC (rev 69124)
+++ trunk/Master/texmf-dist/tex/latex/profsio/ProfSio.sty	2023-12-14 20:59:16 UTC (rev 69125)
@@ -3,7 +3,8 @@
 %            : Luatruthtable from Chetan Shirore and Dr. Ajit Kumar https://ctan.org/pkg/luatruthtable
 
 \NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{ProfSio}[2023/09/29 0.1.8 Pour les enseignants de Maths en BTS SIO]
+\ProvidesPackage{ProfSio}[2023/12/13 0.1.9 Pour les enseignants de Maths en BTS SIO]
+%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
 %0.1.7	Ajout des simplifications booléennes d'expressions classiques
 %0.1.6	Correction dans les simplifications de Karnaugh + Possibilité de travailler avec le contraire
@@ -1855,4 +1856,127 @@
 		}
 }
 
+%------Chemins de longueur donnée + fermeture transitive
+\ifluatex
+\RequirePackage{lualinalg}
+
+\setKVdefault[MatAdj]{Bordure=false,Sommets=ABCDEFGHIJKLMNOPQRSTUVWXYZ,Num=false,PoliceBordure=\footnotesize}
+
+\NewDocumentCommand\MatriceAdjacence{ O{} m }{%
+	\restoreKV[MatAdj]%
+	\setKV[MatAdj]{#1}%
+	%on définit la matrice
+	\matrixNew{M}{#2}%
+	%formatage
+	\ifboolKV[MatAdj]{Bordure}%
+		{%
+			\ensuremath{%
+				\begin{pNiceMatrix}[first-row,first-col]
+					\xintFor* ##1 in {\xintSeq{1}{\matrixNumRows{M}}}\do{&\Block{1-1}<\useKV[MatAdj]{PoliceBordure}>{\StrChar{\useKV[MatAdj]{Sommets}}{##1}}} \\
+					\xintFor* ##1 in {\xintSeq{1}{\matrixNumRows{M}}}\do{%
+						\Block{1-1}<\scriptsize>{\StrChar{\useKV[MatAdj]{Sommets}}{##1}} \xintFor* ##2 in {\xintSeq{1}{\matrixNumRows{M}}}\do{&\ifboolKV[MatAdj]{Num}{\num{\matrixGetElement{M}{##1}{##2}}}{\matrixGetElement{M}{##1}{##2}}} \\
+					}%
+				\end{pNiceMatrix}%
+				}%
+		}%
+		{%
+			\ensuremath{\matrixPrint[type=pmatrix]{M}}
+		}%
+}
+
+\NewDocumentCommand\PuissanceMatrice{ O{} m m }{%
+	\restoreKV[MatAdj]%
+	\setKV[MatAdj]{#1}%
+	%on définit la matrice
+	\matrixNew{M}{#2}%
+	\matrixOp{Mpuiss}{M^#3}%
+	%formatage
+	\ifboolKV[MatAdj]{Bordure}%
+		{%
+			\ensuremath{%
+				\begin{pNiceMatrix}[first-row,first-col]
+					\xintFor* ##1 in {\xintSeq{1}{\matrixNumRows{M}}}\do{&\Block{1-1}<\useKV[MatAdj]{PoliceBordure}>{\StrChar{\useKV[MatAdj]{Sommets}}{##1}}} \\
+					\xintFor* ##1 in {\xintSeq{1}{\matrixNumRows{M}}}\do{%
+						\Block{1-1}<\useKV[MatAdj]{PoliceBordure}>{\StrChar{\useKV[MatAdj]{Sommets}}{##1}} \xintFor* ##2 in {\xintSeq{1}{\matrixNumRows{M}}}\do{&\ifboolKV[MatAdj]{Num}{\num{\matrixGetElement{Mpuiss}{##1}{##2}}}{\matrixGetElement{Mpuiss}{##1}{##2}}} \\
+					}%
+				\end{pNiceMatrix}%
+				}%
+		}%
+		{%
+			\ensuremath{\matrixPrint[type=pmatrix]{Mpuiss}}
+		}%
+}
+
+\defKV[GrphNbChemLg]{De=\def\GrphNbChemLgDeb{#1},Vers=\def\GrphNbChemLgFin{#1},Sommets=\def\GrphNbChemLgSomm{#1}}
+\setKVdefault[GrphNbChemLg]{Longueur=2,De=A,Vers=A,Sommets={ABCDEFGHIJKLMNOPQRSTUVWXYZ},Num=false}
+
+\NewDocumentCommand\NbCheminsLongueur{ O{} m }{%
+	\restoreKV[GrphNbChemLg]%
+	\setKV[GrphNbChemLg]{#1}%
+	%on définit la matrice
+	\matrixNew{M}{#2}%
+	\StrPosition{\GrphNbChemLgSomm}{\GrphNbChemLgDeb}[\nbcheminsdepart]%
+	\StrPosition{\GrphNbChemLgSomm}{\GrphNbChemLgFin}[\nbcheminsarrivee]%
+	%on calcule la puissance
+	\matrixOp{Mpuiss}{M^\useKV[GrphNbChemLg]{Longueur}}%
+	%test !!
+	\ifboolKV[GrphNbChemLg]{Num}%
+		{%
+			\num{\matrixGetElement{Mpuiss}{\nbcheminsdepart}{\nbcheminsarrivee}}%
+		}%
+		{%
+			\matrixGetElement{Mpuiss}{\nbcheminsdepart}{\nbcheminsarrivee}%
+		}%
+}
+
+\setKVdefault[GrphFermTrans]{Enonce=false,Formule=false,Brut=false,NomMatrice=M,Bordure=false,Sommets=ABCDEFGHIJKLMNOPQRSTUVWXYZ,Num=false,PoliceBordure=\footnotesize,Complet=false}
+
+\NewDocumentCommand\FermetureTransitive{ O{} m }{%
+	\restoreKV[GrphFermTrans]%
+	\setKV[GrphFermTrans]{#1}%
+	\matrixNew{M}{#2}%
+	%formule de calcul
+	\xdef\FermTransFormule{M}%
+	\xintFor* ##1 in {\xintSeq{2}{\matrixNumRows{M}}}\do{%
+		\xdef\FermTransFormule{\FermTransFormule+M^##1}%
+	}%
+	\matrixOp{MFT}{\FermTransFormule}%
+	%gestion de la clé complète
+	\ifboolKV[GrphFermTrans]{Complet}%
+		{%
+			\setKV[GrphFermTrans]{Enonce=true,Formule=true}%
+		}%
+		{}%
+	%simplification éventuelle
+	\ifboolKV[GrphFermTrans]{Brut}%
+		{%
+			\ensuremath{\ifboolKV[GrphFermTrans]{Formule}{\useKV[GrphFermTrans]{NomMatrice} \xintFor* ##1 in {\xintSeq{2}{\matrixNumRows{M}}}\do{+\useKV[GrphFermTrans]{NomMatrice}^{##1}}=}{}\matrixPrint[type=pmatrix]{MFT}}%
+		}%
+		{%
+			\xintFor* ##1 in {\xintSeq{1}{\matrixNumRows{M}}}\do{%lignes
+				\xintFor* ##2 in {\xintSeq{1}{\matrixNumRows{M}}}\do{%colonnes
+					\xintifboolexpr{\matrixGetElement{MFT}{##1}{##2} == 0}%
+						{}%
+						{\matrixSetElement{MFT}{##1}{##2}{1}}%
+				}%
+			}%
+			\ifboolKV[GrphFermTrans]{Bordure}%
+				{%
+					\ensuremath{%
+						\ifboolKV[GrphFermTrans]{Enonce}{\widehat{\useKV[GrphFermTrans]{NomMatrice}}=}{}\ifboolKV[GrphFermTrans]{Formule}{\useKV[GrphFermTrans]{NomMatrice} \xintFor* ##1 in {\xintSeq{2}{\matrixNumRows{M}}}\do{\oplus\useKV[GrphFermTrans]{NomMatrice}^{[##1]}}=}{}%
+						\begin{pNiceMatrix}[first-row,first-col]
+							\xintFor* ##1 in {\xintSeq{1}{\matrixNumRows{M}}}\do{&\Block{1-1}<\useKV[GrphFermTrans]{PoliceBordure}>{\StrChar{\useKV[GrphFermTrans]{Sommets}}{##1}}} \\
+							\xintFor* ##1 in {\xintSeq{1}{\matrixNumRows{M}}}\do{%
+								\Block{1-1}<\useKV[GrphFermTrans]{PoliceBordure}>{\StrChar{\useKV[GrphFermTrans]{Sommets}}{##1}} \xintFor* ##2 in {\xintSeq{1}{\matrixNumRows{M}}}\do{&\matrixGetElement{MFT}{##1}{##2}} \\
+							}%
+						\end{pNiceMatrix}%
+						}%
+				}%
+				{%
+					\ensuremath{\ifboolKV[GrphFermTrans]{Enonce}{\widehat{\useKV[GrphFermTrans]{NomMatrice}}=}{}\ifboolKV[GrphFermTrans]{Formule}{\useKV[GrphFermTrans]{NomMatrice} \xintFor* ##1 in {\xintSeq{2}{\matrixNumRows{M}}}\do{\oplus\useKV[GrphFermTrans]{NomMatrice}^{[##1]}}=}{}\matrixPrint[type=pmatrix]{MFT}}%
+				}%
+		}%
+}
+\fi
+
 \endinput
\ No newline at end of file



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