
どのようにすれば、それが当てはまる 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
。
難しいのは、 とwidth
のalign
設定だけでは不十分なため、垂直モードを確認する方法です。問題は、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
、オプションを使用してそれを無効にすることです。予想とは異なり、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
キーとは異なり、このオプションはコンテンツの先頭または末尾に何も挿入しないため、チェックを実行して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
とまったく同じことを実行し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