2024-12-10 18:52:21 +01:00
|
|
|
%% NB: Dieses Dokument baut so 3-10 Minuten je nach Dateisystem-Performance…
|
|
|
|
%% (Sehr viele Beispiele die jeweils komplette eigenständige Dokumente sind.)
|
2024-12-11 08:26:49 +01:00
|
|
|
\documentclass[ngerman,10pt]{scrartcl}
|
2024-12-10 18:52:21 +01:00
|
|
|
\usepackage{calc,tikz,minted,fontspec,luacode,csquotes,babel,hyperref,microtype}
|
2024-12-09 00:11:55 +01:00
|
|
|
\MakeOuterQuote{"}
|
2024-12-10 18:52:21 +01:00
|
|
|
\hypersetup{colorlinks,urlcolor={magenta!75!black},linkcolor={green!50!black}}
|
2024-12-11 08:26:49 +01:00
|
|
|
\linespread{1.05}
|
2024-12-09 00:11:55 +01:00
|
|
|
% font definition (same as cccbform.cls)
|
2024-12-07 07:13:08 +01:00
|
|
|
\setmainfont[
|
|
|
|
Renderer=HarfBuzz,
|
|
|
|
ItalicFont=Recursive,
|
|
|
|
BoldFont=Recursive,
|
|
|
|
BoldItalicFont=Recursive,
|
|
|
|
UprightFeatures={
|
|
|
|
RawFeature={+ss01,+ss02,+ss08,+case},
|
|
|
|
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,
|
|
|
|
BoldFont=Recursive,
|
|
|
|
BoldItalicFont=Recursive,
|
|
|
|
UprightFeatures={
|
|
|
|
RawFeature={+ss01,+ss02,+ss08,+case},
|
|
|
|
RawFeature={+axis={MONO=1.0,CASL=0.2,slnt=0,CRSV=0,wght=400}}
|
|
|
|
},
|
|
|
|
BoldFeatures={RawFeature={+axis={MONO=1.0,CASL=0.2,slnt=0,CRSV=0,wght=700}}},
|
|
|
|
BoldItalicFeatures={RawFeature={+axis={MONO=1.0,CASL=0.2,slnt=-15,CRSV=1,wght=700}}},
|
|
|
|
ItalicFeatures={RawFeature={+axis={MONO=1.0,CASL=0.2,slnt=-15,CRSV=1,wght=400}}}
|
|
|
|
]{Recursive}
|
2024-12-11 08:26:49 +01:00
|
|
|
\renewfontfamily\titlefont[
|
2024-12-07 07:13:08 +01:00
|
|
|
Renderer=HarfBuzz,
|
|
|
|
ItalicFont=Recursive,
|
|
|
|
BoldFont=Recursive,
|
|
|
|
BoldItalicFont=Recursive,
|
|
|
|
UprightFeatures={
|
|
|
|
RawFeature={+ss01,+ss02,+ss08,+case},
|
|
|
|
RawFeature={+axis={MONO=0.0,CASL=0.4,slnt=0,CRSV=1,wght=500}}
|
|
|
|
},
|
|
|
|
BoldFeatures={RawFeature={+axis={MONO=0.0,CASL=0.4,slnt=0,CRSV=1,wght=800}}},
|
|
|
|
BoldItalicFeatures={RawFeature={+axis={MONO=0.0,CASL=0.4,slnt=-15,CRSV=1,wght=800}}},
|
|
|
|
ItalicFeatures={RawFeature={+axis={MONO=0.0,CASL=0.4,slnt=-15,CRSV=1,wght=500}}}
|
|
|
|
]{Recursive}
|
|
|
|
|
2024-12-09 00:11:55 +01:00
|
|
|
% set up example build directory
|
2024-12-07 07:13:08 +01:00
|
|
|
\directlua{ os.execute "mkdir -p cccbform-examples" }
|
|
|
|
\directlua{ os.execute "cp cccbform.cls cccbform-examples/" }
|
|
|
|
\directlua{ os.execute "cp logo.pdf cccbform-examples/" }
|
2024-12-09 00:11:55 +01:00
|
|
|
% stuff to add before/after examples to form a full document
|
2024-12-07 23:05:49 +01:00
|
|
|
\begin{luacode*}
|
2024-12-09 00:11:55 +01:00
|
|
|
HEADER1 = [[
|
2024-12-07 23:05:49 +01:00
|
|
|
\documentclass[shortexample]{cccbform}
|
2024-12-09 00:11:55 +01:00
|
|
|
]]
|
|
|
|
HEADER2 = [[
|
2024-12-07 23:05:49 +01:00
|
|
|
\begin{document}
|
|
|
|
]]
|
|
|
|
FOOTER = [[
|
|
|
|
\end{document}
|
|
|
|
]]
|
|
|
|
\end{luacode*}
|
2024-12-07 07:13:08 +01:00
|
|
|
|
2024-12-07 23:05:49 +01:00
|
|
|
\begin{luacode*}
|
|
|
|
function makeVerb( envname )
|
|
|
|
local buf
|
|
|
|
local function bufread( chunk )
|
|
|
|
if chunk:find( "\\end{"..envname.."}" ) then return nil end
|
|
|
|
buf[#buf+1] = chunk
|
|
|
|
return ""
|
|
|
|
end
|
|
|
|
local function luaverbstart( )
|
|
|
|
buf = { }
|
|
|
|
luatexbase.add_to_callback( "process_input_buffer", bufread, "bufread" )
|
|
|
|
end
|
|
|
|
local function luaverbend( )
|
|
|
|
luatexbase.remove_from_callback( "process_input_buffer", "bufread" )
|
|
|
|
buf[#buf+1] = ""
|
|
|
|
buf = table.concat( buf, "\n" )
|
|
|
|
return buf
|
|
|
|
end
|
|
|
|
return luaverbstart, luaverbend
|
|
|
|
end
|
2024-12-09 00:11:55 +01:00
|
|
|
\end{luacode*}
|
2024-12-07 23:05:49 +01:00
|
|
|
|
2024-12-09 00:11:55 +01:00
|
|
|
\begin{luacode*}
|
2024-12-07 23:05:49 +01:00
|
|
|
function CMD(name) return "\\"..name end
|
2024-12-09 00:11:55 +01:00
|
|
|
LF = "\n"
|
|
|
|
|
|
|
|
function EndExample( EndFun, x1, x2 )
|
|
|
|
CONTENT = EndFun( )
|
|
|
|
if x1 ~= "" then
|
|
|
|
EXTRALINES, EXTRASTUFF = 1, "\\geometry{paperheight="..x1.."}\n"
|
|
|
|
else
|
|
|
|
EXTRALINES, EXTRASTUFF = 0, ""
|
|
|
|
end
|
|
|
|
local f = io.open( "cccbform-examples/"..x2..".tex", "w" )
|
|
|
|
f:write( HEADER1, EXTRASTUFF, HEADER2, CONTENT, FOOTER )
|
|
|
|
f:close( )
|
|
|
|
os.execute( "cd cccbform-examples ; latexmk -pdflua "..x2..".tex" )
|
|
|
|
local n, f = 0, io.open( "cccbform-examples/"..x2..".tex" )
|
|
|
|
for l in f:lines( ) do n = n + 1 end
|
|
|
|
tex.print( "\\def\\lc{"..(n - 1).."}" )
|
|
|
|
tex.print( "\\def\\ls{"..(3 + EXTRALINES).."}" )
|
|
|
|
end
|
2024-12-07 23:05:49 +01:00
|
|
|
\end{luacode*}
|
|
|
|
|
|
|
|
\directlua{ ShortExampleStart, ShortExampleEnd = makeVerb "ShortExample" }
|
|
|
|
|
2024-12-09 00:11:55 +01:00
|
|
|
\NewDocumentEnvironment{ShortExample}{O{} m m}{
|
|
|
|
\addvspace{1em}
|
|
|
|
\directlua{ShortExampleStart()}
|
|
|
|
}{
|
|
|
|
\directlua{ EndExample( ShortExampleEnd, "#1", "#2" ) }
|
2024-12-10 18:52:21 +01:00
|
|
|
\par\noindent
|
|
|
|
\null\hspace*{-2cm}
|
|
|
|
\rlap{
|
|
|
|
\begin{minipage}[t]{\textwidth + 4cm}
|
|
|
|
\noindent
|
|
|
|
\begin{tikzpicture}
|
|
|
|
\node[anchor=north east] (code) at (-0.5ex,0) {
|
|
|
|
\begin{minipage}[t]{0.5\textwidth - 3ex}
|
|
|
|
\vspace{-2ex}
|
|
|
|
\inputminted[firstline=\ls,lastline=\lc]{tex}{cccbform-examples/#2.tex}
|
|
|
|
\end{minipage}
|
|
|
|
};
|
|
|
|
\node[anchor=north west, draw=black!50] (output) at (0.5ex,0) {
|
|
|
|
\begin{minipage}[t]{0.5\textwidth - 2ex}
|
|
|
|
\includegraphics[width=\linewidth]{cccbform-examples/#2.pdf}
|
|
|
|
\end{minipage}
|
|
|
|
};
|
|
|
|
\end{tikzpicture}
|
|
|
|
\par
|
|
|
|
\vspace{-2ex}
|
|
|
|
{\null\hfill\bfseries #3 \hfill\null}
|
|
|
|
\end{minipage}
|
2024-12-07 23:05:49 +01:00
|
|
|
}
|
2024-12-09 00:11:55 +01:00
|
|
|
\par
|
|
|
|
\addvspace{4ex}
|
2024-12-07 07:13:08 +01:00
|
|
|
}
|
2024-12-07 23:05:49 +01:00
|
|
|
|
2024-12-07 07:13:08 +01:00
|
|
|
\NewDocumentEnvironment{StandaloneExample}{m}{
|
|
|
|
\VerbatimEnvironment%
|
|
|
|
\begin{VerbatimOut}{cccbform-examples/#1.tex}}%
|
|
|
|
{\end{VerbatimOut}%
|
|
|
|
\directlua{ os.execute "cd cccbform-examples ; latexmk -pdflua #1.tex" }
|
2024-12-07 23:05:49 +01:00
|
|
|
\directlua{
|
|
|
|
local n, f = 0, io.open( "cccbform-examples/#1.tex" )
|
|
|
|
for l in f:lines( ) do n = n + 1 end
|
|
|
|
tex.print( CMD"def"..CMD"lc".."{" .. (n-1) .. "}" )
|
|
|
|
}
|
2024-12-07 07:13:08 +01:00
|
|
|
\begin{tikzpicture}
|
|
|
|
\node[anchor=north west, inner sep=1ex, draw] (code) {
|
|
|
|
\begin{minipage}[t]{0.45\textwidth}
|
|
|
|
\inputminted[firstline=3,lastline=\lc]{tex}{cccbform-examples/#1.tex}
|
|
|
|
\end{minipage}
|
|
|
|
};
|
|
|
|
\node[anchor=north west, right=2mm of code, draw] (output) {
|
|
|
|
\begin{minipage}[t]{0.45\textwidth}
|
|
|
|
\includegraphics[width=\linewidth]{cccbform-examples/#1.pdf}
|
|
|
|
\end{minipage}
|
|
|
|
};
|
|
|
|
\end{tikzpicture}
|
|
|
|
}
|
|
|
|
|
2024-12-11 08:26:49 +01:00
|
|
|
\setminted{autogobble,bgcolor=black!10,frame=lines,framesep=1ex,tabsize=4,fontsize=\small}
|
|
|
|
\setmintedinline{frame=none,framesep=0pt,fontsize=\small}
|
|
|
|
\newmintinline[texcode]{tex}{}
|
2024-12-09 00:11:55 +01:00
|
|
|
|
|
|
|
\sloppy
|
|
|
|
\raggedbottom
|
|
|
|
|
2024-12-07 07:13:08 +01:00
|
|
|
\title{\texttt{cccbform} -- Formulare für den CCCB}
|
|
|
|
\author{Frank Nord}
|
|
|
|
\begin{document}
|
|
|
|
\maketitle
|
|
|
|
\tableofcontents
|
|
|
|
|
2024-12-09 06:32:50 +01:00
|
|
|
\section{TODO}
|
|
|
|
|
|
|
|
\begin{itemize}
|
2024-12-11 08:26:49 +01:00
|
|
|
\item csquotes / MakeOuterQuote in cls
|
|
|
|
\item mehr \texttt{\textbackslash mintinline}
|
2024-12-09 06:32:50 +01:00
|
|
|
\item Inline-Textfeld
|
|
|
|
\item Grundsätze des aktuellen Designs
|
|
|
|
\item Bug: Höhe Multiline-Textfeld in example
|
|
|
|
\end{itemize}
|
|
|
|
|
2024-12-07 07:13:08 +01:00
|
|
|
\section{Übersicht}
|
|
|
|
|
2024-12-09 00:11:55 +01:00
|
|
|
Die Grundstruktur für Formulare ist folgende:
|
|
|
|
|
|
|
|
\begin{center}
|
|
|
|
\begin{minipage}{0.5\textwidth}
|
|
|
|
\begin{minted}{tex}
|
|
|
|
\documentclass{cccbform}
|
|
|
|
\begin{document}
|
|
|
|
% Inhalt hier
|
|
|
|
\end{document}
|
|
|
|
\end{minted}
|
|
|
|
\end{minipage}
|
|
|
|
\end{center}
|
|
|
|
|
2024-12-11 08:26:49 +01:00
|
|
|
\texttt{cccbform} kümmert sich um die Details und definiert Hilfsbefehle zur
|
|
|
|
rein semantischen Erstellung von PDF-Formularen. Mit einer Reihe
|
2024-12-09 00:11:55 +01:00
|
|
|
von Befehlen kann dann recht bequem ein Formular definiert werden.
|
2024-12-09 06:32:50 +01:00
|
|
|
Dieses Dokument gibt eine Übersicht über alles, was hilfreich sein könnte.
|
|
|
|
Allein schon existierende Formulare anzusehen oder zu kopieren und anzupassen
|
|
|
|
sollte jedoch für die meisten Zwecke ausreichen.
|
|
|
|
|
2024-12-09 00:11:55 +01:00
|
|
|
\subsection{Für \TeX-Neulinge}
|
|
|
|
|
|
|
|
Das meiste sollte auch ohne \TeX-Kenntnisse gehen, es gibt jedoch eine Reihe
|
|
|
|
von Sonderzeichen, die besondere Bedeutung haben. Als eines der wichtigeren
|
2024-12-11 08:26:49 +01:00
|
|
|
beginnt \texcode|%| einen Zeilenkommentar. Bei den meisten Symbolen
|
|
|
|
reicht es, einen Backslash (\texttt{\textbackslash}) davorzusetzen, aber der
|
|
|
|
Backslash selbst wird z.~B. durch \mintinline{tex}{\textbackslash} und nicht
|
|
|
|
\texcode{\\} erzeugt. Bei Unsicherheit hilft auch
|
|
|
|
\url{http://detexify.kirelabs.org/classify.html}. (Dort kann man
|
|
|
|
Symbole malen und bekommt eine Liste möglicher Übereinstimmungen und wie man
|
|
|
|
diese jeweils erzeugt. Das Symbol sollte generell ohne
|
|
|
|
\texttt{\textbackslash usepackage} auskommen und im \texttt{textmode}
|
|
|
|
funktionieren -- diese Infos stehen ggf. über/unter dem Zeichen.)
|
2024-12-09 00:11:55 +01:00
|
|
|
|
|
|
|
Zu Leerzeichen und Zeilenumbrüchen noch folgendes: Einfache Zeilenumbrüche
|
|
|
|
werden von \TeX{} generell ignoriert bzw. wie ein Leerzeichen zwischen Worten
|
|
|
|
behandelt. Eine leere Zeile (also (mindestens) zwei aufeinanderfolgende
|
|
|
|
Zeilenumbrüche) beginnt einen neuen Absatz. (Das geht auch mit
|
2024-12-11 08:26:49 +01:00
|
|
|
\mintinline{tex}{\par}.) \mintinline{tex}{\\} ist ein "einfacher"
|
|
|
|
Zeilenumbruch in der Ausgabe (ohne den Absatz zu beenden), der hier aber
|
|
|
|
möglichst vermieden werden sollte. Ein oder mehrere Leerzeichen werden wie ein
|
|
|
|
einzelnes Leerzeichen gelesen, erlauben aber generell Zeilenumbrüche wenn die
|
|
|
|
Zeile voll ist. \mintinline{tex}{~} erzeugt geschützte Leerzeichen, die nicht
|
|
|
|
umbrechen dürfen (und z.~B. bei Abkürzungen (\mintinline{tex}{z.~B.}) oder
|
|
|
|
Zahlen mit Einheiten verwendet werden sollten.) Nach Befehlen
|
|
|
|
(\mintinline{tex}{\foo}) werden (beliebig viele) Leerzeichen generell als
|
|
|
|
Token-Trenner ignoriert und entfernt (\mintinline{tex}{\TeX test} = \TeX test),
|
|
|
|
ein Verdoppeln des Leerzeichen bringt ebenfalls nichts. Stattdessen kann man
|
|
|
|
entweder leere Argumente angeben (\mintinline{tex}{\TeX{} test} = \TeX{} test)
|
|
|
|
oder das Leerzeichen ebenfalls mit einem Backslash schützen
|
|
|
|
(\mintinline{tex}{\TeX\ test} = \TeX\ test.)
|
2024-12-09 00:11:55 +01:00
|
|
|
|
|
|
|
\section{Klassen-Optionen}
|
|
|
|
|
|
|
|
PDF-Formulare haben eine ganze Reihe von Problemen. Das wichtigste ist, dass
|
|
|
|
viele Viewer PDF-Formulare nicht mitdrucken. Die Elemente wie sie hier erzeugt
|
|
|
|
werden sind also in Wirklichkeit ein Bild, was wie ein Formularfeld aussieht und
|
|
|
|
dann ein "echtes" Feld direkt darüber platziert. \emph{Manche} Viewer hingegen
|
|
|
|
drucken die Elemente mit, was dann wiederum anders komisch aussehen kann\dots
|
|
|
|
|
|
|
|
\subsection{\texttt{noform}}
|
|
|
|
|
|
|
|
Wird das Dokument also stattdessen mit
|
|
|
|
\mintinline{tex}|\documentclass[noform]{cccbform}| begonnen, werden keine
|
|
|
|
PDF-Formular-Felder erzeugt sondern nur die "falschen" als Bilder erzeugt. Das
|
|
|
|
stellt sicher, dass reine Druckvorlagen (die eh nicht ausgefüllt werden sollen)
|
|
|
|
mit allen Viewern fehlerfrei gedruckt werden können.
|
|
|
|
|
|
|
|
\section{Struktur}
|
|
|
|
|
|
|
|
Bereitgestellte Befehle fallen grob in 4 Kategorien -- Titel, Inhalt, Struktur, Hervorhebung.
|
|
|
|
|
|
|
|
\subsection{Titel}
|
|
|
|
|
|
|
|
Aktuell gibt es zwei Arten von Titeln. In jedem Fall sollte genau einer und
|
|
|
|
unmittelbar in der Zeile hinter dem \texttt{\textbackslash begin\{document\}}
|
|
|
|
verwendet werden.
|
|
|
|
|
|
|
|
Bei langen Titeln ist ein manueller Zeilenumbruch
|
|
|
|
(\texttt{\textbackslash\textbackslash}) im Titel ggf. sinnvoll, da der Text
|
|
|
|
sonst über das Logo bis zum Seitenrand laufen kann. (Das Logo und ggf. die
|
|
|
|
Adresse werden nachträglich platziert, \TeX\ "sieht" diese also nicht beim
|
|
|
|
verarbeiten des restlichen Inhalts.)
|
|
|
|
|
|
|
|
\subsubsection{\texttt{\textbackslash LogoTitle\{Titel\}}}
|
|
|
|
|
|
|
|
\begin{ShortExample}[4.953cm]{logotitle}{Die einfache Variante -- Titel links, Logo rechts.}
|
|
|
|
\LogoTitle{Beispieltitel}
|
|
|
|
\Text{(...und hier geht's weiter.)}
|
|
|
|
\end{ShortExample}
|
|
|
|
|
|
|
|
\subsubsection{\texttt{\textbackslash AddressTitle\{Titel\}}}
|
|
|
|
|
|
|
|
\begin{ShortExample}[8.865cm]{addresstitle}{Titel und Adresse}
|
|
|
|
\AddressTitle{Beispieltitel}
|
|
|
|
\Text{(...und hier geht's weiter.)}
|
|
|
|
\end{ShortExample}
|
|
|
|
|
|
|
|
Es gibt auch die Variante mit \texttt{*}, welche zusätzlich das Logo einbettet.
|
|
|
|
|
|
|
|
\begin{ShortExample}[8.865cm]{addresstitlestar}{Titel, Adresse und Logo}
|
|
|
|
\AddressTitle*{Beispieltitel}
|
|
|
|
\Text{(...und hier geht's weiter.)}
|
|
|
|
\end{ShortExample}
|
|
|
|
|
|
|
|
\subsection{Inhalt}
|
|
|
|
|
|
|
|
Hier gibt es größtenteils Befehle für Formularfelder. Anders als in normalen
|
|
|
|
\TeX-Dokumenten ist es hier jedoch wichtig, für korrekte Abstände \emph{allen}
|
|
|
|
"losen" Text explizit als \texttt{\textbackslash Text} auszuzeichnen. Der
|
|
|
|
Befehl kümmert sich um korrekte Abstände, ohne diesen liegen Dinge zu eng
|
|
|
|
beieinander. Vergleiche:
|
|
|
|
|
|
|
|
\begin{ShortExample}{textgood}{Text mit korrekten Abständen}
|
|
|
|
\Text{Dieser Satz kein Verb.}
|
|
|
|
\TextField{Lachhubel}
|
|
|
|
\Text{Die blöden Ösen!}
|
2024-12-07 07:13:08 +01:00
|
|
|
\end{ShortExample}
|
|
|
|
|
2024-12-09 00:11:55 +01:00
|
|
|
\begin{ShortExample}{textbad}{lose Worte -- nicht gut!}
|
|
|
|
Dieser Satz kein Verb.
|
|
|
|
\TextField{Lachhubel}
|
|
|
|
Die blöden Ösen!
|
|
|
|
\end{ShortExample}
|
|
|
|
|
|
|
|
Auch lange Texte mit mehreren Absätzen können in \texttt{\textbackslash Text}
|
|
|
|
verwendet werden.
|
|
|
|
|
|
|
|
\begin{ShortExample}{textlong}{langer Text ist kein Problem}
|
|
|
|
\Text{
|
|
|
|
Lorem ipsum dolor sit amet,
|
|
|
|
consectetuer adipiscing elit.
|
|
|
|
Aenean commodo ligula eget dolor.
|
|
|
|
}
|
|
|
|
\TextField{Aenean massa.}
|
|
|
|
\Text{
|
|
|
|
Cum sociis natoque penatibus et
|
|
|
|
magnis dis parturient montes,
|
|
|
|
nascetur ridiculus mus.
|
|
|
|
|
|
|
|
Donec quam felis, ultricies nec,
|
|
|
|
pellentesque eu, pretium quis, sem.
|
|
|
|
Nulla consequat massa quis enim.
|
|
|
|
}
|
|
|
|
\end{ShortExample}
|
|
|
|
|
|
|
|
\subsubsection{Textfelder}
|
|
|
|
|
|
|
|
Die vermutlich wichtigste Komponente, entsprechend viele Varianten gibt es.
|
|
|
|
|
|
|
|
\paragraph{\texttt{\textbackslash TextField}} Im Zweifel ist die einfachste
|
|
|
|
Variante die richtige. Ein einzeiliges Freitextfeld mit Label und einer für
|
|
|
|
die meisten Zwecke angemessenen Breite (welche auch z.~B. in mehrspaltigen
|
|
|
|
Bereichen von allein angepasst wird).
|
|
|
|
|
2024-12-07 23:05:49 +01:00
|
|
|
\begin{ShortExample}{textfield}{normales Textfeld}
|
2024-12-09 00:11:55 +01:00
|
|
|
\TextField{Bezeichnung}
|
|
|
|
\end{ShortExample}
|
|
|
|
|
|
|
|
Wird die volle Breite benötigt gibt es auch die Variante mit Stern:
|
|
|
|
|
|
|
|
\begin{ShortExample}{textfieldstar}{maximale Breite}
|
|
|
|
\TextField*{Bezeichnung}
|
2024-12-07 23:05:49 +01:00
|
|
|
\end{ShortExample}
|
|
|
|
|
2024-12-09 00:11:55 +01:00
|
|
|
\paragraph{\texttt{\textbackslash ShortTextField}} Wirkt die Breite hingegen zu
|
|
|
|
hoch (z.~B. für eine einzelne Zahl), so gibt es auch ein explizit kurzes Textfeld.
|
|
|
|
|
2024-12-07 23:05:49 +01:00
|
|
|
\begin{ShortExample}{shorttextfield}{kurzes Textfeld}
|
2024-12-09 00:11:55 +01:00
|
|
|
\ShortTextField{Stromverbrauch (TWh)}
|
|
|
|
\end{ShortExample}
|
|
|
|
|
|
|
|
Optional kann die Länge auch explizit als Faktor relativ zur Textbreite
|
|
|
|
angegeben werden. Das Formular sieht aber einheitlicher aus, wenn das
|
|
|
|
\emph{nicht} gemacht wird, also bitte zweimal überlegen, ob es das
|
|
|
|
\emph{wirklich} braucht.
|
|
|
|
|
|
|
|
\begin{ShortExample}{shorttextfieldopt}{besonders kurzes Textfeld}
|
|
|
|
\ShortTextField[0.15]{Verbrauch (TWh)}
|
|
|
|
\end{ShortExample}
|
|
|
|
|
|
|
|
\paragraph{\texttt{\textbackslash MultilineTextField}} Für mehr Text gibt es
|
|
|
|
auch mehrzeilige Textfelder. Auch wenn die Höhe technisch gesehen optional
|
|
|
|
ist, sollte sie immer angegeben werden -- ansonsten hat das Feld die
|
|
|
|
Standard-Höhe von normalen Textfeldern.
|
|
|
|
|
|
|
|
\begin{ShortExample}{multilinetextfield}{mehrzeiliges Textfeld}
|
|
|
|
%%% FIXME bug in preview (works in doc)
|
|
|
|
\Text{}
|
|
|
|
\MultilineTextField[2cm]{Kringel}
|
|
|
|
\Text{}
|
|
|
|
\end{ShortExample}
|
|
|
|
|
|
|
|
\begin{ShortExample}{multilinetextfieldbad}{einzeiliges mehrzeiliges Textfeld}
|
|
|
|
%%% FIXME bug in preview (works in doc)
|
|
|
|
\Text{}
|
|
|
|
\MultilineTextField{Kringel}
|
|
|
|
\Text{}
|
|
|
|
\end{ShortExample}
|
|
|
|
|
|
|
|
Auch hier gibt es wieder die Variante mit Stern für volle Breite:
|
|
|
|
|
|
|
|
\begin{ShortExample}{multilinetextfieldstar}{breites mehrzeiliges Textfeld}
|
|
|
|
%%% FIXME bug in preview (works in doc)
|
|
|
|
\Text{}
|
|
|
|
\MultilineTextField*[2cm]{Kringel}
|
|
|
|
\Text{}
|
|
|
|
\end{ShortExample}
|
|
|
|
|
|
|
|
\paragraph{Spezialfälle} Unterschriften sollen üblicherweise händisch gesetzt
|
2024-12-09 06:32:50 +01:00
|
|
|
werden, hierfür gibt es daher ein Feld was nur ein "falsches" Formularfeld ist
|
|
|
|
und nicht digital ausgefüllt werden kann.
|
2024-12-09 00:11:55 +01:00
|
|
|
|
2024-12-10 18:52:21 +01:00
|
|
|
(NB: Die Breite ist -- wie bei allem -- relativ zur Papierbreite definiert. Da
|
|
|
|
diese bei diesen Beispielen deutlich schmaler als A4 ist, sieht das Feld hier
|
|
|
|
sehr schmal aus; im "richtigen" Formular wird es aber eine angemessene Größe
|
|
|
|
haben.)
|
|
|
|
|
2024-12-09 00:11:55 +01:00
|
|
|
\begin{ShortExample}{signature}{Feld für Unterschriften}
|
|
|
|
\Signature
|
|
|
|
\end{ShortExample}
|
|
|
|
|
|
|
|
Das Label kann optional geändert werden.
|
|
|
|
|
|
|
|
\begin{ShortExample}{signatureopt}{Unterschrift mit anderem Label}
|
|
|
|
\Signature[Unterschrift]
|
|
|
|
\end{ShortExample}
|
|
|
|
|
|
|
|
Ebenfalls gibt es ein etwas größeres Feld für Notizen oder Vermerke.
|
|
|
|
|
|
|
|
\begin{ShortExample}{notes}{großes Feld}
|
|
|
|
%%% FIXME bug in preview (works in doc)
|
|
|
|
\Notes
|
|
|
|
\Text{}
|
|
|
|
\end{ShortExample}
|
|
|
|
|
|
|
|
Auch hier kann optional das Label geändert werden.
|
|
|
|
|
|
|
|
\begin{ShortExample}{notesopt}{großes Feld}
|
|
|
|
%%% FIXME bug in preview (works in doc)
|
2024-12-09 06:32:50 +01:00
|
|
|
\Notes[Stirnabdruck]
|
2024-12-09 00:11:55 +01:00
|
|
|
\Text{}
|
|
|
|
\end{ShortExample}
|
|
|
|
|
|
|
|
\subsubsection{Checkboxen}
|
|
|
|
|
|
|
|
\paragraph{Normale Verwendung} Gibt es eigentlich nicht viel dazu zu sagen --
|
|
|
|
\texttt{\textbackslash Checkbox\{Label\}} für eine Checkbox (und das Label kann
|
|
|
|
auch ein kompletter Absatz sein.)
|
|
|
|
|
|
|
|
\begin{ShortExample}{checkbox}{Checkboxen}
|
|
|
|
\Checkbox{Ich habe die AGB,
|
|
|
|
Datenschmutzerklärung,
|
|
|
|
Beitragsordnung, Satzung, Hausordnung
|
|
|
|
(inklusive Durchführungsverordnung
|
|
|
|
zur Pflanzenpflege im Treppenhaus),
|
|
|
|
Geheimhaltungsvereinbarung, die
|
|
|
|
Datenschutzgrundsätze in leichter
|
|
|
|
Sprache (PDF, 451 Seiten), das
|
|
|
|
Hygienekonzept, sowie die Anleitung
|
|
|
|
zum Lesen von Anleitungen gelesen.}
|
|
|
|
\end{ShortExample}
|
|
|
|
|
|
|
|
Für Freitextfelder als "Sonstige:" gibt es
|
|
|
|
\texttt{\textbackslash CheckboxOther[Breite]\{Label\}}, wieder mit optionaler
|
|
|
|
Breitenangabe (relativ zur Textbreite) für das Freitextfeld.
|
|
|
|
|
|
|
|
\begin{ShortExample}{othercheckbox}{"Sonstiges"}
|
|
|
|
\Text{Meine Lieblingstaste ist:}
|
|
|
|
\begin{Indented}
|
|
|
|
\Checkbox{Escape}
|
|
|
|
\Checkbox{Enter}
|
|
|
|
\CheckboxOther[0.1]{Buchstabe}
|
|
|
|
\CheckboxOther[0.1]{F\hspace{-1em}}
|
|
|
|
\CheckboxOther{}
|
|
|
|
\end{Indented}
|
|
|
|
\end{ShortExample}
|
|
|
|
|
2024-12-09 06:32:50 +01:00
|
|
|
Auch hier gilt: umso weniger verschiedene Breiten verwendet werden, umso
|
|
|
|
einheitlicher sieht das Formular am Ende aus. Bei dem Beispiel würde ein
|
|
|
|
einzelner Buchstabe auch in ein 0.05-er Feld passen, das wären dann aber 3
|
|
|
|
statt 2 verschiedener Breiten.
|
2024-12-09 00:11:55 +01:00
|
|
|
|
|
|
|
\paragraph{Spezielle Zwecke}
|
|
|
|
|
|
|
|
In Sondersituationen könnten z.~B. in Aufzählungen innerhalb einer Zeile auch
|
2024-12-09 06:32:50 +01:00
|
|
|
Checkboxen benötigt sein. Dafür gibt es die -- nur in Ausnahmefällen zu
|
2024-12-09 00:11:55 +01:00
|
|
|
verwendende -- Inline-Variante, welche sich (fast) gar nicht um die
|
|
|
|
Formatierung kümmert und nur die Box zur Verfügung stellt. (Das Einzige: ein
|
|
|
|
Leerzeichen auf der rechten Seite wird sichergestellt, für gleichmäßige
|
|
|
|
Abstände sollte also genau \emph{nicht} \texttt{\{\}} oder
|
2024-12-09 06:32:50 +01:00
|
|
|
\texttt{\textbackslash} angehängt werden.)
|
2024-12-09 00:11:55 +01:00
|
|
|
|
|
|
|
\begin{ShortExample}{inlinecheckbox}{Sonderfall -- Inline}
|
|
|
|
\Text{Ich bin \InlineCheckbox groß,
|
|
|
|
\InlineCheckbox grau, und/oder
|
|
|
|
\InlineCheckbox unwichtig.
|
|
|
|
}
|
|
|
|
\begin{Indented}
|
|
|
|
\Text{(Bearbeitungsvermerk: Bei
|
|
|
|
Anwahl von zwei oder mehr ist der/die
|
|
|
|
Ausfüllende möglicherweise ein
|
|
|
|
Irrelefant und vor Aufnahme
|
|
|
|
\ul{zwingend} eine
|
|
|
|
Löschdiskussionsrecherche
|
|
|
|
durchzuführen.)}
|
|
|
|
\end{Indented}
|
2024-12-07 23:05:49 +01:00
|
|
|
\end{ShortExample}
|
|
|
|
|
2024-12-09 00:11:55 +01:00
|
|
|
\subsection{Struktur}
|
|
|
|
|
2024-12-09 06:32:50 +01:00
|
|
|
Drei Kategorien -- formularspezifisch, "klassische" Abschnitte, und mehrere Spalten.
|
|
|
|
|
|
|
|
\subsubsection{formularspezifisch angepasste Formen}
|
|
|
|
|
|
|
|
\paragraph{\texttt{Indented}} Visuelle Gruppierung durch Einrücken von
|
|
|
|
zusammenhängenden bzw. untergeordneten Abschnitten ist eine sehr gute Option,
|
|
|
|
da ohne zusätzliche Tinte trotzdem klar die Struktur vermittelt wird. (Das
|
|
|
|
wurde auch schon bei den Checkboxen unmittelbar hier drüber verwendet.)
|
|
|
|
Optional kann ein Faktor (nicht zwingend ganzzahlig) für die Einrückungstiefe
|
|
|
|
angegeben werden.
|
|
|
|
|
|
|
|
\begin{ShortExample}{indentation}{Einrückung, auch über mehrere Ebenen}
|
|
|
|
\Text{abc}
|
|
|
|
\begin{Indented}
|
|
|
|
\Text{def}
|
|
|
|
\begin{Indented}
|
|
|
|
\Text{ghi}
|
|
|
|
\end{Indented}
|
|
|
|
\Text{jkl}
|
|
|
|
\end{Indented}
|
|
|
|
\Text{mno}
|
|
|
|
\begin{Indented}[2]
|
|
|
|
\Text{pqr}
|
|
|
|
\end{Indented}
|
|
|
|
\end{ShortExample}
|
|
|
|
|
|
|
|
\paragraph{\texttt{\textbackslash RuleSection}} Dient zur Trennung von
|
|
|
|
Formularabschnitten, die durch verschiedene Personengruppen ausgefüllt werden.
|
|
|
|
Die Linie geht immer über die komplette Formularbreite und kann z.~B. nicht
|
|
|
|
innerhalb von mehrspaltigen Bereichen verwendet werden.
|
|
|
|
|
|
|
|
\begin{ShortExample}{rulesection}{Mehrere klar getrennte Abschnitte}
|
|
|
|
\TextField{Name}
|
|
|
|
\TextField*{Anliegen}
|
|
|
|
\RuleSection{Bearbeiter}
|
|
|
|
\Checkbox{Antrag angenommen}
|
|
|
|
\CheckboxOther[0.5]{Abgelehnt, weil:}
|
|
|
|
\end{ShortExample}
|
|
|
|
|
|
|
|
\paragraph{\texttt{\textbackslash Rule}} Eine einfache Trennlinie, die an
|
|
|
|
verschiedenen Stellen zur grafischen Trennung eingesetzt werden kann.
|
2024-12-09 00:11:55 +01:00
|
|
|
|
2024-12-09 06:32:50 +01:00
|
|
|
\begin{ShortExample}{rule}{Mehr Trennlinien}
|
|
|
|
\RuleSection{Bearbeiter}
|
|
|
|
\CheckboxOther{Antrag eingegangen am:}
|
|
|
|
\Rule
|
|
|
|
\Checkbox{Antrag angenommen}
|
|
|
|
\begin{Indented}
|
|
|
|
\CheckboxOther{Bearbeitet am:}
|
|
|
|
\CheckboxOther{Antragsteller informiert:}
|
|
|
|
\end{Indented}
|
|
|
|
\Rule
|
|
|
|
\CheckboxOther[0.5]{Abgelehnt, weil:}
|
|
|
|
\end{ShortExample}
|
2024-12-09 00:11:55 +01:00
|
|
|
|
2024-12-09 06:32:50 +01:00
|
|
|
\clearpage
|
2024-12-09 00:11:55 +01:00
|
|
|
|
|
|
|
\subsubsection{"klassische" Struktur}
|
|
|
|
|
2024-12-09 06:32:50 +01:00
|
|
|
In \TeX\ üblich sind \texttt{\textbackslash section},
|
|
|
|
\texttt{\textbackslash subsection}, etc.; in Analogie dazu gibt es für ggf.
|
|
|
|
längere Formulare \texttt{\textbackslash Section} und
|
|
|
|
\texttt{\textbackslash Subsection}. Für die meisten Formulare ist das jedoch
|
|
|
|
vermutlich nicht nötig, insbesondere da ggf. per Einrückung via
|
|
|
|
\texttt{Indented} visuell schneller lesbare Struktur geschaffen werden kann.
|
|
|
|
|
|
|
|
\begin{ShortExample}{sectioning}{Abschnittsunterteilung}
|
|
|
|
\Section{Allgemeines}
|
|
|
|
\TextField{Name}
|
|
|
|
\Section{Antragsinhalt}
|
|
|
|
\TextField*{Anliegen}
|
|
|
|
\Subsection{Details}
|
|
|
|
\Notes[]
|
|
|
|
\Section{Abschließendes}
|
|
|
|
\Checkbox{Die AGB werden akzeptiert.}
|
|
|
|
\Signature
|
|
|
|
\end{ShortExample}
|
|
|
|
|
|
|
|
\clearpage
|
2024-12-09 00:11:55 +01:00
|
|
|
|
|
|
|
\subsubsection{mehrspaltige Bereiche}
|
|
|
|
|
2024-12-09 06:32:50 +01:00
|
|
|
Es gibt Unterstützung für 2, 3, und 5 Spalten (ggf. können diese auch
|
|
|
|
ineinander geschachtelt werden.) Die Befehle heißen -- vermutlich wenig
|
|
|
|
überraschend -- \texttt{\textbackslash TwoColumns},
|
|
|
|
\texttt{\textbackslash ThreeColumns}, und \texttt{\textbackslash FiveColumns}
|
|
|
|
und es sollten entsprechend viele \texttt{\{\}}-Gruppen folgen.
|
|
|
|
|
|
|
|
\begin{ShortExample}{multicolumn}{Mehrspaltigkeit}
|
|
|
|
\TwoColumns{
|
|
|
|
\TwoColumns{
|
|
|
|
\Checkbox{Ja}
|
|
|
|
}{
|
|
|
|
\Checkbox{Nein}
|
|
|
|
}
|
|
|
|
\Rule
|
|
|
|
\ThreeColumns{
|
|
|
|
\Checkbox{A}
|
|
|
|
}{
|
|
|
|
\Checkbox{B}
|
|
|
|
}{
|
|
|
|
\Checkbox{C D E F G}
|
|
|
|
}
|
|
|
|
\Rule
|
|
|
|
\ThreeColumns{
|
|
|
|
\Checkbox{Foo}
|
|
|
|
}{
|
|
|
|
\Checkbox{Bar}
|
|
|
|
}{
|
|
|
|
\Checkbox{Baz}
|
|
|
|
}
|
|
|
|
}{
|
|
|
|
\Notes
|
|
|
|
}
|
|
|
|
\end{ShortExample}
|
|
|
|
|
|
|
|
Bei zu vielen Spalten werden die Abstände unlesbar -- siehe hier die
|
|
|
|
Foo/Bar/Baz-Gruppierung. Auf A4 geht diese Schachtelung aber üblicherweise noch
|
|
|
|
problemlos.
|
2024-12-09 00:11:55 +01:00
|
|
|
|
|
|
|
\subsection{Hervorhebung}
|
|
|
|
|
2024-12-09 06:32:50 +01:00
|
|
|
Es gibt verschiedene in \TeX\ eingebaute Befehle, die ebenfalls verwendet
|
|
|
|
werden können\dots\ aber "weniger ist mehr" trifft insbesondere auch hier zu.
|
|
|
|
Die meisten sollten also nur bei ernsthaftem Bedarf verwendet werden.
|
|
|
|
|
|
|
|
Eine akzeptable Formatierungsmethode ist das Hervorheben von Text mit
|
|
|
|
\texttt{\textbackslash emph}. Üblicherweise typografisch eher verpönt, aber
|
|
|
|
schon irgendwie zum aktuellen Design passend, können mit
|
|
|
|
\texttt{\textbackslash ul} auch \emph{einzelne Worte oder sehr kurze Passagen}
|
|
|
|
unterstrichen werden, dabei ist jedoch zu beachten, dass innerhalb
|
|
|
|
unterstrichener Bereiche keine Zeilenumbrüche mehr möglich sind. (Der Bereich
|
|
|
|
wird als eine logische Box verpackt und kann nur noch als Ganzes verschoben
|
|
|
|
werden.)
|
|
|
|
|
|
|
|
Es gibt zwar eigentlich viele verschiedene Schriftgrößen, es ist jedoch keine
|
|
|
|
gute Idee, alle quer durcheinander zu verwenden. Die Dokumentenklasse kümmert
|
|
|
|
sich ums meiste, als einzige Akzeptable gibt es \texttt{\textbackslash details}
|
|
|
|
(als semantischen Namen), welche für untergeordnete Bemerkungen zur Verfügung
|
|
|
|
steht.
|
|
|
|
|
|
|
|
\begin{ShortExample}{formatting}{Formatierungsbeispiele}
|
|
|
|
\Text{Die Formulare sind \ul{sofort}
|
|
|
|
nach Eingang zu kopieren und in
|
|
|
|
\emph{dreifacher} Ausfertigung
|
|
|
|
abzuheften!}
|
|
|
|
\Text{\details{Bei Ausfall des Kopierers
|
|
|
|
ist umgehend der Techniker zu informieren
|
|
|
|
und ersatzweise die Faxgeräte mit der -02
|
|
|
|
und der -05 \ul{(nicht die -07 bis -09
|
|
|
|
oder -12!)} zum Kopieren per Fax zu
|
|
|
|
verwenden.}}
|
2024-12-11 08:26:49 +01:00
|
|
|
% und nochmal umbrechbarer:
|
|
|
|
\Text{\details{Bei Ausfall des Kopierers
|
|
|
|
ist umgehend der Techniker zu informieren
|
|
|
|
und ersatzweise die Faxgeräte mit der -02
|
|
|
|
und der -05 (\ul{nicht} die -07 bis -09
|
|
|
|
oder -12!) zum Kopieren per Fax zu
|
|
|
|
verwenden.}}
|
2024-12-09 06:32:50 +01:00
|
|
|
\end{ShortExample}
|
2024-12-09 00:11:55 +01:00
|
|
|
|
2024-12-07 07:13:08 +01:00
|
|
|
\end{document}
|
2024-12-09 00:11:55 +01:00
|
|
|
|