垂直构图模式

垂直构图模式

我如何才能创建一个真实的 ConTeXt 框架环境\ifvmode

\startframed[...]
    \ifvmode
        Vertical mode!
    \else
        Horizontal mode!
    \fi
\stopframed

编辑

我以为如果指定了对齐,则 \framed 将产生 \vbox。但是它看起来更像是一个伪垂直框,因为ifvmode是错误的,并且是不允许的。是否有保证垂直模式的设置组合或允许围绕内容的nointerlineskip前后子句?\vbox\bgroup...\egroup

答案1

\framed命令horizontal默认创建一个框,但是当您将widthheight设置与设置结合应用时align,则会切换到一个vertical框。

棘手的部分是如何检查垂直模式,因为设置 awidthalign设置是不够的。问题是 ConTeXt\strut在内容的开始和结束处添加了 a ,并且\strut在开始时切换到horizontal模式。带有 的示例\vbox演示了这里发生的情况。

\startbuffer[modetest]
    \ifvmode
        Vertical mode!
    \else
        Horizontal mode!
    \fi
\stopbuffer

\starttext

\startframed[width=max,align=normal]
    \getbuffer[modetest]
\stopframed

\ruledvbox\bgroup
    \strut\getbuffer[modetest]\removeunwantedspaces\strut
\egroup

\stoptext

在此处输入图片描述

\strut我们知道罪魁祸首后,显而易见的解决方案是使用strut=no选项禁用它。与预期不同,我们仍然获得horizontal模式,因为 ConTeXt\noindent在内容开头添加了内容,这使我们脱离了vertical模式。

\startbuffer[modetest]
    \ifvmode
        Vertical mode!
    \else
        Horizontal mode!
    \fi
\stopbuffer

\starttext

\startframed[width=max,align=normal,strut=no]
    \getbuffer[modetest]
\stopframed

\ruledvbox\bgroup
    \noindent\getbuffer[modetest]\removeunwantedspaces
\egroup

\stoptext

在此处输入图片描述

为了最终解决我们的问题,我们必须使用特殊strut=none选项,这是\framed唯一的选项。与前一个no键不同,该none选项不会在内容的开头或结尾插入任何内容,这使我们处于vertical在执行检查时保持模式,并且 ConTeXt 最终显示垂直模式!

\startbuffer[modetest]
    \ifvmode
        Vertical mode!
    \else
        Horizontal mode!
    \fi
\stopbuffer

\starttext

\startframed[width=max,align=normal,strut=none]
    \getbuffer[modetest]
\stopframed

\ruledvbox\bgroup
    \getbuffer[modetest]
\egroup

\stoptext

在此处输入图片描述

答案2

A 的background作用与 完全相同,framed并将 给予true\ifvmode举一个最简单的例子:

\definebackground
[nicenote]
[
framecolor=black,
background=color,
backgroundcolor=yellow,
frame=on, 
rulethickness=2pt,
offset=overlay,
leftoffset=1em,
rightoffset=1em,
width=\textwidth,
setups=framedsetups,
before=\blank,
after=\blank,
]
\starttext
\startnicenote 
\ifvmode
Vertical mode!
\else
Horizontal mode!
\fi
\stopnicenote 
\stoptext

在此处输入图片描述

相关内容