如何在 ConTeXt 中的浮动图形中实现右对齐标题上方的行?

如何在 ConTeXt 中的浮动图形中实现右对齐标题上方的行?

我想实现 Adob​​e InDesign 中所谓的段落规则在图的标题上方,即在标题上方画一条线,同时保持标题本身右对齐(实际上与内边缘对齐)。

这是 MWE(请注意,此 MWE 与我发布的上一个问题并将很快重新修改以纳入我在那里收到的建议):

\setuppapersize[A4][A4]
\setuplayout
[
  backspace=11.67mm,        width=131.25mm,
  topspace=21.21mm,         height=254.57mm,
  headerdistance=13pt,      header=13pt,
  footerdistance=13pt,      footer=13pt,
  rightmargindistance=13pt, rightmargin=39.5mm,
]

\setuppagenumbering[alternative=doublesided, location=]

\setuphead[section][
  page=right,
  continue=no,
  style=\ssb\bf,
]


\definefloat[pagefloat][pagefloats][graphic]
\setupfloat[pagefloat][
  default={page,header,footer},
]
\setupcaption[pagefloat][
  width=max,
  location=top,
  topframe=on,
  toffset=\dimexpr 0.25\lineheight \relax,
  headstyle=\ss\bf,
  style=\tfx,
  align=inner,
  spaceinbetween=nowhite,
]

\def\PageFigure#1#2%
  {
  \placepagefloat[]{#2}{
    \offset[
      leftoffset=\dimexpr -\rightmarginwidth - \lineheight \relax,
    ]{
      \externalfigure[#1][
        width=\dimexpr \textwidth + \rightmarginwidth + \lineheight \relax,
        height=\textheight,
        factor=fit,
      ]
    }
  }
}


\starttext

\chapter{Testing Ruled Captions}

\dorecurse{3}{\input{knuth}}

\PageFigure{https://via.placeholder.com/1600x900.png?text=Wide+Test+Image}{First line\\Second line of the caption}

\section{First Section}

\dorecurse{4}{\input{knuth}}

\stoptext

这就是我消除该行topframe=on,:这就是我想要对齐文本的方式。

在此处输入图片描述

但这是顶框打开

在此处输入图片描述

为什么仅仅添加顶部框架就会改变文本的对齐方式?可以防止这种情况发生吗?或者更好的是,可以单独调整吗?

任何帮助将非常感激。

答案1

我不确定我是否理解了你想要什么,但也许是类似这样的?请注意location={top,right}。在你的定义中,PageFigure你有一些虚假的空格(试试你的定义中的例子,你会看到它们是如何显示的)。另外,将纸张尺寸设置为 A4 是没有必要的,这是默认的。

我先忘记了。这topframe=on会使您的代码进入不同的路径(带有框架),这就是您看到的效果的原因。

\setuppapersize[A4][A4]
\setuplayout
[
  backspace=11.67mm,        width=131.25mm,
  topspace=21.21mm,         height=254.57mm,
  headerdistance=13pt,      header=13pt,
  footerdistance=13pt,      footer=13pt,
  rightmargindistance=13pt, rightmargin=39.5mm,
]

\setuppagenumbering[alternative=doublesided, location=]

\setuphead[section][
  page=right,
  continue=no,
  style=\ssb\bf,
]


\definefloat[pagefloat][pagefloats][graphic]
\setupfloat[pagefloat][
  default={page,header,footer},
]

\setupcaption[pagefloat][
   location={top,right},
   topframe=on,
   toffset=0.25\lineheight,
   headstyle=\ss\bf,
   style=\tfx,
   align=inner,
   spaceinbetween=nowhite,
]

\starttexdefinition PageFigure #1#2
  \placepagefloat
    {#2}
    {\offset
      [leftoffset=\dimexpr - \rightmarginwidth - \lineheight \relax] 
      {\externalfigure
         [#1]
         [width=\dimexpr \textwidth + \rightmarginwidth + \lineheight \relax,
          height=\textheight,
          factor=fit]}}
\stoptexdefinition

\showframe

\starttext

\chapter{Testing Ruled Captions}

\dorecurse{3}{\input{knuth}}

\PageFigure{https://via.placeholder.com/1600x900.png?text=Wide+Test+Image}{First line\par Second line of the caption}

\section{First Section}

\dorecurse{4}{\input{knuth}}

\stoptext

图文上方

更新汉斯现在打开了一些可能性。请注意,loffset这将处理酒吧的额外部分。

此外我还做了一些修改:

  • 添加location=inner到浮点数,并且删除了offset(我不明白\lineheight你在那里做什么)。
  • 更改为\start...\stop语法。

如果我们(您)很幸运的话,很快就会有一个包含该内容的新版本。


\useMPlibrary[dum]

\setuplayout
  [backspace=11.67mm,        width=131.25mm,
   topspace=21.21mm,         height=254.57mm,
   headerdistance=13pt,      header=13pt,
   footerdistance=13pt,      footer=13pt,
   rightmargindistance=13pt, rightmargin=39.5mm]

\setuppagenumbering
  [alternative=doublesided,location=]

\setuphead
  [section]
  [page=right,
   continue=no,
   style=\ssb\bf]

\defineframed
  [MyCaptionFramed]
  [align={lohi,flushleft},
   width=fit,
   frame=off,
   strut=no,
   topframe=on,
   loffset=3cm,
   toffset=0.25\lineheight]

\starttexdefinition protected MyCaption #1
  \MyCaptionFramed {
    % we ignore #1 as we want to unpack
    \unvbox\floatcaptionbox
  }
\stoptexdefinition

\definefloat[pagefloat][pagefloats][graphic]

\setupfloat
  [pagefloat]
  [default={page,header,footer},
   location=inner]

\setupcaption
  [pagefloat]
  [location={top,inner},
   align=inner,
   command=\MyCaption,
   spaceinbetween=nowhite]

\starttexdefinition PageFigure #1#2
  \startplacefloat
    [pagefloat]
    [title={#2}]
      \externalfigure
        [#1]
        [width=\dimexpr \textwidth + \rightmargintotal \relax,
         height=\textheight,
         factor=fit]
  \stopplacefloat
\stoptexdefinition

\showframe

\starttext

\startchapter[title={Testing Ruled Captions}]

  \dorecurse{3}{\input{knuth}}

  \PageFigure
    {some dummy}
    {First line\\Second line of the caption}

  \startsection[title={First Section}]

    \dorecurse{4}{\input{knuth}}

  \stopsection

\stopchapter

\stoptext

结果:

更新后的版本

相关内容