chemfig에서 분자 주위의 선을 구부리고 부동 선을 추가하려면 어떻게 해야 합니까?

chemfig에서 분자 주위의 선을 구부리고 부동 선을 추가하려면 어떻게 해야 합니까?

그래서 저는 TikZ에서 화학 공식을 만들고 싶습니다. 지금 당장은 다음과 같습니다.

내 문제는 텍스트를 더 잘 보이게 만들고 중간에 분자를 자르지 않기 위해 분자 아래의 노란색 선을 곡선으로 만들고 싶다는 것입니다. 이미 chemfig 매뉴얼을 읽고 Curved bond를 찾았지만 구문과 다른 제어점을 추가하는 방법을 잘 이해하지 못합니다.

다른 문제는 특정 원자를 가리키는 부동 화살표가 있는 부동 텍스트를 추가하고 싶다는 것입니다.

결국 나는 다음과 같이 보이기를 원합니다. (어떤 종류의 선을 원하는지 보여주기 위해 주황색과 보라색 선을 하나 더 추가했습니다)

이것은 내 코드입니다.

\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경로 제공

를 사용하는 것은 controlsTikz에서 베지어 곡선을 지정하는 방법입니다. 매개변수는 상상하기 힘들지만 가능하다면 멋진 곡선을 만드는 완벽한 방법입니다.

그러나 나는 두 가지 대안을 제시합니다.

        % ~~~ straight forward replacement ~~~~~~~~~~~~~
        \draw[orange,shorten >=4pt] 
                    (f) -- ++(0,-1.7) 
                        -- node[pos=.5,below]{Rückseitenangriff} ++(-3.5,0)
                        --  (e);
  • \draw(f) - (e)에서
  • 하지만 이 길을 끝내기 전에;
  • ++상대 단계로 설명되는 다운 스텝과 사이드 스텝에 대해 두 개의 새로운 좌표( )를 배치합니다.
  • 더 낮은 새 경로에 배치 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}

여기에 이미지 설명을 입력하세요

관련 정보