[Tex/LaTex] Periodic table tikz

pgfplotstablestikz-pgf

Anybody knows how to reproduce this table in latex?

enter image description here

Thanks in advance for your time and advice.

Best Answer

Note that in my view I ought not answer do-it-for-mes. Even if somebody else already has.

This turns Enrico Maria De Angelis's code into a pic, element and then uses a couple of loops to mis-construct the first three-and-a-bit rows of the periodic table.

A less chemically blasphemous version was provided in a link in the comments. However, that version uses deprecated code.

\documentclass[tikz,border=10pt]{standalone}
\usetikzlibrary{positioning}
\newcounter{atomicnumber}
\setcounter{atomicnumber}{0}
\tikzset{%
  element/.pic={%
    \tikzset{%
      elements/.cd,
      #1,
      /tikz/.cd,
    }%
    \stepcounter{atomicnumber}%
    % addaswyd o gôd Enrico Maria De Angelis:
    % https://tex.stackexchange.com/a/339005/
    \node (\elementsymbol) [font=\huge\elementfont, text=\elementtext, inner sep=.5*\elementsep, anchor=mid, fill=\elementfill, rounded corners=2pt, minimum size=\elementsize] {\strut\elementsymbol};
    \node [font=\tiny\elementfont, text=\elementtext, inner sep=2pt, anchor=north west] at (\elementsymbol.north west) {\theatomicnumber};
    \node [font=\tiny\elementfont, text=\elementtext, inner sep=2pt, anchor=south] at (\elementsymbol.south) {\elementname};
  },
  elements/.search also={/tikz},
  elements/.cd,
  name/.store in=\elementname,
  font/.store in=\elementfont,
  text/.store in=\elementtext,
  fill/.store in=\elementfill,
  symbol/.store in=\elementsymbol,
  size/.store in=\elementsize,
  sep/.store in=\elementsep,
  name=Full Name,
  font=\sffamily,
  text=white,
  fill=black,
  symbol=Sy,
  size=35pt,
  sep=2.5pt,
}
\begin{document}
\begin{tikzpicture}[node distance=\elementsize]
  \coordinate (o);
  \foreach \k/\m [count=\elementrow, evaluate=\elementrow as \elementshift using {-\elementrow*(\elementsize+\elementsep)}] in {%
    magenta/{H/Hydrogen,He/Helium},
    cyan/{%
      Li/Lithium,Be/Beryllium,B/Boron,C/Carbon,Ny/Nitrogen,
      O/Oxygen,F/Fluorine,Ne/Neon%
    },
    blue!50!cyan/{%
      Na/Sodium,Mg/Magnesium,Al/Aluminium,Si/Silicon,P/Phosphorous,
      S/Sulphur,Cl/Chlorine,Ar/Argon%
    },
    blue/{K/Potassium,Ca/Calcium}%
  }{%
    \coordinate (o\elementrow) at (0,\elementshift pt);
    \begin{scope}
      \foreach \i/\j [remember=\i as \ilast (initially o\elementrow)] in \m
      \pic [right=\elementsize+\elementsep of \ilast.mid] {element={name=\j, symbol=\i, fill=\k}};
    \end{scope}
  }
\end{tikzpicture}
\end{document}

chemical blasphemy

Related Question