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

これは、tikzpicturesの代わりにsaveboxesを使用する方法を示しています。また、テキストに合わせてベースラインに移動しました。

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

ここに画像の説明を入力してください

関連情報