%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} } }