
図の中の表をきちんと表示させようとしているのですが、オブジェクトが\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}