我有以下代码:
\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
在椭圆内绘制的文本。最后,我想将“样式”(也许是我经过长时间的研究无法找到的一个选项)保存为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}