Beim Verschachteln einer mdframed-Umgebung in einer mdframed-Umgebung, die tikz verwendet, scheint es, dass die verschachtelte mdframed-Umgebung viele der Eigenschaften der Umgebung übernimmt, in die sie nicht verschachtelt wird, und ihre eigenen Eigenschaften ersetzt. Dazu gehört, nun ja, so ziemlich alles, einschließlich Knoten, Hintergrundfarbe, Breite (und Farbe) der äußeren Linien und die Rundung der Ecken, außer in dem Fall, in dem die verschachtelte mdframed-Umgebung auch tikz verwendet, in welchem Fall nur das Knotenproblem besteht. Dies wird unten anhand mehrerer verschiedener Beispiele veranschaulicht:
\documentclass{article}
\usepackage{tikz}
\usepackage[framemethod=tikz]{mdframed}
%%%%%%%%%%%%%%%%% mdframed style with node
\tikzset{tetregris/.style =
{draw=gray, thick, fill=white, shading = exampletitle, %
text=darkgray, rectangle, rounded corners, right,minimum height=.7cm}}
\pgfdeclarehorizontalshading{examplebackground}{100bp}
{color(0bp)=(black!2); color(100bp)=(teal!30)}
\pgfdeclarehorizontalshading{exampletitle}{100bp}
{color(0bp)=(black!2);color(100bp)=(purple!20)}
\newcounter{example}
\renewcommand*\theexample{Example~\arabic{example}}
\makeatletter
\mdfdefinestyle{examplestyle}{%
outerlinewidth=1em,outerlinecolor=white,%
leftmargin=-1em,rightmargin=-1em,%
middlelinewidth=1.2pt,roundcorner=5pt,linecolor=gray,
apptotikzsetting={\tikzset{mdfbackground/.append style ={%
shading = examplebackground}}},
innertopmargin=1.2\baselineskip,
skipabove={\dimexpr0.5\baselineskip+\topskip\relax},
skipbelow={-1em},
needspace=\baselineskip,
frametitlefont=\sffamily\scshape,
settings={\global\stepcounter{example}},
singleextra={%
\node[tetregris,xshift=-3cm] at (P) %
{~\mdf@frametitlefont{\theexample}\hbox{~}};
},
firstextra={%
\node[tetregris,xshift=-3cm] at (P) %
{~\mdf@frametitlefont{\theexample}\hbox{~}};
},
}
\makeatother
%%%%%%%%%%%%%%%%%% simple mdframed style
\global\mdfdefinestyle{simplestyle}{%
linecolor=red,linewidth=3pt,%
leftmargin=1cm,rightmargin=1cm
}
\begin{document}
\begin{mdframed}[style=examplestyle]
blah
\begin{mdframed}[style=simplestyle]
blah
\end{mdframed}
blah
\end{mdframed}
\begin{mdframed}[style=simplestyle]
blah
\end{mdframed}
\end{document}
Das Problem besteht weiterhin, unabhängig davon, ob Knoten vorhanden sind oder nicht (oder welche Optionen ihnen gegeben werden, d. h. \singleextra, \doubleextra usw. machen keinen Unterschied). Das Problemnichttritt im umgekehrten Szenario mit einer normalen MDFramed-Umgebung auf, die eine MDFramed-Umgebung mit Tikz enthält.
Gibt es eine Möglichkeit, die verschachtelte MDFramed-Umgebung daran zu hindern, die Eigenschaften aus der Umgebung zu übernehmen, in der sie enthalten ist? Gibt es insbesondere eine Möglichkeit, sicherzustellen, dass die Knoten nicht wiederholt werden, da dies auch die Nummerierung durcheinander bringt?
Antwort1
Fügen Sie die Option einfach default
hinzu simplestyle
:
\global\mdfdefinestyle{simplestyle}{%
default,
linecolor=red,linewidth=3pt,%
leftmargin=1cm,rightmargin=1cm
}
Dadurch werden die Stile zu Beginn auf die Standardeinstellung zurückgesetzt.
Alternativ kann man anwenden style=defaultoptions
. Ein einfacheres Beispiel, das die Verwendung beider Möglichkeiten veranschaulicht
Code:
\documentclass{article}
\usepackage{xcolor}
\usepackage[framemethod=Tikz]{mdframed}
\mdfsetup{middlelinecolor=red, middlelinewidth=2pt, backgroundcolor=red!10, roundcorner=10pt}
\listfiles
\begin{document}
\noindent
Without \verb|default| option:
\begin{mdframed} Text\par Text
\end{mdframed}
% --------------------------------------
With \verb|default| option applied:
\begin{mdframed}[default] Text \par Text
\end{mdframed}
% --------------------------------------
With \verb|style=defaultoptions| option applied:
\begin{mdframed}[style=defaultoptions] Text\par Text
\end{mdframed}
\end{document}
Antwort2
Es gibt vielleicht einen Weg hinein mdframed
, aber ich kenne ihn nicht. Was ich hier jedoch gemacht habe, war, die innere Box außerhalb der äußeren Umgebung zu erstellen, sie zu speichern und sie bei Bedarf einzufügen.
BEARBEITET, um zu zeigen, wie mehrere [benannte] innere Boxen vor dem Aufruf der äußeren Box gespeichert werden können (in meiner ursprünglichen Antwort wurde eine temporäre Box verwendet).
\documentclass{article}
\usepackage{tikz}
\usepackage[framemethod=tikz]{mdframed}
%%%%%%%%%%%%%%%%% mdframed style with node
\tikzset{tetregris/.style =
{draw=gray, thick, fill=white, shading = exampletitle, %
text=darkgray, rectangle, rounded corners, right,minimum height=.7cm}}
\pgfdeclarehorizontalshading{examplebackground}{100bp}
{color(0bp)=(black!2); color(100bp)=(teal!30)}
\pgfdeclarehorizontalshading{exampletitle}{100bp}
{color(0bp)=(black!2);color(100bp)=(purple!20)}
\newcounter{example}
\renewcommand*\theexample{Example~\arabic{example}}
\makeatletter
\mdfdefinestyle{examplestyle}{%
outerlinewidth=1em,outerlinecolor=white,%
leftmargin=-1em,rightmargin=-1em,%
middlelinewidth=1.2pt,roundcorner=5pt,linecolor=gray,
apptotikzsetting={\tikzset{mdfbackground/.append style ={%
shading = examplebackground}}},
innertopmargin=1.2\baselineskip,
skipabove={\dimexpr0.5\baselineskip+\topskip\relax},
skipbelow={-1em},
needspace=\baselineskip,
frametitlefont=\sffamily\scshape,
settings={\global\stepcounter{example}},
singleextra={%
\node[tetregris,xshift=-3cm] at (P) %
{~\mdf@frametitlefont{\theexample}\hbox{~}};
},
firstextra={%
\node[tetregris,xshift=-3cm] at (P) %
{~\mdf@frametitlefont{\theexample}\hbox{~}};
},
}
\makeatother
%%%%%%%%%%%%%%%%%% simple mdframed style
\global\mdfdefinestyle{simplestyle}{%
linecolor=red,linewidth=3pt,%
leftmargin=1cm,rightmargin=1cm
}
\begin{document}
% SAVE MULTIPLE INNER BOXES IN ADVANCE
\newsavebox\boxA
\savebox\boxA{\vbox{\begin{mdframed}[style=simplestyle]BLAH-A\end{mdframed}}}
\newsavebox\boxB
\savebox\boxB{\vbox{\begin{mdframed}[style=simplestyle]BLAH-B\end{mdframed}}}
\begin{mdframed}[style=examplestyle]
\parindent=0pt
blah\par
\usebox{\boxA}
blah\par
\usebox{\boxB}
blah
\end{mdframed}
\end{document}
Antwort3
Um das Problem zu umgehen , können Sie mdframed
Kisten mit anderen Kisten zum Verschachteln mischen. Hier verwende ich ein tcolorbox
für die verschachtelte Kiste.
\documentclass{article}
\usepackage{tikz}
\usepackage[framemethod=tikz]{mdframed}
\usepackage[skins,breakable]{tcolorbox}
%%%%%%%%%%%%%%%%% mdframed style with node
\tikzset{tetregris/.style =
{draw=gray, thick, fill=white, shading = exampletitle, %
text=darkgray, rectangle, rounded corners, right,minimum height=.7cm}}
\pgfdeclarehorizontalshading{examplebackground}{100bp}
{color(0bp)=(black!2); color(100bp)=(teal!30)}
\pgfdeclarehorizontalshading{exampletitle}{100bp}
{color(0bp)=(black!2);color(100bp)=(purple!20)}
\newcounter{example}
\renewcommand*\theexample{Example~\arabic{example}}
\makeatletter
\mdfdefinestyle{examplestyle}{%
outerlinewidth=1em,outerlinecolor=white,%
leftmargin=-1em,rightmargin=-1em,%
middlelinewidth=1.2pt,roundcorner=5pt,linecolor=gray,
apptotikzsetting={\tikzset{mdfbackground/.append style ={%
shading = examplebackground}}},
innertopmargin=1.2\baselineskip,
skipabove={\dimexpr0.5\baselineskip+\topskip\relax},
skipbelow={-1em},
needspace=\baselineskip,
frametitlefont=\sffamily\scshape,
settings={\global\stepcounter{example}},
singleextra={%
\node[tetregris,xshift=-3cm] at (P) %
{~\mdf@frametitlefont{\theexample}\hbox{~}};
},
firstextra={%
\node[tetregris,xshift=-3cm] at (P) %
{~\mdf@frametitlefont{\theexample}\hbox{~}};
},
}
\makeatother
%%%%%%%%%%%%%%%%%% simple style
\tcbset{
simplestyle/.style={%
sharp corners,
boxsep=0pt,left skip=1cm,right skip=1cm,boxrule=3pt,
colframe=red,colback=white
}
}
\begin{document}
\begin{mdframed}[style=examplestyle]
blah
\begin{tcolorbox}[simplestyle]
blah
\end{tcolorbox}
\noindent blah
\end{mdframed}
\begin{tcolorbox}[simplestyle]
blah
\end{tcolorbox}
\end{document}
Aus Spaß füge ich tcolorbox
unten auch etwas Code für eine vollständige Lösung hinzu, aber ich sehe kein Problem darin, einen gemischten Ansatz mit mdframed
und tcolorbox
wie oben beschrieben zu verwenden.
\documentclass{article}
\usepackage[skins,breakable]{tcolorbox}
\pgfdeclarehorizontalshading{examplebackground}{100bp}
{color(0bp)=(black!2); color(100bp)=(teal!30)}
\pgfdeclarehorizontalshading{exampletitle}{100bp}
{color(0bp)=(black!2);color(100bp)=(purple!20)}
\newcounter{example}
\renewcommand*\theexample{Example~\arabic{example}}
\tcbset{
examplestyle/.style={%
enhanced,breakable,arc=5pt,beforeafter skip=1em,
colframe=gray,interior style={shading=examplebackground},
fonttitle=\sffamily\scshape,coltitle=darkgray,
step=example,
title=\theexample,
attach boxed title to top right={xshift=-6mm,yshift*=-\tcboxedtitleheight/2},
boxed title style={enhanced,size=fbox,arc=3pt,boxrule=0.3mm,boxsep=2mm,
interior style={shading=exampletitle}},
},
simplestyle/.style={%
sharp corners,
boxsep=0pt,left skip=1cm,right skip=1cm,boxrule=3pt,
colframe=red,colback=white
}
}
\begin{document}
\begin{tcolorbox}[examplestyle]
blah
\begin{tcolorbox}[simplestyle]
blah
\end{tcolorbox}
\noindent blah
\end{tcolorbox}
\begin{tcolorbox}[simplestyle]
blah
\end{tcolorbox}
\end{document}