有什么方法可以从外部设置变量吗?

有什么方法可以从外部设置变量吗?

我刚刚发布了一个问题,现在可以在文本中生成一个条件部分:如何制作条件文档功能

但要扩展和概括这个问题,首先我如何创建一个具有多值参数(比如难度级别)的文档。如果我要用 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

其呈现形式为:

sc1

要包含练习三至十和线索,请使用:

context --arguments=from=3,to=10 --mode=clues file.tex

其呈现形式为:

sc2

如您所见,可以使用 获取参数的值 \env{key}。也可以直接将参数传递给上下文:

context --bodyfont=pagella file.tex

在这种情况下,可以使用 获取值\getdocumentargument{bodyfont}。但我建议使用--argument,因为它更安全并且不会与已定义的命令行参数冲突。

相关内容