我目前在 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}