问题
我尝试minipages
在顶部对齐,但无济于事,我以为该[t]
选项正是为此而设计的,但显然不是。该[c]
选项似乎效果更好,但第一个选项除外,因为minipage
它包含另一个框。
我究竟做错了什么?
更新
感谢您迄今为止的出色回答。我应该提到,解决方案也应该尊重我的geometry
设置。以@egreg 的解决方案为例:
\documentclass{article}
\usepackage{xcolor}
\usepackage[a4paper,margin=0pt]{geometry}
\begin{document}
\noindent%
\begin{minipage}[t][.1\textheight]{.1\linewidth}
\vspace{-\fboxsep}
\colorbox{gray}{%
\makebox[\dimexpr \linewidth - 2\fboxsep \relax]{%
\color{white}%
\huge S%
}}%%
\end{minipage}%
\colorbox{orange}{%
\begin{minipage}[t][.1\textheight]{.1\linewidth}
\vspace{0pt}
\huge A
\end{minipage}}
\end{document}
您将看到它们minipages
已对齐,但与页面边框有偏移。有什么补救措施吗?
代表
\documentclass{article}
\usepackage{xcolor}
\begin{document}
\noindent%
\begin{minipage}[c][.1\textheight][t]{.1\linewidth}%
\colorbox{blue}{%
\makebox[\dimexpr \linewidth - 2\fboxsep \relax]{%
\color{white}%
\huge S
}}%%
\end{minipage}%
\colorbox{gray}{%
\begin{minipage}[c][.1\textheight][t]{.1\linewidth}%
\huge A
\end{minipage}}%
\colorbox{yellow}{%
\begin{minipage}[c][.1\textheight][t]{.1\linewidth}%
a
\end{minipage}}%
\colorbox{orange}{%
\begin{minipage}[c][.1\textheight][t]{.1\linewidth}%
A
\end{minipage}}\\[5cm]
\noindent%
\begin{minipage}[t][.1\textheight][t]{.1\linewidth}%
\colorbox{blue}{%
\makebox[\dimexpr \linewidth - 2\fboxsep \relax]{%
\color{white}%
\huge S
}}%%
\end{minipage}%
\colorbox{gray}{%
\begin{minipage}[t][.1\textheight][t]{.1\linewidth}%
\huge A
\end{minipage}}%
\colorbox{yellow}{%
\begin{minipage}[t][.1\textheight][t]{.1\linewidth}%
a
\end{minipage}}%
\colorbox{orange}{%
\begin{minipage}[t][.1\textheight][t]{.1\linewidth}%
A
\end{minipage}}
\end{document}
不想要的结果
答案1
顶部对齐是相对于 中的第一个项目进行的minipage
。如果是一行文本,它将参考基线。但是,您可以使用不可见的项目,例如\vspace{0pt}
强制在“最顶部”对齐。
然而,对于包含 的小页面\colorbox
,您还需要考虑\fboxsep
。
\documentclass{article}
\usepackage{xcolor}
\begin{document}
\begin{minipage}[t][.1\textheight]{.1\linewidth}
\vspace{-\fboxsep}
\colorbox{blue}{%
\makebox[\dimexpr \linewidth - 2\fboxsep \relax]{%
\color{white}%
\huge S%
}}%%
\end{minipage}%
\colorbox{gray}{%
\begin{minipage}[t][.1\textheight]{.1\linewidth}
\vspace{0pt}
\huge A
\end{minipage}}%
\colorbox{yellow}{%
\begin{minipage}[t][.1\textheight]{.1\linewidth}%
\vspace{0pt}
a
\end{minipage}}%
\colorbox{orange}{%
\begin{minipage}[t][.1\textheight]{.1\linewidth}%
\vspace{0pt}
A
\end{minipage}}
\end{document}
由于两种对比色会造成不一致的视觉错觉,因此我还提供了一张放大的图片。
答案2
操作对齐的概念[t]
依赖于与所用字体大小相关的指标。通过更改每个的字体大小minipage
,您会破坏发生这种情况的能力。
我能做的最好的事情是\huge
为整行使用单一字体大小设置(在本例中为),然后在每个小页面中更改字体大小。但是,即使这样也无法按预期工作,因为颜色框只会扩展到每个字符的顶部(加上\fboxsep
)。因此,您将看到我在输入时\strut
为每个字符添加一个minipage
(将设置为当前\huge
大小),然后更改为新的字体大小。
这样做的最终结果是彩色框将顶部对齐,但每个框中的文本将共享相同的基线。这可能会或可能不会满足您的需求。
\documentclass{article}
\usepackage{xcolor}
\begin{document}
\noindent\huge%
\begin{minipage}[t][.1\textheight][t]{.1\linewidth}%
\colorbox{blue}{%
\makebox[\dimexpr \linewidth - 2\fboxsep \relax]{%
\color{white}%
\strut S
}}%%
\end{minipage}%
\colorbox{gray}{%
\begin{minipage}[t][.1\textheight][t]{.1\linewidth}%
\strut A
\end{minipage}}%
\colorbox{yellow}{%
\begin{minipage}[t][.1\textheight][t]{.1\linewidth}%
\strut\normalsize a
\end{minipage}}%
\colorbox{orange}{%
\begin{minipage}[t][.1\textheight][t]{.1\linewidth}%
\strut\normalsize A
\end{minipage}}
\end{document}
如果我删除每个 4 \strut
,基线将保持对齐,但每个颜色框的顶部将与每个框中最高的元素相一致 (+ \fboxsep
)。
补充
现在,既然已经说了这不可能,我将继续使用\belowbaseline
的宏以不同的方式进行操作stackengine
。第一个 minipage 需要不同的偏移,因为颜色框位于 minipage 内部而不是外部。
\documentclass{article}
\usepackage{xcolor,stackengine}
\begin{document}
\noindent%
X
\belowbaseline[-\dimexpr\ht\strutbox+\fboxsep]{%
\begin{minipage}[t][.1\textheight][t]{.1\linewidth}%
\colorbox{blue}{%
\makebox[\dimexpr \linewidth - 2\fboxsep \relax]{%
\color{white}%
\huge S
}}%%
\end{minipage}}%
\colorbox{gray}{%
\belowbaseline[-\ht\strutbox]{%
\begin{minipage}[t][.1\textheight][t]{.1\linewidth}%
\huge A\\b
\end{minipage}}}%
\colorbox{yellow}{%
\belowbaseline[-\ht\strutbox]{%
\begin{minipage}[t][.1\textheight][t]{.1\linewidth}%
a\\b\\c\\d
\end{minipage}}}%
\colorbox{orange}{%
\belowbaseline[-\ht\strutbox]{%
\begin{minipage}[t][.1\textheight][t]{.1\linewidth}%
A\\b\\c\\d
\end{minipage}}}
\end{document}
答案3
这是另一种基于包的方法xcoffins
。
它是一个包,旨在以非常简单的方式帮助精确布局页面上的内容:文本、表格、图像、图形等。方便构建封面和标题页。
有三个步骤:
\Ri
(1)在(至)专用框内填写内容\Riv
。请注意:确切地您的内容已被使用。
(2)将盒子组装在一起。在这个简单的情况下,只需将一个盒子的左上角与前一个盒子的右上角连接起来即可。(第一个盒子为空盒子\Framex
)。
(3)排版整套。
选择不同的角进行连接使得重新组装变得容易。
看https://tex.stackexchange.com/a/576386/161015以获得更广泛的解释。
\documentclass{article}
\usepackage{xcolor}
\usepackage{xcoffins} %added <<<<<<<<<<
% Create
\NewCoffin\Framex
\NewCoffin\Ri
\NewCoffin\Rii
\NewCoffin\Riii
\NewCoffin\Riv
\begin{document}
% Fill
\SetHorizontalCoffin\Ri{%
\begin{minipage}[c][.1\textheight][t]{.1\linewidth}%
\colorbox{blue}{%
\makebox[\dimexpr \linewidth - 2\fboxsep \relax]{%
\color{white}%
\huge S
}}%%
\end{minipage}%
}%%
\SetHorizontalCoffin\Rii{%.
\colorbox{gray}{%
\begin{minipage}[c][.1\textheight][t]{.1\linewidth}%
\huge A
\end{minipage}
}%
}
\SetHorizontalCoffin\Riii{%.
\colorbox{yellow}{%
\begin{minipage}[c][.1\textheight][t]{.1\linewidth}%
a
\end{minipage}
}%
}
\SetHorizontalCoffin\Riv{%
\colorbox{orange}{%
\begin{minipage}[c][.1\textheight][t]{.1\linewidth}%
A
\end{minipage}}
}
%% Assembly] *************************
\JoinCoffins\Framex[l,t]\Ri[l,t]
\JoinCoffins\Framex[\Ri-r,\Ri-t]\Rii[l,t]
\JoinCoffins\Framex[\Rii-r,\Rii-t]\Riii[l,t]
\JoinCoffins\Framex[\Riii-r,\Riii-t]\Riv[l,t]
% Typeset the assembly
\noindent\TypesetCoffin\Framex
\SetHorizontalCoffin\Framex{}
\JoinCoffins\Framex[l,t]\Ri[l,t]
\JoinCoffins\Framex[\Ri-r,\Ri-t]\Rii[l,b]% \Rii changed to b
\JoinCoffins\Framex[\Rii-r,\Rii-b]\Riii[l,t]% changed to b
\JoinCoffins\Framex[\Riii-r,\Riii-t]\Riv[l,b]% \Riv changed to b
\bigskip
Rearranged\bigskip
\noindent\TypesetCoffin\Framex
\end{document}