在背景矩形上绘制

在背景矩形上绘制

我有以下代码:

\documentclass[11pt,a4paper]{article}
\usepackage{tikz}
\usetikzlibrary{backgrounds}

\begin{document}
    \begin{tikzpicture}[framed, background rectangle/.style={draw=black!15,fill=black!5,rounded corners=1ex}]
        \node (a) at (1,1) {a};
    \end{tikzpicture}
\end{document}

它产生:

图片1

现在我想在顶部较暗的线上画一个椭圆,例如:

图片2

我的问题是,这个椭圆应该由一些定义预先定义,这些定义会获取要#1在椭圆内绘制的文本。最后,我想将“样式”(也许是我经过长时间的研究无法找到的一个选项)保存为mybackground。所以我的目标是写:

\documentclass[11pt,a4paper]{article}
\usepackage{tikz}
\usetikzlibrary{backgrounds}

\begin{document}
    \begin{tikzpicture}[mybackground=#1]
        \node (a) at (1,1) {a};
    \end{tikzpicture}
\end{document}

为了得到相同的结果,但现在应该得到#1并将其写在椭圆中。

编辑:Harish Kumar 的回答非常完美。对于那些想知道这是为了什么的人:(椭圆和“4”是这个问题的重点)

结果

答案1

类似这样的事?

\documentclass[11pt,a4paper]{article}
\usepackage{tikz}
\usetikzlibrary{shapes.geometric,backgrounds}

\tikzset{
  mybackground/.style={execute at end picture={
        \begin{scope}[on background layer]
          \draw[black!15,fill=black!5,rounded corners=1ex] (current bounding box.south west)
                    rectangle (current bounding box.north east);
          \node[draw,fill=olive,ellipse,anchor=west,inner sep=1pt,minimum width=4ex] at (current bounding box.north
                   west){#1};
        \end{scope}
    }},
}


\begin{document}
    \begin{tikzpicture}[mybackground={here}]
        \node[minimum width=1in,minimum height=1in] (a) at (1,1) {abcd};
    \end{tikzpicture}
\end{document}

在此处输入图片描述

答案2

如果有人感兴趣,下面的代码显示了一个解决方案tcolorbox。这个包在 Harish 的回答评论中提到过,它专门用于制作带框架的彩色盒子。

代码显示了两种不同类型的框\mybox\mytikzbox它们共享一个称为的通用样式mystyle\mybox\mytikzbox使用\newtcbox命令声明以便根据其内容调整其宽度。\newtcolorbox命令声明具有固定宽度的环境(\linewidth默认情况下)。

虽然\mybox对任何类型的内容都有效,但\mytikzbox仅对有效tikzpictures(这似乎是 OP 的意图)。在这种情况下,\mytikzbox内容会自动被对 - 包围,而对\begin{tikzpicture}-\end{tikzpicture}需要明确包含在 中\mybox

\documentclass[border=2mm]{standalone}
\usepackage[most]{tcolorbox}

\tcbset{mystyle/.style={
    enhanced, 
    coltitle = black, 
    colframe = black!15,
    attach boxed title to top left={yshift=-.25mm-\tcboxedtitleheight/2, xshift=2ex},
    boxed title style={enhanced, 
        frame code={\draw[black!15, line width=.5mm, fill=white, 
            rounded corners=1.75ex] 
            (frame.south west) rectangle (frame.north east);}, 
        interior empty}
    }}

\newtcbox{\mybox}[2][]{mystyle, #1, title=#2}

\newtcbox{\mytikzbox}[2][]{mystyle, tikz upper, #1, title=#2}

\begin{document}

\mybox{1}{\begin{tikzpicture}
        \node[circle, red, fill=red!30] (a) {A};
        \node[circle, blue, fill=blue!30] (b) at (2,2) {B};
        \draw[thick,green] (a)--(b);
    \end{tikzpicture}
}

\mytikzbox{2}{
        \node[circle, red, fill=blue!30] (a) {A};
        \node[circle, blue, fill=red!30] (b) at (2,2) {B};
        \draw[thick,purple] (a)--(b);
}

\end{document}

在此处输入图片描述

相关内容