数学节点矩阵中未标记的节点

数学节点矩阵中未标记的节点

我目前在 TikZ 中有以下图片:

\documentclass[11pt,a4paper]{report}      
\usepackage{tikz}
\usepackage[utf8]{inputenc}
\usetikzlibrary{matrix,arrows,decorations.pathmorphing}
\begin{document}
\begin{tikzpicture}[>=angle 90]
\matrix(a)[matrix of math nodes,
row sep=3em, column sep=2.5em,
text height=1.5ex, text depth=0.25ex]
{X & H& X  \\
A&X &B \\
X & H' &X  \\};


\path[->,font=\scriptsize]
(a-1-2)  edge node[above]{$$} (a-2-3);

\path[->,font=\scriptsize]
(a-2-1)  edge node[above]{$$} (a-1-2);

\path[->,font=\scriptsize]
(a-2-1)  edge node[above]{$$} (a-3-2);

\path[->,font=\scriptsize]
(a-3-2)  edge node[above]{$$} (a-2-3);

\end{tikzpicture}
\end{document}

我想知道是否有办法去掉节点上的标签 X 但仍然保留节点,以便我可以绘制菱形。如果我将其留空,它会给出一个错误,提示所有节点都必须贴上标签,可能为空。是否有一些清空命令?

答案1

问题不清楚。您询问X矩阵中的移除?您可以毫无问题地做到这一点:

\begin{tikzpicture}[>=angle 90]
\matrix(a)[matrix of math nodes,
  row sep=3em, column sep=2.5em,
  text height=1.5ex, text depth=0.25ex]
{   & H  &   \\   % <--- See? no X here
  A &    & B \\
    & H' &   \\};

\path[->,font=\scriptsize]
(a-1-2)  edge node[above]{$$} (a-2-3);

\path[->,font=\scriptsize]
(a-2-1)  edge node[above]{$$} (a-1-2);

\path[->,font=\scriptsize]
(a-2-1)  edge node[above]{$$} (a-3-2);

\path[->,font=\scriptsize]
(a-3-2)  edge node[above]{$$} (a-2-3);

\end{tikzpicture}

该代码编译没有问题,并给出:

结果

这显然就是你想要的。

但是你提到了一个关于“的错误所有节点都必须标记,可能是空的{$$}“。此错误不是由上述代码产生的。但是,如果您在node绘制边缘时删除了 ,就会出现此错误。

也许您在代码的先前迭代中遇到了此错误,然后您错误地识别了错误的来源。

无论如何,如果你将对象放在node路径内,就像你在上一部分中所做的那样,你必须给它一个内容,也就是{$$}你在这里放的。显然你不想给出任何内容,因为$$毕竟不会产生任何输出。那么,你为什么要包含这些节点呢?

您可以完美地绘制边缘,而无需node在过程中引入任何内容。只需:

\path[->,font=\scriptsize] (a-1-2)  edge (a-2-3);
\path[->,font=\scriptsize] (a-2-1)  edge (a-1-2);
\path[->,font=\scriptsize] (a-2-1)  edge (a-3-2);
\path[->,font=\scriptsize] (a-3-2)  edge (a-2-3);

此代码仍然很奇怪,因为您font在没有编写任何文本时使用了选项。我怀疑您从“MWE”中删除了太多内容,因此很难猜测您真正需要什么。为了绘制边缘,可以使用更简单的语法:

\draw[->] (a-1-2) -- (a-2-3);
\draw[->] (a-2-1) -- (a-1-2);
\draw[->] (a-2-1) -- (a-3-2);
\draw[->] (a-3-2) -- (a-2-3);

另一个可能的问题来源是如果你想从矩阵的空节点绘制一些边。例如,这将失败:

\draw[->] (a-1-1) -- (a-2-2);

因为当您在矩阵中留下一个空单元格时,不会为该位置创建任何节点,因此名称(a-1-1)(a-2-2)不存在。

可以通过向矩阵添加选项来解决此问题nodes in empty cells。这样,tikz 会为没有内容的单元格创建不可见的节点,并且您还可以为这些单元格获得有效的名称。

\usetikzlibrary{matrix,arrows,decorations.pathmorphing}
\begin{tikzpicture}[>=angle 90]
\matrix(a)[matrix of math nodes, nodes in empty cells,
row sep=3em, column sep=2.5em,
text height=1.5ex, text depth=0.25ex]
{   & H  &   \\
  A &    & B \\
    & H' &   \\};

\draw[->] (a-1-2) -- (a-2-3);
\draw[->] (a-2-1) -- (a-1-2);
\draw[->] (a-2-1) -- (a-3-2);
\draw[->] (a-3-2) -- (a-2-3);
\draw[->] (a-2-1) -- (a-2-2);

\end{tikzpicture}

结果

答案2

把它们去掉?这样对我有用吗?

在此处输入图片描述

\documentclass[11pt,a4paper]{report}
\usepackage{tikz}
\usepackage[utf8]{inputenc}
\usetikzlibrary{matrix,arrows,decorations.pathmorphing}
\begin{document}
\begin{tikzpicture}[>=angle 90]
\matrix(a)[matrix of math nodes,
row sep=3em, column sep=2.5em,
text height=1.5ex, text depth=0.25ex]
{ & H   \\
 A&   &B\\
  & H'  \\};   
\path[->,font=\scriptsize](a-1-2)  edge node[above]{$$} (a-2-3);
\path[->,font=\scriptsize](a-2-1)  edge node[above]{$$} (a-1-2);   
\path[->,font=\scriptsize](a-2-1)  edge node[above]{$$} (a-3-2);   
\path[->,font=\scriptsize](a-3-2)  edge node[above]{$$} (a-2-3);

\end{tikzpicture}
\end{document}

相关内容