我们怎样才能mdframed
在计算时忽略最后一行的下行部分呢innerbottomsep
?在我看来,有两个理由可以实现这一点:
内边距
与没有下降部分的行相比,包含下降部分的行中的光学底部分隔符太大。
线网格
保持在线网格中是不可能的,否则可以通过调整上下的跳过来实现。
如图所示,没有下降部的框架可以将以下线条保持在网格中,并且跳过调整良好的跳跃,但如果我们有下降部,调整就会被破坏。
代码
这是我用来生成图像的代码(在线注释掉以获取第一张图像)。
\documentclass{scrartcl}
\usepackage{tikz}
\usepackage{mdframed}
\newmdenv[%
skipabove=12.6pt,
skipbelow=12.6pt,
]{myframe}
\usepackage{lipsum}
\begin{document}
% draw a line grid
\noindent
\begin{tikzpicture}[overlay]
\foreach \y in {0,...,-42}
\draw [magenta] (0,\y*\baselineskip) -- ++(\textwidth,0);
\end{tikzpicture}%
\lipsum[1]
\begin{myframe}
Without descender it works.
\end{myframe}
\lipsum[2]
\begin{myframe}
But with descenders the skip is a little too much.
\end{myframe}
\lipsum
\end{document}
答案1
您可以通过强制插入基线跳过来获得线下方的一致空间,如下所示:
\par\strut\par
\unskip\unskip\setbox0=\lastbox
这样,就会插入一条“伪线”,然后将其移除,留下刚好填满基线距离的空间量。当然,这取决于是否有下降部分。
不幸的是,它似乎mdframed
删除了尾随垂直空间,因此正常情况下,额外的空间会再次消失。此外,您总是会得到后一个示例的间距,这似乎不是您想要的。您可以通过添加来抵消两者
\vspace*{\dimexpr\ht\strutbox-\baselineskip\relax}
添加消极的垂直空间对应于基线和下一行开头之间的距离。
当然,这可以组合成一个新的环境,从而得到解决方案
\newmdenv[%
skipabove=12.6pt,
skipbelow=12.6pt,
]{@myframe}
\newenvironment{myframe}
{%
\begin{@myframe}
}
{
\par\strut\par
\unskip\unskip\setbox0=\lastbox
\vspace*{\dimexpr\ht\strutbox-\baselineskip\relax}
\end{@myframe}
}
答案2
您可以将文本括在内,vbox
并根据您的喜好进行调整。
\begin{myframe}
\vbox to 0pt {But with descenders the skip is a little too much.}
\end{myframe}
您可以将 更改vbox to 0pt
为其他长度以适应(对我来说 5.5pt 看起来合适)。为了更好地控制,您甚至可以在 中封闭一个支柱\vbox
。使用:
vrule height..pt width0pt depth..pt
以获得更多控制。