使用 TikZ 制作 Jablonsky 图

使用 TikZ 制作 Jablonsky 图

解释分子的旋转振动电子能级之间复杂跃迁链的有力工具是 Jablonsky 图。​​以下代码用于TikZ绘制下图:

在此处输入图片描述

但为了将图表中的信息与描述过程的方程式联系起来,使用强烈的颜色非常有帮助,如下图所示:

在此处输入图片描述

我花了一段时间尝试使箭头看起来像第二个例子中的那样,但没有成功,甚至,如果可以模仿箭头组的不透明度以将注意力集中在特定过程上,那就太好了。

该图形将嵌入到投影幻灯片中。

任何建议都将非常感谢。

这是一个最小的工作示例:

% Energy levels of a fluor molecule
% Author: David Fokkema
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{calc,arrows,decorations.pathmorphing,intersections}
\usepackage[font={small,sf},labelfont={bf},labelsep=endash]{caption}
\usepackage{sansmath}
\begin{document}
\begin{center}
  \sansmath
  \begin{tikzpicture}[
    font=\sffamily,
    level/.style={black,thick},
    sublevel/.style={black,densely dashed},
    ionization/.style={black,dashed},
    transition/.style={black,->,>=stealth',shorten >=1pt},
    radiative/.style={transition,decorate,decoration={snake,amplitude=1.5}},
    indirectradiative/.style={radiative,densely dashed},
    nonradiative/.style={transition,dashed},
  ]
  \coordinate (sublevel) at (0, 8pt);

  % Singlet levels
  \coordinate (S00) at (0, -1);
  \coordinate (S01) at ($(S00) + (sublevel)$);
  \coordinate (S02) at ($(S00) + 2*(sublevel)$);
  \coordinate (S03) at ($(S00) + 3*(sublevel)$);
  \coordinate (S10) at (0, 3);
  \coordinate (S11) at ($(S10) + (sublevel)$);
  \coordinate (S12) at ($(S10) + 2*(sublevel)$);
  \coordinate (S13) at ($(S10) + 3*(sublevel)$);
  \coordinate (S20) at (0, 4.5);
  \coordinate (S21) at ($(S20) + (sublevel)$);
  \coordinate (S22) at ($(S20) + 2*(sublevel)$);
  \coordinate (S30) at (0, 6);

  % Draw main levels
  \foreach \level/\text in {00/0, 10/1, 20/2, 30/3}
    \draw[level] (S\level) node[left=20pt] {$S_\text$} node[left]
      {\footnotesize $S_{\level}$} -- +(4, 0);

  % Draw sublevels
  \foreach \sublevel in {01,02,03,11,12,13,21,22}
    \draw[sublevel] (S\sublevel) node[left]
      {\footnotesize $S_{\sublevel}$} -- +(4, 0);

  \node at (2, 6.5) {Singlet};

  % Triplet levels
  \coordinate (T00) at (5, 2);
  \coordinate (T01) at ($(T00) + (sublevel)$);
  \coordinate (T02) at ($(T00) + 2*(sublevel)$);
  \coordinate (T03) at ($(T00) + 3*(sublevel)$);
  \coordinate (T10) at (5, 3.5);
  \coordinate (T11) at ($(T10) + (sublevel)$);
  \coordinate (T12) at ($(T10) + 2*(sublevel)$);
  \coordinate (T13) at ($(T10) + 3*(sublevel)$);
  \coordinate (T20) at (5, 5);
  \coordinate (T21) at ($(T20) + (sublevel)$);

  % Draw main levels
  \foreach \level/\text in {00/0, 10/1, 20/2}
    \draw[level] (T\level) -- +(2, 0)
      node[right=20pt] {$T_\text$}
      node[right] {\footnotesize $T_{\level}$};

  % Draw sublevels
  \foreach \sublevel in {01,02,11,12,13,21}
    \draw[sublevel] (T\sublevel) -- +(2, 0) node[right]
      {\footnotesize $T_{\sublevel}$};

  \node at (6, 6.5) {Triplet};

  % Ionization level
  \draw[ionization] (0, 7.5) node[left=20pt] {$I_\pi$} -- +(7, 0);

  % Excitations
  \foreach \i/\from/\to in {1/S00/S10, 2/S00/S11, 3/S00/S12, 4/S00/S13,
                            5/S00/S20, 6/S00/S21, 7/S00/S22, 8/S00/S30}
    \draw[transition] ([xshift=\i*5pt] \from) -- ([xshift=\i*5pt] \to);

  % Radiative decay (fluorescence)
  \foreach \i/\from/\to in {1/S10/S00, 2/S10/S01, 3/S10/S02, 4/S10/S03}
    \draw[radiative] ([xshift=(\i+9)*5pt] \from) --
      ([xshift=(\i+9)*5pt] \to);

  % Nonradiative decay (internal degradation)
  \foreach \i/\from/\to in {1/S11/S10, 2/S12/S10, 3/S13/S10, 4/S20/S10,
                            5/S21/S10, 6/S22/S10, 7/S30/S10}
    \draw[nonradiative] ([xshift=(\i+9)*5pt] \from) --
      ([xshift=(\i+9)*5pt] \to);

  % Radiative decay (phosphorescence)
  %
  % There is some magic going on to prevent an irritating optical effect.
  % If the (start) coordinate is taken to be simply (Tstart), the wiggly
  % lines start at the T00 level.  Because of their differing lengths
  % however, the wiggles start to form a distracting pattern.  Therefore,
  % the lines are extended a bit (-\i*5pt) to show a pleasing effect.  They
  % are clipped so the transition still starts at T00.  If you want to
  % observe the optical effect, include this line at the correct location:
  %   \coordinate (start) at (Tstart);
  \begin{scope}
    \clip (S00) -- +(7, 0) |- (T00) -| (S00);
    \foreach \i/\level in {1/(S00), 2/(S01), 3/(S02), 4/(S03)} {
      \coordinate (Tstart) at ([xshift=\i*7pt] T00);
      \coordinate (end) at ($(Tstart) + (-135:4.5)$);
      \coordinate (start) at ($(Tstart)!-\i*5pt!(end)$);
      \path[name path=trans] (start) -- (end);
      \path[name path=ground] \level -- +(5, 0);
      \draw[indirectradiative,name intersections={of=trans and ground}]
        (start) -- (intersection-1);
    }
  \end{scope}

  % Labels (curious coordinates are due to manual placement adjustments)
  \node[left] at (5pt, 1.5) {\footnotesize Absorption};
  \node[right,align=center] at (13*5pt, 2cm - 5pt)
    {\footnotesize Fluorescence\\\footnotesize (fast)};
  \node[right,align=center] at (5cm + 5pt, 1cm - 5pt)
    {\footnotesize Phosphorescence\\\footnotesize (indirect, slow)};
  \node[right,fill=white,align=left] at ([xshift=12*5pt] S13)
    {\footnotesize Internal degradation};

  % Intersystem crossing
  \draw[nonradiative,name path=crossing] ($(S10) + (4, 0) - (5pt, 0)$) --
    ([xshift=5pt] T00);
  \coordinate (crosslabel) at (4.5, 3.1);
  \node[right,fill=white] at (crosslabel) {\footnotesize Intersystem crossing};
  \path[name path=arrow] (crosslabel) -- +(-145:1cm);
  \draw[->,>=stealth',shorten >=2pt,
    name intersections={of=crossing and arrow}]
    (crosslabel) -- (intersection-1);
  \end{tikzpicture}
  \captionof{figure}{Typical energy levels for $\pi$-orbitals of a fluor
    molecule. Spin singlet~($S$) and triplet~($T$) states are separated for
    clarity. The ionization level $I_\pi$ is shown at the top.  Excited states
    as well as vibrational sublevels (dashed horizontal lines) are shown. 
    Internal degradation is a non-radiative process, while fluorescence and
    phosphorescence are radiative decays.  The decay $T_0 \to S_0$, however,
    is indirect, by interactions with other molecules.}
\end{center}
\end{document}

答案1

这是让您开始使用的部分解决方案。此代码使用样式设置得非常好,您可以通过使用环境顶部的样式块进行大量调整tikzpicture。例如,如果您将其更改为:

  \begin{tikzpicture}[
    font=\sffamily,
    level/.style={black,thick},
    sublevel/.style={black,densely dashed},
    ionization/.style={black,dashed},
    allarrows/.style={very thick,->,>=stealth',shorten >=1pt},
    transition/.style={allarrows, yellow, >=Triangle},
    radiative/.style={allarrows,red, Triangle[blue]-Circle, decorate,decoration={snake,amplitude=1.5}},
    indirectradiative/.style={radiative,densely dashed},
    nonradiative/.style={allarrows,blue,dashed},
  ]

那么你的图片就变成:

在此处输入图片描述

蒂克兹手册非常全面。如果你仔细阅读,你应该能够找到该怎么做。如果你遇到困难,可以问一些更有针对性的问题。

以下是完整的 MWE:

\documentclass[border=5mm,tikz]{standalone}
\usepackage{tikz}
\usetikzlibrary{calc,arrows,arrows.meta,decorations.pathmorphing,intersections}
\usepackage[font={small,sf},labelfont={bf},labelsep=endash]{caption}
\usepackage{sansmath}
\begin{document}
  \begin{tikzpicture}[
    font=\sffamily,
    level/.style={black,thick},
    sublevel/.style={black,densely dashed},
    ionization/.style={black,dashed},
    allarrows/.style={very thick,->,>=stealth',shorten >=1pt},
    transition/.style={allarrows, yellow, >=Triangle},
    radiative/.style={allarrows,red, Triangle[blue]-Circle, decorate,decoration={snake,amplitude=1.5}},
    indirectradiative/.style={radiative,densely dashed},
    nonradiative/.style={allarrows,blue,dashed},
  ]
  \coordinate (sublevel) at (0, 8pt);

  % Singlet levels
  \coordinate (S00) at (0, -1);
  \coordinate (S01) at ($(S00) + (sublevel)$);
  \coordinate (S02) at ($(S00) + 2*(sublevel)$);
  \coordinate (S03) at ($(S00) + 3*(sublevel)$);
  \coordinate (S10) at (0, 3);
  \coordinate (S11) at ($(S10) + (sublevel)$);
  \coordinate (S12) at ($(S10) + 2*(sublevel)$);
  \coordinate (S13) at ($(S10) + 3*(sublevel)$);
  \coordinate (S20) at (0, 4.5);
  \coordinate (S21) at ($(S20) + (sublevel)$);
  \coordinate (S22) at ($(S20) + 2*(sublevel)$);
  \coordinate (S30) at (0, 6);

  % Draw main levels
  \foreach \level in {0, 1, 2} {
    \draw[fill=blue!20](S\level 0) rectangle ([xshift=114]S\level 1);
  }
  \foreach \level/\text in {00/0, 10/1, 20/2, 30/3} {
    \draw[level] (S\level) node[left=20pt] {$S_\text$} node[left]
      {\footnotesize $S_{\level}$} -- +(4, 0);
    }

  % Draw sublevels
  \foreach \sublevel in {01,02,03,11,12,13,21,22}
    \draw[sublevel] (S\sublevel) node[left]
      {\footnotesize $S_{\sublevel}$} -- +(4, 0);

  \node at (2, 6.5) {Singlet};

  % Triplet levels
  \coordinate (T00) at (5, 2);
  \coordinate (T01) at ($(T00) + (sublevel)$);
  \coordinate (T02) at ($(T00) + 2*(sublevel)$);
  \coordinate (T03) at ($(T00) + 3*(sublevel)$);
  \coordinate (T10) at (5, 3.5);
  \coordinate (T11) at ($(T10) + (sublevel)$);
  \coordinate (T12) at ($(T10) + 2*(sublevel)$);
  \coordinate (T13) at ($(T10) + 3*(sublevel)$);
  \coordinate (T20) at (5, 5);
  \coordinate (T21) at ($(T20) + (sublevel)$);

  % Draw main levels
  \foreach \level/\text in {00/0, 10/1, 20/2}
    \draw[level] (T\level) -- +(2, 0)
      node[right=20pt] {$T_\text$}
      node[right] {\footnotesize $T_{\level}$};

  % Draw sublevels
  \foreach \sublevel in {01,02,11,12,13,21}
    \draw[sublevel] (T\sublevel) -- +(2, 0) node[right]
      {\footnotesize $T_{\sublevel}$};

  \node at (6, 6.5) {Triplet};

  % Ionization level
  \draw[ionization] (0, 7.5) node[left=20pt] {$I_\pi$} -- +(7, 0);

  % Excitations
  \foreach \i/\from/\to in {1/S00/S10, 2/S00/S11, 3/S00/S12, 4/S00/S13,
                            5/S00/S20, 6/S00/S21, 7/S00/S22, 8/S00/S30}
    \draw[transition] ([xshift=\i*5pt] \from) -- ([xshift=\i*5pt] \to);

  % Radiative decay (fluorescence)
  \foreach \i/\from/\to in {1/S10/S00, 2/S10/S01, 3/S10/S02, 4/S10/S03}
    \draw[radiative] ([xshift=(\i+9)*5pt] \from) --
      ([xshift=(\i+9)*5pt] \to);

  % Nonradiative decay (internal degradation)
  \foreach \i/\from/\to in {1/S11/S10, 2/S12/S10, 3/S13/S10, 4/S20/S10,
                            5/S21/S10, 6/S22/S10, 7/S30/S10}
    \draw[nonradiative] ([xshift=(\i+9)*5pt] \from) --
      ([xshift=(\i+9)*5pt] \to);

  % Radiative decay (phosphorescence)
  %
  % There is some magic going on to prevent an irritating optical effect.
  % If the (start) coordinate is taken to be simply (Tstart), the wiggly
  % lines start at the T00 level.  Because of their differing lengths
  % however, the wiggles start to form a distracting pattern.  Therefore,
  % the lines are extended a bit (-\i*5pt) to show a pleasing effect.  They
  % are clipped so the transition still starts at T00.  If you want to
  % observe the optical effect, include this line at the correct location:
  %   \coordinate (start) at (Tstart);
  \begin{scope}
    \clip (S00) -- +(7, 0) |- (T00) -| (S00);
    \foreach \i/\level in {1/(S00), 2/(S01), 3/(S02), 4/(S03)} {
      \coordinate (Tstart) at ([xshift=\i*7pt] T00);
      \coordinate (end) at ($(Tstart) + (-135:4.5)$);
      \coordinate (start) at ($(Tstart)!-\i*5pt!(end)$);
      \path[name path=trans] (start) -- (end);
      \path[name path=ground] \level -- +(5, 0);
      \draw[indirectradiative,name intersections={of=trans and ground}]
        (start) -- (intersection-1);
    }
  \end{scope}

  % Labels (curious coordinates are due to manual placement adjustments)
  \node[left] at (5pt, 1.5) {\footnotesize Absorption};
  \node[right,align=center] at (13*5pt, 2cm - 5pt)
    {\footnotesize Fluorescence\\\footnotesize (fast)};
  \node[right,align=center] at (5cm + 5pt, 1cm - 5pt)
    {\footnotesize Phosphorescence\\\footnotesize (indirect, slow)};
  \node[right,fill=white,align=left] at ([xshift=12*5pt] S13)
    {\footnotesize Internal degradation};

  % Intersystem crossing
  \draw[nonradiative,name path=crossing] ($(S10) + (4, 0) - (5pt, 0)$) --
    ([xshift=5pt] T00);
  \coordinate (crosslabel) at (4.5, 3.1);
  \node[right,fill=white] at (crosslabel) {\footnotesize Intersystem crossing};
  \path[name path=arrow] (crosslabel) -- +(-145:1cm);
  \draw[->,>=stealth',shorten >=2pt,
    name intersections={of=crossing and arrow}]
    (crosslabel) -- (intersection-1);
  \end{tikzpicture}
\end{document}

相关内容