通过 mdframed 控制多个框架中的分页符

通过 mdframed 控制多个框架中的分页符

我在使用 mdframed 时遇到一个问题,我在跨越多页的框架内创建了一个框架,但我希望 mdframed 能够在各个页面上以不同的方式拆分它们,以便将第二页上的大部分文本移动到第一页。

以下是代码的输出:

输出

所需的结果应如下所示,这是我在 Microsoft Paint 中创建的:

期望结果

以下是代码:

\documentclass{article}
\usepackage{mdframed,lipsum}
\newmdenv[
leftmargin = 0pt,
innerleftmargin = 1em,
innertopmargin = 0pt,
innerbottommargin = 0pt,
innerrightmargin = 0pt,
rightmargin = 0pt,
linewidth = 1pt,
topline = false,
rightline = false,
bottomline = false
]{leftbar}
\begin{document}
\lipsum[1]
\begin{leftbar}
    \lipsum[2]
    \begin{leftbar}
        \lipsum[3-5]
    \end{leftbar}
\end{leftbar}
\end{document}

更新:还有另一个问题,即框架超出了页边距: 超出页边距

您可以在图像中看到框架顶部的页码。我希望框架跨页并保持在页边距内。结果是通过将上一个 MWE 中的 \lipsum[3-5] 更改为 \lipsum[3-20] 获得的。

答案1

您可以使用其他宏来mdframed实现您的目的。例如以下宏:

\documentclass{article}
\usepackage{lipsum}

\newcount\tmpnum
\def\leftline{\par \setbox0=\vbox\bgroup \advance\leftskip by1em \noindent\ignorespaces}
\def\endleftline{\par \setbox1=\vbox{}\endleftlineA}
\def\endleftlineA{
   \setbox0=\lastbox
   \ifvoid0 \expandafter \endleftlineB \else
   \global\dimen1=\ht0
   \dimen0=\lastskip \unskip \advance\dimen0 by\lastskip \unskip
   \tmpnum=\lastpenalty \unpenalty
   \global\setbox1=\vbox{\ifnum\tmpnum=0 \else \penalty\tmpnum \fi
      \vskip\dimen0 \hbox{\hbox to\leftskip{\hss\leftrule\kern.4em}\kern-\leftskip\box0}
      \unvbox1}
   \expandafter \endleftlineA \fi
}
\def\endleftlineB{\egroup \advance\dimen1 by\prevdepth
   \advance\dimen1 by-\baselineskip
   \vskip-\dimen1 \unvbox1
}
\def\leftrule{\vbox{\kern-.7\baselineskip
   \hbox{\vrule width1pt height.7\baselineskip depth\ifdim\ht1>0pt.4\else.1\fi\baselineskip}
   \kern-\prevdepth}
}


\begin{document}
\lipsum[1]
\leftline
    \lipsum[2]
    \leftline
        \lipsum[3-6]
    \endleftline
\endleftline
\lipsum[1]

\end{document}

答案2

仔细检查手册后,我发现了以下文字:

嵌套的 mdframed 环境无法分割。

这就解释了。

相关内容