如何在 ConTeXt 的 PDF 中创建用户可以输入的独特完形填空?

如何在 ConTeXt 的 PDF 中创建用户可以输入的独特完形填空?

使用答案如何让用户在 PDF 中输入完形填空?,我能够创建一个完形填空文档,用户可在 PDF 中输入填空内容。我在宏中使用了代码,因此它会\field[cloze]多次调用相同的代码。

\setupinteraction[state=start]

\definefield[cloze][line]

\starttext

Frogs have four \field[cloze] and two eyes.
Frogs have four \field[cloze] and two eyes.
Frogs have four \field[cloze] and two eyes.
Frogs have four \field[cloze] and two eyes.

\stoptext

<<-- 尝试在一个字段中输入内容,然后它会复制到其他字段。

问题是,当用户填写第一个完形填空时,Adobe Acrobat 会自动用完全相同的值填写所有其他完形填空。我需要用户输入不同的值。

\setupinteraction[state=start]

\definefield[cloze1][line]
\definefield[cloze2][line]
\definefield[cloze3][line]
\definefield[cloze4][line]

\starttext

Frogs have four \field[cloze1] and two eyes.
Frogs have four \field[cloze2] and two eyes.
Frogs have four \field[cloze3] and two eyes.
Frogs have four \field[cloze4] and two eyes.

\stoptext

<<-- 尝试在一个字段中输入内容,它不再复制到其他字段。

现在,最小工作答案中的解决方案是将 \field[cloze] 更改为每个 cloze 具有不同的名称,例如 \field[tree] 和 \field[mountain],问题是,我在一些复杂的宏中嵌入使用它。我尝试使用 \field[#1] 发送不同的值,以及 \field[\expanded[#1]] 和 \field[\randomnumber{0}{10000000}]、\def\somevalue{\randomnumber{0}{10000000}}\field{\expanded{somevalue}} 等。以及许多其他代码组合,但我尝试的一切都无法编译。由于它深陷在多层宏中,我无法手动将 \field[cloze] 更改为其他值。

我如何使用答案中的代码,但同时又能使每个完形填空都是用户可以输入唯一值的地方,并且该值不会自动复制到每个完形填空中?

答案1

您不需要扩展,ConTeXt 无论如何都会扩展名称。此外,我建议使用全局计数器而不是随机值。这使文档更具可重复性和可靠性。

\setupinteraction[state=start]

\newcount\clozecount
\def\mycloze{%
  \global \advance \clozecount by 1
  \definefield[uniqcloze\the\clozecount][line]%
  \field[uniqcloze\the\clozecount]%
}

\starttext

Frogs have four \mycloze\ and two eyes.
Frogs have four \mycloze\ and two eyes.
Frogs have four \mycloze\ and two eyes.
Frogs have four \mycloze\ and two eyes.

\stoptext

相关内容