我正在学习 ConTeXt(到目前为止,这是一次很棒的经历!);然而,在使用“ConTeXt:一次短途旅行”做笔记和测试时,偶尔查阅参考手册时,我遇到了以下问题:
命令\setupframedtexts
应按如下方式工作:(\setupframedtexts[name][..=..]
根据参考手册),但它会忽略name
(如果name
提供则导致默认值)。
或者我在某个地方犯了语法错误?
梅威瑟:
\setupframedtexts[myFrame][frame=off,topframe=on,bottomframe=on,width=\textwidth]
\starttext
\startframedtext[myFrame]
\input Knuth
\stopframedtext
\stoptext
我还想使用 ConTeXt 设置,如下所示:
\setupsomething[mything]
[settings]
\setupsomethingelse[myanotherthing]
[settings,
setting={\something[mything]}]
例如:
\setupframedtexts[mySectionFrame]
[frame=off,
topframe=on,
bottomframe=on,
width=\textwidth]
\definehead[mySection][section]
\setuphead[mySection]
[numberstyle=bold,
textstyle=bold,
before=\vskip 2\baselineskip{\startframedtext[mySectionFrame]}
after=\stopframedtext\vskip\baselineskip]
我的问题源于这种情况。
这可能被视为两个问题,但它们(几乎)相关,所以我希望它不介意。
最后说明:我知道,该参考手册并不是最新的,但接受命名参数的行为(对我来说)更有意义。
答案1
您的 MWE 不起作用,因为您将myFramed
其作为参数传递\startframedtext ... \stopframedtext
,它将被忽略。
在 ConTeXt 中,通常 a\setup...
有一个\define...
对应项。在您的例子中,您需要定义framedtext
第一个 via \defineframedtext[myFrame]
,因此您稍后再设置它。请注意\setupframedtext[myFrame]
,是单数。复数形式将更改应用于整体框架文本,尽管您可以只使用它来指定myFramed
,您显然尝试过。\defineframedtext[myFrame]
将定义\startmyFrame
和\stopmyFrame
。让我们看看:
\defineframedtext[myFrame]
\setupframedtext[myFrame][frame=off,topframe=on,bottomframe=on,width=\textwidth]
\starttext
\startmyFrame
\input Knuth
\stopmyFrame
\stoptext
现在您的环境已准备好在节头中使用(当bold
不执行任何操作时,请尝试)。我建议您在内容之后由“复杂”宏组成时用括号括住宏,以避免出现有趣的解析错误\bf
。before=
after=
\defineframedtext[myFrame]
\setupframedtext[myFrame][frame=off,topframe=on,bottomframe=on,width=\textwidth]
\definehead[mySection][section]
\setuphead[mySection] [numberstyle=\bf, textstyle=\bf, before={\vskip 2\baselineskip \startmyFrame}, after={\stopmyFrame\vskip\baselineskip}]
\starttext
\startmyFrame
\input Knuth
\stopmyFrame
\startmySection
\input zapf
\stopmySection
\stoptext
ConTeXt 命令列表如果你想更好地理解ConTeXt 处理的无数的\setup
s 和s,这很有说明性。\define