![在 ChemFig 中向上移动一个键](https://linux22.com/image/471599/%E5%9C%A8%20ChemFig%20%E4%B8%AD%E5%90%91%E4%B8%8A%E7%A7%BB%E5%8A%A8%E4%B8%80%E4%B8%AA%E9%94%AE.png)
在 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
等进行替换。
但是这两个想法怎么样?
- 使用
line cap=round
。 - 用作
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}