Como posso curvar a linha em torno de uma molécula no chemfig e adicionar uma linha flutuante?

Como posso curvar a linha em torno de uma molécula no chemfig e adicionar uma linha flutuante?

Então, quero fazer meus formulários químicos no TikZ e tenho isso agora:

Meu problema é que quero curvar a linha amarela abaixo da molécula para tornar o texto mais visível e não cortar a molécula no meio. Já li o manual do chemfig e encontrei as ligações curvas, mas não entendo muito bem a sintaxe e como adicionar outro ponto de controle.

Meu outro problema é que quero adicionar um texto flutuante com uma seta flutuante que aponta para um átomo específico.

No final quero que fique assim: (adicionei outra linha laranja e roxa para mostrar que tipo de linhas eu quero)

Este é o meu código:

\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}

Ajuda seria apreciada, obrigado!

Responder1

Aqui estão duas opções e há pelo menos mais uma.

chemfigé construído em Tikz, então você também pode usar comandos Tikz. O que você fez por

  • dando nomes a certas coordenadas(a) .. (f)
  • fornecendo \drawcaminhos

Usar controlsé uma forma de especificar curvas de Bézier no Tikz. Acho os parâmetros difíceis de imaginar, mas se você puder, é uma maneira perfeita de criar curvas sofisticadas.

No entanto, forneço duas alternativas:

        % ~~~ straight forward replacement ~~~~~~~~~~~~~
        \draw[orange,shorten >=4pt] 
                    (f) -- ++(0,-1.7) 
                        -- node[pos=.5,below]{Rückseitenangriff} ++(-3.5,0)
                        --  (e);
  • \drawde (f) - (e)
  • mas antes de terminar este caminho;
  • coloque duas novas coordenadas ( ++) para os passos para baixo e para os lados, descritas como passos relativos
  • coloque nodea no novo caminho inferior (observe o que falta \) // use pos=para ajuste fino adicional
  • sem curvas extravagantes, apenas desenhe conforme especificado
        % ~~~ an alternative ~~~~~~~~~~~~~~~~~~~~~~~
        \draw[green,shorten >=4pt,rounded corners] 
                    (f.230) -- ++(0,-1.5) 
                        --  ++(-3.2,0)
                        --  (e);
  • mesma ideia
  • deixou de fora o node, pois o desenho não se expandirá por algum motivo
  • opção usada rounded cornersdeTikz
  • mudou o ponto inicial um pouco para a esquerda, usando coordenadas polares(f.230)

Você também pode substituir todas ou algumas das --instruções por to[in=,out=], assim:

(f.230) to[out=300,in=45] ++(0,-1.5) ...

para começar com uma reverência (espero) para a direita.

Como você também pode ver, coloquei o pacote de idiomas babelpor conveniência.

resultado

\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}

Responder2

Outra abordagem

\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}

insira a descrição da imagem aqui

informação relacionada