Compare commits
10 commits
443a456154
...
9c31d0df92
Author | SHA1 | Date | |
---|---|---|---|
![]() |
9c31d0df92 | ||
![]() |
3aa389f680 | ||
![]() |
b0dd3ad1ef | ||
![]() |
6ad266b3c6 | ||
![]() |
2f71b5589d | ||
![]() |
24f42ab403 | ||
![]() |
53a83d838b | ||
![]() |
6475efca6c | ||
![]() |
0ab08f7b83 | ||
![]() |
1aaadbe896 |
2
.gitignore
vendored
2
.gitignore
vendored
|
@ -1,9 +1,11 @@
|
||||||
*.aux
|
*.aux
|
||||||
|
*.auxlock
|
||||||
*.hd
|
*.hd
|
||||||
*.log
|
*.log
|
||||||
*.out
|
*.out
|
||||||
*.toc
|
*.toc
|
||||||
*.pdf
|
*.pdf
|
||||||
|
*.pyg
|
||||||
_minted-*
|
_minted-*
|
||||||
cccbform-examples
|
cccbform-examples
|
||||||
*.fdb_latexmk
|
*.fdb_latexmk
|
||||||
|
|
2
Makefile
2
Makefile
|
@ -12,7 +12,7 @@ clean:
|
||||||
|
|
||||||
distclean:
|
distclean:
|
||||||
latexmk -C
|
latexmk -C
|
||||||
rm -fr _minted-doku cccbform-examples doku.hd
|
rm -fr _minted-doku cccbform-examples doku.hd doku.auxlock doku.pyg
|
||||||
|
|
||||||
doku.pdf: doku.tex cccbform.cls logo.pdf
|
doku.pdf: doku.tex cccbform.cls logo.pdf
|
||||||
latexmk -g -pdflua -lualatex="lualatex --shell-escape %O %S" $<
|
latexmk -g -pdflua -lualatex="lualatex --shell-escape %O %S" $<
|
||||||
|
|
63
cccbform.cls
63
cccbform.cls
|
@ -2,8 +2,8 @@
|
||||||
\ProvidesClass{cccbform}[2024/12/08 In the Beginning, There Was Chaos]
|
\ProvidesClass{cccbform}[2024/12/08 In the Beginning, There Was Chaos]
|
||||||
|
|
||||||
\LoadClass{scrartcl}
|
\LoadClass{scrartcl}
|
||||||
\RequirePackage{geometry, calc, fontspec, tikz, hyperref, changepage, letltxmacro, csquotes}
|
|
||||||
\RequirePackage[ngerman]{babel}
|
\RequirePackage[ngerman]{babel}
|
||||||
|
\RequirePackage{geometry, calc, fontspec, tikz, hyperref, changepage, letltxmacro, csquotes}
|
||||||
\MakeOuterQuote{"}
|
\MakeOuterQuote{"}
|
||||||
\usetikzlibrary{calc}
|
\usetikzlibrary{calc}
|
||||||
|
|
||||||
|
@ -259,7 +259,7 @@
|
||||||
|
|
||||||
% TextField*{label} - a single-line input (starred version uses all available space)
|
% TextField*{label} - a single-line input (starred version uses all available space)
|
||||||
\RenewDocumentCommand{\TextField}{s m}{%
|
\RenewDocumentCommand{\TextField}{s m}{%
|
||||||
\par%
|
\par\addvspace{1.5\formskip}%
|
||||||
\ifMultiColumn%
|
\ifMultiColumn%
|
||||||
\pgfmathsetmacro{\@tlen}{1.0}%
|
\pgfmathsetmacro{\@tlen}{1.0}%
|
||||||
\else%
|
\else%
|
||||||
|
@ -269,19 +269,19 @@
|
||||||
\fi%
|
\fi%
|
||||||
\begin{tikzpicture}[baseline]
|
\begin{tikzpicture}[baseline]
|
||||||
\useasboundingbox (0,0) rectangle (\@tlen\textwidth,\formfieldheight);
|
\useasboundingbox (0,0) rectangle (\@tlen\textwidth,\formfieldheight);
|
||||||
\node[anchor=west] at (0, 0) {
|
\node[anchor=base west] at (0, 0) {
|
||||||
\full@TextField[\@tlen]
|
\full@TextField[\@tlen]
|
||||||
};
|
};
|
||||||
\node[anchor=west,rotate=\labelangle] at (-1em,0.4\formfieldheight) {
|
\node[anchor=base west,rotate=\labelangle] at (-1em,0.6\formfieldheight) {
|
||||||
\ttfamily\footnotesize #2\strut
|
\ttfamily\footnotesize #2\strut
|
||||||
};
|
};
|
||||||
\end{tikzpicture}%
|
\end{tikzpicture}%
|
||||||
\par\addvspace{1.5\formskip}%
|
\par\addvspace{\formskip}%
|
||||||
}
|
}
|
||||||
|
|
||||||
% ShortTextField[width]{label} - a single-line input with reduced width
|
% ShortTextField[width]{label} - a single-line input with reduced width
|
||||||
\NewDocumentCommand{\ShortTextField}{o m}{%
|
\NewDocumentCommand{\ShortTextField}{o m}{%
|
||||||
\par%
|
\par\addvspace{1.5\formskip}%
|
||||||
\IfValueTF{#1}{\pgfmathsetmacro{\@tlen}{#1}}{%
|
\IfValueTF{#1}{\pgfmathsetmacro{\@tlen}{#1}}{%
|
||||||
\ifMultiColumn%
|
\ifMultiColumn%
|
||||||
\pgfmathsetmacro{\@tlen}{\normalfieldwidth}%
|
\pgfmathsetmacro{\@tlen}{\normalfieldwidth}%
|
||||||
|
@ -291,10 +291,10 @@
|
||||||
}%
|
}%
|
||||||
\begin{tikzpicture}[baseline]
|
\begin{tikzpicture}[baseline]
|
||||||
\useasboundingbox (0,0) rectangle (\@tlen\textwidth,\formfieldheight);
|
\useasboundingbox (0,0) rectangle (\@tlen\textwidth,\formfieldheight);
|
||||||
\node[anchor=west] at (0,0) {
|
\node[anchor=base west] at (0,0) {
|
||||||
\full@TextField[\@tlen]
|
\full@TextField[\@tlen]
|
||||||
};
|
};
|
||||||
\node[anchor=west,rotate=\labelangle] at (-1em,0.4\formfieldheight) {
|
\node[anchor=base west,rotate=\labelangle] at (-1em,0.6\formfieldheight) {
|
||||||
\ttfamily\footnotesize #2\strut
|
\ttfamily\footnotesize #2\strut
|
||||||
};
|
};
|
||||||
\end{tikzpicture}%
|
\end{tikzpicture}%
|
||||||
|
@ -302,8 +302,8 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
% MultilineTextField*[height]{label} - a multi-line input, starred version uses all available width
|
% MultilineTextField*[height]{label} - a multi-line input, starred version uses all available width
|
||||||
\NewDocumentCommand{\MultilineTextField}{s O{} m}{%
|
\NewDocumentCommand{\MultilineTextField}{s O{\formfieldheight} m}{%
|
||||||
\par\addvspace{\formskip}%
|
\par\addvspace{1.5\formskip}%
|
||||||
\ifMultiColumn%
|
\ifMultiColumn%
|
||||||
\pgfmathsetmacro{\@tlen}{1.0}%
|
\pgfmathsetmacro{\@tlen}{1.0}%
|
||||||
\else%
|
\else%
|
||||||
|
@ -312,11 +312,11 @@
|
||||||
{\pgfmathsetmacro{\@tlen}{\normalfieldwidth}}%
|
{\pgfmathsetmacro{\@tlen}{\normalfieldwidth}}%
|
||||||
\fi%
|
\fi%
|
||||||
\begin{tikzpicture}[baseline]
|
\begin{tikzpicture}[baseline]
|
||||||
\useasboundingbox (0,0) rectangle (\@tlen\textwidth,\formfieldheight);
|
\useasboundingbox (0,0) rectangle (\@tlen\textwidth, #2);
|
||||||
\node[anchor=west] at (0,0) {
|
\node[anchor=base west] at (0,0) {
|
||||||
\full@MultilineTextField<#2>[\@tlen]
|
\full@MultilineTextField<#2>[\@tlen]
|
||||||
};
|
};
|
||||||
\node[anchor=west,rotate=\labelangle] at (-1em,0.4\formfieldheight) {
|
\node[anchor=base west,rotate=\labelangle] at (-1em,#2 - 0.4\formfieldheight) {
|
||||||
\ttfamily\footnotesize #3\strut
|
\ttfamily\footnotesize #3\strut
|
||||||
};
|
};
|
||||||
\end{tikzpicture}
|
\end{tikzpicture}
|
||||||
|
@ -325,7 +325,7 @@
|
||||||
|
|
||||||
% Signature[label] - a field not fillable on the computer, big enough for a signature
|
% Signature[label] - a field not fillable on the computer, big enough for a signature
|
||||||
\NewDocumentCommand{\Signature}{O{Datum, Unterschrift}}{%
|
\NewDocumentCommand{\Signature}{O{Datum, Unterschrift}}{%
|
||||||
\par\addvspace{\formskip}%
|
\par\addvspace{2\formskip}%
|
||||||
\ifMultiColumn%
|
\ifMultiColumn%
|
||||||
\pgfmathsetmacro{\@tlen}{\normalfieldwidth}%
|
\pgfmathsetmacro{\@tlen}{\normalfieldwidth}%
|
||||||
\else%
|
\else%
|
||||||
|
@ -333,32 +333,52 @@
|
||||||
\fi%
|
\fi%
|
||||||
\begin{tikzpicture}[baseline]
|
\begin{tikzpicture}[baseline]
|
||||||
\useasboundingbox (0,0) rectangle (\@tlen\textwidth,1.0cm);
|
\useasboundingbox (0,0) rectangle (\@tlen\textwidth,1.0cm);
|
||||||
\node[anchor=west] at (0,0) {
|
\node[anchor=base west] at (0,0) {
|
||||||
\fake@MultilineTextField<1.0cm>[\@tlen]
|
\fake@MultilineTextField<1.0cm>[\@tlen]
|
||||||
};
|
};
|
||||||
\node[anchor=north west,rotate=\labelangle] at (-1em,1cm -0.4\formfieldheight) {
|
\node[anchor=base west,rotate=\labelangle] at (-1em,1cm - 0.4\formfieldheight) {
|
||||||
\ttfamily\footnotesize #1\strut
|
\ttfamily\footnotesize #1\strut
|
||||||
};
|
};
|
||||||
\end{tikzpicture}
|
\end{tikzpicture}
|
||||||
\par\addvspace{2\formskip}%
|
\par\addvspace{\formskip}%
|
||||||
}
|
}
|
||||||
|
|
||||||
% Notes[label] - a slightly taller fake field that fills the whole width
|
% Notes[label] - a slightly taller fake field that fills the whole width
|
||||||
\NewDocumentCommand{\Notes}{O{Vermerke}}{%
|
\NewDocumentCommand{\Notes}{O{Vermerke}}{%
|
||||||
\par\addvspace{\formskip}%
|
\par\addvspace{1.5\formskip}%
|
||||||
\pgfmathsetmacro{\@tlen}{1.0}
|
\pgfmathsetmacro{\@tlen}{1.0}
|
||||||
\begin{tikzpicture}[baseline]
|
\begin{tikzpicture}[baseline]
|
||||||
\useasboundingbox (0,0) rectangle (\@tlen\textwidth,1.5cm);
|
\useasboundingbox (0,0) rectangle (\@tlen\textwidth,1.5cm);
|
||||||
\node[anchor=west] at (0,0) {
|
\node[anchor=base west] at (0,0) {
|
||||||
\fake@MultilineTextField<1.5cm>[\@tlen]
|
\fake@MultilineTextField<1.5cm>[\@tlen]
|
||||||
};
|
};
|
||||||
\node[anchor=north west,rotate=\labelangle] at (-1em,1.5cm -0.9\formfieldheight) {
|
\node[anchor=base west,rotate=\labelangle] at (-1em,1.5cm - 0.4\formfieldheight) {
|
||||||
\ttfamily\footnotesize #1\strut
|
\ttfamily\footnotesize #1\strut
|
||||||
};
|
};
|
||||||
\end{tikzpicture}
|
\end{tikzpicture}
|
||||||
\par\addvspace{\formskip}%
|
\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
|
% Checkbox{label} - a checkbox; label can be long and will linebreak reasonably pretty
|
||||||
\NewDocumentCommand{\Checkbox}{m}{%
|
\NewDocumentCommand{\Checkbox}{m}{%
|
||||||
\par%
|
\par%
|
||||||
|
@ -512,6 +532,9 @@
|
||||||
}%
|
}%
|
||||||
}
|
}
|
||||||
|
|
||||||
|
% ensure line height is enough to fit a form field
|
||||||
|
\NewDocumentCommand{\formstrut}{}{\rule{0pt}{\formfieldheight}\strut}
|
||||||
|
|
||||||
% % % common title patterns
|
% % % common title patterns
|
||||||
|
|
||||||
% put the logo in the top right corner
|
% put the logo in the top right corner
|
||||||
|
|
636
doku.tex
636
doku.tex
|
@ -1,18 +1,27 @@
|
||||||
%% NB: Dieses Dokument baut so 3-10 Minuten je nach Dateisystem-Performance…
|
%% NB: Dieses Dokument baut beim ersten Mal so 3-10 Minuten je nach
|
||||||
%% (Sehr viele Beispiele die jeweils komplette eigenständige Dokumente sind.)
|
%% Dateisystem-Performance… (Sehr viele Beispiele die jeweils komplette
|
||||||
\documentclass[ngerman,10pt]{scrartcl}
|
%% eigenständige Dokumente sind.) Danach sollte es gehen.
|
||||||
\usepackage{calc,tikz,minted,fontspec,luacode,csquotes,babel,hyperref,microtype}
|
% header <<<
|
||||||
\MakeOuterQuote{"}
|
\documentclass[ngerman,10pt]{scrreprt}
|
||||||
|
\setcounter{secnumdepth}{\subsubsectionnumdepth}
|
||||||
|
\setcounter{tocdepth}{\subsubsectiontocdepth}
|
||||||
|
\KOMAoptions{BCOR=1cm,DIV=10,open=any}
|
||||||
|
\usepackage{calc,tikz,minted,fontspec,luacode,babel,csquotes,hyperref}
|
||||||
|
\usetikzlibrary{calc}
|
||||||
\hypersetup{colorlinks,urlcolor={magenta!75!black},linkcolor={green!50!black}}
|
\hypersetup{colorlinks,urlcolor={magenta!75!black},linkcolor={green!50!black}}
|
||||||
\linespread{1.05}
|
\linespread{1.10}
|
||||||
% font definition (same as cccbform.cls)
|
% font definition (same as cccbform.cls)
|
||||||
|
%% FIXME: [RawFeature +case] x [microtype] fixes
|
||||||
|
%% see https://github.com/schlcht/microtype/issues/33 for fix notes
|
||||||
|
%% see https://fontdrop.info/?darkmode=true for character lookup
|
||||||
|
% fonts <<<
|
||||||
\setmainfont[
|
\setmainfont[
|
||||||
Renderer=HarfBuzz,
|
Renderer=HarfBuzz,
|
||||||
ItalicFont=Recursive,
|
ItalicFont=Recursive,
|
||||||
BoldFont=Recursive,
|
BoldFont=Recursive,
|
||||||
BoldItalicFont=Recursive,
|
BoldItalicFont=Recursive,
|
||||||
UprightFeatures={
|
UprightFeatures={
|
||||||
RawFeature={+ss01,+ss02,+ss08,+case},
|
RawFeature={+ss01,+ss02,+ss08},
|
||||||
RawFeature={+axis={MONO=0.0,CASL=0.2,slnt=0,CRSV=0,wght=400}}
|
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}}},
|
BoldFeatures={RawFeature={+axis={MONO=0.0,CASL=0.2,slnt=0,CRSV=0,wght=700}}},
|
||||||
|
@ -25,7 +34,7 @@
|
||||||
BoldFont=Recursive,
|
BoldFont=Recursive,
|
||||||
BoldItalicFont=Recursive,
|
BoldItalicFont=Recursive,
|
||||||
UprightFeatures={
|
UprightFeatures={
|
||||||
RawFeature={+ss01,+ss02,+ss08,+case},
|
RawFeature={+ss01,+ss02,+ss08},
|
||||||
RawFeature={+axis={MONO=1.0,CASL=0.2,slnt=0,CRSV=0,wght=400}}
|
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}}},
|
BoldFeatures={RawFeature={+axis={MONO=1.0,CASL=0.2,slnt=0,CRSV=0,wght=700}}},
|
||||||
|
@ -38,18 +47,22 @@
|
||||||
BoldFont=Recursive,
|
BoldFont=Recursive,
|
||||||
BoldItalicFont=Recursive,
|
BoldItalicFont=Recursive,
|
||||||
UprightFeatures={
|
UprightFeatures={
|
||||||
RawFeature={+ss01,+ss02,+ss08,+case},
|
RawFeature={+ss01,+ss02,+ss08},
|
||||||
RawFeature={+axis={MONO=0.0,CASL=0.4,slnt=0,CRSV=1,wght=500}}
|
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}}},
|
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}}},
|
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}}}
|
ItalicFeatures={RawFeature={+axis={MONO=0.0,CASL=0.4,slnt=-15,CRSV=1,wght=500}}}
|
||||||
]{Recursive}
|
]{Recursive}
|
||||||
|
\setkomafont{disposition}{\titlefont}
|
||||||
|
% >>>
|
||||||
|
\usepackage{microtype}
|
||||||
|
|
||||||
|
% embedded examples <<<
|
||||||
|
|
||||||
% set up example build directory
|
% set up example build directory
|
||||||
\directlua{ os.execute "mkdir -p cccbform-examples" }
|
\directlua{ os.execute "mkdir -p ./cccbform-examples/" }
|
||||||
\directlua{ os.execute "cp cccbform.cls cccbform-examples/" }
|
\directlua{ os.execute "cp cccbform.cls logo.pdf cccbform-examples/" }
|
||||||
\directlua{ os.execute "cp logo.pdf cccbform-examples/" }
|
|
||||||
% stuff to add before/after examples to form a full document
|
% stuff to add before/after examples to form a full document
|
||||||
\begin{luacode*}
|
\begin{luacode*}
|
||||||
HEADER1 = [[
|
HEADER1 = [[
|
||||||
|
@ -63,6 +76,85 @@ FOOTER = [[
|
||||||
]]
|
]]
|
||||||
\end{luacode*}
|
\end{luacode*}
|
||||||
|
|
||||||
|
% crinkly paper tears <<<
|
||||||
|
\begin{luacode*}
|
||||||
|
-- PARAM: number of layers, resulting in 2^LAYERS points
|
||||||
|
local LAYERS = 7
|
||||||
|
-- PARAM: per layer, multiply component by (1/(2^K))^weight
|
||||||
|
-- (1 = default, larger = smoother, smaller = rougher)
|
||||||
|
local weight = 1.00
|
||||||
|
|
||||||
|
N = 1 << LAYERS
|
||||||
|
|
||||||
|
function smoothstep( a, b, t )
|
||||||
|
local t = t*t*(3-2*t)
|
||||||
|
return a + (b-a)*t
|
||||||
|
end
|
||||||
|
|
||||||
|
function REFRESH_POINTS()
|
||||||
|
POINTS = { }
|
||||||
|
for i = 1, N do
|
||||||
|
POINTS[i] = (2*math.random()-1)/N^weight -- + 0.125*math.sin( 2*math.pi*i/N )
|
||||||
|
end
|
||||||
|
|
||||||
|
for l = 2, LAYERS-1 do
|
||||||
|
local K = 1<<l
|
||||||
|
local len = N//K
|
||||||
|
|
||||||
|
local RNG = { }
|
||||||
|
for i = 1, K do RNG[i] = 2*math.random()-1 end
|
||||||
|
RNG[0] = RNG[K]
|
||||||
|
|
||||||
|
for seg = 1, K do
|
||||||
|
local lseg, rseg = (seg-1)*len, seg*len
|
||||||
|
local lRNG, rRNG = RNG[seg-1], RNG[seg]
|
||||||
|
for j = lseg+1, rseg do
|
||||||
|
local t = (j-lseg)/len
|
||||||
|
POINTS[j] = POINTS[j] + smoothstep(lRNG, rRNG, t)/K^weight
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
POINTS[0] = POINTS[N]
|
||||||
|
end
|
||||||
|
|
||||||
|
function getPoints()
|
||||||
|
REFRESH_POINTS()
|
||||||
|
local buf = { }
|
||||||
|
for i = 0, #POINTS do buf[i+1] = ("%.4fcm"):format( POINTS[i]/4 ) end
|
||||||
|
buf = table.concat( buf, ", " )
|
||||||
|
tex.print( [[\def\perturbationPoints{ ]]..buf.." }" )
|
||||||
|
tex.print( [[\def\numPoints{ ]]..(#POINTS+1).." }" )
|
||||||
|
end
|
||||||
|
|
||||||
|
function plotPoints( x1, x2, y1, y2, smooth_top )
|
||||||
|
x1, x2 = tonumber( (x1:sub(1,-3)) ), tonumber( (x2:sub(1,-3)) )
|
||||||
|
y1, y2 = tonumber( (y1:sub(1,-3)) ), tonumber( (y2:sub(1,-3)) )
|
||||||
|
local dx = (x2-x1)/(N)
|
||||||
|
local buf = { }
|
||||||
|
local SCALE = 10
|
||||||
|
local P0 = 0
|
||||||
|
if smooth_top then
|
||||||
|
SCALE = SCALE * 2.5
|
||||||
|
buf[#buf+1] = ("(%.4fpt, %.4fpt)"):format( x1, y1 )
|
||||||
|
buf[#buf+1] = ("(%.4fpt, %.4fpt)"):format( x2, y1 )
|
||||||
|
else
|
||||||
|
REFRESH_POINTS()
|
||||||
|
for i = 0, #POINTS do
|
||||||
|
buf[#buf+1] = ("(%.4fpt, %.4fpt)"):format( x1 + i*dx, y1 + POINTS[i]*SCALE )
|
||||||
|
end
|
||||||
|
P0 = POINTS[0]
|
||||||
|
end
|
||||||
|
REFRESH_POINTS()
|
||||||
|
for i = #POINTS, 0, -1 do
|
||||||
|
buf[#buf+1] = ("(%.4fpt, %.4fpt)"):format( x1 + i*dx, y2 + POINTS[N-i]*SCALE )
|
||||||
|
end
|
||||||
|
buf[#buf+1] = ("(%.4fpt, %.4fpt)"):format( x1, y1 + P0*SCALE )
|
||||||
|
buf = table.concat( buf, " -- " )
|
||||||
|
tex.print( buf )
|
||||||
|
end
|
||||||
|
\end{luacode*}
|
||||||
|
% >>>
|
||||||
|
|
||||||
\begin{luacode*}
|
\begin{luacode*}
|
||||||
function makeVerb( envname )
|
function makeVerb( envname )
|
||||||
local buf
|
local buf
|
||||||
|
@ -109,11 +201,19 @@ FOOTER = [[
|
||||||
|
|
||||||
\directlua{ ShortExampleStart, ShortExampleEnd = makeVerb "ShortExample" }
|
\directlua{ ShortExampleStart, ShortExampleEnd = makeVerb "ShortExample" }
|
||||||
|
|
||||||
\NewDocumentEnvironment{ShortExample}{O{} m m}{
|
\makeatletter
|
||||||
|
\newcommand{\gettikzxy}[3]{%
|
||||||
|
\tikz@scan@one@point\pgfutil@firstofone#1\relax
|
||||||
|
\edef#2{\the\pgf@x}%
|
||||||
|
\edef#3{\the\pgf@y}%
|
||||||
|
}
|
||||||
|
\makeatother
|
||||||
|
|
||||||
|
\NewDocumentEnvironment{ShortExample}{s O{} m m}{
|
||||||
\addvspace{1em}
|
\addvspace{1em}
|
||||||
\directlua{ShortExampleStart()}
|
\directlua{ShortExampleStart()}
|
||||||
}{
|
}{
|
||||||
\directlua{ EndExample( ShortExampleEnd, "#1", "#2" ) }
|
\directlua{ EndExample( ShortExampleEnd, "#2", "#3" ) }
|
||||||
\par\noindent
|
\par\noindent
|
||||||
\null\hspace*{-2cm}
|
\null\hspace*{-2cm}
|
||||||
\rlap{
|
\rlap{
|
||||||
|
@ -123,24 +223,33 @@ FOOTER = [[
|
||||||
\node[anchor=north east] (code) at (-0.5ex,0) {
|
\node[anchor=north east] (code) at (-0.5ex,0) {
|
||||||
\begin{minipage}[t]{0.5\textwidth - 3ex}
|
\begin{minipage}[t]{0.5\textwidth - 3ex}
|
||||||
\vspace{-2ex}
|
\vspace{-2ex}
|
||||||
\inputminted[firstline=\ls,lastline=\lc]{tex}{cccbform-examples/#2.tex}
|
\inputminted[firstline=\ls,lastline=\lc]{tex}{cccbform-examples/#3.tex}
|
||||||
\end{minipage}
|
\end{minipage}
|
||||||
};
|
};
|
||||||
\node[anchor=north west, draw=black!50] (output) at (0.5ex,0) {
|
\node[anchor=north west] (output) at (0.5ex,0) {
|
||||||
\begin{minipage}[t]{0.5\textwidth - 2ex}
|
\begin{minipage}[t]{0.5\textwidth - 2ex}
|
||||||
\includegraphics[width=\linewidth]{cccbform-examples/#2.pdf}
|
\includegraphics[width=\linewidth]{cccbform-examples/#3.pdf}
|
||||||
\end{minipage}
|
\end{minipage}
|
||||||
};
|
};
|
||||||
|
\gettikzxy{(output.north west)}{\xl}{\yt}
|
||||||
|
\gettikzxy{(output.south east)}{\xr}{\yb}
|
||||||
|
\IfBooleanTF{#1}{
|
||||||
|
\draw \directlua{ plotPoints( "\xl", "\xr", "\yt", "\yb", true ) };
|
||||||
|
}{
|
||||||
|
\draw \directlua{ plotPoints( "\xl", "\xr", "\yt", "\yb", false ) };
|
||||||
|
}
|
||||||
\end{tikzpicture}
|
\end{tikzpicture}
|
||||||
\par
|
\par
|
||||||
\vspace{-2ex}
|
\vspace{-2ex}
|
||||||
{\null\hfill\bfseries #3 \hfill\null}
|
{\null\hfill\bfseries #4 \hfill\null}
|
||||||
\end{minipage}
|
\end{minipage}
|
||||||
}
|
}
|
||||||
\par
|
\par
|
||||||
\addvspace{4ex}
|
\addvspace{4ex}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
% XXX now unused… keep while things are in flux and just delete if we don't add
|
||||||
|
% complete examples
|
||||||
\NewDocumentEnvironment{StandaloneExample}{m}{
|
\NewDocumentEnvironment{StandaloneExample}{m}{
|
||||||
\VerbatimEnvironment%
|
\VerbatimEnvironment%
|
||||||
\begin{VerbatimOut}{cccbform-examples/#1.tex}}%
|
\begin{VerbatimOut}{cccbform-examples/#1.tex}}%
|
||||||
|
@ -165,30 +274,25 @@ FOOTER = [[
|
||||||
\end{tikzpicture}
|
\end{tikzpicture}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
% >>>
|
||||||
|
|
||||||
\setminted{autogobble,bgcolor=black!10,frame=lines,framesep=1ex,tabsize=4,fontsize=\small}
|
\setminted{autogobble,bgcolor=black!10,frame=lines,framesep=1ex,tabsize=4,fontsize=\small}
|
||||||
\setmintedinline{frame=none,framesep=0pt,fontsize=\small}
|
% bgcolorvphantom is too new
|
||||||
|
\setmintedinline{frame=none,framesep=0pt,fontsize=\footnotesize}
|
||||||
\newmintinline[texcode]{tex}{}
|
\newmintinline[texcode]{tex}{}
|
||||||
|
|
||||||
\sloppy
|
\sloppy
|
||||||
\raggedbottom
|
\raggedbottom
|
||||||
|
|
||||||
\title{\texttt{cccbform} -- Formulare für den CCCB}
|
\MakeOuterQuote{"}
|
||||||
|
\title{\texttt{cccbform} – Formulare für den CCCB}
|
||||||
\author{Frank Nord}
|
\author{Frank Nord}
|
||||||
\begin{document}
|
\begin{document}
|
||||||
\maketitle
|
\maketitle
|
||||||
\tableofcontents
|
\tableofcontents
|
||||||
|
% >>>
|
||||||
|
|
||||||
\section{TODO}
|
\chapter{Übersicht} % <<<
|
||||||
|
|
||||||
\begin{itemize}
|
|
||||||
\item csquotes / MakeOuterQuote in cls
|
|
||||||
\item mehr \texttt{\textbackslash mintinline}
|
|
||||||
\item Inline-Textfeld
|
|
||||||
\item Grundsätze des aktuellen Designs
|
|
||||||
\item Bug: Höhe Multiline-Textfeld in example
|
|
||||||
\end{itemize}
|
|
||||||
|
|
||||||
\section{Übersicht}
|
|
||||||
|
|
||||||
Die Grundstruktur für Formulare ist folgende:
|
Die Grundstruktur für Formulare ist folgende:
|
||||||
|
|
||||||
|
@ -210,39 +314,119 @@ Dieses Dokument gibt eine Übersicht über alles, was hilfreich sein könnte.
|
||||||
Allein schon existierende Formulare anzusehen oder zu kopieren und anzupassen
|
Allein schon existierende Formulare anzusehen oder zu kopieren und anzupassen
|
||||||
sollte jedoch für die meisten Zwecke ausreichen.
|
sollte jedoch für die meisten Zwecke ausreichen.
|
||||||
|
|
||||||
\subsection{Für \TeX-Neulinge}
|
\section{Voraussetzungen} % <<<
|
||||||
|
|
||||||
|
Eine aktuelle \TeX-Distribution (auf den meisten Systemen vermutlich \TeX~Live)
|
||||||
|
inklusive ggf. dem \texttt{luatex}-Unterpaket, zusätzlich \texttt{latexmk} und
|
||||||
|
-- sofern noch nicht vorhanden -- \texttt{make} sollten auf der Programmseite
|
||||||
|
ausreichen.
|
||||||
|
|
||||||
|
Auf Debian heißen die konkreten Pakete:\\[1ex]
|
||||||
|
\null\hfill\begin{minipage}[t]{0.75\textwidth}
|
||||||
|
\texttt{make} \texttt{texlive} \texttt{texlive-pictures}
|
||||||
|
\texttt{texlive-latex-extra} \texttt{texlive-luatex}
|
||||||
|
\texttt{texlive-lang-german} \texttt{latexmk}
|
||||||
|
\end{minipage}\hfill\null\\[1ex]
|
||||||
|
auf anderen Systemen heißen sie hoffentlich ähnlich\dots{} ansonsten: viel Spaß
|
||||||
|
beim Suchen!
|
||||||
|
|
||||||
|
Die verwendete Schrift heißt "Recursive" und kann auf
|
||||||
|
\url{https://recursive.design} oder Google Fonts gefunden werden. Wir brauchen
|
||||||
|
nur die "Variable Font", die entweder \texttt{*\_VF\_*}
|
||||||
|
oder \texttt{*-VariableFont\_*} heißt, alle anderen Einzelschriften sind
|
||||||
|
unnötig.\footnote{Direktlink auf GitHub (ohne Gewähr):
|
||||||
|
\url{https://github.com/arrowtype/recursive/raw/refs/heads/main/fonts/ArrowType-Recursive-1.085/Recursive_Desktop/Recursive_VF_1.085.ttf}}
|
||||||
|
Die Schrift muss an einem Ort installiert werden, wo die
|
||||||
|
\texttt{luatex}-Font-Suche sie findet -- die meisten Standard-Ordner sollten
|
||||||
|
funktionieren, z.~B. auch \texttt{\$\{HOME\}/.local/share/fonts}.
|
||||||
|
|
||||||
|
% >>>
|
||||||
|
|
||||||
|
\section{Für \TeX-Neulinge} % <<<
|
||||||
|
|
||||||
Das meiste sollte auch ohne \TeX-Kenntnisse gehen, es gibt jedoch eine Reihe
|
Das meiste sollte auch ohne \TeX-Kenntnisse gehen, es gibt jedoch eine Reihe
|
||||||
von Sonderzeichen, die besondere Bedeutung haben. Als eines der wichtigeren
|
von Sonderzeichen, die besondere Bedeutung haben. Als eines der wichtigeren
|
||||||
beginnt \texcode|%| einen Zeilenkommentar. Bei den meisten Symbolen
|
beginnt \texcode|%| einen Zeilenkommentar. Bei den meisten Symbolen
|
||||||
reicht es, einen Backslash (\texttt{\textbackslash}) davorzusetzen, aber der
|
reicht es, einen Backslash (\texttt{\textbackslash}) davorzusetzen, aber der
|
||||||
Backslash selbst wird z.~B. durch \mintinline{tex}{\textbackslash} und nicht
|
Backslash selbst wird z.~B. durch \texcode{\textbackslash} und nicht
|
||||||
\texcode{\\} erzeugt. Bei Unsicherheit hilft auch
|
\texcode{\\} erzeugt. Bei Unsicherheit hilft auch
|
||||||
\url{http://detexify.kirelabs.org/classify.html}. (Dort kann man
|
\url{http://detexify.kirelabs.org/classify.html}. (Dort kann man
|
||||||
Symbole malen und bekommt eine Liste möglicher Übereinstimmungen und wie man
|
Symbole malen und bekommt eine Liste möglicher Übereinstimmungen und wie man
|
||||||
diese jeweils erzeugt. Das Symbol sollte generell ohne
|
diese jeweils erzeugt. Das Symbol sollte generell ohne
|
||||||
\texttt{\textbackslash usepackage} auskommen und im \texttt{textmode}
|
\texttt{\textbackslash usepackage} auskommen und im \texttt{textmode}
|
||||||
funktionieren -- diese Infos stehen ggf. über/unter dem Zeichen.)
|
funktionieren -- diese Infos stehen ggf. über/unter dem Zeichen.)
|
||||||
|
|
||||||
Zu Leerzeichen und Zeilenumbrüchen noch folgendes: Einfache Zeilenumbrüche
|
\subsection{Leerzeichen \& Umbrü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
|
|
||||||
\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.)
|
|
||||||
|
|
||||||
\section{Klassen-Optionen}
|
Zu Leerzeichen und Zeilenumbrüchen noch folgendes: \emph{Einfache
|
||||||
|
Zeilenumbrüche} werden wie in Markdown und anderen Formaten als einfaches
|
||||||
|
Leerzeichen interpretiert und \emph{nicht} als Umbruch. Separate Absätze
|
||||||
|
werden erzeugt, wenn mindestens zwei Zeilenumbrüche aufeinander folgen (d.~h.
|
||||||
|
auch im Text visuell eine Lücke entsteht), alternativ auch mit dem
|
||||||
|
\texcode{\par}-Makro. Einen Zeilenumbruch innerhalb eines Absatzes erzeugt man
|
||||||
|
mit \texcode{\\}, das ist aber meistens das falsche Werkzeug.
|
||||||
|
|
||||||
|
Ein oder mehrere Leerzeichen werden wie ein einzelnes Leerzeichen gelesen,
|
||||||
|
erlauben aber generell Zeilenumbrüche wenn die Zeile voll ist.
|
||||||
|
\texcode{~} erzeugt geschützte Leerzeichen, die nicht umbrechen dürfen
|
||||||
|
(und z.~B. bei Abkürzungen (\texcode{z.~B.}) oder Zahlen mit Einheiten
|
||||||
|
verwendet werden sollten.)
|
||||||
|
|
||||||
|
Nach Befehlen (\texcode{\foo}) werden (beliebig viele) Leerzeichen
|
||||||
|
generell als Token-Trenner ignoriert und entfernt (\texcode{\TeX test}
|
||||||
|
= \TeX test), ein Verdoppeln des Leerzeichen bringt ebenfalls nichts.
|
||||||
|
Stattdessen kann man entweder leere Argumente angeben
|
||||||
|
(\texcode{\TeX{} test} = \TeX{} test) oder das Leerzeichen ebenfalls mit einem
|
||||||
|
Backslash schützen (\texcode{\TeX\ test} = \TeX\ test.)
|
||||||
|
|
||||||
|
% >>>
|
||||||
|
|
||||||
|
\subsection{Befehlsstruktur} % <<<
|
||||||
|
|
||||||
|
\TeX\ ist eine sehr flexible Makro-Sprache, aber sowohl \LaTeX\ als auch diese
|
||||||
|
Klasse geben sich Mühe, das meiste davon zu verstecken und sehr einheitliche
|
||||||
|
Struktur vorzugeben. Befehlsaufrufe haben hier generell die Form
|
||||||
|
\texcode{\Befehl{Arg1}{Arg2}...{ArgN}}, wobei Argumente in geschweiften
|
||||||
|
Klammern immer angegeben werden müssen. Einige Befehle akzeptieren auch
|
||||||
|
\emph{optionale Argumente}, welche als Konvention eckige Klammern benutzen --
|
||||||
|
diese können entweder angegeben oder komplett weggelassen werden
|
||||||
|
(\texcode{\Foo{Baz}} oder \texcode{\Foo[Bar]{Baz}}.)
|
||||||
|
Zusätzlich gibt es manchmal auch "gesternte" Varianten, wo ein \texttt{*}
|
||||||
|
unmittelbar auf den Namen folgt (\texcode{\Fnord{23}} oder
|
||||||
|
\texcode{\Fnord*{23}}.) Konzeptuell ist das ein optionales
|
||||||
|
true/false-Argument, nur mit anderer Schreibweise.
|
||||||
|
|
||||||
|
% >>>
|
||||||
|
|
||||||
|
\subsection{Erzeugen von PDFs} % <<<
|
||||||
|
|
||||||
|
Sind alle Tools installiert, so sollte ein \texttt{make} ausreichen. (Das
|
||||||
|
Makefile findet automatisch alle neuen \texttt{.tex}-Dateien.) Soll nur ein
|
||||||
|
einzelnes Dokument gebaut werden, so sollte \texttt{make foo.pdf} zu einem
|
||||||
|
\texttt{foo.tex} genau dieses eine Dokument bauen.
|
||||||
|
|
||||||
|
Wirklich \emph{alle} Dokumente zu bauen dürfte beim ersten Mal mehrere Minuten
|
||||||
|
dauern. (Diese Dokumentation hier enthält viele Beispiele, die tatsächlich
|
||||||
|
eigenständige Dokumente sind. Der Overhead für alle je 2× \texttt{lualatex} zu
|
||||||
|
starten, mehrere temporäre Dateien zu schreiben, etc. etc. kann gut 3--10
|
||||||
|
Minuten fressen.) Danach erkennen \texttt{make} bzw. \texttt{latexmk}, dass
|
||||||
|
sich in den meisten Dateien nichts verändert hat und es geht bei zukünftigen
|
||||||
|
Durchläufen deutlich schneller (solange nicht die Klasse verändert wird -- was
|
||||||
|
wieder alles neu bauen würde -- braucht das wenige Sekunden bis ca. eine
|
||||||
|
Minute.)
|
||||||
|
|
||||||
|
% >>>
|
||||||
|
|
||||||
|
% >>>
|
||||||
|
|
||||||
|
% >>>
|
||||||
|
|
||||||
|
\chapter{Befehle} % <<<
|
||||||
|
|
||||||
|
Bereitgestellte Befehle fallen grob in 4 Kategorien -- Titel, Inhalt, Struktur,
|
||||||
|
Hervorhebung. Zusätzlich hat die Klasse selbst ein paar Optionen.
|
||||||
|
|
||||||
|
\section{Klassen-Optionen} % <<<
|
||||||
|
|
||||||
PDF-Formulare haben eine ganze Reihe von Problemen. Das wichtigste ist, dass
|
PDF-Formulare haben eine ganze Reihe von Problemen. Das wichtigste ist, dass
|
||||||
viele Viewer PDF-Formulare nicht mitdrucken. Die Elemente wie sie hier erzeugt
|
viele Viewer PDF-Formulare nicht mitdrucken. Die Elemente wie sie hier erzeugt
|
||||||
|
@ -253,55 +437,71 @@ drucken die Elemente mit, was dann wiederum anders komisch aussehen kann\dots
|
||||||
\subsection{\texttt{noform}}
|
\subsection{\texttt{noform}}
|
||||||
|
|
||||||
Wird das Dokument also stattdessen mit
|
Wird das Dokument also stattdessen mit
|
||||||
\mintinline{tex}|\documentclass[noform]{cccbform}| begonnen, werden keine
|
\texcode|\documentclass[noform]{cccbform}| begonnen, werden keine
|
||||||
PDF-Formular-Felder erzeugt sondern nur die "falschen" als Bilder erzeugt. Das
|
PDF-Formular-Felder erzeugt sondern nur die "falschen" als Bilder erzeugt. Das
|
||||||
stellt sicher, dass reine Druckvorlagen (die eh nicht ausgefüllt werden sollen)
|
stellt sicher, dass reine Druckvorlagen (die eh nicht ausgefüllt werden sollen)
|
||||||
mit allen Viewern fehlerfrei gedruckt werden können.
|
mit allen Viewern fehlerfrei gedruckt werden können.
|
||||||
|
|
||||||
\section{Struktur}
|
\subsection{\texttt{example} und \texttt{shortexample}}
|
||||||
|
|
||||||
Bereitgestellte Befehle fallen grob in 4 Kategorien -- Titel, Inhalt, Struktur, Hervorhebung.
|
Diese sind lediglich für Beispiele -- wie hier in dieser Doku -- gedacht.
|
||||||
|
\texttt{example} wählt A6 als Format aus, reduziert die Ränder auf fast nichts,
|
||||||
|
und passt ein paar Befehle an das kleinere Format an. \texttt{shortexample}
|
||||||
|
macht das gleiche, berechnet aber am Ende die tatsächliche Höhe und verkürzt
|
||||||
|
das ausgegebene Dokument. Fast alle Beispiele hier sind
|
||||||
|
\texttt{[shortexample]}s.
|
||||||
|
|
||||||
\subsection{Titel}
|
% >>>
|
||||||
|
|
||||||
|
\section{Titel} % <<<
|
||||||
|
|
||||||
Aktuell gibt es zwei Arten von Titeln. In jedem Fall sollte genau einer und
|
Aktuell gibt es zwei Arten von Titeln. In jedem Fall sollte genau einer und
|
||||||
unmittelbar in der Zeile hinter dem \texttt{\textbackslash begin\{document\}}
|
unmittelbar in der Zeile hinter dem \texcode{\begin{document}} verwendet
|
||||||
verwendet werden.
|
werden.
|
||||||
|
|
||||||
Bei langen Titeln ist ein manueller Zeilenumbruch
|
Bei langen Titeln ist ein manueller Zeilenumbruch (\texcode{\\}) im Titel ggf.
|
||||||
(\texttt{\textbackslash\textbackslash}) im Titel ggf. sinnvoll, da der Text
|
sinnvoll, da der Text sonst über das Logo bis zum Seitenrand laufen kann. (Das
|
||||||
sonst über das Logo bis zum Seitenrand laufen kann. (Das Logo und ggf. die
|
Logo und ggf. die Adresse werden nachträglich platziert, \TeX\ "sieht" diese
|
||||||
Adresse werden nachträglich platziert, \TeX\ "sieht" diese also nicht beim
|
also nicht beim verarbeiten des restlichen Inhalts.)
|
||||||
verarbeiten des restlichen Inhalts.)
|
|
||||||
|
|
||||||
\subsubsection{\texttt{\textbackslash LogoTitle\{Titel\}}}
|
\subsection{\texcode{\LogoTitle{Titel}}} % <<<
|
||||||
|
|
||||||
\begin{ShortExample}[4.953cm]{logotitle}{Die einfache Variante -- Titel links, Logo rechts.}
|
\begin{ShortExample}*[4.953cm]{logotitle}{Die einfache Variante -- Titel links, Logo rechts.}
|
||||||
\LogoTitle{Beispieltitel}
|
\LogoTitle{Beispieltitel}
|
||||||
\Text{(...und hier geht's weiter.)}
|
\Text{(...und hier geht's weiter.)}
|
||||||
\end{ShortExample}
|
\end{ShortExample}
|
||||||
|
|
||||||
\subsubsection{\texttt{\textbackslash AddressTitle\{Titel\}}}
|
% >>>
|
||||||
|
|
||||||
\begin{ShortExample}[8.865cm]{addresstitle}{Titel und Adresse}
|
\subsection{\texcode{\AddressTitle{Titel}}} % <<<
|
||||||
|
|
||||||
|
\begin{ShortExample}*[8.865cm]{addresstitle}{Titel und Adresse}
|
||||||
\AddressTitle{Beispieltitel}
|
\AddressTitle{Beispieltitel}
|
||||||
\Text{(...und hier geht's weiter.)}
|
\Text{(...und hier geht's weiter.)}
|
||||||
\end{ShortExample}
|
\end{ShortExample}
|
||||||
|
|
||||||
Es gibt auch die Variante mit \texttt{*}, welche zusätzlich das Logo einbettet.
|
\filbreak
|
||||||
|
\subsubsection{\texcode{\AddressTitle*{Titel}}}
|
||||||
|
|
||||||
\begin{ShortExample}[8.865cm]{addresstitlestar}{Titel, Adresse und Logo}
|
Es gibt auch die Variante mit \texttt{*}, welche zusätzlich das Logo einbettet.
|
||||||
|
\nopagebreak[2]
|
||||||
|
|
||||||
|
\begin{ShortExample}*[8.865cm]{addresstitlestar}{Titel, Adresse und Logo}
|
||||||
\AddressTitle*{Beispieltitel}
|
\AddressTitle*{Beispieltitel}
|
||||||
\Text{(...und hier geht's weiter.)}
|
\Text{(...und hier geht's weiter.)}
|
||||||
\end{ShortExample}
|
\end{ShortExample}
|
||||||
|
|
||||||
\subsection{Inhalt}
|
% >>>
|
||||||
|
|
||||||
|
% >>>
|
||||||
|
|
||||||
|
\section{Inhalt} % <<<
|
||||||
|
|
||||||
Hier gibt es größtenteils Befehle für Formularfelder. Anders als in normalen
|
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}
|
\TeX-Dokumenten ist es hier jedoch wichtig, für korrekte Abstände \emph{allen}
|
||||||
"losen" Text explizit als \texttt{\textbackslash Text} auszuzeichnen. Der
|
"losen" Text explizit als \texcode{\Text} auszuzeichnen. Der Befehl kümmert
|
||||||
Befehl kümmert sich um korrekte Abstände, ohne diesen liegen Dinge zu eng
|
sich um korrekte Abstände, ohne diesen liegen Dinge zu eng beieinander.
|
||||||
beieinander. Vergleiche:
|
Vergleiche:
|
||||||
|
|
||||||
\begin{ShortExample}{textgood}{Text mit korrekten Abständen}
|
\begin{ShortExample}{textgood}{Text mit korrekten Abständen}
|
||||||
\Text{Dieser Satz kein Verb.}
|
\Text{Dieser Satz kein Verb.}
|
||||||
|
@ -315,8 +515,8 @@ Dieser Satz kein Verb.
|
||||||
Die blöden Ösen!
|
Die blöden Ösen!
|
||||||
\end{ShortExample}
|
\end{ShortExample}
|
||||||
|
|
||||||
Auch lange Texte mit mehreren Absätzen können in \texttt{\textbackslash Text}
|
Auch lange Texte mit mehreren Absätzen können in \texcode{\Text} verwendet
|
||||||
verwendet werden.
|
werden.
|
||||||
|
|
||||||
\begin{ShortExample}{textlong}{langer Text ist kein Problem}
|
\begin{ShortExample}{textlong}{langer Text ist kein Problem}
|
||||||
\Text{
|
\Text{
|
||||||
|
@ -336,72 +536,77 @@ verwendet werden.
|
||||||
}
|
}
|
||||||
\end{ShortExample}
|
\end{ShortExample}
|
||||||
|
|
||||||
\subsubsection{Textfelder}
|
\subsection{Textfelder} % <<<
|
||||||
|
|
||||||
Die vermutlich wichtigste Komponente, entsprechend viele Varianten gibt es.
|
Die vermutlich wichtigste Komponente, entsprechend viele Varianten gibt es.
|
||||||
|
|
||||||
\paragraph{\texttt{\textbackslash TextField}} Im Zweifel ist die einfachste
|
\subsubsection{\texcode{\TextField}} % <<<
|
||||||
Variante die richtige. Ein einzeiliges Freitextfeld mit Label und einer für
|
|
||||||
die meisten Zwecke angemessenen Breite (welche auch z.~B. in mehrspaltigen
|
Im Zweifel ist die einfachste Variante die richtige: Ein einzeiliges
|
||||||
Bereichen von allein angepasst wird).
|
Freitextfeld mit Label und einer für die meisten Zwecke angemessenen Breite
|
||||||
|
(welche auch z.~B. in mehrspaltigen Bereichen von allein angepasst wird).
|
||||||
|
|
||||||
\begin{ShortExample}{textfield}{normales Textfeld}
|
\begin{ShortExample}{textfield}{normales Textfeld}
|
||||||
\TextField{Bezeichnung}
|
\TextField{Bezeichnung}
|
||||||
\end{ShortExample}
|
\end{ShortExample}
|
||||||
|
|
||||||
Wird die volle Breite benötigt gibt es auch die Variante mit Stern:
|
\paragraph{\texcode{\TextField*}} Wird die volle Breite benötigt gibt es auch
|
||||||
|
die Variante mit Stern:
|
||||||
|
|
||||||
\begin{ShortExample}{textfieldstar}{maximale Breite}
|
\begin{ShortExample}{textfieldstar}{maximale Breite}
|
||||||
\TextField*{Bezeichnung}
|
\TextField*{Bezeichnung}
|
||||||
\end{ShortExample}
|
\end{ShortExample}
|
||||||
|
|
||||||
\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.
|
|
||||||
|
\subsubsection{\texcode{\ShortTextField}} % <<<
|
||||||
|
|
||||||
|
Wirkt die Breite hingegen zu hoch (z.~B. für eine einzelne Zahl), so gibt es
|
||||||
|
auch ein explizit kurzes Textfeld.
|
||||||
|
|
||||||
\begin{ShortExample}{shorttextfield}{kurzes Textfeld}
|
\begin{ShortExample}{shorttextfield}{kurzes Textfeld}
|
||||||
\ShortTextField{Stromverbrauch (TWh)}
|
\ShortTextField{Stromverbrauch (TWh)}
|
||||||
\end{ShortExample}
|
\end{ShortExample}
|
||||||
|
|
||||||
Optional kann die Länge auch explizit als Faktor relativ zur Textbreite
|
\paragraph{\texcode{\ShortTextField[width]}} Optional kann die Länge auch
|
||||||
angegeben werden. Das Formular sieht aber einheitlicher aus, wenn das
|
explizit als Faktor relativ zur Textbreite angegeben werden. Das Formular
|
||||||
\emph{nicht} gemacht wird, also bitte zweimal überlegen, ob es das
|
sieht aber einheitlicher aus, wenn das \emph{nicht} gemacht wird, also bitte
|
||||||
\emph{wirklich} braucht.
|
zweimal überlegen, ob es das \emph{wirklich} braucht.
|
||||||
|
|
||||||
\begin{ShortExample}{shorttextfieldopt}{besonders kurzes Textfeld}
|
\begin{ShortExample}{shorttextfieldopt}{besonders kurzes Textfeld}
|
||||||
\ShortTextField[0.15]{Verbrauch (TWh)}
|
\ShortTextField[0.15]{Verbrauch (TWh)}
|
||||||
\end{ShortExample}
|
\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
|
\subsubsection{\texcode{\MultilineTextField}} % <<<
|
||||||
Standard-Höhe von normalen Textfeldern.
|
|
||||||
|
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}
|
\begin{ShortExample}{multilinetextfield}{mehrzeiliges Textfeld}
|
||||||
%%% FIXME bug in preview (works in doc)
|
|
||||||
\Text{}
|
|
||||||
\MultilineTextField[2cm]{Kringel}
|
\MultilineTextField[2cm]{Kringel}
|
||||||
\Text{}
|
|
||||||
\end{ShortExample}
|
\end{ShortExample}
|
||||||
|
|
||||||
\begin{ShortExample}{multilinetextfieldbad}{einzeiliges mehrzeiliges Textfeld}
|
\begin{ShortExample}{multilinetextfieldbad}{einzeiliges mehrzeiliges Textfeld}
|
||||||
%%% FIXME bug in preview (works in doc)
|
|
||||||
\Text{}
|
|
||||||
\MultilineTextField{Kringel}
|
\MultilineTextField{Kringel}
|
||||||
\Text{}
|
|
||||||
\end{ShortExample}
|
\end{ShortExample}
|
||||||
|
|
||||||
Auch hier gibt es wieder die Variante mit Stern für volle Breite:
|
\paragraph{\texcode{\MultilineTextField*}} Auch hier gibt es wieder die
|
||||||
|
Variante mit Stern für volle Breite:
|
||||||
|
|
||||||
\begin{ShortExample}{multilinetextfieldstar}{breites mehrzeiliges Textfeld}
|
\begin{ShortExample}{multilinetextfieldstar}{breites mehrzeiliges Textfeld}
|
||||||
%%% FIXME bug in preview (works in doc)
|
|
||||||
\Text{}
|
|
||||||
\MultilineTextField*[2cm]{Kringel}
|
\MultilineTextField*[2cm]{Kringel}
|
||||||
\Text{}
|
|
||||||
\end{ShortExample}
|
\end{ShortExample}
|
||||||
|
|
||||||
\paragraph{Spezialfälle} Unterschriften sollen üblicherweise händisch gesetzt
|
% >>>
|
||||||
werden, hierfür gibt es daher ein Feld was nur ein "falsches" Formularfeld ist
|
|
||||||
und nicht digital ausgefüllt werden kann.
|
\subsubsection{Spezialfälle} % <<<
|
||||||
|
|
||||||
|
Unterschriften sollen üblicherweise händisch gesetzt werden, hierfür gibt es
|
||||||
|
daher ein Feld was nur ein "falsches" Formularfeld ist und nicht digital
|
||||||
|
ausgefüllt werden kann.
|
||||||
|
|
||||||
(NB: Die Breite ist -- wie bei allem -- relativ zur Papierbreite definiert. Da
|
(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
|
diese bei diesen Beispielen deutlich schmaler als A4 ist, sieht das Feld hier
|
||||||
|
@ -418,27 +623,80 @@ Das Label kann optional geändert werden.
|
||||||
\Signature[Unterschrift]
|
\Signature[Unterschrift]
|
||||||
\end{ShortExample}
|
\end{ShortExample}
|
||||||
|
|
||||||
Ebenfalls gibt es ein etwas größeres Feld für Notizen oder Vermerke.
|
\paragraph{\texcode{\Notes}} Ebenfalls gibt es ein etwas größeres Feld für
|
||||||
|
Notizen oder Vermerke.
|
||||||
|
|
||||||
\begin{ShortExample}{notes}{großes Feld}
|
\begin{ShortExample}{notes}{großes Feld}
|
||||||
%%% FIXME bug in preview (works in doc)
|
|
||||||
\Notes
|
\Notes
|
||||||
\Text{}
|
|
||||||
\end{ShortExample}
|
\end{ShortExample}
|
||||||
|
|
||||||
Auch hier kann optional das Label geändert werden.
|
Auch hier kann optional das Label geändert werden.
|
||||||
|
|
||||||
\begin{ShortExample}{notesopt}{großes Feld}
|
\begin{ShortExample}{notesopt}{großes Feld}
|
||||||
%%% FIXME bug in preview (works in doc)
|
|
||||||
\Notes[Stirnabdruck]
|
\Notes[Stirnabdruck]
|
||||||
\Text{}
|
|
||||||
\end{ShortExample}
|
\end{ShortExample}
|
||||||
|
|
||||||
\subsubsection{Checkboxen}
|
\paragraph{\texcode{\InlineTextField}} Letztlich gibt es für Sonderfälle noch
|
||||||
|
Inline-Textfelder.
|
||||||
|
|
||||||
\paragraph{Normale Verwendung} Gibt es eigentlich nicht viel dazu zu sagen --
|
\begin{ShortExample}{inlinetextfield}{Sonderfall -- Inline}
|
||||||
\texttt{\textbackslash Checkbox\{Label\}} für eine Checkbox (und das Label kann
|
\Text{Zur Fehlersuche wurden etwa
|
||||||
auch ein kompletter Absatz sein.)
|
\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} % <<<
|
||||||
|
|
||||||
|
\subsubsection{\texcode{\Checkbox} -- normale Verwendung} % <<<
|
||||||
|
|
||||||
|
Gibt es eigentlich nicht viel dazu zu sagen -- \texcode{\Checkbox{Label}} für
|
||||||
|
eine Checkbox (und das Label kann auch ein kompletter Absatz sein.)
|
||||||
|
|
||||||
\begin{ShortExample}{checkbox}{Checkboxen}
|
\begin{ShortExample}{checkbox}{Checkboxen}
|
||||||
\Checkbox{Ich habe die AGB,
|
\Checkbox{Ich habe die AGB,
|
||||||
|
@ -453,9 +711,13 @@ auch ein kompletter Absatz sein.)
|
||||||
zum Lesen von Anleitungen gelesen.}
|
zum Lesen von Anleitungen gelesen.}
|
||||||
\end{ShortExample}
|
\end{ShortExample}
|
||||||
|
|
||||||
|
% >>>
|
||||||
|
|
||||||
|
\subsubsection{\texcode{\CheckboxOther}} % <<<
|
||||||
|
|
||||||
Für Freitextfelder als "Sonstige:" gibt es
|
Für Freitextfelder als "Sonstige:" gibt es
|
||||||
\texttt{\textbackslash CheckboxOther[Breite]\{Label\}}, wieder mit optionaler
|
\texcode{\CheckboxOther[Breite]{Label}}, wieder mit optionaler Breitenangabe
|
||||||
Breitenangabe (relativ zur Textbreite) für das Freitextfeld.
|
(relativ zur Textbreite) für das Freitextfeld.
|
||||||
|
|
||||||
\begin{ShortExample}{othercheckbox}{"Sonstiges"}
|
\begin{ShortExample}{othercheckbox}{"Sonstiges"}
|
||||||
\Text{Meine Lieblingstaste ist:}
|
\Text{Meine Lieblingstaste ist:}
|
||||||
|
@ -473,15 +735,17 @@ 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
|
einzelner Buchstabe auch in ein 0.05-er Feld passen, das wären dann aber 3
|
||||||
statt 2 verschiedener Breiten.
|
statt 2 verschiedener Breiten.
|
||||||
|
|
||||||
\paragraph{Spezielle Zwecke}
|
% >>>
|
||||||
|
|
||||||
|
\subsubsection{Spezielle Zwecke -- \texcode{\InlineCheckbox}} % <<<
|
||||||
|
|
||||||
In Sondersituationen könnten z.~B. in Aufzählungen innerhalb einer Zeile auch
|
In Sondersituationen könnten z.~B. in Aufzählungen innerhalb einer Zeile auch
|
||||||
Checkboxen benötigt sein. Dafür gibt es die -- nur in Ausnahmefällen zu
|
Checkboxen benötigt sein. Dafür gibt es die -- nur in Ausnahmefällen zu
|
||||||
verwendende -- Inline-Variante, welche sich (fast) gar nicht um die
|
verwendende -- Inline-Variante, welche sich (fast) gar nicht um die
|
||||||
Formatierung kümmert und nur die Box zur Verfügung stellt. (Das Einzige: ein
|
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
|
Leerzeichen auf der rechten Seite wird sichergestellt, für gleichmäßige
|
||||||
Abstände sollte also genau \emph{nicht} \texttt{\{\}} oder
|
Abstände sollte also genau \emph{nicht} \texcode{{}} oder \texcode{\ }
|
||||||
\texttt{\textbackslash} angehängt werden.)
|
angehängt werden.)
|
||||||
|
|
||||||
\begin{ShortExample}{inlinecheckbox}{Sonderfall -- Inline}
|
\begin{ShortExample}{inlinecheckbox}{Sonderfall -- Inline}
|
||||||
\Text{Ich bin \InlineCheckbox groß,
|
\Text{Ich bin \InlineCheckbox groß,
|
||||||
|
@ -499,18 +763,25 @@ Abstände sollte also genau \emph{nicht} \texttt{\{\}} oder
|
||||||
\end{Indented}
|
\end{Indented}
|
||||||
\end{ShortExample}
|
\end{ShortExample}
|
||||||
|
|
||||||
\subsection{Struktur}
|
% >>>
|
||||||
|
|
||||||
|
% >>>
|
||||||
|
|
||||||
|
% >>>
|
||||||
|
|
||||||
|
\section{Struktur} % <<<
|
||||||
|
|
||||||
Drei Kategorien -- formularspezifisch, "klassische" Abschnitte, und mehrere Spalten.
|
Drei Kategorien -- formularspezifisch, "klassische" Abschnitte, und mehrere Spalten.
|
||||||
|
|
||||||
\subsubsection{formularspezifisch angepasste Formen}
|
\subsection{formularspezifisch angepasste Formen} % <<<
|
||||||
|
|
||||||
\paragraph{\texttt{Indented}} Visuelle Gruppierung durch Einrücken von
|
\subsubsection{\texcode{\begin{Indented} ... \end{Indented}}} % <<<
|
||||||
zusammenhängenden bzw. untergeordneten Abschnitten ist eine sehr gute Option,
|
|
||||||
da ohne zusätzliche Tinte trotzdem klar die Struktur vermittelt wird. (Das
|
Visuelle Gruppierung durch Einrücken von zusammenhängenden bzw. untergeordneten
|
||||||
wurde auch schon bei den Checkboxen unmittelbar hier drüber verwendet.)
|
Abschnitten ist eine sehr gute Option, da ohne zusätzliche Tinte trotzdem klar
|
||||||
Optional kann ein Faktor (nicht zwingend ganzzahlig) für die Einrückungstiefe
|
die Struktur vermittelt wird. (Das wurde auch schon bei den Checkboxen
|
||||||
angegeben werden.
|
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}
|
\begin{ShortExample}{indentation}{Einrückung, auch über mehrere Ebenen}
|
||||||
\Text{abc}
|
\Text{abc}
|
||||||
|
@ -525,12 +796,19 @@ angegeben werden.
|
||||||
\begin{Indented}[2]
|
\begin{Indented}[2]
|
||||||
\Text{pqr}
|
\Text{pqr}
|
||||||
\end{Indented}
|
\end{Indented}
|
||||||
|
\begin{Indented}[1.4142]
|
||||||
|
\Text{stu}
|
||||||
|
\end{Indented}
|
||||||
\end{ShortExample}
|
\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
|
\subsubsection{\texcode{\RuleSection}} % <<<
|
||||||
innerhalb von mehrspaltigen Bereichen verwendet werden.
|
|
||||||
|
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}
|
\begin{ShortExample}{rulesection}{Mehrere klar getrennte Abschnitte}
|
||||||
\TextField{Name}
|
\TextField{Name}
|
||||||
|
@ -540,8 +818,12 @@ innerhalb von mehrspaltigen Bereichen verwendet werden.
|
||||||
\CheckboxOther[0.5]{Abgelehnt, weil:}
|
\CheckboxOther[0.5]{Abgelehnt, weil:}
|
||||||
\end{ShortExample}
|
\end{ShortExample}
|
||||||
|
|
||||||
\paragraph{\texttt{\textbackslash Rule}} Eine einfache Trennlinie, die an
|
% >>>
|
||||||
verschiedenen Stellen zur grafischen Trennung eingesetzt werden kann.
|
|
||||||
|
\subsubsection{\texcode{\Rule}} % <<<
|
||||||
|
|
||||||
|
Eine einfache Trennlinie, die an verschiedenen Stellen zur grafischen Trennung
|
||||||
|
eingesetzt werden kann.
|
||||||
|
|
||||||
\begin{ShortExample}{rule}{Mehr Trennlinien}
|
\begin{ShortExample}{rule}{Mehr Trennlinien}
|
||||||
\RuleSection{Bearbeiter}
|
\RuleSection{Bearbeiter}
|
||||||
|
@ -556,16 +838,18 @@ verschiedenen Stellen zur grafischen Trennung eingesetzt werden kann.
|
||||||
\CheckboxOther[0.5]{Abgelehnt, weil:}
|
\CheckboxOther[0.5]{Abgelehnt, weil:}
|
||||||
\end{ShortExample}
|
\end{ShortExample}
|
||||||
|
|
||||||
\clearpage
|
% >>>
|
||||||
|
|
||||||
\subsubsection{"klassische" Struktur}
|
% >>>
|
||||||
|
|
||||||
In \TeX\ üblich sind \texttt{\textbackslash section},
|
\subsection{"klassische" Struktur} % <<<
|
||||||
\texttt{\textbackslash subsection}, etc.; in Analogie dazu gibt es für ggf.
|
|
||||||
längere Formulare \texttt{\textbackslash Section} und
|
In \TeX\ üblich sind \texcode{\section}, \texcode{\subsection}, etc.; in
|
||||||
\texttt{\textbackslash Subsection}. Für die meisten Formulare ist das jedoch
|
Analogie dazu gibt es für ggf. längere Formulare \texcode{\Section} und
|
||||||
vermutlich nicht nötig, insbesondere da ggf. per Einrückung via
|
\texcode{\Subsection}. Für die meisten Formulare ist das jedoch vermutlich
|
||||||
\texttt{Indented} visuell schneller lesbare Struktur geschaffen werden kann.
|
nicht nötig, insbesondere da ggf. per Einrückung via
|
||||||
|
\texcode|\begin{Indented} ... \end{Indented}| visuell schneller lesbare
|
||||||
|
Struktur geschaffen werden kann.
|
||||||
|
|
||||||
\begin{ShortExample}{sectioning}{Abschnittsunterteilung}
|
\begin{ShortExample}{sectioning}{Abschnittsunterteilung}
|
||||||
\Section{Allgemeines}
|
\Section{Allgemeines}
|
||||||
|
@ -579,15 +863,15 @@ vermutlich nicht nötig, insbesondere da ggf. per Einrückung via
|
||||||
\Signature
|
\Signature
|
||||||
\end{ShortExample}
|
\end{ShortExample}
|
||||||
|
|
||||||
\clearpage
|
% >>>
|
||||||
|
|
||||||
\subsubsection{mehrspaltige Bereiche}
|
\subsection{mehrspaltige Bereiche} % <<<
|
||||||
|
|
||||||
Es gibt Unterstützung für 2, 3, und 5 Spalten (ggf. können diese auch
|
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
|
ineinander geschachtelt werden.) Die Befehle heißen -- vermutlich wenig
|
||||||
überraschend -- \texttt{\textbackslash TwoColumns},
|
überraschend -- \texcode{\TwoColumns}, \texcode{\ThreeColumns}, und
|
||||||
\texttt{\textbackslash ThreeColumns}, und \texttt{\textbackslash FiveColumns}
|
\texcode{\FiveColumns} und es sollten entsprechend viele \texcode{{}}-Gruppen
|
||||||
und es sollten entsprechend viele \texttt{\{\}}-Gruppen folgen.
|
folgen.
|
||||||
|
|
||||||
\begin{ShortExample}{multicolumn}{Mehrspaltigkeit}
|
\begin{ShortExample}{multicolumn}{Mehrspaltigkeit}
|
||||||
\TwoColumns{
|
\TwoColumns{
|
||||||
|
@ -621,26 +905,28 @@ Bei zu vielen Spalten werden die Abstände unlesbar -- siehe hier die
|
||||||
Foo/Bar/Baz-Gruppierung. Auf A4 geht diese Schachtelung aber üblicherweise noch
|
Foo/Bar/Baz-Gruppierung. Auf A4 geht diese Schachtelung aber üblicherweise noch
|
||||||
problemlos.
|
problemlos.
|
||||||
|
|
||||||
\subsection{Hervorhebung}
|
% >>>
|
||||||
|
|
||||||
|
% >>>
|
||||||
|
|
||||||
|
\section{Hervorhebung} % <<<
|
||||||
|
|
||||||
Es gibt verschiedene in \TeX\ eingebaute Befehle, die ebenfalls verwendet
|
Es gibt verschiedene in \TeX\ eingebaute Befehle, die ebenfalls verwendet
|
||||||
werden können\dots\ aber "weniger ist mehr" trifft insbesondere auch hier zu.
|
werden können\dots\ aber "weniger ist mehr" trifft insbesondere auch hier zu.
|
||||||
Die meisten sollten also nur bei ernsthaftem Bedarf verwendet werden.
|
Die meisten sollten also nur bei ernsthaftem Bedarf verwendet werden.
|
||||||
|
|
||||||
Eine akzeptable Formatierungsmethode ist das Hervorheben von Text mit
|
Eine akzeptable Formatierungsmethode ist das Hervorheben von Text mit
|
||||||
\texttt{\textbackslash emph}. Üblicherweise typografisch eher verpönt, aber
|
\texcode{\emph}. Üblicherweise typografisch eher verpönt, aber schon irgendwie
|
||||||
schon irgendwie zum aktuellen Design passend, können mit
|
zum aktuellen Design passend, können mit \texcode{\ul} auch \emph{einzelne
|
||||||
\texttt{\textbackslash ul} auch \emph{einzelne Worte oder sehr kurze Passagen}
|
Worte oder sehr kurze Passagen} unterstrichen werden, dabei ist jedoch zu
|
||||||
unterstrichen werden, dabei ist jedoch zu beachten, dass innerhalb
|
beachten, dass innerhalb unterstrichener Bereiche keine Zeilenumbrüche mehr
|
||||||
unterstrichener Bereiche keine Zeilenumbrüche mehr möglich sind. (Der Bereich
|
möglich sind. (Der Bereich wird als eine logische Box verpackt und kann nur
|
||||||
wird als eine logische Box verpackt und kann nur noch als Ganzes verschoben
|
noch als Ganzes verschoben werden.)
|
||||||
werden.)
|
|
||||||
|
|
||||||
Es gibt zwar eigentlich viele verschiedene Schriftgrößen, es ist jedoch keine
|
Es gibt zwar eigentlich viele verschiedene Schriftgrößen, es ist jedoch keine
|
||||||
gute Idee, alle quer durcheinander zu verwenden. Die Dokumentenklasse kümmert
|
gute Idee, alle quer durcheinander zu verwenden. Die Dokumentenklasse kümmert
|
||||||
sich ums meiste, als einzige Akzeptable gibt es \texttt{\textbackslash details}
|
sich ums meiste, als einzige Akzeptable gibt es \texcode{\details} (als
|
||||||
(als semantischen Namen), welche für untergeordnete Bemerkungen zur Verfügung
|
semantischen Namen), welche für untergeordnete Bemerkungen zur Verfügung steht.
|
||||||
steht.
|
|
||||||
|
|
||||||
\begin{ShortExample}{formatting}{Formatierungsbeispiele}
|
\begin{ShortExample}{formatting}{Formatierungsbeispiele}
|
||||||
\Text{Die Formulare sind \ul{sofort}
|
\Text{Die Formulare sind \ul{sofort}
|
||||||
|
@ -662,5 +948,43 @@ oder -12!) zum Kopieren per Fax zu
|
||||||
verwenden.}}
|
verwenden.}}
|
||||||
\end{ShortExample}
|
\end{ShortExample}
|
||||||
|
|
||||||
|
% >>>
|
||||||
|
|
||||||
|
% >>>
|
||||||
|
|
||||||
|
\chapter{Hinweise zum Design} % <<<
|
||||||
|
|
||||||
|
Das aktuelle Design ist iterativ entstanden und vermutlich erstmal \emph{gut genug},
|
||||||
|
aber deutlich nicht komplett durchstrukturiert und -getestet.
|
||||||
|
|
||||||
|
\section{Schrift}
|
||||||
|
|
||||||
|
Die Schrift "Recursive" wird im Text mit \texttt{CASL=0.2} zwischen den
|
||||||
|
Extremen benutzt. Die anderen Achsen halten sich an die Standard-Werte
|
||||||
|
(\texttt{wght=400/700} für normal/fett, \texttt{slnt=0/-15} und
|
||||||
|
\texttt{CRSV=0/1} für normal/kursiv, und \texttt{MONO=0.0/1.0} für
|
||||||
|
normal/festbreite.) Für Titel wird sowohl das Gewicht leicht erhöht
|
||||||
|
(\texttt{wght=500/800}) als auch \texttt{CASL=0.4} verdoppelt. (Das ist schon
|
||||||
|
ziemlich kräftig, \texttt{CASL=1.0} ist zu extrem.)
|
||||||
|
|
||||||
|
\section{Formularfelder}
|
||||||
|
|
||||||
|
Textfeldhöhe plus Abstand zusammen sollten für Handschrift groß genug sein.
|
||||||
|
Die Grautöne wurden mit dem Drucker getestet und sollten sowohl bei direktem
|
||||||
|
Druck als auch bei einfacher Kopie lesbar bleiben. Mehr wurde da noch nicht
|
||||||
|
optimiert.
|
||||||
|
|
||||||
|
Die schrägen Label (um 1em rausgeschoben und um 4.20° rotiert) sind relativ gut
|
||||||
|
durchgetestet und sehen zusammen mit der Schrift chaotisch aus ohne tatsächlich
|
||||||
|
chaotisch zu sein. Solange das Label nicht zu lang wird, ist es auch beim
|
||||||
|
Ausfüllen des Formulars nicht zu sehr im Weg.
|
||||||
|
|
||||||
|
Abstände etc. sind eher so Bauchgefühl und nicht komplett durchdacht. Es gab
|
||||||
|
bisher noch keine offensichtlichen Probleme damit, aber müsste man mal nochmal
|
||||||
|
anschauen\dots
|
||||||
|
|
||||||
|
% >>>
|
||||||
|
|
||||||
\end{document}
|
\end{document}
|
||||||
|
|
||||||
|
% vim: set fdm=marker fmr=<<<,>>> :
|
||||||
|
|
15
testdoc.tex
Normal file
15
testdoc.tex
Normal file
|
@ -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}
|
Loading…
Reference in a new issue