小页面后的垂直空间(编辑:在环境中)

小页面后的垂直空间(编辑:在环境中)

如何在换行符后获得正确的垂直空白minipage

即:如何修复\alphabet下面的命令,以便绿色和红色标记的空间(如下图所示)相等?(是吗\baselineskip?)

在此处输入图片描述

平均能量损失

\documentclass[12pt]{article}
\begin{document}
  \newcommand\alphabet
  {
    \noindent
    \begin{minipage}{5.5cm}
      \noindent abcdefghijklmnopqrstuvwxyz abcdefghijklmnopqrstuvwxyz abcdefghijklmnopqrstuvwxyz 
    \end{minipage}
  }
  \alphabet
  \alphabet
  \alphabet
  \alphabet
  \alphabet
  \alphabet 
  some more text for illustation purposes
\end{document}

将@StrongBad 的答案适应于环境

我实际上在环境中使用了这些小页面。因此,我们开始使用包environ,如Werner 的回答在这里

\documentclass[12pt]{article}
\usepackage{environ}
\def\alphabet{abcdefghijklmnopqrstuvwxyz}
\NewEnviron{petitePage}%
{%
    \noindent%
    \begin{minipage}[t]{5.5cm}%
      \noindent%
      \BODY%
      \sbox0{\BODY}%
      \vspace{\dp0}%
    \end{minipage}
}%
\newcommand\blabla
{%
  \begin{petitePage}%
    \noindent \alphabet \ \alphabet \ \alphabet \ 
  \end{petitePage}
}
\begin{document}
\blabla%
\blabla%
\blabla%
\blabla%
\blabla%
\blabla%
\end{document}

答案1

minipage默认情况下居中,这意味着(通常)它们的高度和深度都大于,\baselineskip这意味着当包含如此大框的行堆叠时,基线间距无法保留,因此 TeX 只会将生成的框分开,\lineskip通常为 1pt。框内有关基线的所有信息都消失了,因此不同框中的行之间不存在相等的间距。

如果您只需要担心上方或下方的空间,则minipage可以使用[t][b]将框的参考点放在顶线或底线上,以便baselineskip进行正常计算。但这只在框的一端有效。要同时完成这两项工作,您可以使用一个记录两个参考点的框(例如臭名昭​​著的 expl3 棺材),但更简单的是将框设置\lineskip为零以使它们相邻而没有空间,然后\strut在文本的开始和结束处使用这样第一行的基线来自\ht\strutbox一个框的顶部,前一行的基线来自\dp\strutbox其框的底部,因此可见基线是分开的高度+深度\strut,即正常基线间距。

在此处输入图片描述

\showoutput
\showboxdepth=3
\documentclass[12pt]{article}
\def\alpha{abcdefghijklmnopqrstuvwxyz}
\newcommand\alphabet{%
  \noindent\begin{minipage}{5.5cm}%
    \strut\alpha\ \alpha\ \alpha\strut
  \end{minipage}%
}

\begin{document}

{\setlength\lineskip{0pt}
\alphabet\ \alphabet\ \alphabet\ %
\alphabet\ \alphabet\ \alphabet\ %
\alphabet\ \alphabet\ \alphabet\ %
\strut some more text for illustration purposes

}
\end{document}

答案2

在 TeX 中,盒子有宽度、高度和深度(参见理解小页面 - 顶部对齐)。小页面的“底部”与主页的基线对齐,但您想要的是小页面的最终基线与主页文本的基线对齐。您需要在小页面的最后一行的深度空间中添加:

\documentclass[12pt]{article}
\def\alpha{abcdefghijklmnopqrstuvwxyz}
\newcommand\alphabet{%
  \noindent\begin{minipage}{5.5cm}%
    \alpha\ \alpha\ \alpha\ %
    \sbox0{\alpha}%
    \vspace{\dp0}%
  \end{minipage}%
}

\begin{document}
\alphabet\ \alphabet\ \alphabet\ %
\alphabet\ \alphabet\ \alphabet\ %
\alphabet\ \alphabet\ \alphabet\ %
some more text for illustation purposes
\end{document}

在此处输入图片描述

答案3

为了快速修复,您可以简单地手动插入一些空格 - 在我看来,这相当于五分之一\baselineskip

\documentclass{article}

\newcommand\alphabet{abcdefghijklmnopqrstuvwxyz}
\newcommand\tripplealphabet{%
  \noindent
  \begin{minipage}{5.5cm}
    \noindent\alphabet\ \alphabet\ \alphabet
  \end{minipage}
  \vskip.2\baselineskip
}

\begin{document}
\tripplealphabet

some text

some more text
\end{document}

输出渲染

为了仔细检查这个解决方案,你可能想尝试:

...
\setlength\parindent{0em}
...

\begin{document}
\tripplealphabet

\alphabet

\alphabet
\end{document}

doublecheck_示例

相关内容