关于使用 hyperref 包制作的可填写表单的单选按钮( \ChoiceMenu[radio,...] )的问题

关于使用 hyperref 包制作的可填写表单的单选按钮( \ChoiceMenu[radio,...] )的问题

我经常使用单选按钮( \ChoiceMenu[radio,...] )。但有一点我不太满意:如果您选择/选中单选按钮组中的某个按钮,那么如果没有 javascript,就无法再次取消选择/取消选中该组的所有单选按钮。

举个小例子:

\documentclass{article}
\usepackage[bookmarks=false]{hyperref}
\begin{document}
\begin{Form}
{Do you want to: }%
\ChoiceMenu[radio,radiosymbol=\ding{52},name=myGroupOfRadiobuttons]{}{Do it all again=Again}
\ChoiceMenu[radio,radiosymbol=\ding{52},name=myGroupOfRadiobuttons]{}{Pretend it never happened=Pretend}
\ChoiceMenu[radio,radiosymbol=\ding{52},name=myGroupOfRadiobuttons]{}{Write a book about it=Write}
\end{Form}
\end{document}

我希望获得一组单选按钮的行为,就像这个政府表格上部的“填写状态”部分一样可填写的 pdf 表格。如果已选中/已检查的单选按钮再次被选中/选择,则选择将完全消失。

是否可以使用 LaTex 和 hyperref 而不是 javascript 来制作这样一组单选按钮?上面链接的 pdf 是使用软件“Adobe LifeCycle Designer”制作的。


編輯:(彼得·格里尔)

最初上述结果是:

在此处输入图片描述

单击第一个复选框后,我们得到:

在此处输入图片描述

目标是能够在此状态下检查第一个框并恢复到初始状态(第一个图像)。

答案1

有一个名为的标志NoToggleToOff应该根据PDF 规范,第 439 页

(仅限单选按钮)如果设置,则应始终选择一个单选按钮;选择当前选定的按钮无效。如果清除,单击选定的按钮将取消选择它,使所有按钮均不被选中。

但是,这并不像预期的那样工作:即使没有设置标志,我也无法取消选择曾经选中的单选按钮。我尝试使用不同的查看器(Adobe Reader X、PDF-XChange Viewer、Foxit Reader [Windows])和由不同程序生成的 PDF 文档(使用 LaTeX hyperref、OpenOffice、文本),但没有成功。显然,该规范的这一特性目前任何 PDF 查看器均未实现该功能

那么链接形式创建?

答案相当令人惊讶:此 PDF 中的“单选按钮”未设置标志Radio,从技术上讲,这会将它们变成简单的复选框。但是,如您所见,它们仍然像单选按钮一样工作,因此您一次只能选择一个选项。您可以通过在创建的表单字段中删除此标志来利用这一奇怪之处hyperref

\documentclass{article}
\usepackage[bookmarks=false]{hyperref}

% Make radio buttons completely deselectable by removing the "Radio" flag
% (http://tex.stackexchange.com/a/74543/3323)
\usepackage{etoolbox}
\makeatletter
\patchcmd{\HyField@FlagsRadioButton}{\HyField@SetFlag{Ff}{Radio}}{}{}{}
\makeatother
\def\DefaultOptionsofRadio{print}

\begin{document}
\begin{Form}
{Do you want to: }%
\ChoiceMenu[radio,radiosymbol=\ding{52},name=myGroupOfRadiobuttons]{}{Do it all again=Again}
\ChoiceMenu[radio,radiosymbol=\ding{52},name=myGroupOfRadiobuttons]{}{Pretend it never happened=Pretend}
\ChoiceMenu[radio,radiosymbol=\ding{52},name=myGroupOfRadiobuttons]{}{Write a book about it=Write}
\end{Form}
\end{document}

这样,您就会得到完全可取消选择的单选按钮,就像您提供的表单中的单选按钮一样。

答案2

\documentclass{article}
\usepackage[bookmarks=false]{hyperref}
\begin{document}
\begin{Form}
{Do you want to: }%
\ChoiceMenu[radio,radiosymbol=\ding{52},name=myGroupOfRadiobuttons]{}{Do it all again=Again,%
Pretend it never happened=Pretend,Write a book about it=Write}
\end{Form}
\end{document}

相关内容