ユーザーが入力できる PDF 内の ConTeXt で一意の穴埋め問題を作成するにはどうすればよいですか?

ユーザーが入力できる PDF 内の ConTeXt で一意の穴埋め問題を作成するにはどうすればよいですか?

の回答を使用してユーザーが 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

<<-- 1 つのフィールドに入力すると、他のフィールドにコピーされます。

問題は、ユーザーが最初の穴埋め問題を入力すると、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

<<-- 1 つのフィールドに入力しても、他のフィールドにはコピーされなくなります。

現在、最小限の実用的な回答での解決策は、\field[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

関連情報