背景

背景

背景

我想在两列之间居中添加一条粗线。

示例代码

说明该问题的最小工作示例:

\setupcolors[state=start]

\startuseMPgraphic{StyleVerticalRule}
  thickness := 6.50pt;

  if CurrentColumn < NOfColumns :
    setbounds currentpicture to OverlayBox
      shifted( -3*thickness, 0 );

    draw rightboundary OverlayBox
      withpen pensquare scaled thickness
      withcolor \MPcolor{red};
  fi
\stopuseMPgraphic

\defineoverlay[StyleVerticalRule][
  \useMPgraphic{StyleVerticalRule},
]

\definecolumnset[StyleColumns][
  n=2,
  background=StyleVerticalRule,
]

% Horizontal line below the section header.
\define[2]\StyleSection{%
  \framed[
    frame=off,
    bottomframe=on,
    framecolor=pink,
    rulethickness=1.0pt,
    width=local,
  ]{\vbox{#2}}}


\setuphead[section][
  command=\StyleSection,
  after={\startcolumnset[StyleColumns]},
  aftersection={\stopcolumnset},
]

\starttext
\startbodymatter
  \startchapter[title={Chapter}, reference=sec:my-chapter,]
  \startsection[title={Section}, reference=sec:my-section,]
  \startsubsection[title={Equipment},reference=sec:my-equipment,]
    \input knuth
    \input knuth
  \stopsubsection
  \stopsection
  \stopchapter
\stopbodymatter

\stoptext

问题

垂直规则高度似乎是\textheight,而不是列的高度。上面的代码产生:

过度扩展规则

垂直规则超出了子部分标题的范围,因为我认为它引用了OverlayBox。我想使用列高而不是文本高度来生成:

完美扩展规则

问题

关于多列布局:

  • 如何限制垂直规则的高度以使其符合列高(即,如何确定列高)?
  • 如何为该部分的列边距添加足够的空间,以便垂直规则不会与任何文本重叠?
  • 需要进行哪些计算才能确保垂直规则位于列之间(即,-3*thickness似乎......不正确)?

OverlayBox尽管我找到了一些例子,但我还是找不到 的任何定义。

有关的

有点相关的信息:

答案1

使用列集时,整个页面的设计都必须使用列集完成。因此,如果您希望章节或节标题跨越整个页面,则必须定义列跨度。

对于简单的两列文档,您可以使用\startcolumns ... \stopcolumns或其 MkIV 替代品\startmixedcolumns ... \stopmixedcolumns。以下是示例:

\setupcolors[state=start]

\startuseMPgraphic{StyleVerticalRule}
  draw OverlayBox;
\stopuseMPgraphic

\defineoverlay[StyleVerticalRule][\useMPgraphic{StyleVerticalRule}]

\definemixedcolumns
  [sectioncolumns]
  [
    n=2, 
    separator=rule,
    rulecolor=red,
    rulethickness=6.5pt,
    balance=yes,
  ]

\setupalign[verytolerant,stretch,hanging]

% Horizontal line below the section header.
\defineframed[sectionframed]
             [
               frame=off,
               bottomframe=on,
               framecolor=pink,
               rulethickness=1.0pt,
               width=local,
               align=normal, % to get a vbox
             ]

\define[2]\StyleSection{\sectionframed{#2}}

\setuphead
    [section]
    [
      command=\StyleSection,
      after={\startsectioncolumns},
      aftersection={\stopsectioncolumns},
    ]

\starttext
\startchapter[title={Chapter}, reference=sec:my-chapter,]
  \startsection[title={Section}, reference=sec:my-section,]
      \startsubsection[title={Equipment},reference=sec:my-equipment,]
        \input knuth
        \input knuth
      \stopsubsection
  \stopsection
\stopchapter

\stoptext

这使

在此处输入图片描述

相关内容