我有大量涉及圆形节点(其中一些填充白色)的 tikz 图形,它们通过边缘连接(其中一些很粗)。
我遇到的问题是,无论我使用哪种线帽,边缘要么不能正确地与节点相交(例如line cap=butt
),要么会渗入白色填充,如以下 MWE 所示:
\documentclass[tikz]{standalone}
\tikzset{
every picture/.style={line width=0.45pt, line cap=round},
vtx/.style={circle, draw, fill, inner sep=0pt, minimum width=4.88125pt},
whitevtx/.style={circle, draw, fill=white, inner sep=0pt, minimum width=4.88125pt},
}
\tikzstyle{very thick}=[line width=1.65pt]
\begin{document}
\begin{tikzpicture}
\node[vtx] (A1) at (0,0) {};
\node[whitevtx] (B1) at (2,0) {};
\draw[very thick] (A1) -- (B1);
\end{tikzpicture}
\end{document}
放大后如下:
有人有优雅的解决此问题的解决方案?我考虑了以下可能性:
将边缘放在背景 pgflayer 上。这样做的问题是线帽默认为,
butt
因此需要重新指定(但也许我做错了什么,这里有一个解决方案)。首先将所有节点绘制为坐标,绘制线条,然后在坐标上绘制顶点。呃。
我有大量这样的图像,因此解决方案确实需要优雅而简单,最好通过应用一些新的全局样式来解决。
最后,还有一些其他的限制:更改指定的线宽是违反规则的,并且我理想情况下还会保留line cap=round
边的通用说明符(尽管如果可以区分,则对于节点之间的边来说没有必要),因为此处设置的样式也将应用于其他类型的图形。
编辑:在我的特殊情况下,我认为没有必要,一个可以解决的解决方案真的粗线(例如line width=4pt
)会得到额外的加分!
答案1
像这样:
编辑:
你的 Ti 的背景钾Z 设置是未知的(对我们来说),很难判断。无论如何,从我的经验来看,我认为所有线条都应具有相同的线条杯(line cap=butt
)没有充分的理由。特别是因为在许多情况下,这种设置显然可能会导致问题。我宁愿在真正需要的地方本地使用这些设置,并为更短的代码最终为此定义新的 stile,例如
lb/.style = {line cap=round}
您的问题可以简单解决,通过增加连接线的厚度(正如@Sigur在他的评论中所指出的),添加圆圈样式outer sep=0pt
:
\documentclass[border=3.141592]{standalone}
\usepackage{tikz}
\tikzset{
vtx/.style={circle, draw, fill=#1,
inner sep=0pt, outer sep=0pt, % <---
minimum width=5pt},
vtx/.default = black,
}
\begin{document}
\begin{tikzpicture}
\node[vtx] (A1) at (0,0) {};
\node[vtx=white] (B1) at (2,0) {};
\draw[very thick] (A1) -- (B1);
\end{tikzpicture}
\end{document}
但是,对于更粗的连接线,您需要将图像重新设计成如下所示的样子:
\documentclass[border=3.141592]{standalone}
\usepackage{tikz}
\tikzset{
vtx/.style={circle, draw, fill=#1,
inner sep=0pt, outer sep=0pt, % <---
minimum width=5pt},
vtx/.default = black,
lb/.style = {line cap=round}
}
\begin{document}
\begin{tikzpicture}
\coordinate (A1) at (0,0);
\coordinate (B1) at (2,0);
\draw[line width=4pt] (A1) -- (B1);
\node[vtx] at (A1) {};
\node[vtx=white] at (B1) {};
\draw[very thick,lb] (0,0.5) -- (2,0.5);
\end{tikzpicture}
\end{document}