在下面的代码中,如何防止彩色框与其后续文本之间出现分页符?
\documentclass[a4paper]{book}
\usepackage{lipsum}
\usepackage[showframe]{geometry}
\usepackage[framemethod=TikZ]{mdframed}
\mdfsetup{skipbelow=2em,skipabove=2em}
\setlength{\parskip}{0pt}
\begin{document}
\lipsum[1-6]
\begin{mdframed}[innertopmargin=9pt,innerbottommargin=9pt,usetwoside=false,backgroundcolor=yellow]
\normalfont\Large\bfseries Notes
\end{mdframed}
\noindent Note 1: Bla bla\\
Note 2: Foo Bar\\
And other notes which can span several pages...
\end{document}
请注意,我希望至少三行注释始终位于同一页的框下,否则框及其注释都应该转到下一页。
答案1
虽然我最初needspace
通过评论向 OP 提出了一种方法(并且仍然认为这是最好的方法),但 OP 更喜欢不加载其他包。所以这里有一个替代方案。
经过评论中的一些讨论,我认为这种方法解决了 OP 指出的两个问题。通过在\vspace{}
之前发出\box
并将其负数对应项作为框内的第一个项目发出,可以解决页面开头的垂直空间问题。这不会影响页面中间的结果,但只有当它出现在页面开头时才会应用负数\vspace
(以抵消 的顶部跳过mdframe
)。
至于第二个问题。人们不需要在方框内包含多页笔记...只需包含那些希望与页眉保持连续的行即可mdframe
。
应 OP 的要求,我将其包装成类似于的宏\section
。语法是\mysection{Section name}{after text}
保证“后文本”不会脱离标题。
\documentclass[a4paper]{book}
\usepackage{lipsum}
\usepackage[showframe]{geometry}
\usepackage[framemethod=TikZ]{mdframed}
\mdfsetup{skipbelow=2em,skipabove=2em}
\setlength{\parskip}{0pt}
\newcommand\mysection[2]{%
\setbox0=\vbox{\vspace{-2em}%
\begin{mdframed}[innertopmargin=9pt,innerbottommargin=9pt,usetwoside=false,backgroundcolor=yellow]
\normalfont\Large\bfseries #1
\end{mdframed}
\noindent #2%
}
\vspace{2em}\box0\noindent\ignorespaces%
}
\begin{document}
\lipsum[1-3]
\mysection{Notes}{%
Note 1: Bla bla\\
Note 2: Foo Bar
}
And other notes which can span several pages...\par
\lipsum[1]
\mysection{Notes}{%
Note 1: Bla bla\\
Note 2: Foo Bar
}
And other notes which can span several pages...\par
\end{document}
答案2
如果tcolorbox
可以作为解决方案,以下代码可以作为起点。它定义了一个notes
环境,其中包含一个带有所有注释的默认“注释”标题。此框在页面之间可拆分,但分页符前至少包含 3 条注释行,否则整个框将从新页面开始。如果出于任何原因框不应拆分,则breakable=false
可以使用以下选项:
\documentclass[a4paper]{book}
\usepackage{lipsum}
\usepackage[most]{tcolorbox}
\usepackage[showframe]{geometry}
\setlength{\parskip}{0pt}
\newtcolorbox{notes}[1][]{title=Notes, left=0pt, right=0pt, lefttitle=4mm, toptitle=3mm, bottomtitle=3mm, boxrule=0mm, sharp corners, fonttitle=\normalfont\Large\bfseries, colbacktitle=yellow, coltitle=black, colback=white, lines before break=3, breakable, enhanced,#1}
\begin{document}
\lipsum[1-5]
\begin{notes}[breakable=false]
\noindent Note 1: Bla bla\\
Note 2: Foo Bar\\
\lipsum[1]
\end{notes}
\end{document}