diff --git a/cccbform.cls b/cccbform.cls index 3d876c1..3dc225e 100644 --- a/cccbform.cls +++ b/cccbform.cls @@ -359,6 +359,26 @@ \par\addvspace{\formskip}% } +% InlineTextField[width]{label} +\NewDocumentCommand{\InlineTextField}{o m}{% + \IfValueTF{#1}% + {\pgfmathsetmacro{\@tlen}{#1}}% + {\ifMultiColumn% + \pgfmathsetmacro{\@tlen}{\normalfieldwidth}% + \else% + \pgfmathsetmacro{\@tlen}{\shortfieldwidth}% + \fi}% + \begin{tikzpicture}[baseline] + \useasboundingbox (0,0) rectangle (\@tlen\textwidth,\formfieldheight); + \node[anchor=base west] at (0,0) { \full@TextField[\@tlen] }; + \IfBlankTF{#2}{}{ + \node[anchor=base west, rotate=\labelangle] at (-1em,0.6\formfieldheight) { + \ttfamily\footnotesize #2\strut + }; + } + \end{tikzpicture} +} + % Checkbox{label} - a checkbox; label can be long and will linebreak reasonably pretty \NewDocumentCommand{\Checkbox}{m}{% \par% @@ -512,6 +532,9 @@ }% } +% ensure line height is enough to fit a form field +\NewDocumentCommand{\formstrut}{}{\rule{0pt}{\formfieldheight}\strut} + % % % common title patterns % put the logo in the top right corner diff --git a/doku.tex b/doku.tex index 1e97340..e92e4d3 100644 --- a/doku.tex +++ b/doku.tex @@ -5,10 +5,10 @@ \setcounter{secnumdepth}{\subsubsectionnumdepth} \setcounter{tocdepth}{\subsubsectiontocdepth} \KOMAoptions{BCOR=1cm,DIV=10,open=any} -\usepackage{calc,tikz,minted,unicode-math,fontspec,luacode,babel,csquotes,hyperref} +\usepackage{calc,tikz,minted,fontspec,luacode,babel,csquotes,hyperref} \usetikzlibrary{calc} \hypersetup{colorlinks,urlcolor={magenta!75!black},linkcolor={green!50!black}} -\linespread{1.05} +\linespread{1.10} % font definition (same as cccbform.cls) %% FIXME: RawFeature +case x microtype fixes %% see https://github.com/schlcht/microtype/issues/33 for fix notes @@ -26,19 +26,6 @@ BoldItalicFeatures={RawFeature={+axis={MONO=0.0,CASL=0.2,slnt=-15,CRSV=1,wght=700}}}, ItalicFeatures={RawFeature={+axis={MONO=0.0,CASL=0.2,slnt=-15,CRSV=1,wght=400}}} ]{Recursive} -\setmathfont[ - Renderer=HarfBuzz, - ItalicFont=Recursive, - BoldFont=Recursive, - BoldItalicFont=Recursive, - UprightFeatures={ - RawFeature={+ss01,+ss02,+ss08}, - RawFeature={+axis={MONO=0.0,CASL=0.2,slnt=0,CRSV=0,wght=400}} - }, - BoldFeatures={RawFeature={+axis={MONO=0.0,CASL=0.2,slnt=0,CRSV=0,wght=700}}}, - BoldItalicFeatures={RawFeature={+axis={MONO=0.0,CASL=0.2,slnt=-15,CRSV=1,wght=700}}}, - ItalicFeatures={RawFeature={+axis={MONO=0.0,CASL=0.2,slnt=-15,CRSV=1,wght=400}}} - ]{Recursive} \setmonofont[ Renderer=HarfBuzz, ItalicFont=Recursive, @@ -85,7 +72,7 @@ FOOTER = [[ \begin{luacode*} -- PARAM: number of layers, resulting in 2^LAYERS points -local LAYERS = 8 +local LAYERS = 7 -- PARAM: per layer, multiply component by (1/(2^K))^weight -- (1 = default, larger = smoother, smaller = rougher) local weight = 1.00 @@ -295,7 +282,6 @@ end \chapter{TODO} \begin{itemize} -\item Inline-Textfeld \item Grundsätze des aktuellen Designs \item \TeX-Intro zum Ende, +build info \end{itemize} @@ -592,6 +578,56 @@ Auch hier kann optional das Label geändert werden. \Notes[Stirnabdruck] \end{ShortExample} +Letztlich gibt es für Sonderfälle noch Inline-Textfelder. + +\begin{ShortExample}{inlinetextfield}{Sonderfall -- Inline} +\Text{Zur Fehlersuche wurden etwa +\InlineTextField[0.1]{} Stunden aufgewendet, +\InlineTextField[0.1]{} Gramm Koffein sowie +\InlineTextField{} konsumiert. +\formstrut % normierte Zeilenhöhe forcieren +} +\end{ShortExample} + +Hierbei ist zu beachten, dass Textfelder höher sind als der umliegende Text. +Ohne das \texcode{\formstrut} würde die letzte Zeile \emph{deutlich} dichter an +der darüberliegenden kleben, was -- insbesondere wenn es stattdessen eine Zeile in der Mitte betrifft -- komisch aussehen würde. Das muss also ggf. in ≈jede Zeile eingestreut werden. Vergleiche auch nochmal: + +\begin{ShortExample}{formstrutbad}{Wackeliger Text} +\Text{Zeile mit Feld \InlineTextField{} und +dann ganz viel Text, so dass dazwischen +mehrere Zeilen ohne Textfelder entstehen, +ein weiteres Feld \InlineTextField{}, mehr +Text der wieder etwas dichter beieinander +liegt, und dann irgendwann abschließend +nochmal eine Zeile mit noch einem Feld +\InlineTextField{} um den Unterschied zu +sehen. +} +\end{ShortExample} + +\begin{ShortExample}{formstrutgood}{Gleichmäßiger Text} +\Text{Zeile mit Feld \InlineTextField{} und +dann ganz viel Text, so dass dazwischen +\formstrut +mehrere Zeilen ohne Textfelder entstehen, +ein weiteres Feld \InlineTextField{}, mehr +Text der wieder etwas dichter beieinander +\formstrut +liegt, und dann irgendwann abschließend +\formstrut +nochmal eine Zeile mit noch einem Feld +\InlineTextField{} um den Unterschied zu +sehen.\formstrut +} +\end{ShortExample} + +Es wird hoffentlich deutlich, dass beide Varianten nicht ideal sind und +Inline-Felder nur in Ausnahmefällen die richtige Wahl sind. Dabei sollte aber +nochmal darauf hingewiesen werden, dass dieses Problem bei nur einer Zeile +Text nicht relevant ist, da dann die Abstände um die Block-Elemente herum +sowieso für ein einheitliches Aussehen sorgen. + \subsection{Checkboxen} \paragraph{Normale Verwendung} Gibt es eigentlich nicht viel dazu zu sagen -- diff --git a/testdoc.tex b/testdoc.tex new file mode 100644 index 0000000..da8a58b --- /dev/null +++ b/testdoc.tex @@ -0,0 +1,15 @@ +\documentclass[]{cccbform} +\begin{document} +\LogoTitle{Test-Dokument} +\TextField{Feld 1} +\TextField{Feld 2} +\ShortTextField{Feld 3} +\TextField{Feld 4} +\begin{Indented} + \TextField{Feld 5} + \TextField{Feld 6} +\end{Indented} +\TextField{Feld 7} +\Text{Abcd \InlineTextField{} efgh ijkl \InlineTextField{Feld 9} mnop qrst.} +\TextField{Feld 10} +\end{document}