如何正确地将一个 tikzpicture 包含到另一个 tikzpicture 中?

如何正确地将一个 tikzpicture 包含到另一个 tikzpicture 中?

我有一个命令来创建一种框,我用它来写各种东西,比如定义或定理。它涉及在框内写入框的内容,tikzpicture以按照我想要的方式设置框的样式(请参阅下面的最小工作示例)。

该代码是我根据在互联网上找到的片段编写的,当然可以做得更好 - 但到目前为止它一直运行正常。也就是说,直到我尝试在其中包含图片。嵌套的 TikZ 环境通常是一个坏主意,但我看不出有任何其他方法可以实现我想要的结果。命令\tikz和环境tikzpicture产生类似的结果。

具体来说,节点并没有出现在它们应该出现的位置(它们位于它们应该出现位置的东北方),并且手动为它们设置锚点会使它们偏离图片的左侧。尽管使用了\centeringcenter环境,图片仍未水平居中。

看起来,由于图片的存在,框中文本上方的垂直间距也出现了错误。

任何想法都将不胜感激,特别是我在想也许可以让 TeX 首先生成 TikZ 图片,而不管它是否嵌套,然后像命令一样将其包含在内includegraphics(这很好)。

\documentclass{article}

\usepackage{attachfile}
\usepackage{tikz}

\newlength{\saveparindent}
\AtBeginDocument{\setlength{\saveparindent}{\parindent}}
\newlength{\titlel}
\newsavebox{\boxcontent}
\newlength{\contenth}
\newcounter{saveequation}
\newcounter{savefootnote}
\newcounter{savefigure}

\newcommand{\boxedparagraph}[5]{
    \setcounter{saveequation}{\theequation}
    \setcounter{savefootnote}{\thefootnote}
    \setcounter{savefigure}{\thefigure}
    \settowidth{\titlel}{\textbf{#3} \textsc{#1}}
    \savebox{\boxcontent}{%
        \parbox[t]{0.88\textwidth}{
            \setlength{\parindent}{\saveparindent}
            #2\par\xdef\savedprevdepth{\the\prevdepth}
        }%
    }%
    \setcounter{equation}{\thesaveequation}
    \setcounter{footnote}{\thesavefootnote}
    \setcounter{figure}{\thesavefigure}
    \setlength{\contenth}{\ht\boxcontent+\dp\boxcontent}
    \begin{center}
        \begin{tikzpicture}
            \draw[color = #5, fill = #5] (0, 0) -- (0, 0.3cm + \contenth) arc (180:90:0.3) -- (0.88\textwidth + 0.6cm, 0.6cm + \contenth) arc (90:0:0.3) -- (0.88\textwidth + 0.9cm, 0.3) arc (0:-90:0.3) -- cycle;
            \draw[color = #4, line width = 1.5pt] (0, 0) -- (0, 0.3cm + \contenth) arc (180:90:0.3) -- (0.5cm + \titlel, \contenth + 0.6cm) arc (-90:0:0.2) -- (0.7cm + \titlel, \contenth + 1.1cm);
            \draw (0.4, \contenth + 0.9cm) node[anchor = west]{\textbf{#3} \textsc{#1}};
            \draw (0.3, 0.2) node[anchor = south west, rectangle, text justified, text width = 0.88\textwidth]{\noindent
            
            #2
            
            \par
            \prevdepth\savedprevdepth};
        \end{tikzpicture}
    \end{center}
}

\newcounter{definition}
\newcommand{\definition}[2]{
    \refstepcounter{definition}
    \boxedparagraph{#1}{#2}{Definition \thedefinition\ :}{orange}{yellow}
}

\begin{document}

\definition{Title of the box}{Text}

\definition{Title of the box}{
Text
\begin{center}
    \tikz{\draw (0, 0) circle(1); \draw (0, 0) node{$\bullet$};}
\end{center}
}

\definition{Title of the box}{
Text
\begin{center}
    \tikz{\draw (0, 0) circle(1); \draw (0, 0) node[anchor=center]{$\bullet$};}
\end{center}
}

\end{document}

最小工作示例输出

答案1

你的盒子tcolorbox可能是这样的:

\documentclass{article}

\usepackage{attachfile}
\usepackage{tikz}
\usepackage[most]{tcolorbox}

\newtcbtheorem[auto counter]{mydefinition}{Definition}{%
    enhanced,
    sharp corners=southwest,
    fonttitle=\bfseries,
    description font=\mdseries\scshape,
    attach boxed title to top left,
    boxed title style={colframe=white, colback=white},
    coltitle=black,
    colback=yellow,
    colframe=yellow,
    overlay = {\draw[orange, rounded corners, ultra thick] (frame.south west)|-(title.south)-|(title.north east);}
}{def}


\begin{document}

\begin{mydefinition}{Title of the box}{a}
Text
\end{mydefinition}

\begin{mydefinition}{Title of the box}{}
Text
\begin{center}
    \tikz{\draw (0, 0) circle(1); \draw (0, 0) node{$\bullet$};}
\end{center}
\end{mydefinition}

\begin{mydefinition}{Title of the box}{}
Text
\begin{center}
    \tikz{\draw (0, 0) circle(1); \draw (0, 0) node[anchor=center]{$\bullet$};}
\end{center}
\end{mydefinition}

\end{document}

如您所见,您使用了一个具有两个参数的环境,第一个参数是定义标题,第二个参数是用于进一步参考的标签。

在此处输入图片描述

相关内容