我有一个命令来创建一种框,我用它来写各种东西,比如定义或定理。它涉及在框内写入框的内容,tikzpicture
以按照我想要的方式设置框的样式(请参阅下面的最小工作示例)。
该代码是我根据在互联网上找到的片段编写的,当然可以做得更好 - 但到目前为止它一直运行正常。也就是说,直到我尝试在其中包含图片。嵌套的 TikZ 环境通常是一个坏主意,但我看不出有任何其他方法可以实现我想要的结果。命令\tikz
和环境tikzpicture
产生类似的结果。
具体来说,节点并没有出现在它们应该出现的位置(它们位于它们应该出现位置的东北方),并且手动为它们设置锚点会使它们偏离图片的左侧。尽管使用了\centering
或center
环境,图片仍未水平居中。
看起来,由于图片的存在,框中文本上方的垂直间距也出现了错误。
任何想法都将不胜感激,特别是我在想也许可以让 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}
如您所见,您使用了一个具有两个参数的环境,第一个参数是定义标题,第二个参数是用于进一步参考的标签。