
Итак, я хочу создать свои химические формуляры в TikZ, и вот что у меня сейчас есть:
Моя проблема в том, что я хочу изогнуть желтую линию под молекулой, чтобы сделать текст более заметным и не разрезать молекулу посередине. Я уже прочитал руководство chemfig и нашел Curved bonds, но я не совсем понимаю синтаксис и как добавить еще одну контрольную точку.
Другая моя проблема заключается в том, что я хочу добавить плавающий текст с плавающей стрелкой, указывающей на определенный атом.
В конце я хочу, чтобы это выглядело примерно так: (я добавил еще одну оранжевую и фиолетовую линию, чтобы показать, какие линии мне нужны)
Вот мой код:
\documentclass[border=3mm]{standalone}
\usepackage{chemfig}
\setchemfig{debug=false}
\setchemfig{scheme debug=false}
\begin{document}
\schemestart
\subscheme{
\chemfig{([::+90]C(-[::+135]H)(-[::+225]H)=C(-[::+45]H)(-[::+315]H))}
}
\+
\chemfig{\charge{90=\|,180=\|,270=\|}{Br}-\charge{0=\|,90=\|,270=\|}{Br}}
\arrow(.east--.west){<=>}
\subscheme{
\chemfig{([::+90]C(-[::+135]H)(-[::+225]H)=[@{a}]C(-[::+45]H)(-[::+315]H))}
}
\chemfig{@{b}\charge{90=\|,180=\|,270=\|,45[red,anchor=180+\chargeangle]=$\delta^+$}{Br}-[@{c}]@{d}\charge{0=\|,90=\|,270=\|,45[blue,anchor=180+\chargeangle]=$\delta^-$}{Br}}
\arrow(@c2--)[-90]
\chemfig{([::-90]C(-[::+90]H)(-[::+180]H)(-[::+270]\charge{90=\|,180=\|,270=\|}{Br})-C(-[::+0]H)(-[::+90]\charge{0=\|,90=\|,270=\|}{Br})(-[::+270]H))}
\arrow(@c4--){<=>}[-90]
\hflipnext
\chemfig{\charge{180[red,circle,anchor=180+\chargeangle]=$\oplus$}{Br}(-[1,,,,dash pattern=on 2pt off 2pt]@{e}C?(-[::+0]H)(-[::+90]H))(-[7,,,,dash pattern=on 2pt off 2pt]C?(-[::+0]H)(-[::+270]H))}
\quad
\quad
\chemfig{@{f}\charge{0=\|,90=\|,180=\|,270=\|,45[blue,circle,anchor=180+\chargeangle]=$\ominus$}{Br}}
\arrow(@[email protected]){<=>}
\schemestop
\chemmove{
\draw[red,shorten >=4pt] (a).. controls +(0:1cm) and +(225:1cm).. (b);
\draw[red,shorten >=4pt] (c).. controls +(270:1cm) and +(270:1cm).. (d);
\draw[orange,shorten >=4pt] (f).. controls +(255:1cm) and +(225:1cm).. node[below] {Rueckseitenangriff} (e);
}
\end{document}
Буду признателен за помощь, спасибо!
решение1
Вот два варианта, и есть как минимум еще один.
chemfig
построен на Tikz
, поэтому вы также можете использовать Tikz-команды. Что вы и сделали,
- давая определенные координаты имена
(a) .. (f)
- предоставление
\draw
путей
Использование controls
— это способ задания кривых Безье в Tikz. Мне кажется, что параметры трудно себе представить, хотя, если вы можете, это идеальный способ создания причудливых кривых.
Однако я предлагаю две альтернативы:
% ~~~ straight forward replacement ~~~~~~~~~~~~~
\draw[orange,shorten >=4pt]
(f) -- ++(0,-1.7)
-- node[pos=.5,below]{Rückseitenangriff} ++(-3.5,0)
-- (e);
\draw
из (е) -- (д)- но прежде чем закончить этот путь
;
- поместите две новые координаты (
++
) для нисходящих и боковых шагов, описанных как относительные шаги - поместите a
node
в нижний новый путь (обратите внимание на отсутствующие\
) // используйтеpos=
для дальнейшей тонкой настройки - никаких причудливых изгибов, просто рисуйте, как указано
% ~~~ an alternative ~~~~~~~~~~~~~~~~~~~~~~~
\draw[green,shorten >=4pt,rounded corners]
(f.230) -- ++(0,-1.5)
-- ++(-3.2,0)
-- (e);
- та же идея
- пропустили
node
, так как рисунок по какой-то причине не расширяется - использованный
rounded corners
вариант изTikz
- сместили начальную точку немного влево, используя полярные координаты
(f.230)
Вы также можете заменить все или некоторые операторы --
на to[in=,out=]
, например:
(f.230) to[out=300,in=45] ++(0,-1.5) ...
начать с поклона (надеюсь) вправо.
Как вы также можете видеть, я добавил языковой пакет babel
для удобства.
\documentclass[border=3mm]{standalone}
\usepackage[ngerman]{babel} % <<<
\usepackage{chemfig}
%\setchemfig{debug=false}
%\setchemfig{scheme debug=false}
\begin{document}
\schemestart
\subscheme{
\chemfig{([::+90]C(-[::+135]H)(-[::+225]H)=C(-[::+45]H)(-[::+315]H))}
}
\+
\chemfig{\charge{90=\|,180=\|,270=\|}{Br}-\charge{0=\|,90=\|,270=\|}{Br}}
\arrow(.east--.west){<=>}
\subscheme{
\chemfig{([::+90]C(-[::+135]H)(-[::+225]H)=[@{a}]C(-[::+45]H)(-[::+315]H))}
}
\chemfig{@{b}\charge{90=\|,180=\|,270=\|,45[red,anchor=180+\chargeangle]=$\delta^+$}{Br}-[@{c}]@{d}\charge{0=\|,90=\|,270=\|,45[blue,anchor=180+\chargeangle]=$\delta^-$}{Br}}
\arrow(@c2--)[-90]
\chemfig{([::-90]C(-[::+90]H)(-[::+180]H)(-[::+270]\charge{90=\|,180=\|,270=\|}{Br})-C(-[::+0]H)(-[::+90]\charge{0=\|,90=\|,270=\|}{Br})(-[::+270]H))}
\arrow(@c4--){<=>}[-90]
\hflipnext
\chemfig{\charge{180[red,circle,anchor=180+\chargeangle]=$\oplus$}{Br}(-[1,,,,dash pattern=on 2pt off 2pt]@{e}C?(-[::+0]H)(-[::+90]H))(-[7,,,,dash pattern=on 2pt off 2pt]C?(-[::+0]H)(-[::+270]H))}
\quad
\quad
\chemfig{@{f}\charge{0=\|,90=\|,180=\|,270=\|,45[blue,circle,anchor=180+\chargeangle]=$\ominus$}{Br}}
\arrow(@[email protected]){<=>}
\schemestop
\chemmove{
\draw[red,shorten >=4pt] (a).. controls +(0:1cm) and +(225:1cm).. (b);
\draw[red,shorten >=4pt] (c).. controls +(270:1cm) and +(270:1cm).. (d);
% \draw[orange,shorten >=4pt] (f).. controls +(255:1cm) and +(225:1cm).. node[below] {Rueckseitenangriff} (e);
% ~~~ straight forward replacement ~~~~~~~~~~~~~
\draw[orange,shorten >=4pt]
(f) -- ++(0,-1.7)
-- node[pos=.5,below]{Rückseitenangriff} ++(-3.5,0)
-- (e);
% ~~~ an alternative ~~~~~~~~~~~~~~~~~~~~~~~
\draw[green,shorten >=4pt,rounded corners]
(f.230) -- ++(0,-1.5)
-- ++(-3.2,0)
-- (e);
}
\end{document}
решение2
Другой подход
\documentclass[border={5mm 12mm 5mm 5mm}]{standalone}
\usepackage{chemfig}
\tikzset{mybond/.style={dash pattern=on 2pt off 2pt}}
\begin{document}
\schemestart
\chemfig{C(-[5]H)(-[7]H)=[2]C(-[1]H)(-[3]H)}
\arrow{0}[,0]
\+
\chemfig{\charge{90=\|,180=\|,270=\|}{Br}-\charge{0=\|,90=\|,270=\|}{Br}}
\arrow{<=>}
\chemfig{C(-[5]H)(-[7]H)=[@{a}2]C(-[1]H)(-[3]H)}
\arrow{0}[,0.2]
\chemfig{@{b}\charge{90=\|,180=\|,270=\|,45[red,anchor=180+\chargeangle]=$\delta^+$}{Br}-[@{c}]@{d}\charge{0=\|,90=\|,270=\|,45[blue,anchor=180+\chargeangle]=$\delta^-$}{Br}}
\arrow(@c3--){<=>}[-90]
\arrow(@c1--)[-90]
\chemfig{H-[2]C(-\charge{0=\|,90=\|,270=\|}{Br})(-[4]H)-[2]C(-H)(-[4]\charge{90=\|,180=\|,270=\|}{Br})-[2]H}
\arrow{<=>}[,2.03]
\chemfig{C?[db1](-[5]H)(-[7]H)(-[2,0.75,,,draw=none]-[,0.8,,,draw=none]@{g}\charge{180[red,circle,anchor=180+\chargeangle]=$\oplus$}{Br}?[db1,,mybond]?[db2]-[,,,,draw=none]@{f}\charge{0=\|,90=\|,180=\|,270=\|,45[blue,circle,anchor=180+\chargeangle]=$\ominus$}{Br})-[2,1.5]@{e}C?[db2,,mybond](-[1]H)(-[3]H)}
\schemestop
\chemmove{%
\draw[red, shorten >=4pt] (a) .. controls +(0:8mm) and +(225:12mm).. (b);
\draw[red, shorten >=4pt] (c) .. controls +(270:1cm) and +(270:1cm).. (d);
\draw[orange, shorten >=4pt, shorten <=4pt] (f) .. controls +(255:3.5cm) and +(225:4cm).. (e) node[pos=0.35, below=1pt] {Rueckseitenangriff};
\draw[<-, shorten <=4pt, blue] (g) -- ++(60:1) node[above] {Text};
}
\end{document}