如何在换行符后获得正确的垂直空白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}