tikz 环境内的圆圈文本

tikz 环境内的圆圈文本

我正在尝试在 tikz 环境中圈出一些数字。我遵循了此问题的答案:制作 \textcircled 数字的好方法?

我使用了这个解决方案,它在普通文本中效果很好。

\documentclass{article}
\usepackage{tikz}  
\newcommand*\circled[1]{\tikz[baseline=(char.base)]{
        \node[shape=circle,draw,inner sep=2pt] (char) {#1};}} 
 \begin{document}
 Numbers aligned with the text:  \circled{1} \circled{2} \circled{3} end.
 \end{document}

不幸的是,我遇到了一个问题。我想在更大的 tikz 节点内的圆圈中创建一些数字。但似乎新的“嵌套”节点从“父”节点继承了最小宽度,因此圆圈变得非常大。有什么办法可以解决这个问题吗?

谢谢你的帮助。

编辑:

我添加了 MWE 来解决我的问题。

\documentclass{standalone}

\usepackage{tikz}

\newcommand*\circled[1]{\tikz[baseline=(char.base)]{
    \node[shape=circle,draw,inner sep=2pt] (char) {#1};}} 

\begin{document}
\begin{tikzpicture}
\tikzstyle{big}=[draw,rectangle,rounded corners, fill=blue!20,minimum width=2cm, minimum height=2cm]

\node[big] (0) {First number = \circled{20},  Second number = \circled{20}};
\end{tikzpicture}
\end{document}

在此处输入图片描述

答案1

你想要这样的东西吗?

在此处输入图片描述

我修改了\circled命令,现在它接受逗号分隔的列表。如果列表只包含一个条目,则该条目会被圈出。如果列表包含多个条目,则每个条目都会被圈出,然后在所有被圈出的数字周围绘制另一个圆圈。因此,上面右侧的条目是 的结果\circled{1,2,3}

我的宏tikzpicture通过输入逗号分隔列表中的项目数来避免嵌套环境remember。如果逗号分隔列表包含多个条目,则它使用蒂克兹 fit库在所有节点周围绘制外圆。以下是完整代码:

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{fit}
\newcommand*\circled[1]{%
  \begin{tikzpicture}[baseline=(1.base), 
      circ/.style={shape=circle,draw,inner sep=1pt}]
    \foreach \num [count=\c,remember=\c as \C (initially 0)] in {#1}{
      \node[circ] (\c) at (\c*3ex,0) {\num};% hack the node placement
    }                   % probably should use the positioning library
    \ifnum\C>1\node[circ,fit=(1)(\C)]{};\fi% circle multiple entries
  \end{tikzpicture}%
}

\begin{document}

  Numbers aligned with the text: \circled{1} \circled{2} 
  \circled{3} end and then we have \circled{1,2,3}

\end{document}

我已隐含地假设逗号分隔列表中所有带圆圈的条目都是单个字符。如果不是这样,那么很容易修改上面的代码,使其使用蒂克兹 positioning库将节点彼此相邻放置。

答案2

您的 MWE 中的问题可以通过minimum size=0pt在 中添加节点样式的选项来解决\circled

\documentclass{standalone}

\usepackage{tikz}

\newcommand*\circled[1]{\tikz[baseline=(char.base)]{
    \node[shape=circle,draw,inner sep=2pt,minimum size=0pt] (char) {#1};}} 

\begin{document}
\begin{tikzpicture}
\tikzset{big/.style={draw,rectangle,rounded corners, fill=blue!20,minimum
width=2cm, minimum height=2cm}}

\node[big] (0) {First number = \circled{20},  Second number = \circled{20}};
\end{tikzpicture}
\end{document}

在此处输入图片描述

请注意,\tikzstyle已被弃用。

然而,这不是一个干净的解决方案,它可能会产生不可预测的结果。一个干净的解决方案是把里面的tikz图片放在\savebox

\documentclass{standalone}

\usepackage{tikz}

\newcommand*\circled[1]{\tikz[baseline=(char.base)]{
    \node[shape=circle,draw,inner sep=2pt,minimum size=0pt] (char) {#1};}} 
\newsavebox\SBoxA   
\begin{document}
\savebox\SBoxA{\circled{20}}%
\begin{tikzpicture}
\tikzset{big/.style={draw,rectangle,rounded corners, fill=blue!20,minimum
width=2cm, minimum height=2cm}}

\node[big] (0) {First number = \usebox\SBoxA,  Second number = \usebox\SBoxA};
\end{tikzpicture}
\end{document}

相关内容