\documentclass[12pt, a4paper, notitlepage]{article}
\usepackage[frenchb]{babel}
\usepackage[latin1]{inputenc}
\usepackage{textcomp}
\usepackage[T1]{fontenc}
\usepackage{tikz}
\usepackage{lscape}
\usepackage{etoolbox}
\usepackage{ifthen}
\usepackage[outline]{contour}
\usepackage{verbatim}
\usetikzlibrary{positioning}


\usepackage[top=1cm, bottom=1cm, left=1cm, right=1cm]{geometry}
\setlength{\parindent}{0pt}
\setlength{\parskip}{8pt}


\begin{document}


\newcommand{\tableaustandard}[4]{

% Quelques paramètres géométriques

	\def\le{1.49} % Largeur d'une case
	\def\he{1.98} % Hauteur d'une case
	\def\lc{0.22*\he} % Emplacement de la barre de séparation
	\def\lanthsepx{0.4} % Ecart entre les colonnes 3 et 4
	\def\lanthsepy{0.4} % Ecart entre le tableau principal et les terres rares
	
% Les données de l'élément sont attribuées aux commandes correspondantes
	
	\def\symbole{} \def\Z{} \def\nom{} \def\colonne{} \def\periode{} \def\masse{}
	\def\EN{} \def\DO{} \def\PF{} \def\PE{} \def\rho{} \def\config{}	
	\setcounter{counta}{0}		
	\renewcommand*{\do}[1]{
		\stepcounter{counta}
		\ifthenelse{\thecounta=1}{\renewcommand{\symbole}{##1}}{}
		\ifthenelse{\thecounta=2}{\renewcommand{\Z}{##1}}{}
		\ifthenelse{\thecounta=3}{\renewcommand{\nom}{##1}}{}
		\ifthenelse{\thecounta=4}{\renewcommand{\colonne}{##1}}{}
		\ifthenelse{\thecounta=5}{\renewcommand{\periode}{##1}}{}
		\ifthenelse{\thecounta=6}{\renewcommand{\masse}{##1}}{}
		\ifthenelse{\thecounta=7}{\renewcommand{\EN}{##1}}{}
		\ifthenelse{\thecounta=8}{\renewcommand{\DO}{##1}}{}
		\ifthenelse{\thecounta=9}{\renewcommand{\PF}{##1}}{}
		\ifthenelse{\thecounta=10}{\renewcommand{\PE}{##1}}{}
		\ifthenelse{\thecounta=11}{\renewcommand{\rho}{##1}}{}
		\ifthenelse{\thecounta=12}{\renewcommand{\config}{##1}}{}
		}
	\dolistloop{#1}
	\dolistloop{#2}
	\dolistloop{#3}
	\dolistloop{#4}
	
% Calcul de la position de la case

	\ifthenelse{\colonne>2}{\def\px{} \pgfmathparse{(\colonne-1)*\le+\lanthsepx} \let\px\pgfmathresult}
		{\def\px{} \pgfmathparse{(\colonne-1)*\le} \let\px\pgfmathresult}
	\ifthenelse{\periode>7}{\def\py{} \pgfmathparse{(9-\periode)*\he} \let\py\pgfmathresult}
		{\def\py{} \pgfmathparse{(9-\periode)*\he+\lanthsepy} \let\py\pgfmathresult}
	
% Ecriture des différentes données de l'élément
	
	\dessintableaustandard
	
% Dessin de l'exemple

	\ifthenelse{\Z=3}{
		\renewcommand{\px}{9} \renewcommand{\py}{15}
		\dessintableaustandard
		\draw node(legsymbole)[node distance=1cm, left=of symbole, font={\sffamily \tiny}, align=right, scale=1.2]{symbole (en blanc : élément artificiel)} ;
		\draw [->] (legsymbole) -- (symbole) ;
		\draw node(legZ)[node distance=1cm, left=of Z, font={\sffamily \tiny}, align=right, scale=1.2]{numéro atomique (Z)} ;
		\draw [->] (legZ) -- (Z) ;
		\draw node(legnom)[node distance=1cm, right=of nom, font={\sffamily \tiny}, align=left, scale=1.2]{nom de l'élément} ;
		\draw [->] (legnom) -- (nom) ;
		\draw node(legmasse)[node distance=1cm, left=of masse, font={\sffamily \tiny}, align=right, scale=1.2]{masse atomique moyenne [u]} ;
		\draw [->] (legmasse) -- (masse) ;
		\draw node(legEN)[node distance=1cm, right=of EN, font={\sffamily \tiny}, align=left, scale=1.2]{électronégativité (selon Pauling)} ;
		\draw [->] (legEN) -- (EN) ;
		\draw node(legDO)[node distance=1cm, right=of DO, font={\sffamily \tiny}, align=left, scale=1.2]{états d'oxydation (en gras : le plus fréquent)} ;
		\draw [->] (legDO) -- (DO) ;
		\draw node(legPF)[node distance=1cm, left=of PF, font={\sffamily \tiny}, align=left, scale=1.2]{température de fusion [°C]} ;
		\draw [->] (legPF) -- (PF) ;
		\draw node(legPE)[node distance=0.1cm, below left=of PE, font={\sffamily \tiny}, align=left, scale=1.2]{température d'ébullition [°C]} ;
		\draw [->] (legPE) -- (PE) ;
		\draw node(legrho)[node distance=1cm, right=of rho, font={\sffamily \tiny}, align=left, scale=1.2]{masse volumique [g/cm\up{3}] (* pour les gaz, en [g/l])} ;
		\draw [->] (legrho) -- (rho) ;
		\draw node(legconfig)[node distance=0.1cm, below right=of config, font={\sffamily \tiny}, align=left, scale=1.2]{configuration électronique} ;
		\draw [->] (legconfig) -- (config) ;
		}{}

%Dessin des numéros de colonne et de ligne

	\def\sepnum{0.03}
	\draw (\le*0.5,\he*9+\lanthsepy+\sepnum) node[above,font=\scriptsize]{I} ;
	\draw (\le*1.5,\he*8+\lanthsepy+\sepnum) node[above,font=\scriptsize]{II} ;
	\draw (\le*2.5+\lanthsepx,\he*6+\lanthsepy+\sepnum) node[above,font=\scriptsize]{III A} ;
	\draw (\le*3.5+\lanthsepx,\he*6+\lanthsepy+\sepnum) node[above,font=\scriptsize]{IV A} ;
	\draw (\le*4.5+\lanthsepx,\he*6+\lanthsepy+\sepnum) node[above,font=\scriptsize]{V A} ;
	\draw (\le*5.5+\lanthsepx,\he*6+\lanthsepy+\sepnum) node[above,font=\scriptsize]{VI A} ;
	\draw (\le*6.5+\lanthsepx,\he*6+\lanthsepy+\sepnum) node[above,font=\scriptsize]{VII A} ;
	\draw (\le*8.5+\lanthsepx,\he*6+\lanthsepy+\sepnum) node[above,font=\scriptsize]{VIII A} ;
	\draw (\le*10.5+\lanthsepx,\he*6+\lanthsepy+\sepnum) node[above,font=\scriptsize]{I A} ;
	\draw (\le*11.5+\lanthsepx,\he*6+\lanthsepy+\sepnum) node[above,font=\scriptsize]{II A} ;
	\draw (\le*12.5+\lanthsepx,\he*8+\lanthsepy+\sepnum) node[above,font=\scriptsize]{III} ;
	\draw (\le*13.5+\lanthsepx,\he*8+\lanthsepy+\sepnum) node[above,font=\scriptsize]{IV} ;
	\draw (\le*14.5+\lanthsepx,\he*8+\lanthsepy+\sepnum) node[above,font=\scriptsize]{V} ;
	\draw (\le*15.5+\lanthsepx,\he*8+\lanthsepy+\sepnum) node[above,font=\scriptsize]{VI} ;
	\draw (\le*16.5+\lanthsepx,\he*8+\lanthsepy+\sepnum) node[above,font=\scriptsize]{VII} ;
	\draw (\le*17.5+\lanthsepx,\he*9+\lanthsepy+\sepnum) node[above,font=\scriptsize]{VIII} ;
	
	\draw (-\sepnum,\he*8.5+\lanthsepy) node[left,font=\scriptsize]{1} ;
	\draw (-\sepnum,\he*7.5+\lanthsepy) node[left,font=\scriptsize]{2} ;
	\draw (-\sepnum,\he*6.5+\lanthsepy) node[left,font=\scriptsize]{3} ;
	\draw (-\sepnum,\he*5.5+\lanthsepy) node[left,font=\scriptsize]{4} ;
	\draw (-\sepnum,\he*4.5+\lanthsepy) node[left,font=\scriptsize]{5} ;
	\draw (-\sepnum,\he*3.5+\lanthsepy) node[left,font=\scriptsize]{6} ;
	\draw (-\sepnum,\he*2.5+\lanthsepy) node[left,font=\scriptsize]{7} ;
	
% lanthanides et actinides
	
	\draw (2*\le,4*\he+\lanthsepy) -- (2*\le+\lanthsepx,4*\he+\lanthsepy) ;
	\draw (2*\le,3*\he+\lanthsepy) -- (2*\le+\lanthsepx,3*\he+\lanthsepy) ;
	\draw (2*\le,2*\he+\lanthsepy) -- (2*\le+\lanthsepx,2*\he+\lanthsepy) ;
	\draw (2*\le+\lanthsepx/2,3.5*\he+\lanthsepy) node[font=\scriptsize]{$\star$} ;
	\draw (2*\le+\lanthsepx/2,2.5*\he+\lanthsepy) node[font=\scriptsize]{$\star$ \\ $\star$} ;
	\draw (2*\le+\lanthsepx/2,1.5*\he) node[font=\scriptsize]{$\star$} ;
	\draw (2*\le+\lanthsepx/2,0.5*\he) node[font=\scriptsize]{$\star$\linebreak$\star$} ;
	
	
% Dessin de l'escalier métaux/non métaux
	
	\draw [thick] (0,\he*8+\lanthsepy) -- (2*\le,\he*8+\lanthsepy) ;
	\draw [thick] (12*\le+\lanthsepx,\he*8+\lanthsepy) -- (12*\le+\lanthsepx,\he*7+\lanthsepy) -- (13*\le+\lanthsepx,\he*7+\lanthsepy) -- (13*\le+\lanthsepx,\he*6+\lanthsepy) -- (14*\le+\lanthsepx,\he*6+\lanthsepy) -- (14*\le+\lanthsepx,\he*5+\lanthsepy) -- (15*\le+\lanthsepx,\he*5+\lanthsepy) -- (15*\le+\lanthsepx,\he*4+\lanthsepy) -- (16*\le+\lanthsepx,\he*4+\lanthsepy) -- (16*\le+\lanthsepx,\he*3+\lanthsepy) ;
	
	}
	
	
\newcommand{\dessintableaustandard}{

% Dessin de la case

	\draw (\px,\py) -- (\px+\le,\py) -- (\px+\le,\py+\he) -- (\px,\py+\he) -- (\px,\py) ;
	\draw (\px,\py+\lc) -- (\px+\le,\py+\lc) ;
	
% Ecriture des différentes valeurs
	
	\draw (\px+\le/2,\py+0.68*\he) node(symbole)[font={\bf \Large}, scale=0.9]{\symbole} ;
	\draw (\px-0.05,\py+0.67*\he-0.45) node(Z)[right,font={\bf}, scale=0.92]{\Z} ;
	\draw node(nom)[node distance=0.76 cm, below of=symbole, font={\sffamily \tiny}]{\nom} ;
	\draw (\px-0.06,\py+0.7*\he+0.4) node(masse)[right,font={\sffamily \scriptsize}, scale=0.85]{\masse} ;
	\draw (\px+\le+0.05,\py+0.67*\he-0.46) node(EN)[left, font={\sffamily \scriptsize}, scale=0.9]{\EN} ;
	\draw (\px+\le+0.04,\py+\he+0.02) node(DO)[left, font={\sffamily \tiny}, scale=0.8 ,align=right,below left]{\DO} ;
	\draw (\px-0.05,\py+\lc-0.12) node(PF)[right,font={\sffamily \tiny}, scale=0.77]{\PF} ;
	\draw (\px-0.05,\py+\lc-0.31) node(PE)[right,font={\sffamily \tiny}, scale=0.77]{\PE} ;
	\draw (\px+\le+0.05,\py+\lc-0.12) node(rho)[left, font={\sffamily \tiny}, scale=0.77]{\rho} ;

% Choix de la taille et écriture de la configuration électronique

	\def\configscale{0.74}
	\ifthenelse{\Z>30 \AND \Z<37}{\renewcommand{\configscale}{0.62}}{}
	\ifthenelse{\Z>48 \AND \Z<55}{\renewcommand{\configscale}{0.62}}{}
	\ifthenelse{\Z=58 \OR \Z=64}{\renewcommand{\configscale}{0.62}}{}
	\ifthenelse{\Z>70 \AND \Z<81}{\renewcommand{\configscale}{0.62}}{}
	\ifthenelse{\Z>80 \AND \Z<87}{\renewcommand{\configscale}{0.52}}{}
	\ifthenelse{\Z>90 \AND \Z<94}{\renewcommand{\configscale}{0.62}}{}
	\ifthenelse{\Z>30 \AND \Z<37}{\renewcommand{\configscale}{0.62}}{}
	\ifthenelse{\Z=96}{\renewcommand{\configscale}{0.62}}{}
	\draw (\px+\le+0.01,\py+\lc-0.31) node(config)[left, font={\sffamily \tiny}, scale=\configscale]{$\mathsf{\config}$} ;
}



% Commande pour lire une liste séparée par des points-virgule

\DeclareListParser*{\nicoparse}{;}

% Un compteur pour trier les données de l'élément, utilisé dans la commande \tableaustandard

\newcounter{counta}

% L'environnement élément, avec appel de la commande \tableaustandard pour dessiner le tableau. C'est cette commande qu'il faut changer si on veut faire un tableau différent.

\newenvironment{element}[4]{
	\nicoparse{\listadd\Zsymbolenom}{#1}
	\nicoparse{\listadd\colonneperiode}{#2}
	\nicoparse{\listadd\masseENDO}{#3}
	\nicoparse{\listadd\PFPErhoconfig}{#4}
	\tableaustandard{\Zsymbolenom}{\colonneperiode}{\masseENDO}{\PFPErhoconfig} 
	}



% Sélection de la police de caractères :

\renewcommand{\familydefault}{\sfdefault}
\renewcommand{\sfdefault}{pag}

% Le fichier element contient les informations du tableau périodique.

\pagestyle{empty}
\begin{landscape}
\begin{tikzpicture}
\input{elements}
\end{tikzpicture}
\end{landscape}


\end{document}
