我刚刚发布了一个问题,现在可以在文本中生成一个条件部分:如何制作条件文档功能
但要扩展和概括这个问题,首先我如何创建一个具有多值参数(比如难度级别)的文档。如果我要用 1 到 10 之间的整数来标识每个练习的难度级别,假设我想定义我仅打印难度从 1 到 5 的练习。
此外,无论是像以前一样只是一个布尔值还是一个多值参数,有没有办法从 LaTeX 外部设置值?我想运行一个批处理作业,自动构建教师版和学生版,并且我不想将该状态嵌入文档中并不断地来回更改它。
答案1
在这里我提出了一个使用特征的 ConTeXt 解决方案--arguments
和模式。模式提供了一种有条件地包含文档部分内容的方法。例如,在打印教科书时,可以决定只打印文本或包含练习的文本或所有内容,包括练习和每个练习的提示。另一个用例是幻灯片和讲义的单个源文件。
标记什么由您决定。如果您希望能够包含单个练习,可以标记每个练习,或者标记单个难度级别。这样,您就可以包含特定难度级别的所有练习。
\doifsomething{\env{from}}{%%
\dostepwiserecurse{\env{from}}{\env{to}}{1}{%%
\enablemode [ex-\recurselevel]}}
\starttext
\startmode [ex-1]
A very easy exercise
\startmode [clues]
Clue to exercise 1
\stopmode
\stopmode
\startmode [ex-2]
An easy exercise
\stopmode
\startmode [ex-3]
A fairly easy exercise
\startmode [clues]
Clue to exercise 3
\stopmode
\stopmode
\startmode [ex-4]
An moderate exercise
\stopmode
%% […]
\startmode [ex-10]
A very hard exercise
\startmode [clues]
Clue to exercise 10
\stopmode
\stopmode
\stoptext
这里我创建了一些带有数字难度级别的示例练习。有些练习有线索。现在您可以在命令行中包含特定练习。这包括练习一和二,以及无线索的练习。
context --arguments=from=1,to=2 file.tex
其呈现形式为:
要包含练习三至十和线索,请使用:
context --arguments=from=3,to=10 --mode=clues file.tex
其呈现形式为:
如您所见,可以使用 获取参数的值
\env{key}
。也可以直接将参数传递给上下文:
context --bodyfont=pagella file.tex
在这种情况下,可以使用 获取值\getdocumentargument{bodyfont}
。但我建议使用--argument
,因为它更安全并且不会与已定义的命令行参数冲突。