hyperref 包中 CheckBox 的行为(高度不同)

hyperref 包中 CheckBox 的行为(高度不同)

程序员们,我今天在玩 hyperref 包时,发现有些奇怪。这是 MWE(不是那么简单,但它显示了目标):

\documentclass[12pt]{article}

\usepackage{hyperref}

\newsavebox\TBox

\title{Anamnesebogen}
\date{05.2023}
\author{Dr. N.N.}

\hypersetup{
pdftitle={Anamnesebogen},
pdfsubject={Anamnese},
pdfauthor={Dr. med. N.N.},
pdftoolbar=false,
pdfmenubar=false
}

\def\DefaultTF{
print,
bordercolor={.04 .40 .44},
%backgroundcolor={.55 .85 .83},
backgroundcolor={},
borderstyle=U,
height=2.5ex, 
width=15em,
format={app.runtimeHighlight = false;}
}
\def\DefaultCB{
print,
width=1em,
height=0.9em,
bordercolor={.04 .40 .44},
backgroundcolor={},
borderstyle=S,
format={app.runtimeHighlight = false;}
}
\def\DatumTF{
format={AFDate_FormatEx("dd.mm.yyyy");},
keystroke={AFDate_KeystrokeEx("dd.mm.yyyy");}
}

\xdef\DefaultOptionsofText{\DefaultTF}
\xdef\DefaultOptionsofCheckBox{\DefaultCB}

\newcommand{\specialline}{\vskip\medskipamount % or other desired dimension
%\leaders\vrule width \textwidth\vskip0.4pt % or other desired thickness
\vskip\medskipamount % ditto
\nointerlineskip
}

\newcommand{\FormField}[1]{\sbox\Tbox{#1:\ }\TextField[width=\dimexpr\linewidth-\wd\Tbox]{#1:\ }}

\setlength\parindent{0pt}

\begin{document}
\begin{Form}
\TextField[width=6em, format={event.value=(new Date()).toString(); AFDate_FormatEx("dd.mm.yyyy");},
keystroke={AFDate_KeystrokeEx("dd.mm.yyyy");}]{Datum}\\[.7ex]
\sbox\TBox{Name }\TextField[width=\dimexpr\linewidth-\wd\TBox]{Name}\\[.7ex]
\TextField[width=6em, format={AFDate_FormatEx("dd.mm.yyyy");},
keystroke={AFDate_KeystrokeEx("dd.mm.yyyy");}]{Geburtsdatum}\\[.7ex]
\sbox\TBox{Adresse }\TextField[width=\dimexpr\linewidth-\wd\TBox]{Adresse}\\[.7ex]
\sbox\TBox{Mobilnr }\TextField[width=\dimexpr\linewidth-\wd\TBox]{Mobilnr}\\[.7ex]
\sbox\TBox{E-Mail }\TextField[width=\dimexpr\linewidth-\wd\TBox]{E-Mail}\\[.7ex]
\sbox\TBox{Beruf }\TextField[width=\dimexpr\linewidth-\wd\TBox]{Beruf}\\[.7ex]



\textbf{Beziehungsstatus} \quad{} \mbox{\CheckBox{Single}} \quad{} \mbox{\CheckBox{Fester Partner}} \quad{} \mbox{\CheckBox{Feste Partnerin}}


Hatten Sie Komplikationen während der Schwangerschaft/Geburt? \quad{} \mbox{\CheckBox[name=pregcomplno]{Nein}} \quad{} \mbox{\CheckBox[name=pregcomplyes]{Ja}}

\sbox\TBox{Wenn ja, welche? }\TextField[name=prefcompl,width=\dimexpr\linewidth-\wd\TBox]{Wenn ja, welche?}

\TextField[name=aborts, width=2em]{Wie viele Fehlgeburten hatten Sie?} \TextField[name=aussch, width=2em]{Wie viele Ausschabungen hatten Sie?} 

\specialline{}
\textbf{Familienplanung}

Haben Sie einen Kinderwunsch? \quad{} \mbox{\CheckBox[name=kinderwunschno]{Nein}} \quad{}   \mbox{\CheckBox[name=kinderwunschnow]{Jetzt}} \quad{} \mbox{\CheckBox[name=kinderwunschlater]{Später}}

Verhüten Sie? \quad{} \mbox{\CheckBox[name=vno]{Nein}} \quad{} \mbox{\CheckBox[name=vpill]{Pille}} \quad{} \mbox{\CheckBox[name=vcondom]{Kondom}} \quad{} \mbox{\CheckBox[name=vcopper]{Kupferspirale}} \quad{} \mbox{\CheckBox[name=vhormone]{Hormonspirale}}

\specialline{}

\textbf{Operationen}\\
\mbox{\CheckBox[name=geb]{Gebärmutter}} \quad{} \mbox{\CheckBox{Gebärmutterhals}} \quad{} \mbox{\CheckBox{Brust}} \quad{} \mbox{\CheckBox{Eierstock}}\\
\sbox\TBox{andere OP }\TextField[width=\dimexpr\linewidth-\wd\TBox]{andere OP}

\specialline{}

\textbf{Krankheiten}\\
\mbox{\CheckBox{Diabetes}} \quad{} \mbox{\CheckBox{Hoher Blutdruck}} \quad{} \mbox{\CheckBox{Herzinfarkt/Schlaganfall}} \quad{} \mbox{\CheckBox{Thrombose/Embolie}}\\
\mbox{\CheckBox{Depression/Erschöpfungssyndrom}} \quad{} \mbox{\CheckBox{Migräne}} \quad{} \mbox{\CheckBox{Autoimmunkrankheiten}}\\ 
\sbox\TBox{Wenn Autoimmunkrankheiten, welche? }\TextField[width=\dimexpr\linewidth-\wd\TBox]{Wenn Autoimmunkrankheiten, welche?}

\specialline{}

\sbox\TBox{\textbf{Medikamente/'Anti-Baby-Pille'} }\TextField[name=meds,width=\dimexpr\linewidth-\wd\TBox]{\textbf{Medikamente/'Anti-Baby-Pille'}}\\
\mbox{\CheckBox[name=allergiemedsyes]{\textbf{Medikamente-Allergien}  Ja}} \quad{} \TextField[name=allergiemedstxt,width=10cm]{Welche?}

\specialline{}

\textbf{Familie} - Haben Geschwister/Eltern folgende Krankheiten:\\
\mbox{\CheckBox{Diabetes}} \quad{} \mbox{\CheckBox{Herz-Kreislauf}} \quad{}  \mbox{\CheckBox{Brustkrebs}} \quad{} \mbox{\CheckBox{Thrombose/Embolie}} \quad{} \mbox{\CheckBox{Sonstige}}\\
\sbox\TBox{Wenn Sonstige, welche? }\TextField[name=illothertxt,width=\dimexpr\linewidth-\wd\TBox]{Wenn Sonstige, welche?}

\specialline{}

\textbf{Mein Corona-Status} \quad{} \mbox{\CheckBox{Geimpft}}  \mbox{\CheckBox{Genesen}}

\textbf{HPV/Gebärmutterhals-Impfung} \quad{} \mbox{\CheckBox[name=hpvyes]{Ja}} \mbox{\CheckBox[name=hpvno]{Nein}} \mbox{\CheckBox[name=hpvmaybe]{Vielleicht}}

\specialline{}

\small
\TextField[name=recipes]{Meine Rezepte/Überweisungen etc. darf folgende Person abholen}

Hiermit willige ich ein, dass meine Daten DSGVO-konform gespeichert und weitergeleitet verschickt werden an: Krankenkasse, KV Nordrhein,  Labor/Pathologie:(Amedes), Philips Bildspeicherung, Doctolib Praxismanagement
\normalsize

\vspace*{3ex}
\TextField{Ort, Datum} \TextField[height=10mm]{Unterschrift}
\end{Form}
\end{document}

因此复选框的大小不同。当然,它们都有固定的高度。

所有带有“长度不足”文本的复选框(如 p、g)都高于其他字符不太高的复选框。

我可以修复此行为吗?当然,复选框的高度应相同。

祝好,彼得

答案1

我不完全了解复选框的高度是如何计算的,但它似乎受到标签中字符以及周围文本的高度和深度的影响。

比较:

\documentclass[12pt]{article}
\usepackage{hyperref}

\begin{document}
\begin{Form}
\CheckBox[height=0.8em]{ooo}

\CheckBox[height=0.8em]{boo}

\CheckBox[height=0.8em]{oog}

\CheckBox[height=0.8em]{bog}
\end{Form}
\end{document}

输出:

在此处输入图片描述

据悉同一段落中的所有复选框将获得相同的(最大)高度和深度。可以通过将每个复选框放置在其自己的位置来覆盖此行为\makebox

hyperref手动的告诉我们(在第 9 章“PDF 和 HTML 表单”中),该命令\LayoutCheckField用于排版标签和复选框。它定义为

\def\LayoutCheckField#1#2{% label, field
  \def\Hy@temp{#1}%
  \ifx\Hy@temp\@empty
    #2%
  \else
    #1 #2%
  \fi
}

知道复选框的高度受其之前输入的内容的影响,我们可以将复选框放入\makebox以避免周围的文本影响其高度:

\documentclass[12pt]{article}
\usepackage{hyperref}

\makeatletter
\def\LayoutCheckField#1#2{% label, field
  \def\Hy@temp{#1}%
  \ifx\Hy@temp\@empty
    \makebox{#2}%
  \else
    #1 \makebox{#2}%
  \fi
}
\makeatother

\begin{document}
\begin{Form}
\CheckBox[height=0.8em]{ooo}

\CheckBox[height=0.8em]{boo}

\CheckBox[height=0.8em]{oog}

\CheckBox[height=0.8em]{bog}
\end{Form}
\end{document}

在此处输入图片描述

相关内容