如何将小页面对齐到顶部

如何将小页面对齐到顶部

问题

我尝试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以获得更广泛的解释。

A

\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}

相关内容