縦モードでフレーム化

縦モードでフレーム化

どのようにすれば、それが当てはまる ConTeXt フレーム環境を作成できるでしょうか\ifvmode?

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

編集

私はそう思っていた配置が指定された場合、\framedは\vboxを生成します。ifvmodeただし、は false であり、許可されていないため、これは偽の vbox のように見えます。nointerlineskip垂直モードを保証する設定の組み合わせ、または\vbox\bgroup...\egroupコンテンツの周囲を許可する before/after 句はありますか?

答え1

この\framedコマンドはhorizontalデフォルトでボックスを作成しますが、widthまたはheight設定を 設定と組み合わせて適用すると、ボックスalignに切り替わりますvertical

難しいのは、 とwidthalign設定だけでは不十分なため、垂直モードを確認する方法です。問題は、ConTeXt が\strutコンテンツの先頭と末尾に を追加し、\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、オプションを使用してそれを無効にすることです。予想とは異なり、horizontalConTeXt が\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キーとは異なり、このオプションはコンテンツの先頭または末尾に何も挿入しないため、チェックを実行してConTeXtが最終的に表示するモードがnone維持されます。vertical縦モード!

\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とまったく同じことを実行しframedtrueに渡します\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

ここに画像の説明を入力してください

関連情報