Is it possible to get a (breakable) frame like this with mdframed
? Or as a more general question. Can one access the coordinates of the frame that is drawn with TikZ?
With a pagebreak in it:
I build this example with the following code.
\documentclass{scrartcl}
\usepackage{environ}
\usepackage{tikz}
\usetikzlibrary{calc}
\NewEnviron{excursustikz}{%
\par
\vspace{0.5\baselineskip}%
\noindent
\begin{tikzpicture}%
\node (body) [%
text width=\textwidth-4pt-2ex,
inner sep=0pt,
] {\BODY};
\draw [
line width=4pt,
blue,
line cap=round,
rounded corners=2ex,
->
] ($(body.south west)+(5em,-2ex)$) -| ($(body.west)+(-2ex,0)$) |- %
($(body.north)+(-12em,2ex)$) .. controls +(0:10em) and +(190:5em) .. ++(20em,2ex);
\node [blue,fill=white] at ($(body.north west)+(3.5em,2.36ex)$) {\sffamily\bfseries Excursus};
\end{tikzpicture}%^
\par
\vspace{0.25\baselineskip}%
}
\usepackage{lipsum}
\begin{document}
\lipsum[1]
\begin{excursustikz}
\lipsum[2]
\end{excursustikz}
\lipsum[3]
\end{document}
The node that I imagine to use is body
, but I’m not sure if mdframed
uses a node internally. Furthermore one has to care about a page spanning frame. In that case the line at the right should be broken, as if you cut the path in two parts.
Best Answer
Update: To let
mdframed
know the right dimensions of the frame to calculate the page breaks we must give them as invisible margins (middleline
) and adjust everything according to these. See the updated code below.Marco’s comment lead me to the relevant parts in the manual. Here is my code
I used
\pathcmd
to differentiate between the broken and unbroken frames. Furthermore I draw the arrow with\drawexcursusarrow
and apply this via thesettings
key only to the{excursus}
environment, so my changes don’t effect the other frames.Bonus question
is it possible to let
mdframed
ignore the descenders of the last line in the frame? Otherwise the (optical)innerbottomsep
depends on these.