I saw a question on X/Twitter by @ritsudesu_yoro about drawing arrows and adding labels to chemical equation. @RARARARAICHUUU recommended doing it in TikZ, and I fully agree with this suggestion. So I wrote quickly some TikZ code to demonstrate how such drawings can be done.
This is the result:
And this is the code:
\documentclass[tikz,border=10pt]{standalone} \usepackage{lmodern} \usepackage{chemformula} \usetikzlibrary{quotes,positioning,tikzmark} \renewcommand*{\familydefault}{\sfdefault} \newcommand*{\plus}{\texttt{+}} \newcommand*{\minus}{\texttt{-}} \newcommand*{\down}{3mm} \begin{document} \begin{tikzpicture}[remember picture, node distance = 1.8cm, every edge/.append style = {->, -stealth}, every edge quotes/.append style = {font = \fontsize{4}{5}\selectfont}, small/.style = {font = \fontsize{3}{4}\selectfont}, above] \node (O2) {\ch{\tikzmarknode{left}{O}2}}; \node[right of = O2] (H2O2) {\ch{H2\tikzmarknode{middle}{O}2}}; \node[right of = H2O2] (H2O) {\ch{H2\tikzmarknode{right}{O}}}; \node[small] at (left.north) {0}; \node[small] at (right.north) {\minus II}; \node[small] at (middle.north) {\minus I}; \coordinate[below = 2mm of left] (1); \coordinate[below = 2mm of right] (2); \coordinate[below = \down of 2] (3); \draw (O2.east) edge["{\plus 0,68\,V}"] (H2O2.west) (H2O2.east) edge["{\plus 1,78\,V}"] (H2O.west) (1) --++(0,-\down) to["{\plus 1,23\,V}" below] (3) (3) edge (2); \end{tikzpicture} \end{document}
You can click on “Run LaTeX here” to see the online compiled LaTeX output. You can zoom it to better see it.
How does it work? I
- loaded the lmodern package so I can use the Latin Modern font to get very small font sizes for the labels
- used \fontsize and \selectfont to get the labels in size smaller than \tiny
- used the chemformula package for writing chemical formulas in upright font shape
- chose \sfdefault to get sans serif fonts
- defined plus and minus symbols in typewriter font, so they are smaller than normal plus and minus symbols
- defined styles when things for repeated use
- used the tikzmark library to mark positions within chemical formulas, specifically the O for oxygen
- used relative positioning
- defined coordinates 1, 2, 3 based on tikzmark coordinates for later drawin the big arrow
- wrote a single \draw command to draw all arrows between the nodes
- used edges with labels using the quotes library syntax
- put the label text in braces {…} when there was a comma in the label, to protect from parsing
Learning TikZ is challenging but really rewarding. A good book can help learning the basics quickly, such as TikZによるLaTeXグラフィックス.