Alinhe a figura em uma grade pela borda superior

Alinhe a figura em uma grade pela borda superior

Estou tentando colocar figuras em um livro que estou tipografando. A maioria deles acaba no topo de uma página. Gostaria que minhas legendas usassem uma fonte menor e um espaçamento entre linhas menor do que o texto principal do livro.

\usemodule[visual] % for fake words and images
\useMPlibrary[dum]

\setuppapersize[B5]

\setuplayout[
    backspace=25mm,
    topspace=20mm,
    width=131mm,
    height=200mm,
    footer=0mm,
    grid=yes]
\showgrid

\setupinterlinespace[
    line=3.5ex]

\setupbodyfont[serif,12pt]

\setupcaptions[figure][
    number=no,
    style={\itx\setupinterlinespace[small]}]

\starttext

\startplacefigure[
    location=top,
    title={\fakenwords{30}{0}}]
\externalfigure[dummy][width=\textwidth,height=7cm]
\stopplacefigure

\fakenwords{80}{1} \par
\fakenwords{80}{2}

\stoptext

insira a descrição da imagem aqui

Pelo que vejo, o ConTeXt alinha os carros alegóricos em uma grade pela linha inferior de uma legenda. O resultado é que a parte superior da imagem fica em uma altura aleatória dependendo da altura da imagem e do número de linhas da legenda.

Meu objetivo é alinhar a borda superior da imagem na altura X da linha superior, para que corresponda ao texto da página oposta. Qualquer espaço em branco necessário deve ficar abaixo da legenda. Existe uma maneira de conseguir isso sem ajustar manualmente cada flutuador?

Responder1

Você pode fazer isso substituindo o comando de posicionamento float na rotina de saída. Eu simplesmente copiei o comando original\page_one_command_flush_float_box, renomeou-o e removeu \snaptogrid.

\usemodule[visual] % for fake words and images
\useMPlibrary[dum]

\setuppapersize[B5]

\setuplayout
  [backspace=25mm,
   topspace=20mm,
   width=131mm,
   height=200mm,
   footer=0mm,
   grid=yes]

\showgrid

\setupinterlinespace[line=3.5ex]

\setupbodyfont[serif,12pt]

\setupcaptions
  [figure]
  [number=no,
   style={\itx\setupinterlinespace[small]}]

\unexpanded\def\dontsnapfloatbox % \page_one_command_flush_float_box
  {\expandafter\ifconditional\csname c_page_floats_center_box\endcsname
     \ifdim\wd\floatbox<\hsize
       \global\setbox\floatbox\hpack to \hsize{\hss\box\floatbox\hss}%
     \fi
   \fi
   \hpack{\box\floatbox}}

\setupoutputroutine
  [singlecolumn]
  [page_otr_command_flush_float_box=\dontsnapfloatbox]

\starttext

\startplacefigure
  [location=top,
   title={\fakenwords{30}{0}}]
  \externalfigure[dummy][width=\textwidth,height=7cm]
\stopplacefigure

\fakenwords{80}{1} \par
\fakenwords{80}{2}

\stoptext

insira a descrição da imagem aqui

informação relacionada