我想创建一个新的样式替代方案,这样我就可以更改文本和字体(本例中为大写粗体),同时增加字母间距。但是,尝试这样做会导致崩溃:
\setuppapersize[S3]
\definecharacterkerning [mykerning] [factor=0.16]
\definealternativestyle [mystyle]
[
\WORDS\bfx\setcharacterkerning[mykerning]
]
\starttext
{\WORDS\bfx\setcharacterkerning[mykerning] It works here.}
{\mystyle It crashes here.}
\stoptext
tex error > tex error on line 13 in file /home/…/test.tex: ! Argument of \setcharacterkerning has an extra }
为什么会发生崩溃?(\WORDS
可以运行,为什么不运行\setcharacterkerning
?)有办法修复吗?我希望能够将其用作 的参数style=
。
答案1
抱歉回答太长了。括号问题在其他地方讨论过,我认为手册里有解释,但我不记得是哪一本了,所以我在这里简单说一下。
您的问题是:ConTeXt 在第一次出现右括号时关闭一对括号[]
。因此,类似
\setupsomething[key=\value[]]
将读取[key=\value[]
并崩溃。对于这种情况,ConTeXt 提供\setups
包含所有复杂宏的功能:
\startsetups mystyle
\WORDS\bfx\setcharacterkerning[mykerning]
\stopsetups
\setups[mystyle]
和都\setup{mystyle}
可以,所以我们选择后者以避免上面的括号问题。
\setuppapersize[S3]
\definecharacterkerning [mykerning] [factor=0.16]
\startsetups mystyle
\WORDS\bfx\setcharacterkerning[mykerning]
\stopsetups
\definealternativestyle[mystyle][\setups{mystyle}]
\setuphead[title][style=\mystyle]
%Test example
\starttext
\starttitle[title=Hello]
\input jojomayer
\stoptitle
\stoptext