Código

Código

Tengo la siguiente sección de código, la etiqueta "B" se muestra en el exterior de la esquina, ¿cómo podemos cambiarla a la esquina interior? ¿O alguna otra buena sugerencia para etiquetarlo?

\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{positioning,fit,calc}
\begin{document}

\begin{tikzpicture}[inner sep=0mm,outer sep=0,node distance=4em,
  box/.style={draw,anchor=west,minimum width=10em,minimum height=3em},
]
  \node (A) [box] {A};
  \node (B) [below=of A.west,box,label=south west:B] {};  
\end{tikzpicture}
\end{document}

La imagen de salida es:

ingrese la descripción de la imagen aquí

Respuesta1

Se supone que existe una etiquetaafueraun nodo para evitar confusión entre el contenido y la etiqueta. La OMI más sencilla es agregar un nodo adicional para etiquetar.

\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{positioning,fit,calc}
\begin{document}

\begin{tikzpicture}[inner sep=0mm,outer sep=0,node distance=4em,
  box/.style={draw,anchor=west,minimum width=10em,minimum height=3em},
]
  \node (A) [box] {A};
  \node (B) [below=of A.west,box] {}node at ($(B.south west) +(0.15,0.15)$) {B};
\end{tikzpicture}
\end{document}

ingrese la descripción de la imagen aquí

Respuesta2

Una alternativa a la solución de @Harish (que creo que es más fácil) es configurar manualmente el ancla del nodo de etiqueta. Yo sigoesta respuesta y defina una insideclave, que hace que las etiquetas se coloquen "dentro" de un nodo:

\usepackage{etoolbox}
\makeatletter
\tikzset{inside/.code=\preto\tikz@auto@anchor{\pgf@x-\pgf@x\pgf@y-\pgf@y}}
\makeatother

Luego se puede pasar esta clave a la labeloperación junto con otras opciones (por ejemplo, inner sep=1ptpara dar relleno adicional al nodo de etiqueta).

Código

\documentclass[border=2pt]{standalone}
\usepackage{tikz}
\usetikzlibrary{positioning,fit,calc}
\usepackage{etoolbox}
\makeatletter
\tikzset{inside/.code=\preto\tikz@auto@anchor{\pgf@x-\pgf@x\pgf@y-\pgf@y}}
\makeatother

\begin{document}

\begin{tikzpicture}[inner sep=0mm,outer sep=0,node distance=4em,
  box/.style={draw,anchor=west,minimum width=10em,minimum height=3em},
]
  \node (A) [box] {A};
  \node (B) [below=of A.west,box,label={[inside,inner sep=1pt]south west:B}] {};  
\end{tikzpicture}
\end{document}

Producción

ingrese la descripción de la imagen aquí

Respuesta3

Este intento también es una solución alternativa en comparación con las soluciones de @Harish y @Kevin (que creo que es fácil y simple). El primero necesita calc, el otro necesita inside/.code. Esta solución utiliza comandos anchory atde posición de nodo.

ingrese la descripción de la imagen aquí

Código

\documentclass[border=10pt]{standalone}
\usepackage{tikz}
\usetikzlibrary{positioning,fit,calc}
\begin{document}

\begin{tikzpicture}[inner sep=0.1mm,outer sep=0,node distance=4em,
  box/.style={draw,anchor=west,minimum width=10em,minimum height=3em},
]
  \node (A) [box] {A};
  \node (B) [below=of A.west, box] {}; 
  \node     [anchor=south west, at=(B.south west)]{B};
\end{tikzpicture}
\end{document}

información relacionada