Saltar al contenido

Problemas con el posicionamiento de nodos en tikz

No dudes en compartir nuestra web y códigos en tus redes, necesitamos de tu ayuda para ampliar nuestra comunidad.

Solución:

Aquí hay una segunda versión que usa un pic (primera versión a continuación). I estola tomó prestado un código de la respuesta de cfr a “Cómo hacer correctamente macro con el uso de imagen? “, para que sea más fácil modificar la configuración por imagen.

ingrese la descripción de la imagen aquí

documentclass[border=5mm]standalone
usepackagetikz
usetikzlibrarycalc, positioning
tikzset%
  pics/databox/.style=%
    code=%
      tikzset%
        /databox settings,
        default,
        #1,
      
        node [draw,rounded corners=rounding,minimum size=size,inner sep=textborder] (-txt) txt;
        % "3D" top
        draw [rounded corners = rounding]
        let
          p1=(-txt.south west), p2=(-txt.north east), n1=x2-x1, n2=y2-y1
        in
        (-txt.north) -- 
        ++ (-n1/2, 0) -- coordinate [midway] (topLC) 
        ++ (1.5*xslant, yslant) coordinate (topUL) -- 
        ++ (n1, 0) -- 
        ++ (-1.5*xslant, -yslant) -- 
        cycle;
        % "3D" side
        draw [rounded corners = rounding]
        let
          p1=(-txt.south west), p2=(-txt.north east), n1=x2-x1, n2=y2-y1
        in
        (-txt.east) -- 
        ++ (0,n2/2) -- 
        ++ (1.5*xslant, yslant) -- 
        ++ (0,-n2) -- 
        ++ (-1.5*xslant, -yslant) -- 
        cycle;

        ifnum lidopen=1
        % lid
        draw [rounded corners = rounding]
        let
          p1=(topLC), p2=(topUL), n1=2*(x2-x1), n2=2*(y2-y1),
          p3=(-txt.south west), p4=(-txt.north east), n3=y4-y3)
        in
        (topLC) -- (topUL) --  
        ++ (-n3*cos(lidangle), n3*sin(lidangle)) -- 
        ++ (-n1,-n2) -- 
        ++ (n3*cos(lidangle), -n3*sin(lidangle)) -- 
        cycle;
        fi
    
  ,
  /databox settings/.is family,
  /databox settings,
  size/.store in=size,
  textborder/.store in=textborder,
  xslant/.store in=xslant,
  yslant/.store in=yslant,
  rounding/.store in=rounding,
  text/.store in=txt,
  lidangle/.store in=lidangle,
  open/.store in=lidopen,
  default/.style=%
    textborder=0.333em,
    xslant=4pt,
    yslant=10pt,
    rounding=2pt,
    text=SIP,
    size=1.5*width("SIP"),
    lidangle=20,
    open=0
  



begindocument

begintikzpicture

pic (sip) databox;
pic [right=1.5cm of sip-txt] (sipOpen) databox=text=SAAAP,open=1;
pic [right=of sipOpen-txt,blue,thick] (bluesip) databox=rounding=4pt;
pic [right=of  bluesip-txt,red] databox=text=SUUP,size=40pt,xslant=8pt;

endtikzpicture
enddocument

Versión antigua

Quizás podrías usar un pic. Sin embargo, esto tiene sus propios problemas, pero parece que la solución mencionada en https://tex.stackexchange.com/a/302562/586 también funciona aquí.

documentclassstandalone
usepackagetikz
usetikzlibrarycalc, positioning

tikzset
databox/.pic=
        % Settings
        defwidth25pt;
        defheight25pt;
        deftextborder2pt;
        defxslant4pt;
        defyslant10pt;
        defrounding2pt;
        coordinate (CenterPoint) at (-width/2,-height/2); 
        % Drawing
        draw [rounded corners = rounding] (CenterPoint) rectangle ($(CenterPoint) + (width, height)$);
        % note anchor=center
        node [anchor=center] (-txt) at ($(CenterPoint) + (width/2., 0.5*height)$) #1;
        % "3D" top
        draw [rounded corners = rounding] %
        ($(CenterPoint) + (0, height)$) -- %
        ($(CenterPoint) + (-width/2. + 5*xslant, height + yslant)$) -- %
        ($(CenterPoint) + (width + 1.5*xslant, height + yslant)$) -- %
        ($(CenterPoint) + (width, height)$) -- %
        cycle;
        % "3D" side
        draw [rounded corners = rounding] %
        ($(CenterPoint) + (width + 1.5*xslant, height + yslant)$) -- %
        ($(CenterPoint) + (width + 1.5*xslant, yslant)$) -- %
        ($(CenterPoint) + (width, 0)$) -- %
        ($(CenterPoint) + (width, height)$) -- %
        cycle;
  


begindocument

begintikzpicture

pic (sip) databox=SIP;

pic [right=of sip-txt] (sipOpen) databox=SIP;

pic [below=1.4cm of sipOpen-txt,blue] databox=SIP;

pic [above=1.4cm of sipOpen-txt,red] databox=SIP;

endtikzpicture

enddocument

ingrese la descripción de la imagen aquí

Aquí puedes ver las reseñas y valoraciones de los lectores

Recuerda comunicar este escrito si te ayudó.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *