如果您在 evince 中打开一个有 ChoiceMenu 的 pdf(见下面的代码),那么所有选项都将被选中。如果您使用 Master PDF Editor 打开同一个 pdf,那么所有选项都将被取消选中。我如何将默认选定选项设置为 true,将其他所有选项设置为 false?它应该适用于 evince 和 Master PDF Editor。
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{hyperref}
% make ChoiceMenu unselect work
\usepackage{etoolbox}
\makeatletter
\patchcmd{\HyField@FlagsRadioButton}{\HyField@SetFlag{Ff}{Radio}}{}{}{}
\makeatother
\begin{document}
\begin{Form}
\mbox{\ChoiceMenu[width=10pt,height=10pt,name=choiceMenuName,radio,radiosymbol=\ding{52}]{}{ =yes}} Yes
\mbox{\ChoiceMenu[width=10pt,height=10pt,name=choiceMenuName,radio,radiosymbol=\ding{52}]{}{ =no}} No
\end{Form}
\end{document}
答案1
您可以尝试如果明确设置值和默认键是否会更好:
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{hyperref}
% make ChoiceMenu unselect work
\usepackage{etoolbox}
\makeatletter
\patchcmd{\HyField@FlagsRadioButton}{\HyField@SetFlag{Ff}{Radio}}{}{}{}
\makeatother
\begin{document}
\begin{Form}
\mbox{\ChoiceMenu[width=10pt,height=10pt,value=yes,default=yes,name=choiceMenuName,radio,radiosymbol=\ding{52}]{}{ =yes}} Yes
\mbox{\ChoiceMenu[width=10pt,height=10pt,value=no,default=yes,name=choiceMenuName,radio,radiosymbol=\ding{52}]{}{ =no}} No
\end{Form}
\end{document}
但我认为,单选按钮在 hyperref 中没有正确实现。属于同一组的单选按钮应该有一个公共字段作为父级。
有一个新的单选按钮实现,它试图正确地执行此操作。它需要非常新的 LaTeX 和最新的pdfmanagement-testphase
。请注意,此实验性代码尚未与所有内容兼容。
\RequirePackage{pdfmanagement-testphase}
\DeclareDocumentMetadata{}
\documentclass{article}
\usepackage{l3pdffield-testphase}
\begin{document}
\ExplSyntaxOn
\pdffield_radio:n{group=A,value=button1,default=button1}~YES\par\smallskip
\pdffield_radio:n{group=A,value=button2}~NO\par
\ExplSyntaxOff
\end{document}
使用 adobe 输出(我没有 evince 或其他 pdf 编辑器)。
答案2
我很高兴的解决方法是不使用 ChoiceMenu 而是使用 CheckBox:
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{hyperref}
\begin{document}
\begin{Form}
\mbox{\CheckBox[checked=true,width=10pt,height=10pt,name=choiceMenuNameYes,radio,radiosymbol=\ding{52}]{}{}} Yes
\mbox{\CheckBox[checked=false,width=10pt,height=10pt,name=choiceMenuNameNo,radio,radiosymbol=\ding{52}]{}{}} No
\end{Form}
\end{document}
evince 中的输出:
Master PDF Editor 中的输出:
我对这个解决方案并不满意,所以这不是问题的最终答案。