数学模式下的 TikZ 图表

数学模式下的 TikZ 图表

我附上了一张图片,展示了我想要做的事情。我一直在制作简单的 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

您可以简单地将tikzpictures 嵌套在数学环境中。基本上,您唯一需要考虑的是添加适当的内容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}

结果(200%)

  • baseline选项决定了图片中哪个高度与周围文本的基线相对应。我们希望该点(0,0)位于等号的高度,即0.65ex基线上方约 100 厘米处(在 Computer Modern 中)。
  • 比例属性(不影响线宽和节点大小)有助于获得您想要的精确尺寸的图片,而无需摆弄坐标。
  • 使用 TikZ 设置逗号以轻松实现正确的垂直位置。
  • 我添加了\Large以获得更大的等号和逗号。
  • 虚线是通过选项 (惊喜!) 实现的dashed。现在猜猜是什么densely dashed意思。
  • 为了让顶点覆盖虚线,我添加了一个fill=white选项hackennode
  • Martin 建议将tikzpictures 括起来,这个建议\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}

结果:

结果

相关内容