我正在使用优秀的tikz 网络Jürgen Hackl 编写的包。我试图将一些节点的形状改为椭圆形,但我不知道该怎么做。从手册中,tikz-network:
使用选项形状可以修改顶点的形状。从而可以使用 TikZ 中实现的形状,包括:圆形、矩形、菱形、梯形、半圆形、等腰三角形……
但是当我编译此代码时:
\documentclass{article}
\usepackage{tikz-network}
\begin{document}
\begin{tikzpicture}
\Vertex[color=white, x=-1, y=1, label=A]{A}
\Vertex[color=white, x=1, y=1, label=B, shape=rectangle]{B}
\Vertex[color=white, x=0, y=0, label=2, shape=ellipse]{2}
\Edge[lw=1, Direct](A)(2)
\Edge[lw=1, Direct](B)(2)
\end{tikzpicture}
\end{document}
我得到的就是这个
而我希望节点 2 的形状是椭圆形,而不是圆形。
答案1
实际上,您的形状是椭圆形。它恰好具有相同的高度和宽度,因为这些是默认设置。您可以使用 选项提供额外的 TikZstyle
选项\Vertex
。
\documentclass{article}
\usepackage{tikz-network}
\begin{document}
\begin{tikzpicture}
\Vertex[color=white, x=-1, y=1, label=A]{A}
\Vertex[color=white, x=1, y=1, label=B, shape=rectangle]{B}
\Vertex[color=white, x=0, y=0, label=2, shape=ellipse, style={minimum width=2cm}]{2}
\Edge[lw=1, Direct](A)(2)
\Edge[lw=1, Direct](B)(2)
\end{tikzpicture}
\end{document}
答案2
首先,我要明确说明您和 Joule V 的观察结果:如果文本长度超过包裹所预期的长度,它就会超出范围。
\documentclass{article}
\usepackage{tikz-network}
\begin{document}
\begin{tikzpicture}
\Vertex[color=white, x=-1, y=1, label=A]{A}
\Vertex[color=white, x=1, y=1, label=B, shape=rectangle]{B}
\Vertex[color=white, x=0, y=0, label=2222222, shape=ellipse]{2}
\Edge[lw=1, Direct](A)(2)
\Edge[lw=1, Direct](B)(2)
\end{tikzpicture}
\end{document}
不用说,这看起来有点不太理想。发生这种情况的内部原因是文本不是node contents
(正如人们天真地怀疑/希望的那样),而是标签所指示的label
。这个问题可以按如下方式解决:
\documentclass{article}
\usepackage{tikz-network}
\makeatletter
\tikzset{network x offset/.initial=1ex,network y offset/.initial=1ex,
adjust size/.style={minimum width=width("\vertex@Label")+2*\pgfkeysvalueof{/tikz/network x offset},
minimum height=height("\vertex@Label")+2*\pgfkeysvalueof{/tikz/network y offset}}}
\makeatother
\begin{document}
\begin{tikzpicture}
\Vertex[color=white, x=-1, y=1, label=A]{A}
\Vertex[color=white, x=1, y=1, label=B, shape=rectangle]{B}
\tikzset{every label/.append style={}}
\Vertex[color=white, x=0, y=0, label=2222222, shape=ellipse,
style={adjust size}]{2}
\Edge[lw=1, Direct](A)(2)
\Edge[lw=1, Direct](B)(2)
\end{tikzpicture}
\end{document}
因此,您需要做的就是添加style={adjust size}
。作为副作用,这将真正成为一个椭圆,如果JouleV 建议,一旦您插入更宽(或更高)的文本。 键network x offset
和network y offset
可以被认为是普通 pgf 键inner xsep
和的类似物inner ysep
。