![数学模式下的 TikZ 图表](https://linux22.com/image/234737/%E6%95%B0%E5%AD%A6%E6%A8%A1%E5%BC%8F%E4%B8%8B%E7%9A%84%20TikZ%20%E5%9B%BE%E8%A1%A8.png)
我附上了一张图片,展示了我想要做的事情。我一直在制作简单的 Hackenbush 图表,如下所示:
\begin{tikzpicture}
\node[hackennode] (Bottom Blue) at (0,0) {};
\node[hackennode] (Top Blue) at (0,1) {};
\draw[hackenline,blue] (Bottom Blue) -- (Top Blue);
\end{tikzpicture}
我希望能够将它们与普通数学符号一起使用,如图所示。谢谢!
(我也不清楚如何画虚线,但我对此不太关心。)
答案1
您可以简单地将tikzpicture
s 嵌套在数学环境中。基本上,您唯一需要考虑的是添加适当的内容baseline
以使垂直居中正确。这是代码,稍后会进行解释。
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{calc}
\begin{document}
\tikzstyle{hackennode}=[draw,circle,fill=white,inner sep=0,minimum size=4pt]
\tikzstyle{hackenline}=[line width=3pt]
{\Large
\[
\begin{tikzpicture}[baseline=-0.65ex,scale=0.5]
\draw[densely dashed] (-1,-1) -- (1,-1);
\node[hackennode] (middle) at ( 0, 0) {};
\node[hackennode] (left) at (-0.5,-1) {};
\node[hackennode] (right) at ( 0.5,-1) {};
\node[hackennode] (top) at ( 0, 1) {};
\draw[hackenline,blue]
(left) -- (middle) -- (right);
\draw[hackenline,red]
(middle) -- (top);
\end{tikzpicture}
=
\left\{
\begin{tikzpicture}[baseline=-0.65ex,scale=0.5]
\draw[densely dashed] (-0.5,-1) -- (1,-1);
\node[hackennode] (middle) at ( 0, 0) {};
\node[hackennode] (right) at ( 0.5,-1) {};
\node[hackennode] (top) at ( 0, 1) {};
\draw[hackenline,blue]
(middle) -- (right);
\draw[hackenline,red]
(middle) -- (top);
\end{tikzpicture}
\tikz[baseline=-0.65ex,scale=0.5] \node[inner sep=0] at (0,-1) {,\,};
\begin{tikzpicture}[baseline=-0.65ex,scale=0.5]
\draw[densely dashed] (-1,-1) -- (0.5,-1);
\node[hackennode] (middle) at ( 0, 0) {};
\node[hackennode] (left) at (-0.5,-1) {};
\node[hackennode] (top) at ( 0, 1) {};
\draw[hackenline,blue]
(middle) -- (left);
\draw[hackenline,red]
(middle) -- (top);
\end{tikzpicture}
\middle|
\begin{tikzpicture}[baseline=-0.65ex,scale=0.5]
\draw[densely dashed] (-1,-1) -- (1,-1);
\node[hackennode] (middle) at ( 0, 0) {};
\node[hackennode] (left) at (-0.5,-1) {};
\node[hackennode] (right) at ( 0.5,-1) {};
\draw[hackenline,blue]
(left) -- (middle) -- (right);
\end{tikzpicture}
\right\}
\]
}% End group with \Large
\end{document}
- 该
baseline
选项决定了图片中哪个高度与周围文本的基线相对应。我们希望该点(0,0)
位于等号的高度,即0.65ex
基线上方约 100 厘米处(在 Computer Modern 中)。 - 比例属性(不影响线宽和节点大小)有助于获得您想要的精确尺寸的图片,而无需摆弄坐标。
- 使用 TikZ 设置逗号以轻松实现正确的垂直位置。
- 我添加了
\Large
以获得更大的等号和逗号。 - 虚线是通过选项 (惊喜!) 实现的
dashed
。现在猜猜是什么densely dashed
意思。 - 为了让顶点覆盖虚线,我添加了一个
fill=white
选项hackennode
。 - Martin 建议将
tikzpicture
s 括起来,这个建议\mathord
很好。您应该这样做以获得更好的间距。
请注意,图片中的数学符号实际上是用图形程序生成的,而不是用文本排版程序生成的(比较括号和等号)。当然,这可以用 TikZ 来实现,但我认为这样做没有充分的理由。
答案2
您可以像使用普通数学符号一样使用tikzpictures
内部符号\mathord{ }
。请参阅下面的示例。如果您多次需要相同的图表,我建议您将其保存到宏或框中。
% Draws the shown example (but without circles)
\documentclass{standalone}
\usepackage{tikz}
\begin{document}
\[
\mathord{%
\begin{tikzpicture}[baseline={(0,1)}]
\draw[dashed] (0,0) -- (2,0);
\draw[blue,very thick] (.5,0) -- (1,1) -- (1.5,0);
\draw[red,very thick] (1,1) -- (1,2);
\end{tikzpicture}%
}
=
\left\{
\mathord{%
\begin{tikzpicture}[baseline={(0,1)}]
\draw[dashed] (0,0) -- (2,0);
\draw[blue,very thick] (.75,0) -- (.5,1) (1.5,1) -- (1.25,0);
\draw[red,very thick] (.5,1) -- (.5,2) (1.5,1) -- (1.5,2);
\end{tikzpicture}%
}
\left|
\mathord{%
\begin{tikzpicture}[baseline={(0,1)}]
\draw[dashed] (0,0) -- (2,0);
\draw[blue,very thick] (.5,0) -- (1,1) -- (1.5,0);
\end{tikzpicture}%
}
\right.
\right\}
\]
\end{document}
结果: