
Используя ответ наКак разрешить пользователям вводить знаки препинания в 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