alternative
我在 ConTeXt 中看到了这个关键词的使用:
\setuppagenumbering[alternative=doublesided]
\setupheads[alternative=inmargin]
\setuplist[section][alternative=d]
我认为它只是一个流行的关键字:一个硬编码到每个宏定义中的枚举,例如:
def setuplist(alternative="a", ...):
if alternative == "a":
doAlternativeA
elif alternative == "b":
doAlternativeB
elif alternative == "c":
doAlternativeC
elif alternative == "d":
doAlternativeD
然而答案是ConTeXt:避免跨页面枚举项定义一个全新的替代方案。这意味着 ConTeXt 中的替代方案是通用宏钩子,而不是每个宏的关键字。
\defineuserdataalternative
[itemize]
[renderingsetup=userdata:itemize]
\defineuserdata [item] [alternative=itemize]
那么该alternative
关键字是什么意思?它在什么阶段使用或调用?它的作用范围是什么;它做什么?
然后是renderingsetup
关键字,我对它有同样的疑问。它是只针对 ConTeXt 宏的一个子集,还是一个通用的宏钩子?我假设它允许在页面渲染开始之前修改底层 TeX 代码。这与通常的关键字有何不同command=
?为什么必须通过替代方法而不是直接定义它?
答案1
关键字alternative
通常用于在 ConTeXt 中对元素的不同预定义渲染进行选择。例如,\setuphead[chapter][alternative=middle]
将章节标题水平居中渲染。
它是否只特定于 ConTeXt 宏的子集,还是通用宏钩子?
现在,当然,替代方案需要执行实际渲染的实现。这称为渲染设置,应该对用户隐藏。原则上,关键字alternative
可以选择一种实现,而无需通过渲染设置绕行,但这会使扩展变得更加困难。因此选择了模块化方法。渲染设置不是通用的。例如,为\setuphead
替代方案编写的渲染设置不能与一起使用\setupitemize
。大多数提供替代方案选择的设置都支持渲染设置(例外情况)。
这与通常的关键字有何不同
command=
?
它优于 的原因command=
在于渲染设置对用户完全透明。想象一下一个模块,它定义了 的其他替代方案\setupitemize
。用户现在只需知道其他替代方案的名称即可使用它们。因此,它可以很好地融入现有界面并“感觉”一致。
为什么必须通过替代方法而不是直接定义它?
没有规定说有但正如我已经概述的那样,它“感觉”更加一致。它还可能使你的代码更具可读性,并且更易于维护。