我有时会使用 TikZ 排版交换立方体。这是我的代码。
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{matrix}
\tikzset
{
over/.style={preaction={draw=white,-,line width=6pt}},
}
\begin{document}
\begin{tikzpicture}
\matrix[matrix of math nodes,column sep={2.5em},row sep={2.5em},
text height=1.5ex,text depth=.25ex]
{
|(e)| X X X X & & |(0)| X_0 \\
& |(1)| X_1 & & |(01)| X_{01} \\
|(2)| X_2 & & |(02)| X_{02} \\
& |(12)| X_{12} & & |(012)| X_{012} \\
};
\draw[->] (e) to (2);
\draw[->] (0) to (02);
\draw[->] (e) to (0);
\draw[->] (2) to (02);
\draw[->,over] (1) to (12);
\draw[->] (01) to (012);
\draw[->,over] (1) to (01);
\draw[->] (12) to (012);
\draw[->] (e) to (1);
\draw[->] (0) to (01);
\draw[->] (2) to (12);
\draw[->] (02) to (012);
\end{tikzpicture}
\end{document}
我经常遇到的问题是,如果其中一个节点比其他节点大,那么我的立方体就会有点扭曲。
我的临时解决方法是调整其中一列的宽度,例如将矩阵中的第一行更改为
|(e)| X X X X & & |(0)| X_0 &[1em] \\
那么结果就相当不错了:
我尝试的另一件事是将column sep
和row sep
选项更改为:
column sep={5em,between origins},row sep={5em,between origins}
但边缘仍然不太平行:
我对第二张图片的外观非常满意,但这种方法有一个缺点,我必须猜测一个好的偏移值,这通常很麻烦。有没有办法让 TikZ 自己找出这个值?或者也许有更好的使用方法between origins
或其他完全不同的东西?
答案1
这个选项between origins
是正确的。问题是这个选项只在第一行被考虑,而且你指定了三列,而不是四列。效果可以放大:
\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{matrix}
\tikzset
{
over/.style={preaction={draw=white,-,line width=6pt}},
}
\begin{document}
\begin{tikzpicture}
\matrix[matrix of math nodes,column sep={1.5em,between origins},row sep={1em,between origins},nodes={inner sep=0.2pt}]
{
|(e)| X & & |(0)| X \\
& |(1)| X & & |(01)| X \\
|(2)| X & & |(02)| X \\
& |(12)| X & & |(012)| X \\
};
\draw[->] (e) to (2);
\draw[->] (0) to (02);
\draw[->] (e) to (0);
\draw[->] (2) to (02);
\draw[->,over] (1) to (12);
\draw[->] (01) to (012);
\draw[->,over] (1) to (01);
\draw[->] (12) to (012);
\draw[->] (e) to (1);
\draw[->] (0) to (01);
\draw[->] (2) to (12);
\draw[->] (02) to (012);
\end{tikzpicture}
\end{document}
如果将四列添加到第一行:
\matrix[matrix of math nodes,column sep={1.5em,between origins},row sep={1em,between origins},nodes={inner sep=0.2pt}]
{
|(e)| X & & |(0)| X & \\
& |(1)| X & & |(01)| X \\
|(2)| X & & |(02)| X \\
& |(12)| X & & |(012)| X \\
};
那么结果就是预期的结果:
答案2
您应该使用tikz-cd
此类图表。如果您稍微调整一下索引,您可能会发现它在视觉上更令人愉悦。看看右侧,我把所有索引都打碎了,以便在左侧看起来更均匀。
% arara: pdflatex
\documentclass{article}
\usepackage{tikz-cd}
\usepackage{mathtools}
\begin{document}
\begin{tikzcd}[%
,column sep={5em,between origins}
,row sep={5em,between origins}
]
XXXX \arrow{rr}\arrow{dd}\arrow{dr} & & X_{\mathrlap{0}} \arrow{dd}\arrow{dr} & \\
& X_1 \arrow[crossing over]{rr} & & X_{\mathrlap{01}} \arrow{dd} \\
X_2 \arrow{rr}\arrow{dr} & & X_{\mathrlap{02}} \arrow{dr} & \\
& X_{12} \arrow{rr}\arrow[<-,crossing over]{uu} & & X_{\mathrlap{012}}
\end{tikzcd}
\end{document}