我有以下哈斯图
使用以下代码:
\documentclass[a4paper, 12pt]{article}
\usepackage[utf8]{inputenc}
\usepackage{tikz}
\usetikzlibrary{fit}
\begin{document}
\begin{figure}[h]
\centering
\begin{tikzpicture}
\node (abc) at (0,4) {$\{a,b,c\}$};
\node (ab) at (-2,2) {$\{a,b\}$};
\node (ac) at (0,2) {$\{a,c\}$};
\node (bc) at (2,2) {$\{b,c\}$};
\node (a) at (-2,0) {$\{a\}$};
\node (b) at (0,0) {$\{b\}$};
\node (c) at (2,0) {$\{c\}$};
\node (empty) at (0,-2) {$\{\}$};
\draw (abc) -- (ab) -- (a) -- (empty) -- (c) -- (bc) -- (abc) -- (ac) -- (a)
(ac) -- (c)
(b) -- (empty);
\draw[preaction={draw=white, -,line width=6pt}] (ab) -- (b) -- (bc);
\end{tikzpicture}
\label{fig:hasse}
\end{figure}
\end{document}
我试图在一些节点周围画一个框,像这样:
\documentclass[a4paper, 12pt]{article}
\usepackage[utf8]{inputenc}
\usepackage{tikz}
\usetikzlibrary{fit}
\begin{document}
\begin{figure}[h]
\centering
\begin{tikzpicture}
\node (abc) at (0,4) {$\{a,b,c\}$};
\node (ab) at (-2,2) {$\{a,b\}$};
\node (ac) at (0,2) {$\{a,c\}$};
\node (bc) at (2,2) {$\{b,c\}$};
\node (a) at (-2,0) {$\{a\}$};
\node (b) at (0,0) {$\{b\}$};
\node (c) at (2,0) {$\{c\}$};
\node (empty) at (0,-2) {$\{\}$};
\draw (abc) -- (ab) -- (a) -- (empty) -- (c) -- (bc) -- (abc) -- (ac) -- (a)
(ac) -- (c)
(b) -- (empty);
\draw[preaction={draw=white, -,line width=6pt}] (ab) -- (b) -- (bc);
\node[draw,dotted,fit=(ab) (a) (b)] {};
\end{tikzpicture}
\label{fig:hasse}
\end{figure}
\end{document}
(毫不奇怪)最终看起来像这样:
我想要的(理想情况下)是制作一些圆角三角形,覆盖节点 (ab)、(a) 和 (b),使得 (ac) 保持未覆盖状态。我对 tikz 还很陌生(尽管我经常使用 tikz-cd),所以我不确定哪个库会有所帮助,而不会使代码过于复杂(我读过的几个答案如果没有解释,我将无法适应我的目的)。
任何帮助都值得感激,谢谢!
答案1
您也可以使用 来完成此操作tikz-cd
。
您execute at end picture={...}
可以添加绘制后需要执行的任何 TikZ 命令tikzcd
。
这个crossing over
想法来自塞巴斯蒂亚诺已删除的答案。
如果你不想命名,matrix
你可以使用 \tikzcdmatrixname
直接使用(见marmot 的这个回答, 例如)。
要为整个tikzcd
文档设置一些选项,您可以使用\tikzcdset{...}
,请参阅第 2 节控制图表的外观的包装文档。
矩阵语法类似于任何其他 LaTeX 表:&
分隔单元格和\\
分隔行。
该命令\ar
是的缩写。\arrow
其选项u
、、和分别表示上、下、左、右(箭头方向)。 d
l
r
该选项execute at end picture={...}
允许您添加一些在绘制图表后执行的 TikZ 命令。
mymatr-n-m
是矩阵的行n
和列元素。m
mymatr
\coordinate (comodo) at (mymatr-2-1.north west |- mymatr-3-1.south west);
创建comodo
坐标 x = 的点mymatr-2-1.north west
,坐标 y = 的点mymatr-3-1.south west
。
\draw (A) -- (B);
从 A 到 B 画一条线。
dashed
并且rounded corners
是具有明显含义的选项。
yshift=...
垂直、水平移动坐标xshift=...
。
cycle
最后告诉我们路径必须从这里到达起点。
\documentclass[a4paper,12pt]{article}
\usepackage{tikz-cd}
\tikzcdset{
every arrow/.append style={dash},
every diagram/.style={
row sep=50pt,
column sep=30pt
},
}
\begin{document}
\begin{tikzcd}[
every matrix/.style={name=mymatr},
execute at end picture={
\coordinate (comodo) at (mymatr-2-1.north west |- mymatr-3-1.south west);
\draw[dashed, rounded corners] ([yshift=3pt]mymatr-2-1.north west) -- ([yshift=-3pt]comodo) -- ([yshift=-3pt, xshift=2pt]mymatr-3-2.south east) -- ([yshift=4pt, xshift=2pt]mymatr-3-2.north east) -- ([yshift=3pt]mymatr-2-1.north east) -- cycle;
}
]
& \{a,b,c\} \ar[ld] \ar[d] \ar[rd]\\
\{a,b\} \ar[d] & \{a,c\} \ar[ld] \ar[rd] & \{b,c\} \ar[d, crossing over] \ar[ld, crossing over] \\
\{a\} \ar[rd] & \{b\} \ar[lu, crossing over] \ar[d, crossing over] & \{c\} \ar[ld] \\
& \{\}
\end{tikzcd}
\end{document}
答案2
为了更加灵活,您可以手动绘制所需节点周围的路径:
\documentclass[a4paper, 12pt]{article}
\usepackage[utf8]{inputenc}
\usepackage{tikz}
\usetikzlibrary{fit}
\begin{document}
\begin{figure}[h]
\centering
\begin{tikzpicture}
\node (abc) at (0,4) {$\{a,b,c\}$};
\node (ab) at (-2,2) {$\{a,b\}$};
\node (ac) at (0,2) {$\{a,c\}$};
\node (bc) at (2,2) {$\{b,c\}$};
\node (a) at (-2,0) {$\{a\}$};
\node (b) at (0,0) {$\{b\}$};
\node (c) at (2,0) {$\{c\}$};
\node (empty) at (0,-2) {$\{\}$};
\draw (abc) -- (ab) -- (a) -- (empty) -- (c) -- (bc) -- (abc) -- (ac) -- (a)
(ac) -- (c)
(b) -- (empty);
\draw[preaction={draw=white, -,line width=6pt}] (ab) -- (b) -- (bc);
\draw[dotted,rounded corners=20pt] ([yshift=0.9cm]ab.north west) -- ([xshift=-0.15cm,yshift=-0.1cm]a.south west) -- ([xshift=0.7cm,yshift=-0.1cm]b.south east) -- cycle;
\end{tikzpicture}
\label{fig:hasse}
\end{figure}
\end{document}