Tikz:从具有双边框的节点控制边缘起始位置

Tikz:从具有双边框的节点控制边缘起始位置

目前我无法让所有从双边框节点出来的边都恰好从外边框的外侧开始。所有边都从两个边框之间开始。例如,此代码看起来并不完美。

\documentclass{article}

\usepackage{tikz}
\tikzstyle{double_border} = [draw, double, double distance=2pt]

\begin{document}

\begin{tikzpicture}
    \node[double_border] (a) at (0,0) {A};
    \node[double_border] (b) at (1,0) {B} edge (a);
\end{tikzpicture}

\end{document}

输出

我希望能够设置每个double_border节点,使所有传出和传入边都从外边界开始。我知道我可以将其指定为属性edge(我必须查找如何操作),但我希望能够将其专门应用于节点设置(或全局也可以),因为我正在尝试扩展一个名为的“库”,tikz-er2我希望它应用于特定类型的所有节点,而无需使用户的语法复杂化。

答案1

请注意 已\tikzstyle被弃用。一种解决方案是增加outer sep

\documentclass{article}

\usepackage{tikz}
\usetikzlibrary{shapes.geometric}
\tikzset{double_border/.style={draw, double, double distance=2pt,outer sep=1.2pt}}

\begin{document}

\begin{tikzpicture}
    \node[double_border] (a) at (0,0) {A};
    \node[double_border,circle] (b) at (1,0) {B} edge (a) ; 
    \node[double_border,diamond] (c) at (0.6,1) {C} edge (a) edge (b) ; 
\end{tikzpicture}

\end{document}

在此处输入图片描述

与 一样double,这些双线并不是真正的双线,而是一条较粗的线被一条较细的线覆盖。因此,如果您将它们放在某些背景之上,背景将被覆盖。如果您不想这样做,您可以为特定节点形状定义另一种样式,double_border以使节点边界逼真。

\documentclass{article}

\usepackage{tikz}
\tikzset{double_border/.style={draw,inner sep=#1+2pt,
path picture={
\draw ([xshift=#1,yshift=#1]path picture bounding box.south west)
rectangle ([xshift=-#1,yshift=-#1]path picture bounding box.north east);}},
double_border/.default=2pt}

\begin{document}

\begin{tikzpicture}
    \node[double_border] (a) at (0,0) {A};
    \node[double_border] (b) at (1,0) {B} edge (a); 
    \node[double_border] (c) at (0.6,1) {C}  edge (a)  edge (b); 
\end{tikzpicture}
\end{document}

在此处输入图片描述

这种方法的缺点是它必须逐个形状地进行,并且与路径图片一样,并非所有转换都能产生良好的结果。

除此之外,您还可以使用 和 来缩短边缘shorten >shorten <但这有点麻烦。另一种方法是在背景层上绘制边缘。

\documentclass{article}

\usepackage{tikz}
\usetikzlibrary{backgrounds}
\tikzset{double_border/.style={draw, double, double distance=2pt}}

\begin{document}

\begin{tikzpicture}
    \node[double_border] (a) at (0,0) {A};
    \node[double_border] (b) at (1,0) {B}; 
    \node[double_border] (c) at (0.6,1) {C}; 
    \begin{scope}[on background layer]
    \path (b) edge (a)   edge (c) (a)  edge (c);
    \end{scope}
\end{tikzpicture}

\end{document}

在此处输入图片描述

这样做的原因是,double线条只是一条粗线(在本例中是黑色),上面覆盖着一条稍细的白线。

相关内容