Выровнять фигуру на сетке по верхнему краю

Выровнять фигуру на сетке по верхнему краю

Я пытаюсь разместить рисунки в книге, которую набираю. Большинство из них оказываются в верхней части страницы. Я бы хотел, чтобы мои подписи были набраны шрифтом поменьше и с меньшим межстрочным интервалом, чем основной текст книги.

\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

введите описание изображения здесь

Из того, что я вижу, ConTeXt выравнивает плавающие элементы на сетке по нижней строке подписи. В результате верхняя часть изображения оказывается на случайной высоте в зависимости от высоты изображения и количества строк в подписи.

Моя цель — выровнять верхний край изображения по высоте X верхней строки, чтобы он соответствовал тексту на развороте. Все необходимые пробелы должны быть под подписью. Есть ли способ сделать это без ручной настройки каждого плавающего элемента?

решение1

Вы можете сделать это, переопределив команду размещения float в выходной процедуре. Я просто скопировал исходную команду\page_one_command_flush_float_box, переименовал его и удалил \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

введите описание изображения здесь

Связанный контент