mdframed:中心环境中忽略 splittopskip

mdframed:中心环境中忽略 splittopskip

我的文档中使用了很多mdframed跨页的示例环境。在这些环境中,我有一些结果表,我目前将它们放在环境中center。但不幸的是,当这些表直接出现在分页符之后时,设置的跳过skiptopskip会被忽略。

我正在寻找该问题的通用解决方案,或者甚至寻找center看起来相同但不会遇到此问题的环境的替代方案。


梅威瑟:

\documentclass{article}
\usepackage[paperwidth=12cm, paperheight=6cm]{geometry}
\usepackage{mdframed}
\usepackage{xcolor}
\usepackage{booktabs}
\usepackage{blindtext}

\begin{document}
\begin{mdframed}[splittopskip=20pt,backgroundcolor=black!5]
\blindtext

\begin{center}
\begin{tabular}{ll}
\toprule
A & 1 \\
B & 2 \\
\bottomrule
\end{tabular}
\end{center}
\end{mdframed}

\end{document}

mdframed 存在分页符和中心问题

请注意,第二页尊重这一点skiptopsep,但第三页不尊重这一点。

答案1

有两个问题,但都与 无关center。可以通过注释掉center环境来验证这一点……tabular向左移动,但垂直空间不变。

那么,问题是什么?

  1. 表格垂直居中对齐。请尝试\begin{tabular}[t]...。此操作可恢复顶部对齐,但仅此而已,空间就会变得过大:

在此处输入图片描述

  1. 间距过大的问题似乎与上面的间距有关\toprule。如果这样做,您将得到以下结果X\begin{tabular}[t]{ll}\toprule...\end{tabular}。规则与基线对齐,而不是字母空间的顶部,从而创建了额外的垂直空间。

在此处输入图片描述

我的解决方法是stackengine告诉它如何tabular相对于基线放置完整的内容。

\documentclass{article}
\usepackage[paperwidth=12cm, paperheight=6cm]{geometry}
\usepackage{mdframed}
\usepackage{xcolor}
\usepackage{booktabs}
\usepackage{blindtext}
\usepackage{stackengine}
\begin{document}
\begin{mdframed}[splittopskip=20pt,backgroundcolor=black!5]
\blindtext

\begin{center}
\belowbaseline[-\ht\strutbox]{\begin{tabular}[t]{ll}
\toprule
A & 1 \\
B & 2 \\
\bottomrule
\end{tabular}}
\end{center}
\end{mdframed}

\end{document}

在此处输入图片描述

附录

为了让 OP 更轻松地修改现有文档,我将上述方法包装到新环境中。qtabular因此,要修复问题实例,只需将环境从 更改为tabular即可qtabular

\documentclass{article}
\usepackage[paperwidth=12cm, paperheight=6cm]{geometry}
\usepackage{mdframed}
\usepackage{xcolor}
\usepackage{booktabs}
\usepackage{blindtext}
\usepackage{environ,stackengine}
\NewEnviron{qtabular}[1]{%
  \def\tmp{\begin{tabular}[t]{#1}}%
  \belowbaseline[-\ht\strutbox]{\expandafter\tmp\BODY\end{tabular}}%
}
\begin{document}
\begin{mdframed}[splittopskip=20pt,backgroundcolor=black!5]
\blindtext

\begin{center}
\begin{qtabular}{ll}
\toprule
A & 1 \\
B & 2 \\
\bottomrule
\end{qtabular}
\end{center}
\end{mdframed}

\end{document}

答案2

恕我直言,无论您使用 mdframed 定义了什么环境,您也可以使用 tcolorbox 创建它 - 减去使用 mdframed 时遇到的问题:

\documentclass{article}
\usepackage[paperwidth=12cm, paperheight=6cm]{geometry}
\usepackage[most]{tcolorbox}
\newtcolorbox{mdframed}{enhanced,breakable,sharp corners,colback=black!5,topsep at break=20pt,boxrule=0.4pt} 
\usepackage{xcolor}
\usepackage{booktabs}
\usepackage{blindtext}
\usepackage{stackengine}
\begin{document}
\begin{mdframed}
abc\\abc\\\blindtext

\begin{center}
\begin{tabular}[t]{ll}
\toprule
A & 1 \\
B & 2 \\
\bottomrule
\end{tabular}
\end{center}
\end{mdframed}

\end{document}

在此处输入图片描述

相关内容