ConTeXt:有哪些替代方案和渲染设置?

ConTeXt:有哪些替代方案和渲染设置?

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。用户现在只需知道其他替代方案的名称即可使用它们。因此,它可以很好地融入现有界面并“感觉”一致。

为什么必须通过替代方法而不是直接定义它?

没有规定说但正如我已经概述的那样,它“感觉”更加一致。它还可能使你的代码更具可读性,并且更易于维护。

相关内容