ConTeXt:框架空白

ConTeXt:框架空白

我正在尝试在 ConTeXt 的框架中插入空白;以下是我尝试使用的选项:

\defineframedtext[experiment]
                 [frame=on,
                   rulethickness=1pt,
                   offset=0pt,
                   width=fit,
                   height=broad,
                   strut=no,
                   location=middle]

\starttext
\startexperiment
  Plop \\
  \blank[3cm]
\stopexperiment
\stoptext

但是,框架始终位于文本正下方,空白被忽略。我该如何实现这个空白空间?

答案1

如果您不想或根本无法切换到framed环境,请不要\lastskip在空白后清零。

\defineframedtext
  [experiment]
  [
    frame=on,
    rulethickness=1pt,
    offset=0pt,
    width=fit,
    height=broad,
    strut=no,
    location=middle,
  ]

\starttexdefinition zerolastskip
  \ifvmode
    \scratchdimen=\prevdepth
    \hrule height \zeropoint
    \prevdepth=\scratchdimen
  \fi
\stoptexdefinition

\starttext

\startexperiment
  Plop \\
  \blank[3cm]\zerolastskip
\stopexperiment
\stoptext

您可以experiment通过引入额外的包装来将其添加到每个中。

\defineframedtext
  [doexperiment]
  [
    frame=on,
    rulethickness=1pt,
    offset=0pt,
    width=fit,
    height=broad,
    strut=no,
    location=middle,
  ]

\definestartstop
  [experiment]
  [
    before={\startdoexperiment},
    after={\zerolastskip\stopdoexperiment},
  ]

\starttexdefinition zerolastskip
  \ifvmode
    \scratchdimen=\prevdepth
    \hrule height \zeropoint
    \prevdepth=\scratchdimen
  \fi
\stoptexdefinition

\starttext
\startexperiment
  Plop \\
  \blank[3cm]
\stopexperiment
\stoptext

答案2

ConTeXt 删除了环境末尾的垂直跳跃framedtext

框架文本末尾缺少跳过

有两种方法可以解决这个问题,第一种方法是添加一个值为 0pt 的额外跳过。

\starttext

\startframedtext
Plop
\blank[3cm]
\blank[0pt]
\stopframedtext

\stoptext

框架文本末尾有额外跳过

第二种方法是在跳过之后设置一个惩罚,以防止 ConTeXt 删除跳过,这可以通过命令samepage的关键字来完成\blank

\starttext

\startframedtext
Plop
\blank[3cm,samepage]
\stopframedtext

\stoptext

框架文本末尾的额外惩罚

相关内容