环境minipage
有选项可以让小页面框的顶部、底部或中心与周围文本的基线对齐。有没有办法让它与小页面内第一行或最后一行文本的基线对齐?
我想我会使用\raisebox
,但我如何计算从小页面顶部到第一行基线的距离(或从小页面底部到最后一行基线的距离)?
更新:
正如下面出色的答案所示,minipage
已经满足了我的要求。我遇到的问题是该\color
命令以各种奇怪的方式干扰了 minipage。在 minipage 的开头和结尾放置一个并没有解决这个问题,但一旦我将其更改为\strut
,一切都开始正常工作:\color
\textcolor
\documentclass{article}
\usepackage{color}
\usepackage{varwidth}
\newcommand{\sampletext}{testing (1)\\testing (2)}
\newcommand{\tmp}[2]{\fbox{\begin{varwidth}[#1]{0.8in}#2\end{varwidth}}}
\newcommand{\broken}[1]{\tmp{#1}{\color[rgb]{0,0,0.5}\sampletext}}%
\newcommand{\fixed}[1]{\tmp{#1}{\textcolor[rgb]{0,0,0.5}{\sampletext}}}%
\setlength{\parindent}{0pt}\setlength{\parskip}{\baselineskip}%
\begin{document}
with \verb|\color|:\\
before \broken{t} between \broken{c} between \broken{b} after
with \verb|\textcolor|:\\
before \fixed{t} between \fixed{c} between \fixed{b} after
\end{document}
答案1
[t]
和[b]
的可选参数已经minipage
使用了第一行和最后一行的基线,而不是周围框的顶部或底部。据我所知,LaTeX 中的大多数此类垂直定位选项都涉及基线。这里有三个minipage
带有[t]
、[c]
(或不带有)和[b]
选项(下面的代码):
如果不是这种情况,我会分别使用\raisebox{\dimexpr-\height+\ht\strutbox\relax}{<content>}
和\raisebox{\dimexpr\depth-\dp\strutbox\relax}{<content>}
作为第一条和最后一条基线。这取决于内容,但如果两行都包含 ,则会准确无误\strut
。
更新:
关于问题\color
:这个宏显然增加了一些垂直空间,因为 TeX 的开头minipage
仍然处于垂直模式。要避免这种情况,请使用\leavevmode
before \color
(\textcolor
内部也是如此)。这将更改为水平模式并避免错位。添加\strut
before\color
实际上应该会做同样的事情,因为它也会启动水平模式。
\documentclass{article}
\usepackage{lipsum}
\begin{document}
before
\begin{minipage}[t]{1cm}
First\\
Middle\\
Last
\end{minipage}
between
\begin{minipage}[c]{1cm}
First\\
Middle\\
Last
\end{minipage}
between
\begin{minipage}[b]{1cm}
First\\
Middle\\
Last
\end{minipage}
after
\end{document}
答案2
您所建议的 varwidth 包很有趣,但我认为,就主题而言,“minipage 环境”将列放在同一级别,我会使用这个...
\documentclass{article}
\usepackage{lipsum}
\begin{document}
\begin{minipage}[t]{0.45\textwidth}
\lipsum[1]
\end{minipage} \hfill \begin{minipage}[t]{0.45\textwidth}
\lipsum[1]
\end{minipage}
\end{document}
我的技巧是在相同情况下输入 [t] 选项,其他情况下我遇到了麻烦。