Wie erstelle ich in ConTeXt eindeutige Clozes in einer PDF-Datei, die Benutzer eingeben können?

Wie erstelle ich in ConTeXt eindeutige Clozes in einer PDF-Datei, die Benutzer eingeben können?

Mit der Antwort unterWie können Benutzer Lückentexte in PDF-Dateien eingeben?konnte ich ein Cloze-Dokument erstellen, in dem Benutzer die Lückentexte in ein PDF eingeben. Ich habe den Code in einem Makro verwendet, sodass er mehrmals aufgerufen wird \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

<<-- Versuchen Sie, in ein Feld zu tippen, und der Text wird in die anderen Felder kopiert.

Das Problem besteht darin, dass Adobe Acrobat alle anderen Lückentexte automatisch mit genau demselben Wert ausfüllt, wenn Benutzer den ersten Lückentext ausfüllen. Der Benutzer muss also andere Werte eingeben.

\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

<<-- Versuchen Sie, in ein Feld zu tippen, und die Eingabe wird nicht mehr in die anderen Felder kopiert.

Die Lösung in einer minimalen funktionierenden Antwort besteht nun darin, \field[cloze] so zu ändern, dass jeder Cloze einen anderen Namen hat, z. B. \field[tree] und \field[mountain]. Das Problem ist, dass ich es eingebettet in einige komplexe Makros verwende. Ich habe versucht, \field[#1] zu verwenden, um einen anderen Wert zu senden, und \field[\expanded[#1]] und \field[\randomnumber{0}{10000000}], \def\somevalue{\randomnumber{0}{10000000}}\field{\expanded{somevalue}} usw. und viele viele andere Codekombinationen, aber alles, was ich versuche, schlägt fehl. Da es tief in vielen Makroebenen liegt, kann ich \field[cloze] nicht manuell in andere Werte ändern.

Wie kann ich den Code aus der Antwort so verwenden, dass jeder Lückentext ein Ort ist, an dem Benutzer einen eindeutigen Wert eingeben können und dieser Wert nicht automatisch in jeden Lückentext kopiert wird?

Antwort1

Sie müssen nicht erweitert werden, ConTeXt erweitert den Namen sowieso. Außerdem würde ich einen globalen Zähler anstelle eines zufälligen Werts empfehlen. Das macht das Dokument reproduzierbarer und zuverlässiger.

\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

verwandte Informationen