我想要制作某种格子图,比如哈斯图。我该怎么做?我尝试使用带字母和斜线的矩阵,但看起来很丑。我需要任何额外的软件包吗?
编辑:我的意思是像这样的图表(对于 zessenhaous 引理):
答案1
根据 @barbarabeeton 的说法,对于您给出的示例,有一个可能的 PSTricks 解决方案:
\documentclass[preview,border=3pt]{standalone}
\usepackage{pst-node}
\begin{document}
\psset{nodesep=3pt}
\newpsstyle{DblDash}{linestyle=dashed, dash=1pt 1.5pt, doubleline}
\begin{psmatrix}[mnode=r,colsep=0.6,rowsep=0.5]
[name=11] $A_1$ & & & & [name=12] $B_2$\\
& [name=21] $A(A_1\cap B_1)$ & & [name=22] $B(A_1\cap B_1)$ \\
& [name=31] $A(A_1\cap B)$ & [name=32] $A_1\cap B_1$ & [name=33] $B(A\cap B_1)$ \\
[name=41] $A$ & & [name=42] $D$ & & [name=43] $B$\\
& [name=51] $A\cap B_1$ & & [name=52] $A_1 \cap B$ \\
& & [name=61] $A\cap B$
\ncline{11}{21}\ncline{12}{22}
\ncline{21}{32}\ncline{22}{32}
\ncline[style=DblDash]{21}{31}
\ncline[style=DblDash]{22}{33}
\ncline{31}{41}\ncline{31}{42}\ncline{32}{42}\ncline{33}{42}\ncline{33}{43}
\ncline{41}{51}\ncline{42}{51}\ncline{42}{52}\ncline{42}{52}
\ncline{51}{61}\ncline{52}{61}
\end{psmatrix}
\end{document}
输出结果如下:
答案2
使用 相当简单tikz-cd
,语法非常自然。我试过[double,densely dotted]
,但结果不太好。
\documentclass{article}
\usepackage{tikz-cd}
\begin{document}
\begin{tikzcd}[tips=false,column sep=1em,row sep=1.5em]
A_1 \ar{dr} &&&& B_1 \ar{dl} \\
& A(A_1\cap B_1) \ar{dr}
\ar[densely dotted,shift left=.2ex]{d}
\ar[densely dotted,shift right=.2ex]{d} &&
B(A_1\cap B_1) \ar{dl}
\ar[densely dotted,shift left=.2ex]{d}
\ar[densely dotted,shift right=.2ex]{d} \\
& A(A_1\cap B_1) \ar{dl} \ar{dr} & A_1\cap B_1 \ar{d} &
B(A_1\cap B_1) \ar{dl} \ar{dr} \\
A \ar{dr} && D \ar{dl} \ar{dr} && B \ar{dl} \\
& A\cap B_1 \ar{dr} && A_1\cap B \ar{dl} \\
&& A\cap B
\end{tikzcd}
\end{document}
答案3
只是为了好玩,TikZ
并借用 Christoph 回答的一些代码
\documentclass[tikz,border=3pt]{standalone}
\usetikzlibrary{matrix}
\begin{document}
\begin{tikzpicture}
\matrix (a) [matrix of math nodes, column sep=0.6cm, row sep=0.5cm]{
A_1 & & & & B_2\\
& A(A_1\cap B_1) & & B(A_1\cap B_1) \\
& A(A_1\cap B) & A_1\cap B_1 & B(A\cap B_1) \\
A & & D & & B\\
& A\cap B_1 & & A_1 \cap B \\
& & A\cap B \\};
\foreach \i/\j in {1-1/2-2, 1-5/2-4, 2-2/3-3, 2-4/3-3,%
3-2/4-1, 3-2/4-3, 3-3/4-3, 3-4/4-3, 3-4/4-5,%
4-1/5-2, 4-3/5-2, 4-3/5-4, 4-5/5-4, 5-2/6-3,5-4/6-3}
\draw (a-\i) -- (a-\j);
\draw[double,densely dotted] (a-2-2)--(a-3-2) (a-2-4)--(a-3-4);
\end{tikzpicture}
\end{document}