在 ChemFig 中向上移动一个键

在 ChemFig 中向上移动一个键

在 ChemFig 中,“bond join=true”选项不适用于“cram”键(参见 A,它在连接处被放大)。

可以使用“缩短”选项来增加粘合的长度,但接头的高度仍然存在差异(参见 B)

tikz 中是否有任何选项/命令可用于键选项中以将键向上移动高度“H”(参见 B)?

\documentclass[12pt,border=2mm]{standalone}
\usepackage{chemfig}
\renewcommand*\printatom[1]{\ensuremath{\mathsf{#1}}}
\begin{document}
\setchemfig{bond offset =1pt,bond join=true,atom sep =2em,cram width =3pt,cram dash width =0.4pt,cram dash sep =0.4pt}
    \chemfig{<[:300]-[0,,,,line width = 3pt]>[:60]}
\end{document}

在此处输入图片描述

答案1

我认为,改变路径并不是那么简单。 似乎绘制的路径chemfig不是目标路径,因此无法使用键to path等进行替换。

但是这两个想法怎么样?

  1. 使用line cap=round
  2. 用作Triangle Cap箭头尖(通过arrows.meta)。

另一个可能有点过于复杂的解决方案可能是使用装饰绘制移位路径

\documentclass[border=10pt]{standalone}
\usepackage{chemfig}

\usetikzlibrary{arrows.meta}
\tikzset{
    sharp caps/.style={
        {Triangle Cap[length=0.8pt]}-{Triangle Cap[length=0.8pt]}, 
        shorten >=-1.9pt, 
        shorten <=-1.9pt
    }
}

\begin{document}
\setchemfig{
    bond offset=1pt,
    bond join=true,
    atom sep=2em,
    cram width=3pt,
    cram dash width=0.4pt,
    cram dash sep=0.4pt
}
    \chemfig{<[:300]-[0,,,,line width=3pt, line cap=round]>[:60]}
    \chemfig{<[:300]-[0,,,,line width=3pt, sharp caps]>[:60]}
\end{document}

在此处输入图片描述

放大:

在此处输入图片描述

嗯,差不多了……

答案2

利用一些几何知识我们就能填补这个空白……(复杂)

\documentclass[12pt,border=2mm]{standalone}
\usepackage{chemfig}
\begin{document}
    \setchemfig{atom sep=2em,cram width=3pt} % 2em=24pt
    \chemfig{<[@{A1,1}:300]-[0,,,,line width=3pt]>[@{A2,0}:60]}
    \chemmove{
        \pgfmathsetmacro{\tang}{\fpeval{atand(1.5/24)}} % \tang is the half angle of the sides of the cram bond
        \path (A1) ++(-90:1.5pt) coordinate (B1);
        \path (A1) ++(210:1.7pt) coordinate (C1);
        \path (C1) ++(300-\tang:\fpeval{0.65/cosd(300-\tang-270)}pt) coordinate (D1);
        \fill[red] (A1) -- (C1) -- (D1) -- ([xshift=1pt]B1) -- cycle; % xshift eliminates the artefact
        \path (A2) ++(-90:1.5pt) coordinate (B2);
        \path (A2) ++(-30:1.7pt) coordinate (C2);
        \path (C2) ++(-120+\tang:\fpeval{0.65/cosd(300-\tang-270)}pt) coordinate (D2);
        \fill[red] (A2) -- (C2) -- (D2) -- ([xshift=-1pt]B2) -- cycle;
    }
\end{document}

在此处输入图片描述

编辑

用图片填补空白...

cramgap={cram 宽度/pt}{cram 键长/pt}{键角}

\documentclass[12pt,border=2mm]{standalone}
\usepackage{tikz}
\tikzset{pics/cramgap/.style n args={3}{code={%
    \pgfmathsetmacro{\tang}{\fpeval{atand((#1/2)/#2)}}
    \path (0,0) coordinate (cgO);
    \path (cgO) ++(-90:\fpeval{(0.4+#1)/2}pt) coordinate (cgA);
    \path (cgO) ++(\fpeval{90+#3}:\fpeval{(0.4+#1)/2}pt) coordinate (cgB);
    \path (cgB) ++(\fpeval{180+#3-\tang}:\fpeval{(0.2+#1/2)*(1-cosd(180-#3))/cosd(-90+#3-\tang)}pt) coordinate (cgX);
    \fill[red] (cgO) -- (cgB) -- (cgX) -- ([xshift=\fpeval{#3>0?1:-1}pt]cgA) -- cycle;
}}}
\usepackage{chemfig}
\begin{document}
    \setchemfig{atom sep=24pt,cram width=2.6pt} % 2em=24pt
    \chemfig{<[@{A1,1}:310]-[:0,,,,line width=3pt]>[@{A2,0}:40]} % line width=0.4pt + cram width
    \chemmove{\path (A1) pic{cramgap={2.6}{24}{130}};
        \path (A2) pic{cramgap={2.6}{24}{-140}};}
    
    \chemfig{<[@{A1,1}:330]-[:20,,,,line width=3pt]>[@{A2,0}:60]}
    \chemmove{\path (A1) pic[rotate=20]{cramgap={2.6}{24}{130}};
        \path (A2) pic[rotate=20]{cramgap={2.6}{24}{-140}};}
\end{document}

在此处输入图片描述

答案3

我创建了一种向上移动链接的方法,但许多人可能认为这是一个糟糕的解决方案。

一个问题是不知道键的起点和终点。然后我用“@{x}”标记了这些点,这是 ChemFig 的一个功能,用于标记分子中的位置。

我使用 [,,,,draw=none] 使债券不可见

然后,使用 \chemmove,我使用“\node”将起点和终点上移,并使用“\draw”创建了一条直线来替换键。

嗯,从技术上讲这不是“chemfig 键”(-[,<length.,,,,,,]),但它使用了很多 ChemFig 已经用来构建分子的东西,而且很容易调整参数。

\documentclass[12pt,border=2mm]{standalone}
\usepackage{chemfig}
\begin{document}
\setchemfig{bond offset =0.5pt,bond join=true,atom sep =2em,cram width =3pt,cram dash width =0.2pt,cram dash sep =0.4pt}
\schemestart
    \chemfig{<[:300]@{a}-[0,,,,draw=none]@{b}>[:60]}
\chemmove{
    \node[at=(a),yshift=.57pt](a){};
    \node[at=(b),yshift=.57pt](b){};
    \draw[-,line width=3pt,shorten <=-1.2pt,shorten >=-1.2pt](a)--(b);}
\schemestop
\end{document}

在此处输入图片描述

相关内容