我正在尝试使用 tikz 创建一个图形,现在代码如下所示:
\begin{center}
\begin{tikzpicture}
\draw[black, very thick](0,0) circle (3cm);
\draw[black, thick](3,0)--(3.5,0);
\hspace{3.5cm}\text{$+\Omega$}\hspace{-3.5cm}
\draw[black, thick](-3.51,0)--(-4.01,0);
\hspace{-4.56cm}\text{$-\Omega$}\hspace{4.56cm}
\draw[black, thick](-1,-3)--(-1,-3.5);
\hspace{-1.1cm}\vspace{3.5cm}
\text{$0$}
\hspace{1.1cm}\vspace{-3.5cm}
\draw[black, thick](-1,3)--(-1,3.5);
\hspace{-1.1cm}\vspace{-3.5cm}
\text{$\infty$}
\end{tikzpicture}
\end{center}
这将创建下图:
如您所见, \vspace 没有执行任何操作,0 和 ∞ 仍然位于中心,我可以使用 \vspace 让它们上下移动吗?如果不行,我该怎么做才能将字符置于其设计位置?
答案1
您可以使用 foreach 循环,迭代迭代变量定义的标签\lab
。
该变量起什么作用\lab
?
此变量\lab
依次获取列表的值{\infty, -\Omega, 0, +\Omega}
。然后使用count=\n
和 计算角度,对它们进行计数evaluate=\n as \angle using \n*90
:
- 首先,变量
\lab
将取值\infty
,计数器\n
初始化为1
,角度\angle
为1*90=90°
。 - 然后
\lab
将取第二个值-\Omega
,\n
计数器增加1
,因此值是2
;角度是2*90=180°
, - ETC。
因此循环代码:
\foreach \lab[count=\n,evaluate=\n as \angle using \n*90]
in {\infty,-\Omega,0,+\Omega}
{\draw (\angle:3cm)--(\angle:3.5cm) node[]{$\lab$};}
相当于以下代码:
\draw (90:3cm)--(90:3.5cm) node[]{$\infty$};
\draw (180:3cm)--(180:3.5cm) node[]{$-\Omega$};
\draw (270:3cm)--(270:3.5cm) node[]{$0$};
\draw (360:3cm)--(360:3.5cm) node[]{$+\Omega$};
shift={(\angle:3mm)}
允许您移动标签,使其不与线重叠。对于此移动,我使用极坐标,这允许我偏移后者。
我使用 改进了代码anchors
,这样可以将标签放置在尽可能靠近线条的位置。因此文本和线条之间的间距在任何地方都是相同的。
1. 不移位:标签与线重叠
\documentclass[border=5mm]{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\draw[black, very thick](0,0) circle (3cm);
\foreach \lab[count=\n,evaluate=\n as \angle using \n*90]
in {\infty,-\Omega,0,+\Omega}
{\draw (\angle:3cm)--(\angle:3.5cm) node[]{$\lab$};}
\end{tikzpicture}
\end{document}
2. 移位:无重叠,但间距不好
\documentclass[border=5mm]{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\draw[black, very thick](0,0) circle (3cm);
\foreach \lab[count=\n,evaluate=\n as \angle using \n*90]
in {\infty,-\Omega,0,+\Omega}
{\draw (\angle:3cm)--(\angle:3.5cm)
node[shift={(\angle:3mm)}]{$\lab$};}
\end{tikzpicture}
\end{document}
3. 使用锚点:更好的间距
\documentclass[border=5mm]{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\draw[black, very thick](0,0) circle (3cm);
\foreach \lab[count=\n,evaluate=\n as \angle using \n*90]
in {\infty,-\Omega,0,+\Omega}
{\draw (\angle:3cm)--(\angle:3.5cm)node [anchor=\angle-180]{$\lab$};}
\end{tikzpicture}
\end{document}
答案2
我真的很想知道你是从哪里得到这个方法的。
要在 TikZ 图表中添加文本,请使用node
s。它们可以附加到路径末尾,例如\draw (0,0) -- (1,1) node{foo};
,也可以单独添加,例如\node at (1,1) {foo};
。节点还可以采用定义其形状、颜色等以及位置的选项。例如,\draw (0,0) -- (1,1) node[above] {foo};
将节点置于 上方(1,1)
。
绘制图表的一种方法如下:
\documentclass[border=5mm]{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\draw[black, very thick](0,0) circle (3cm);
\draw[black, thick](3,0)--(3.5,0) node[right] {$+\Omega$};
\draw[black, thick](-3,0)--(-3.5,0) node[left] {$-\Omega$};
\draw[black, thick](0,-3)--(0,-3.5) node[below] {$0$};
\draw[black, thick](0,3)--(0,3.5) node[above] {$\infty$};
\end{tikzpicture}
\end{document}