Tikz 命令在 tikz 宏内中断

Tikz 命令在 tikz 宏内中断

我需要在 tikz 中绘制一些图表,这些图表的标签以树作为索引。我也将这些树渲染为 tikz 图表。即使是简单的图表,例如两个节点之间的箭头,如果将树插入为箭头的标签,结果也会非常不愉快。

这是一个 MWE。

\documentclass{standalone}

\usepackage{tikz}

\newcommand{\TreeW}
{
    \tikz
    {
        \draw[-] (-.1,.2) -- (0,0) -- (.1,.2); \draw[-] (0,0) -- (0,.2);
    }
}

\newcommand{\TreeV}
{%
    {%
        \mathchoice%
        {\tikz \draw[-]                   (-.1,.2) -- (0,0) -- (.1,.2);}%
        {\tikz \draw[-]                   (-.1,.2) -- (0,0) -- (.1,.2);}%
        {\tikz \draw[-] [thin, scale=.75] (-.1,.2) -- (0,0) -- (.1,.2);}%
        {\tikz \draw[-] [thin, scale= .5] (-.1,.2) -- (0,0) -- (.1,.2);}%
    }
}

\begin{document}    
\begin{tikzpicture}[scale=1.5]
 \node (s0) at (180:2) {$\TreeW_{\TreeV}$};
 \node (s1) at (0,0) {$\TreeV$};
 \draw[->] [shorten >=10pt, shorten <=10pt] (s0) --
 node [above, near start] {$\TreeW$} node [below, near end] {\hbox{$\TreeV$}} (s1);
\end{tikzpicture}
\end{document}

这给了我以下结果。

在此处输入图片描述

我尝试搜索一下类似的问题,但没有遇到任何问题;尽管这很可能是一个众所周知的问题。

答案1

您的方法的问题在于它嵌套了tikzpictures。这是应该避免的。避免问题的标准方法是使用\saveboxes。(Apic在这里不起作用,因为您使用了\mathchoice,并且从您之前的问题中,我认为您不使用此图的原因tikz-cd是您想将示例保持在最低限度。以下内容也适用于tikz-cd。)

\documentclass{standalone}
\usepackage{tikz}
\newsavebox\TreeWbox
\sbox\TreeWbox{\tikz{%
        \draw[-] (-.1,.2) -- (0,0) -- (.1,.2); \draw[-] (0,0) -- (0,.2);
    }}
\newsavebox\TreeVbox
\sbox\TreeVbox{\tikz \draw[-]  (-.1,.2) -- (0,0) -- (.1,.2);}

\begin{document}    
\newcommand{\TreeW}{\usebox\TreeWbox}
\newcommand{\TreeV}{\mathchoice{\usebox\TreeVbox}{%
\usebox\TreeVbox}{%
\scalebox{0.8}{\usebox\TreeVbox}}{%
\scalebox{0.6}{\usebox\TreeVbox}}}

\begin{tikzpicture}[scale=1.5]
 \node (s0) at (180:2) {$\TreeW_{\TreeV}$};
 \node (s1) at (0,0) {$\TreeV$};
 \draw[->] [shorten >=10pt, shorten <=10pt] (s0) --
 node [above, near start] {$\TreeW$} node [below, near end] {\hbox{$\TreeV$}} (s1);
\end{tikzpicture}
\end{document}

在此处输入图片描述

答案2

只要您添加tips=never阻止绘制箭头的选项,并且不要忘记删除[-]您放置的删除此箭头的选项,您的代码就可以完美运行。箭头绘制选项在 TikZ 3.1.4b 手册第 188 页中有说明。

截屏

\documentclass[border=5mm,tikz]{standalone}

%\usepackage{tikz}

\newcommand{\TreeW}
{
    \tikz[tips=never]
    {
        \draw[] (-.1,.2) -- (0,0) -- (.1,.2); \draw[] (0,0) -- (0,.2);
    }
}

\newcommand{\TreeV}
{%
    {%
        \mathchoice%
        {\tikz[tips=never] \draw                   (-.1,.2) -- (0,0) -- (.1,.2);}%
        {\tikz[tips=never] \draw                   (-.1,.2) -- (0,0) -- (.1,.2);}%
        {\tikz[tips=never] \draw [thin, scale=.75] (-.1,.2) -- (0,0) -- (.1,.2);}%
        {\tikz[tips=never] \draw [thin, scale= .5] (-.1,.2) -- (0,0) -- (.1,.2);}%
    }
}

\begin{document}    
\begin{tikzpicture}[scale=1.5]
 \node (s0) at (180:2) {$\TreeW_{\TreeV}$};
 \node (s1) at (0,0) {$\TreeV$};
 \draw[->] [shorten >=10pt, shorten <=10pt
 ] (s0) --
 (s1) node [above, near start] {$\TreeW$} node [below, near end] {\hbox{$\TreeV$}};
\end{tikzpicture}
\end{document}

相关内容