将图形与网格顶部边缘对齐

将图形与网格顶部边缘对齐

我正在尝试将图片放在我正在排版的书中。大多数图片都位于页面顶部。我希望我的标题使用比书的正文更小的字体和更小的行距。

\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

您可以通过覆盖输出例程中的浮点放置命令来实现。我只是复制了原始命令\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

在此处输入图片描述

相关内容