![小型页面环境后的奇怪行为](https://linux22.com/image/314496/%E5%B0%8F%E5%9E%8B%E9%A1%B5%E9%9D%A2%E7%8E%AF%E5%A2%83%E5%90%8E%E7%9A%84%E5%A5%87%E6%80%AA%E8%A1%8C%E4%B8%BA.png)
我有这段代码,为了演示目的,我在整数值处画了红线\baselineskip
并框住了小页面:
\documentclass{article}
\usepackage{calc}
\usepackage[margin = 1.0in, showframe, heightrounded]{geometry}
\usepackage{lipsum}
\setlength{\fboxsep}{-\fboxrule}% Remove space between fbox frame and content
% Red lines at baselines.
\usepackage{eso-pic}
\usepackage{atbegshi,picture,xcolor}
\AtBeginShipout{%
\AtBeginShipoutUpperLeft{%
\color{red}%
\put(\dimexpr 1in+\oddsidemargin,
-\dimexpr 1in+\topmargin+\headheight+\headsep+\topskip)%
{%
\vtop to\dimexpr\vsize+\baselineskip{
\hrule
\leaders\vbox to\baselineskip{\hrule width\hsize\vfill}\vfill
}%
}%
}%
\begin{document}
\fbox
{%
\begin{minipage}[t][\heightof{Lorem} + 9\baselineskip]{0.85\textwidth}
\lipsum[1]
\end{minipage}%
}
\hfill
Hello,
\end{document}
我的问题很简单:为什么“Hello”的基线不在小页面之后的下一条红线上?
答案1
下列
\begin{minipage}[t][\heightof{Lorem} + 9\baselineskip]{0.85\textwidth}
指定minipage
第一行的高度(“Lorem”)。因此,\topskip
对于网格线而言,设置是正确的。
但是框的深度是 的剩余空间9\baselineskip
。最后一行的深度甚至超出了框。由于 的深度非常大minipage
,因此\baselineskip
未使用和设置,但\lineskip
(默认值:1 pt)。“g”的深度超出了框,约为 2 pt,下一行“Hello”覆盖了“g”的下行部分(当然没有\hfill
)。
可以通过两种方式修复该示例:
设置
\prevdepth
为零:\fbox{% \begin{minipage}[t][\heightof{Lorem} + 9\baselineskip]{0.85\textwidth} \lipsum[1] \end{minipage}% }\par \setlength{\prevdepth}{0pt} Hello,
最后一行的下行过大
minipage
或带重音的大写字母可能会发生冲突,因为在设置“Hello”行时,TeX 不知道最后一行的深度。但网格更受尊重。可以添加一个框,它模拟最后一行的深度
minipage
:\fbox{% \begin{minipage}[t][\heightof{Lorem} + 9\baselineskip]{0.85\textwidth} \lipsum[1] \par \xdef\lastprevdepth{\the\prevdepth}% \end{minipage}% }\par \nobreak \nointerlineskip \hbox{\vrule width0pt depth\lastprevdepth} Hello,
两种情况的结果: