summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/proflabo/tex/ProfLabo.sty
diff options
context:
space:
mode:
Diffstat (limited to 'macros/latex/contrib/proflabo/tex/ProfLabo.sty')
-rw-r--r--macros/latex/contrib/proflabo/tex/ProfLabo.sty305
1 files changed, 305 insertions, 0 deletions
diff --git a/macros/latex/contrib/proflabo/tex/ProfLabo.sty b/macros/latex/contrib/proflabo/tex/ProfLabo.sty
new file mode 100644
index 0000000000..dafe673b7c
--- /dev/null
+++ b/macros/latex/contrib/proflabo/tex/ProfLabo.sty
@@ -0,0 +1,305 @@
+%Author : Thomas Mounier
+%email : thomgo.mounier@gmail.com
+%Licence : LaTeX Project Public License
+
+
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{proflabo}[2022/04/25 - Chemistry Lab stuff helper for teachers, V1.0]
+\RequirePackage{pgf,tikz}
+\RequirePackage{listofitems}
+\RequirePackage{simplekv}
+\RequirePackage{ifthen}
+
+
+\setKVdefault[Dosage]{Titrant={Titrant},Titre={Titré},Echelle=1,CouleurTitrant={white},CouleurTitre={white}}
+\setKVdefault[Chimie]{Couleurs={white},Echelle=0.5,Legende=false}
+\defKV[Chimie]{Legendes=\setKV[Chimie]{Legende}}
+\setKVdefault[Becher]{Couleurs={white},Echelle=0.5,Legende={}}
+\setKVdefault[Tube]{Couleurs={white},Echelle=0.5,Legende={},Hauteur={29}}
+\setKVdefault[Erlen]{Couleurs={white},Echelle=1.5,Legende={},LegendeDessous={},Hauteur={33}}
+\setKVdefault[Fiole]{Couleurs={white},Echelle=1,Legende={},Hauteur={33}}
+
+
+%%%%%%%%%% N TUBES pour échelle de teinte %%%%%%%%%%%%%%%
+\newcommand\EchelleTube[2][]{%
+\useKVdefault[Chimie]%
+\setKV[Chimie]{#1}%
+\xdef\ListeAvantCouleurs{\useKV[Chimie]{Couleurs}}%
+\setsepchar{,}
+\readlist*\ListeCouleurs{\ListeAvantCouleurs}%
+\ifboolKV[Chimie]{Legende}{
+\xdef\ListeAvantLegendes{\useKV[Chimie]{Legendes}}%
+\setsepchar{,}
+\readlist*\ListeLegendes{\ListeAvantLegendes}%
+}{}%
+\pgfmathsetmacro{\nombretube}{#2}
+\xdef\EchelleActuelle{\useKV[Chimie]{Echelle}}
+\scalebox{\EchelleActuelle}{
+\begin{tikzpicture}
+\foreach \pos in {1,...,\nombretube}{%
+\xdef\CouleurActuelle{\ListeCouleurs[\pos]}
+\node at (5*\pos,0) {
+\tikz\draw[fill=\CouleurActuelle]
+(0,0) arc (0:-180:1)-- ++(0,4) -- (0,4)
+(-2,4) -- ++ (0,4)
+(0,0) -- ++ (0,8)
+%(-2,4) -- ++ (2,0)
+;
+};
+\ifboolKV[Chimie]{Legende}{%
+\xdef\LegendeActuelle{\ListeLegendes[\pos]}
+\draw[<-] (5*\pos,-3)--(5*\pos,-9);
+\node at (5*\pos,-10){\LegendeActuelle};
+}{}
+}
+\draw[rounded corners = 2mm] (1,4)--(2,4)--(2,-5)--(5*\nombretube+2,-5)
+-- (5*\nombretube+2,4)--(5*\nombretube+3,4)--(5*\nombretube+3,-7)--(1,-7)--cycle;
+\draw[] (2,3)--(5*\nombretube+2,3)--(5*\nombretube+2,2.75)--(2,2.75)
+--cycle;
+\end{tikzpicture}
+}
+}
+
+%%%%%%%%%%%%% Montage d'un dosage %%%%%%%%%%%%%
+
+\newcommand{\Dosage}[2][]{%
+\useKVdefault[Dosage]%
+\setKV[Dosage]{#1}%
+\xdef\EchelleActuelle{\useKV[Dosage]{Echelle}}
+\scalebox{\EchelleActuelle}{
+ \begin{tikzpicture}
+ \xdef\CouleurTitrant{\useKV[Dosage]{CouleurTitrant}}
+ \xdef\CouleurTitre{\useKV[Dosage]{CouleurTitre}}
+
+
+ \fill[color=\CouleurTitre] %bécher
+ (0.3,1.7)--++(1.4,0)--++(0,-0.7)--++(-1.4,0)
+ ;
+ \draw %bécher
+ (1.7,3) -- ++ (0,-2)
+ (0.3,3) -- ++ (0,-2)
+ (0.3,1.7) -- ++ (1.4,0)
+
+ ;
+ \draw %pastille
+ (1,1.11)ellipse (0.25 and 0.10)
+ ;
+ \draw %support
+ (0,0) -- ++ (2,0) -- ++ (0,1) -- ++ (-2,0) -- ++ (0,-1)
+ (0.3,0.3) circle(0.1)
+
+ ;
+ \draw[fill=\CouleurTitrant] %burette
+ (0.6,3.3) -- ++ (0.7,0)
+ (1,6) -- ++ (0,-3) -- ++ (-0.2,0.1) -- ++ (0,2.9)
+ ;
+ \draw %haut burette sans couleur
+ (1,6.5)--(1,6)--++(-0.2,0)--++(0,0.5)
+ ;
+ \draw
+ [<-,>=stealth, thick] (1,4.4) -- ++ (2,0) node[right] {
+ \begin{minipage}{0.4\textwidth}
+ {\useKV[Dosage]{Titrant}}
+ \end{minipage}
+ }
+ ;
+ \draw
+ [<-,>=stealth, thick] (1,1.5) -- ++ (2,0) node[right] {
+ \begin{minipage}{0.4\textwidth}
+ {\useKV[Dosage]{Titre}}
+ \end{minipage}
+ }
+
+ ;
+ \node at (1.5,-0.75){{\small \useKV[Dosage]{legendeschema}}};
+ \node[color=white] at (-2,0){a}; %hack temporaire pour décaler la figure au centre ...
+ \end{tikzpicture}
+}
+}
+
+%%%%%%%%%%%%%% Bécher avec liquide et éventuellement légende %%%%%%%%%%
+\newcommand\Becher[2][]{%
+\useKVdefault[Becher]%
+\setKV[Becher]{#1}%
+\xdef\LegendeActuelleB{\useKV[Becher]{Legende}}
+\newif\iflegende
+\legendefalse
+\ifthenelse{\equal{\LegendeActuelleB}{}}{\legendefalse}{\legendetrue}
+\newif\iftraitnoirbecher
+\xdef\CouleurBecherd{\useKV[Becher]{Couleurs}}
+\ifthenelse{\equal{\CouleurBecherd}{white}}{\traitnoirbechertrue}{}
+\xdef\EchelleActuelle{\useKV[Becher]{Echelle}}
+\scalebox{\EchelleActuelle}{
+\begin{tikzpicture}
+\xdef\CouleurBecher{\useKV[Becher]{Couleurs}}
+\fill[color=\CouleurBecher] (0,0)--(0,2)--(2,2)--(2,0)--cycle;
+\draw (0,0)--++(0,3);
+\draw (0,0)--++(2,0);
+\draw (2,0)--++(0,3);
+\iftraitnoirbecher
+\draw (0,2)--(2,2);
+\fi
+\iflegende
+\draw[<-] (1,1)--(3,2) node[at end, right]{\begin{minipage}{0.25\textwidth}\begin{center}
+\useKV[Becher]{Legende}
+\end{center} \end{minipage}};
+\fi
+\end{tikzpicture}%
+}%
+}%
+
+
+%%%%%%%%%% TUBE A ESSAI SIMPLE avec legende %%%%%%%%%%%%%%%
+\newcommand\TubeAEssai[2][]{%
+\useKVdefault[Tube]%
+\setKV[Tube]{#1}%
+\xdef\LegendeActuelleT{\useKV[Tube]{Legende}}
+\newif\iflegendetube
+\legendetubefalse
+\ifthenelse{\equal{\LegendeActuelleT}{}}{\legendetubefalse}{\legendetubetrue}
+\newif\iftrait
+\xdef\CouleurTube{\useKV[Tube]{Couleurs}}
+\ifthenelse{\equal{\CouleurTube}{white}}{\traittrue}{}
+\pgfmathsetmacro{\hauteurmaxtube}{\useKV[Tube]{Hauteur}}
+\ifthenelse{\hauteurmaxtube>100}{\setKV[Tube]{Hauteur=100}}{}
+\xdef\EchelleActuelle{\useKV[Tube]{Echelle}}
+\scalebox{\EchelleActuelle}{
+ \begin{tikzpicture}[scale=1]
+
+ \xdef\HauteurTube{\useKV[Tube]{Hauteur}}
+ \coordinate (H) at (-2,7*\HauteurTube/100);
+ \coordinate (K) at (0,7*\HauteurTube/100);
+ \fill[\CouleurTube] (H)--(K)--(0,0) arc (0:-180:1)--(-2,0)--(H) ;
+ \draw (0,0) arc (0:-180:1);
+ \draw (-2,0) -- ++ (0,8);
+ \draw (0,0) -- ++ (0,8);
+ \draw[color=\CouleurTube] (H) -- (K);
+ \iftrait
+ \draw(H) -- (K);
+ \fi
+ \iflegendetube
+ \draw (-1,-1.5) node[below]
+ {
+ \begin{minipage}{0.25\textwidth}
+ \begin{center}
+ \useKV[Tube]{Legende}
+ \end{center}
+ \end{minipage}
+ }
+ \fi
+ ;
+ \end{tikzpicture}
+}
+}
+
+%%%%% Erlenmeyer %%%%%
+\newcommand\Erlen[2][]{%
+\useKVdefault[Erlen]%
+\setKV[Erlen]{#1}%
+\xdef\LegendeActuelleT{\useKV[Erlen]{Legende}}
+\xdef\LegendeActuelleD{\useKV[Erlen]{LegendeDessous}}
+\newif\iflegendeerlen
+\newif\iflegendesouserlen
+\legendeerlenfalse
+\newif\iferlenplein
+\newif\iferlenpartiel
+\newif\iferlenvide
+\erlenvidetrue \erlenpleinfalse \erlenpartielfalse
+\ifthenelse{\equal{\LegendeActuelleT}{}}{\legendeerlenfalse}{\legendeerlentrue}
+\ifthenelse{\equal{\LegendeActuelleD}{}}{\legendesouserlenfalse}{\legendesouserlentrue}
+\pgfmathsetmacro{\hauteurerlen}{\useKV[Erlen]{Hauteur}}
+\ifthenelse{\hauteurerlen>100}{\erlenpleintrue\erlenvidefalse\erlenpartielfalse}{}
+\ifthenelse{\equal{\hauteurerlen}{100}}{\erlenpleintrue\erlenvidefalse\erlenpartielfalse}{}
+\ifthenelse{\equal{\hauteurerlen}{33}}{\erlenpleinfalse\erlenvidefalse\erlenpartieltrue}{}
+\newif\iftraitnoirerlen
+\xdef\CouleurErlen{\useKV[Erlen]{Couleurs}}
+\ifthenelse{\equal{\CouleurErlen}{white}}{\traitnoirerlentrue}{}
+\xdef\EchelleActuelle{\useKV[Erlen]{Echelle}}
+\scalebox{\EchelleActuelle}{
+\begin{tikzpicture}
+\coordinate (A) at (-0.35,1.5);
+\coordinate (B) at (0.35,1.5);
+\coordinate (C) at (-1,0);
+\coordinate (D) at (1,0);
+\coordinate (E) at (-0.79,0.49);
+\coordinate (F) at (0.79,0.49);
+\iferlenplein
+\fill[rounded corners,color=\CouleurErlen] (A) --(C)--(D)--(B);
+\fill[color=\CouleurErlen] (A)--++(0,0.25)--++(0.7,0)--++(0,-0.25)--cycle;
+\iftraitnoirerlen
+\draw ($(A)+(0,0.25)$)--($(B)+(0,0.25)$);
+\fi
+\fi
+\iferlenpartiel
+\fill[rounded corners,color=\CouleurErlen] (E) --(C)--(D)--(F);
+\iftraitnoirerlen
+\draw (E)--(F);
+\fi
+\fi
+\draw[rounded corners] (A) --(C)--(D)--(B);
+\draw (A)--++(0,0.75);
+\draw (B)--++(0,0.75);
+\iflegendeerlen
+\draw[<-] (1,1)--(2,2) node[at end, right]{\begin{minipage}{0.15\textwidth}\begin{center}
+\useKV[Erlen]{Legende}
+\end{center} \end{minipage}};
+\fi
+\iflegendesouserlen
+\draw (0,-0.25) node[below]
+ {
+ \begin{minipage}{0.25\textwidth}
+ \begin{center}
+ \useKV[Erlen]{LegendeDessous}
+ \end{center}
+ \end{minipage}
+ }
+ \fi
+ ;
+ ;
+\end{tikzpicture}
+}}
+
+%%%%%%%%FIOLE JAUGEE%%%%%%%%%%
+\newcommand\FioleJaugee[2][]{%
+\useKVdefault[Fiole]%
+\setKV[Fiole]{#1}%
+\xdef\LegendeActuelleF{\useKV[Fiole]{Legende}}
+\newif\iflegendefiole
+\legendefiolefalse
+\newif\iffiolepleine
+\newif\iffiolevide
+\fiolevidetrue \fiolepleinefalse
+\ifthenelse{\equal{\LegendeActuelleF}{}}{\legendefiolefalse}{\legendefioletrue}
+\pgfmathsetmacro{\hauteurfiole}{\useKV[Fiole]{Hauteur}}
+\ifthenelse{\hauteurfiole>100}{\fiolepleinetrue\fiolevidefalse}{}
+\ifthenelse{\equal{\hauteurfiole}{100}}{\fiolepleinetrue\fiolevidefalse}{}
+\ifthenelse{\hauteurfiole<100}{\fiolevidetrue\fiolepleinefalse}{}
+\xdef\EchelleActuelle{\useKV[Fiole]{Echelle}}
+\scalebox{\EchelleActuelle}{
+\begin{tikzpicture}
+\xdef\CouleurFiole{\useKV[Fiole]{Couleurs}}
+\coordinate (A) at (-0.05,1.75);
+\coordinate (B) at (0.05,1.75);
+\coordinate (C) at (-0.8,0);
+\coordinate (D) at (0.8,0);
+\coordinate (E) at (-0.05,2.5);
+\coordinate (F) at (0.05,2.5);
+
+\iffiolepleine
+\fill[rounded corners,color=\CouleurFiole] (A) --(C)--(D)--(B);
+\fill[color=\CouleurFiole] (A)--(E)--(F)--(B)--cycle;
+\fi
+
+\draw[rounded corners] (A) --(C)--(D)--(B);
+\draw (A)--++(0,0.75*2);
+\draw (B)--++(0,0.75*2);
+\draw (E)--(F);
+\iflegendefiole
+\draw[<-] (1,1)--(2,2) node[at end, right]{\begin{minipage}{0.15\textwidth}\begin{center}
+\useKV[Fiole]{Legende}
+\end{center} \end{minipage}};
+\fi
+ \end{tikzpicture}
+}
+}
+