tikzpicture не помещается в таблицу из-за символа «?» внутри объекта

tikzpicture не помещается в таблицу из-за символа «?» внутри объекта

Я пытаюсь сделать так, чтобы таблица на диаграмме выглядела прилично, но объект, \tolabelкажется, выходит за пределы радиуса круга, из-за чего таблица выглядит неровной.

Выход

Если я поменяю последний объект на другой, например, \labelaили \labelbон подходит. Похоже, это из-за вопросительного знака внутри круга. Как мне сделать так, чтобы он подходил?

Эта таблица является частью более крупной фигуры с другими компонентами. Но это единственная часть, которая не работает. Мой код ниже:

\documentclass{article}
\usepackage{graphicx} % Required for inserting images

\usepackage{tikz}
\usetikzlibrary{shapes.geometric, arrows, calc}

    \newcommand{\labela}{\tikz{\fill[blue, draw=black] (0,0) circle (0.25cm);}}
    \newcommand{\labelb}{\tikz{\fill[purple, draw=black] (0,0) circle (0.25cm);}}
    \newcommand{\unlabeled}{\tikz{\fill[white, draw=black] (0,0) circle (0.25cm);}}
    \newcommand{\tolabel}{%
    \tikz{\fill[yellow, draw=black] (0,0) circle (0.25cm); \node[text=black] at (0,0) {\textbf{?}};}%
}

\begin{document}

\begin{figure}
    \centering
    \begin{tikzpicture}
        \node[draw, fill=gray!20, minimum width=3cm, minimum height=1cm] at (15,4) {%
            \begin{tabular}{@{}l@{}}
                Legend \\
                \labela \hspace{0.5em} Label A \\
                \labelb \hspace{0.5em} Label B \\
                \unlabeled \hspace{0.5em} Unlabeled \\
                \tolabel \hspace{0.5em} {\shortstack{Sample to\\ be labeled}}
            \end{tabular}
        };
    \end{tikzpicture}
    \caption{Caption}
    \label{fig:enter-label}
\end{figure}

\end{document}

решение1

Это показывает, как использовать saveboxes вместо tikzpictures. Я также перешел к базовым линиям, чтобы соответствовать тексту,

\documentclass{article}
\usepackage{graphicx} % Required for inserting images

\usepackage{tikz}
\usetikzlibrary{shapes.geometric, arrows, calc}

    \newsavebox{\labela}
    \savebox{\labela}{\tikz[baseline=(A.base)]{\fill[blue, draw=black] (0,0) circle (0.25cm);
      \node (A) at (0,0) {\textbf{\strut}};}}
    \newsavebox{\labelb}
    \savebox{\labelb}{\tikz[baseline=(A.base)]{\fill[purple, draw=black] (0,0) circle (0.25cm);
      \node (A) at (0,0) {\textbf{\strut}};}}
    \newsavebox{\unlabeled}
    \savebox{\unlabeled}{\tikz[baseline=(A.base)]{\fill[white, draw=black] (0,0) circle (0.25cm);
      \node (A) at (0,0) {\textbf{\strut}};}}
    \newsavebox{\tolabel}
    \savebox{\tolabel}{\tikz[baseline=(A.base)]{\fill[yellow, draw=black] (0,0) circle (0.25cm); 
      \node (A) at (0,0) {\textbf{?}};}}

\begin{document}

\begin{figure}
    \centering
    \begin{tikzpicture}
        \node[draw, fill=gray!20, minimum width=3cm, minimum height=1cm] at (15,4) {%
            \begin{tabular}{@{}l@{}}
                Legend \\
                \usebox\labela \hspace{0.5em} Label A \\
                \usebox\labelb \hspace{0.5em} Label B \\
                \usebox\unlabeled \hspace{0.5em} Unlabeled \\
                \usebox\tolabel \hspace{0.5em} {\shortstack{Sample to\\ be labeled}}
            \end{tabular}
        };
    \end{tikzpicture}
    \caption{Caption}
    \label{fig:enter-label}
\end{figure}

\end{document}

демо

решение2

Это работа для матрицы TikZ:

\documentclass{article}

\usepackage{tikz}
\usetikzlibrary{matrix}
\tikzset{
    mynode/.style={
      circle, 
      text height=2.5ex, text depth=1ex, 
      text width=.25cm, 
      inner sep=0pt, 
      text centered,
      draw, 
      fill=#1
      },
    }

\usepackage{caption}

\begin{document}
\begin{figure}\centering
\begin{tikzpicture} 
\matrix[
  matrix of nodes, nodes in empty cells,
  fill=gray!30,
  nodes={anchor=center},
  column 2/.style={text width=width("be labelled")},
  inner xsep=6pt,
  row sep=4pt,
  ] (mymatr) {  
   &[4pt] \\[6pt]
  |[mynode=blue]| & Label A \\
  |[mynode=purple]| & Label B \\
  |[mynode=white]| & Unlabelled \\[-2pt]
  |[mynode=yellow]|{?} & {Sample to\\ be labelled} \\
  };
  \node[anchor=north west, inner ysep=4pt] at (mymatr.north west) {Legend};
  \end{tikzpicture}
\caption{Caption}
\end{figure}
\end{document}

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

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