框架中的垂直对齐

框架中的垂直对齐

假设我有以下垂直胶水,当内部内容溢出时,它会从顶部对齐切换到垂直居中:

\starttext
\hrule
\vbox to 1in{
    \vskip 0.25in plus 0in minus 1fil
    \hrule
    % The height of this box is variable.
    \vbox to 0.9in{\hbox to 1in{}}
    \hrule
    \vskip 0.25in plus 1fil minus 1fil
}
\hrule
\stoptext

应用于此的 ConTeXt 版本是什么:

\starttext
\setupTABLE[r][each]
    [height=1in,
     width=2in,
     align={middle,high},
     strut=no,
     frameoffset=0in,
     offset=0in]
\bTABLE
    \bTR \bTD
        % What goes here? Or is this an alignment setting (to setupTABLE)?
        a\\b\\c
    \eTD \eTR
\eTABLE
\stoptext

您不能简单地将 TeX 版本放入 ConTeXt 表格单元格中,因为我无法消除顶部间隙,而且它不是支柱(根据\showstruts)。

\starttext
\setupTABLE[r][each]
    [height=1in,
     width=2in,
     align={middle,high},
     strut=no,
     frameoffset=0in,
     offset=0in]
\bTABLE
    \bTR \bTD
        \vskip 0.25in plus 0in minus 1fil
        \hrule
        \vbox to 0.9in{\hbox to 1in{}}
        \hrule
        \vskip 0.25in plus 1fil minus 1fil
    \eTD \eTR
\eTABLE
\stoptext

当将 放入表格单元格时,缝隙会变得更大\vskip ... \framed... \vskip。就好像缝隙是由不会收缩的顶层胶水造成的一样。

答案1

框架中的垂直对齐

您尝试实现的功能无法通过默认对齐选项实现,唯一的选项是将内容推到顶部、底部或居中。

为了简化示例,全部使用\framed(正确的是\startframed)而不是表环境,但结果应该是相同的。

\startsetups[framealignment]
    \startframed[height=210pt,strut=no,offset=5pt,framecolor=red,align=#1]
        \blackrule[width=100pt,height=100pt,color=green]
    \stopframed
\stopsetups

\starttext

\startcombination[nx=3,style=mono]
  {\setupwithargument{framealignment}{low}} {align=low}
  {\setupwithargument{framealignment}{lohi}}{align=lohi}
  {\setupwithargument{framealignment}{high}}{align=high}
\stopcombination

\stoptext

在此处输入图片描述

适合框架内容

您在案例中提到的一个问题是表格单元格的内容可能大于单元格本身,通常您会使用以下选项之一。

  1. 使单元格尺寸更大以适应整个内容,这可以通过省略或width值来实现height。单元格现在可以在一个方向上增长以提供足够的空间来容纳内容。

  2. 减小表格的字体大小(可以使用styleforegroundstyle键完成)或整个文档的字体大小(可以使用 完成\setupbodyfont)。

  3. 通过重写文本使其更短或者将图形缩放到更小的尺寸来更改单元格内容的大小。

消除顶部的空间

\vskip当您在框架顶部添加垂直跳跃时,间隙会比预期的要大。这里添加的是\lineskip可以在中间框架中更好地看到的值,但您可以使用 then\offinterlineskip命令将其删除。

\startbuffer[lineskip:yes]
    \startframed[height=200pt,strut=no,offset=0pt,framecolor=red,align=high]
        \vskip 0pt
        \blackrule[width=100pt,height=100pt,color=green]
    \stopframed
\stopbuffer

\startbuffer[lineskip:big]
    \startframed[height=200pt,strut=no,offset=0pt,framecolor=red,align=high]
        \lineskip 10pt
        \vskip 0pt
        \blackrule[width=100pt,height=100pt,color=green]
    \stopframed
\stopbuffer

\startbuffer[lineskip:nop]
    \startframed[height=200pt,strut=no,offset=0pt,framecolor=red,align=high]
        \offinterlineskip
        \vskip 0pt
        \blackrule[width=100pt,height=100pt,color=green]
    \stopframed
\stopbuffer

\starttext

\startcombination[nx=3,style=mono]
  {\getbuffer[lineskip:yes]}{lineskip=1pt}
  {\getbuffer[lineskip:big]}{lineskip=10pt}
  {\getbuffer[lineskip:nop]}{lineskip=0pt}
\stopcombination

\stoptext

在此处输入图片描述

添加自定义跳过值

在这种情况下,ConTeXt 不提供用户级命令来替换该\vskip命令(该\vspace命令是此功能的完美候选),您必须依赖低级设置。

您可以做的是将设置挂接到正常setup机制中,因为topbottom键可用于将跳过应用于框架内容。

\defineframed
  [BleedFrame]
  [    height=200pt,
        width=100pt,
        align=middle,
        strut=no,
   framecolor=red,
          top=\vskip 0pt plus 0pt minus 1 filll\relax\nointerlineskip,
       bottom=\vskip 0in plus 1filll minus 1filll\relax,
       offset=0in]

\startbuffer[content:dofit]
    \startframed[BleedFrame]
        \blackrule[width=50pt,height=100pt,color=green]
    \stopframed
\stopbuffer

\startbuffer[content:nofit]
    \startframed[BleedFrame]
        \blackrule[width=50pt,height=250pt,color=green]
    \stopframed
\stopbuffer

\starttext

\startcombination[nx=2]
  {\getbuffer[content:dofit]}{}
  {\getbuffer[content:nofit]}{}
\stopcombination

\stoptext

在此处输入图片描述

相关内容