« home

Potential Triangle

physicsthermodynamicsstatistical physicsentropycetztikz

Potential Triangle

  Download

PNGPDFSVG

  Code

  LaTeX

potential-triangle.tex (22 lines)

\documentclass[tikz]{standalone}

\usetikzlibrary{mindmap}

\begin{document}
\begin{tikzpicture}[align=center]

  \node (enthalpy) at (2, 0) [concept, concept color=orange] {Enthalpy $H$};

  \node (free-energy) at (-2, 0) [concept, concept color=teal] {Free\\Energy $G$};

  \node (entropy) at (0, -3) [concept, concept color=blue!60!black, text=white] {Entropy $S$};

  \path (enthalpy) to[circle connection bar switch color=from (orange) to (teal)] node[above=1ex, font=\small] {reactivity} (free-energy);

  \path (entropy) to[circle connection bar switch color=from (blue!60!black) to (orange)] node[right=1ex, font=\small] {heat} (enthalpy);

  \path (free-energy) to[circle connection bar switch color=from (teal) to (blue!60!black)] node[below left=0, font=\small] {disorder} (entropy);

\end{tikzpicture}
\end{document}

  Typst

potential-triangle.typ (42 lines)

#import "@preview/cetz:0.3.4": canvas, draw
#import draw: circle, content, line

#set page(width: auto, height: auto, margin: 8pt)
#set text(size: 10pt)

#canvas({
  let node_radius = 0.8
  let colors = (
    "enthalpy": rgb("#FFA500"),
    "free-energy": rgb("#008080"),
    "entropy": rgb("#00008B").darken(40%),
  )

  for (name, label, pos) in (
    ("enthalpy", [$H$\ Enthalpy], (2, 0)),
    ("free-energy", [$G$\ Free\ Energy], (-2, 0)),
    ("entropy", [$S$\ Entropy], (0, -3)),
  ) {
    let fill = colors.at(name)
    circle(pos, radius: node_radius, fill: fill, name: name, stroke: none)
    content(pos, align(center, text(fill: white, label)))
  }

  for (start, end, name, dir) in (
    ("enthalpy", "free-energy", "h-g", rtl),
    ("entropy", "enthalpy", "s-h", btt),
    ("free-energy", "entropy", "g-s", ltr),
  ) {
    let stroke = 3pt + gradient.linear(dir: dir, colors.at(start), colors.at(end))
    line(start, end, stroke: stroke, name: name)
  }

  for (name, label, anchor) in (
    ("h-g", [reactivity], "south"),
    ("s-h", [heat], "west"),
    ("g-s", [disorder], "east"),
  ) {
    content(name, align(center, label), anchor: anchor, padding: 4pt)
  }
})