Код

Код

У меня есть раздел кода ниже, метка «B» отображается на внешней стороне угла, как мы можем переместить ее на внутренний угол? Или есть другие хорошие предложения по ее маркировке?

\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}

Выходная картинка:

введите описание изображения здесь

решение1

Метка должна существоватьснаружиузел, чтобы избежать путаницы между содержимым и этикеткой. Самый простой ИМХО — добавить дополнительный узел для маркировки.

\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}

введите описание изображения здесь

решение2

Альтернатива решению @Harish (которое, я думаю, проще) — вручную задать якорь узла метки. Я следуюэтот ответ и определить insideключ, который заставит метки быть помещены «внутрь» узла:

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

Затем можно передать этот ключ операции labelвместе с другими параметрами (например, inner sep=1ptчтобы дать дополнительное заполнение узлу метки).

Код

\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}

Выход

введите описание изображения здесь

решение3

Эта попытка также является альтернативным решением по сравнению с решениями @Harish и @Kevin (которые, по-моему, просты и легки). Первому нужно calc, другому нужно inside/.code. Это решение использует anchorи atкоманды положения узла.

введите описание изображения здесь

Код

\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}

Связанный контент