¿Cómo puedo diseñar fácilmente esta celosía?

¿Cómo puedo diseñar fácilmente esta celosía?

Tengo una pregunta: ¿cómo uso el látex para que pueda replicar esta estructura (látex)?

ingrese la descripción de la imagen aquí

Lamentablemente no conozco muy bien las bibliotecas. Me sería útil entender cómo dibujar ciertos diagramas para dibujar otras celosías muy similares a esta en el futuro.

Respuesta1

Con tikzuso puro, bastante elemental de las bibliotecas calc, chainsy positioning:

\documentclass[tikz, margin=3mm]{standalone}
\usetikzlibrary{calc, chains, 
                positioning}

\begin{document}
\begin{tikzpicture}[
node distance = 8mm and 2mm,
  start chain = going right,
     N/.style = {inner sep=1pt, on chain}
                    ]
\node (n21) [N] {$\{1,2\}$};
\node (n22) [N] {$\{1,3\}$};
\node (n23) [N] {$\{1,4\}$};
\node (n24) [N] {$\{2,3\}$};
\node (n25) [N] {$\{2,4\}$};
\node (n26) [N] {$\{3,4\}$};
%
\node (n11) [N, below=of n21]                           {$\{1\}$};
\node (n12) [N, below=of $(n22.south)!0.5!(n23.south)$] {$\{2\}$};
\node (n13) [N, below=of $(n24.south)!0.5!(n25.south)$] {$\{3\}$};
\node (n14) [N, below=of n26]                           {$\{4\}$};
%
\draw (n11) -- (n21)    (n11) -- (n22)
      (n12) -- (n21)    (n12) -- (n24)  (n12) -- (n25)
      (n13) -- (n22)    (n13) -- (n24)  (n13) -- (n26)
      (n14) -- (n23)    (n14) -- (n25)  (n14) -- (n26);
\draw[red, very thick]  (n11) -- (n23);
%
\node (n31) [N, above=of n21]               {$\{1,2,3\}$};
\node (n32) [N, above=of n21.north -| n12]  {$\{1,2,4\}$};
\node (n33) [N, above=of n21.north -| n13]  {$\{1,3,4\}$};
\node (n34) [N, above=of n26]               {$\{2,3,4\}$};
%
\draw (n31) -- (n21)    (n31) -- (n22)  (n31) -- (n23)
      (n32) -- (n21)    (n32) -- (n23)  (n32) -- (n25)
      (n33) -- (n23)    (n33) -- (n26)
      (n34) -- (n24)    (n34) -- (n25)  (n34) -- (n26);
\draw[red, very thick]  (n33) -- (n23);
%
\node (n41) [N, above=of $(n32.north)!0.5!(n33.north)$] {$\{1,2,3,4\}$};
%
\draw (n41) -- (n31)    (n41) -- (n32)  (n41) -- (n34);
\draw[red, very thick]  (n41) -- (n33);
\end{tikzpicture}
\end{document}

ingrese la descripción de la imagen aquí

Respuesta2

Este diagrama parece tener la siguiente lógica: uno comienza {1,2,3,4}y encuentra todos los subconjuntos de esa lista que surgen al eliminar una entrada y los coloca en la línea siguiente. En la línea debajo, se colocan todos los subconjuntos de estos, que surgen al eliminar otro elemento. Siguiendo así, se llega a listas de un solo elemento en la última línea.

Una lista determinada se conecta con una lista en el nivel superior si está completamente contenida en esa lista. Uno podría preguntarse si se puede hacer que LaTeX decida dónde dibujar estas líneas de conexión. La respuesta es

Por supuesto, esto requiere algunos preparativos, como una prueba de membresía, que está disponiblepor ejemplo aquíy una función que encuentra la intersección de dos listas, que agregué aquí. El resultado es

\documentclass[tikz,border=3mm]{standalone}
\newcounter{iloop}
\makeatletter
\pgfmathdeclarefunction{memberQ}{2}{%
  \begingroup%
    \edef\pgfutil@tmpb{0}%memberQ({\lstPast},\inow)
    \edef\pgfutil@tmpa{#2}%
    \expandafter\pgfmath@member@i#1\pgfmath@token@stop%
    \edef\pgfmathresult{\pgfutil@tmpb}%
    \pgfmath@smuggleone\pgfmathresult%
  \endgroup}
\def\pgfmath@member@i#1{%
    \ifx\pgfmath@token@stop#1%
    \else
      \edef\pgfutil@tmpc{#1}%
      \ifx\pgfutil@tmpc\pgfutil@tmpa\relax%
      \gdef\pgfutil@tmpb{1}%
      \fi%
      \expandafter\pgfmath@member@i%
    \fi}  
\pgfmathdeclarefunction{intersection}{2}{%
  \begingroup%
    \pgfmathparse{int(dim(#1)-1)}%
    \pgfutil@tempcnta=\pgfmathresult%
    \pgfutil@tempcntb=0%
    \edef\pgfutil@tmpc{}%
    \edef\pgfutil@tmpd{}%
    \loop%
    \pgfmathsetmacro{\pgfutil@tmpe}{{#1}[\the\pgfutil@tempcntb]}%
    \pgfmathtruncatemacro{\pgfutil@tmpa}{memberQ("#2",\pgfutil@tmpe)}%
    \ifnum\pgfutil@tmpa=1%
     \ifx\pgfutil@tmpc\pgfutil@tmpd%
     \edef\pgfutil@tmpc{\pgfutil@tmpe}%
     \else%
     \edef\pgfutil@tmpc{\pgfutil@tmpc,\pgfutil@tmpe}%
     \fi%
    \fi% 
    \advance\pgfutil@tempcntb1%
    \ifnum\the\pgfutil@tempcntb<\the\pgfutil@tempcnta\repeat%
    \edef\pgfmathresult{\pgfutil@tmpc}%
    \pgfmathsmuggle\pgfmathresult%
  \endgroup}          
\makeatother
\begin{document}
\begin{tikzpicture}
 \def\myn{0}
 \foreach \X [count=\Y,remember=\X as \LastX,remember=\myn as \mylastn] in {{"1,2,3,4"},{"1,2,3","1,2,4","1,3,4","2,3,4"},%
 {"1,2","1,3","1,4","2,3","2,4","3,4"},{"1","2","3","4"}}
 {\pgfmathtruncatemacro{\myn}{dim({\X})-1}
  \pgfmathsetmacro{\myfirst}{{\X}[0]}
  \pgfmathsetmacro{\mylast}{{\X}[\myn]}
  \ifnum\Y=1
    \pgfmathsetmacro{\myfirst}{{{\X}}[0]}
    \node (L-1-1) at (0,0) {$\{\myfirst\}$};
  \else 
   \node (L-\Y-1) at (-4,1.5-\Y*1.5) {$\{\myfirst\}$};
   \node (L-\Y-\the\numexpr\myn+1) at (4,1.5-\Y*1.5) {$\{\mylast\}$};
   \path (L-\Y-1.center) -- (L-\Y-\the\numexpr\myn+1\relax.center) 
    foreach \Z in {1,...,\the\numexpr\myn-1}
     {[/utils/exec=\pgfmathsetmacro{\myentry}{{\X}[\Z]}] 
        node[pos=\Z/\myn] (L-\Y-\the\numexpr\Z+1) {$\{\myentry\}$} };
   \ifnum\Y=2
     \foreach \Z in {0,...,\the\numexpr\myn}
     {\draw (L-\Y-\the\numexpr\Z+1) -- (L-1-1);}
   \else
     \foreach \Z in {0,...,\the\numexpr\myn}        
     {\pgfmathsetmacro{\CurrentItem}{{\X}[\Z]}%
      \setcounter{iloop}{0}%        
      \loop\pgfmathsetmacro{\LastItem}{{\LastX}[\value{iloop}]}%
      \stepcounter{iloop}%
      \pgfmathsetmacro{\myintersection}{intersection("\CurrentItem","\LastItem")}%
      \pgfmathtruncatemacro{\nint}{dim(\myintersection)-dim(\CurrentItem)}%
      \ifnum\nint=0
       \draw (L-\Y-\the\numexpr\Z+1) -- 
        (L-\the\numexpr\Y-1\relax-\the\numexpr\value{iloop});
      \fi
      \ifnum\value{iloop}<\the\numexpr\mylastn+1\relax%
      \repeat
      }
   \fi
  \fi
 }
 \draw[red,very thick]  (L-1-1) -- (L-2-3) -- (L-3-3) -- (L-4-1);
\end{tikzpicture}

\end{document}

ingrese la descripción de la imagen aquí

Lo único que está codificado es la línea roja, para la cual no vi ningún patrón. Sin embargo, dibujar esto es tan simple como

\draw[red,very thick]  (L-1-1) -- (L-2-3) -- (L-3-3) -- (L-4-1);

La ventaja es que esto es aplicable a otros diagramas similares y no es necesario dibujar las cosas a mano. (Por ejemplo, a partir de ahora, en la otra respuesta falta la conexión entre {1,3,4}y {1,3}. Si tuviera que dibujarlos con las patas, lo más probable es que me perdiera más conexiones).

información relacionada