mdframed 带有凸起的额外内容,会进入 scrbook 文档的标题中

mdframed 带有凸起的额外内容,会进入 scrbook 文档的标题中

我正在使用示例 5 – TikZ 的复杂示例与文档mdframed中的手册scrbook不同。目标是在教科书中包含易于区分的包含练习、定义等的框。

我从手册中采用的样式使mdframed框进入scrbook为其标题保留的空间。仅当 mdframed 元素作为新页面上的第一个框生成时才会发生这种情况。我认为问题是由于在节点中包含了一个高度为 10 毫米的元素(P-|O),因此它进入标题约 5 毫米。

我试图理解如何mdframed定义节点,如(P)(P-|O),但很难弄清楚。另外,我认为解决方案是扩展元素的bounding box。虽然我认为我理解 的概念bounding box,但我不知道如何将 mdframed 元素的边界框延长 -5mm(就此而言,也不知道任何其他节点的边界框延长)。

以下是问题的屏幕截图以及一些 MWE 代码。屏幕截图包含屏幕标尺以方便使用。

(顺便说一句,我认为问题也发生在示例 5来自 mdframed 手册的代码,只是在我的改编中它更加明显,因为原始垂直空间要小得多)。

在此处输入图片描述

\documentclass{scrbook}
\usepackage[papersize={170mm,240mm}
            ,top=25mm
            ,inner=20mm
            ,outer=25mm
            ,marginparwidth=50pt
            ]{geometry}
\usepackage[framemethod=tikz]{mdframed}
            \mdfsetup{skipabove=2\baselineskip,skipbelow=2\baselineskip,frametitlefont=\sffamily\bfseries\Large, needspace=4\baselineskip, splittopskip=1.5\baselineskip}
            \mdfsetup{apptotikzsetting={\tikzset{mdfbackground/.append style={draw=none}}}} 
            \mdfdefinestyle{greyexercise}{%
            everyline=true,ignorelastdescenders=true,
            linewidth=0pt,backgroundcolor=black!20,
            innerleftmargin=5mm, innerrightmargin=5mm, innerbottommargin=5mm, innertopmargin=5mm,
            frametitleaboveskip=15mm, frametitlebelowskip=5mm,frametitlerule=false, repeatframetitle=false,
            firstextra={\useasboundingbox (P) rectangle (P);\node[xshift=5mm,right,draw=black!20, line width=1.5pt,rectangle, minimum size=10mm, fill=white] at (P-|O) {\color{black!20}%\includegraphics[width=10mm]{.pdf}
                };},
            singleextra={\useasboundingbox (P) rectangle (P);\node[xshift=5mm,right,draw=black!20, line width=1.5pt,rectangle, minimum size=10mm, fill=white] at (P-|O) {\color{black!20}%\includegraphics[width=10mm]{.pdf}
                };}
            }
\usepackage{lipsum,xcolor}  

\begin{document}

\chapter{Witchcraft in Transylvania}
\section{Origins 1840--1843}
\lipsum[1-7]
\begin{mdframed}[style=greyexercise,frametitle=Exercises]
        \lipsum[1]
\end{mdframed}
\end{document}  

编辑

一位用户建议删除\useasboundingbox。虽然这很好地解决了标题距离问题,但它可能会导致 mdframed 的分页算法失效(见屏幕截图)。这种情况似乎发生在 mdframed 框相当大的情况下(屏幕截图中的框包含内容\lipsum[1-6]在此处输入图片描述

答案1

\useasboundingbox正在隐藏插入方块的高度。只需将其删除,或选择更好的边界框大小。删除它可

示例输出

\documentclass{scrbook}
\usepackage[papersize={170mm,240mm}
            ,top=25mm
            ,inner=20mm
            ,outer=25mm
            ,marginparwidth=50pt
            ]{geometry}
\usepackage[framemethod=tikz]{mdframed}

\mdfsetup{skipabove=2\baselineskip,skipbelow=2\baselineskip,frametitlefont=\sffamily\bfseries\Large, needspace=4\baselineskip, splittopskip=1.5\baselineskip}
\mdfsetup{apptotikzsetting={\tikzset{mdfbackground/.append style={draw=none}}}}
\mdfdefinestyle{greyexercise}{%
  everyline=true,ignorelastdescenders=true,
  linewidth=0pt,backgroundcolor=black!20,
  innerleftmargin=5mm, innerrightmargin=5mm, innerbottommargin=5mm,
  innertopmargin=5mm,
  frametitleaboveskip=15mm,
  frametitlebelowskip=5mm,frametitlerule=false,
  repeatframetitle=false,
  firstextra={\node[xshift=5mm,right,draw=black!20, line width=1.5pt,rectangle, minimum size=10mm, fill=white] at (P-|O) {\color{black!20}%\includegraphics[width=10mm]{.pdf}
  };},
  singleextra={\node[xshift=5mm,right,draw=black!20, line width=1.5pt,rectangle, minimum size=10mm, fill=white] at (P-|O) {\color{black!20}%\includegraphics[width=10mm]{.pdf}
  };}
}
\usepackage{lipsum,xcolor}

\begin{document}

\chapter{Witchcraft in Transylvania}
\section{Origins 1840--1843}
\lipsum[1-7]
\begin{mdframed}[style=greyexercise,frametitle=Exercises]
  \lipsum[1]
\end{mdframed}
  \lipsum[2-3]
\begin{mdframed}[style=greyexercise,frametitle=Further exercises]
  \lipsum[1]
\end{mdframed}
\end{document}

该组合 \useasboundingbox (P) rectangle (P)将生成一个矩形,其左下角位于 ,(P)右上角位于同一点(P),因此高度和宽度为零。您可以使用以下方法制作一个高度1cm基于 的框:(P)

 \useasboundingbox (P) rectangle +(0,1);

但是,您注意到,这种框架环境的长版本存在严重问题。这是因为linewidth没有匹配新边界框所需的额外空间。一种方法是添加

middlelinewidth=0pt,linecolor=white,outerlinewidth=5mm,
leftline=false,rightline=false,bottomline=false,

5mm在顶部添加与框延伸到环境上方的部分相对应的 宽度线。

新样本

第二个示例

\documentclass{scrbook}
\usepackage[papersize={170mm,240mm}
            ,top=25mm
            ,inner=20mm
            ,outer=25mm
            ,marginparwidth=50pt
            ]{geometry}
\usepackage{xcolor}
\usepackage[framemethod=tikz]{mdframed}

\mdfsetup{skipabove=2\baselineskip,
  skipbelow=2\baselineskip,
  frametitlefont=\sffamily\bfseries\Large,
  needspace=4\baselineskip,
  splittopskip=1.5\baselineskip}

\mdfsetup{apptotikzsetting={\tikzset{mdfbackground/.append style={draw=none}}}}

\mdfdefinestyle{greyexercise}{%
  everyline=true,
  ignorelastdescenders=true,
  middlelinewidth=0pt,linecolor=white,outerlinewidth=5mm,
  leftline=false,rightline=false,bottomline=false,
  backgroundcolor=black!20,
  innerleftmargin=5mm, innerrightmargin=5mm,
  innerbottommargin=5mm,
  innertopmargin=5mm,
  frametitleaboveskip=15mm,
  frametitlebelowskip=5mm,frametitlerule=false,
  repeatframetitle=false,
  firstextra={\node[xshift=5mm,right,draw=black!20, line width=1.5pt,rectangle, minimum size=10mm, fill=white] at (P-|O) {\color{black!20}%\includegraphics[width=10mm]{.pdf}
  };},
  singleextra={\node[xshift=5mm,right,draw=black!20, line width=1.5pt,rectangle, minimum size=10mm, fill=white] at (P-|O) {\color{black!20}%\includegraphics[width=10mm]{.pdf}
  };}
}
\usepackage{lipsum}

\begin{document}

\chapter{Witchcraft in Transylvania}
\section{Origins 1840--1843}
\lipsum[1-7]
\begin{mdframed}[style=greyexercise,frametitle=Exercises]
  \lipsum[1]
\end{mdframed}
  \lipsum[2-3]
\begin{mdframed}[style=greyexercise,frametitle=Further exercises]
  \lipsum[1-10]
\end{mdframed}

\end{document}

只是为了好玩,下面是一个使用tcolorbox而不是 的实现mdframed。最初的印象是,这样做效果更好:

分页符处的 tcolor

tcolor 损坏

\documentclass{scrbook}
\usepackage[papersize={170mm,240mm}
            ,top=25mm
            ,inner=20mm
            ,outer=25mm
            ,marginparwidth=50pt
            ]{geometry}

\usepackage{xcolor}

\usepackage{tcolorbox}
\tcbuselibrary{breakable,skins}

\newcommand{\nodecode}{\path (frame.north west)
  node[xshift=10mm, yshift=0mm, right, draw=black!20,
  line width=1.5pt, rectangle, minimum size=10mm,
  fill=white] {};}

\newtcolorbox{greyexercise}[1]{title=#1,
  enhanced, breakable, frame hidden,
  before={\par\vfill\penalty-200\vfilneg},
  fonttitle=\sffamily\Large\bfseries,
  coltitle=black, colbacktitle=black!20, colback=black!20,
  detach title, before upper={\vspace{5mm}\tcbtitle\par\vspace{10mm}},
  sharp corners,
  boxsep=5mm, enlarge top initially by=5mm,
  overlay first={\nodecode},
  overlay unbroken={\nodecode},
  lines before break=5
  }

\usepackage{lipsum}

\begin{document}
\chapter{Witchcraft in Transylvania}
\section{Origins 1840--1843}
\lipsum[1-7]
\begin{greyexercise}{Exercises}
  \lipsum[1]
\end{greyexercise}
  \lipsum[2-3]
\begin{greyexercise}{Further exercises}
  \lipsum[1-10]
\end{greyexercise}

\end{document}

相关内容