程序员们,我今天在玩 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}