Rahmen mit variabler Höhe

Redefinition von Makros, Definition eigener Befehle sowie neuer Umgebungen


ferdinand
Forum-Newbie
Forum-Newbie
Beiträge: 9
Registriert: Sa 14. Nov 2009, 14:14

Rahmen mit variabler Höhe

Beitrag von ferdinand »

Hallo,

ich versuche gerade einen Rahmen zu machen, der eine mindest Höhe hat, aber sich in der Höhe anpasst, wenn noch Platz auf der Seite ist. Also so ähnlich wie es \vfill{} mit Leeraum macht.

Mein bisheriger Versuch sieht so aus:
\providecommand*{\textbox}[2]{%
  \setlength{\boxheight}{#1}%
  #2:\checkbox\checkedbox\correctedbox\\%
  \frame{\parbox{\linewidth}{\vspace*{\boxheight}\vspace*{\fill}\ }}\\%
}
Leider funktioniert das aber nicht. Die Box hat zwar die vorgegebene Größe, vergrößert sich aber nicht um die Seite zu füllen.

Habt ihr eine Idee, wie es gehen könnte? Ist es überhaupt möglich?

Viele Grüße
Ferdinand[/code][/b]

rais
Forum-Guru
Forum-Guru
Beiträge: 413
Registriert: Di 21. Sep 2010, 00:37

Beitrag von rais »

Hallo,
es würde vielleicht helfen zu wissen, wie Dinge wie \checkbox, \checkedbox und \correctedbox bei Dir definiert sind ... noch besser wäre ein nachvollziehbares Minimalbeispiel Deinerseits.

MfG
Rainer
One of the joys of travel is visiting new towns and meeting new people---G.Khan (Robert Asprin, Another Fine Myth)

ferdinand
Forum-Newbie
Forum-Newbie
Beiträge: 9
Registriert: Sa 14. Nov 2009, 14:14

Beitrag von ferdinand »

Hallo,

hier ist das Minimalbeispiel:
\documentclass{scrartcl}

\newlength{\boxheight}

\providecommand*{\textbox}[2]{%
  \setlength{\boxheight}{#1}%
  \addtolength{\boxheight}{\fill}%
  #2:\\%
  \frame{\parbox{\linewidth}{\vspace*{\boxheight}\vspace*{\fill}\ }}\\%
}

\begin{document}
    \textbox{2cm}{Hier sollst du was eintragen}
\end{document}
\checkbox, \checkedbox und \correctedbox waren nur um etwas zu testen und gehören eigentlich nicht dazu, hatte ich leider vergessen noch raus zunehmen.

Viele Grüße
Ferdinand

rais
Forum-Guru
Forum-Guru
Beiträge: 413
Registriert: Di 21. Sep 2010, 00:37

Beitrag von rais »

Hallo,
in erster Näherung vllt
\documentclass[ngerman]{scrartcl}
\usepackage{babel,blindtext}
\newlength{\boxheight}

\providecommand*{\textbox}[2]{%
  \vfil
  #2:\par\noindent%
  \setlength\boxheight{\pagegoal}%
  \addtolength\boxheight{-\pagetotal}%
  \addtolength\boxheight{-2\baselineskip}%
  \ifdim\boxheight<#1\setlength{\boxheight}{#1}\fi
  \frame{\parbox[tt][\boxheight]{\linewidth}{~
%\the\pagegoal, \the\pagetotal, \the\boxheight
  }}\par
}
\begin{document}
  \blindtext[2]%<--hier verschiedene Werte testen

  \textbox{2cm}{Hier sollst du was eintragen}
\end{document}
MfG

Rainer
One of the joys of travel is visiting new towns and meeting new people---G.Khan (Robert Asprin, Another Fine Myth)

ferdinand
Forum-Newbie
Forum-Newbie
Beiträge: 9
Registriert: Sa 14. Nov 2009, 14:14

Beitrag von ferdinand »

Hallo Rainer,

das sieht so auf den ersten Blick sehr gut aus. Ich werde das jetzt mal mit aufnehmen und dann ein bisschen testen.

Vielen Dank schon mal für deine Hilfe

ferdinand
Forum-Newbie
Forum-Newbie
Beiträge: 9
Registriert: Sa 14. Nov 2009, 14:14

Beitrag von ferdinand »

Hallo,

leider klappt es noch nicht so, wie ich es gerne hätte: Wenn ich diesen Quelltext nehme
\documentclass[ngerman]{scrartcl}
\usepackage{babel,blindtext}
\newlength{\boxheight}

\providecommand*{\textbox}[2]{%
  \vfil
  #2:\par\noindent%
  \setlength\boxheight{\pagegoal}%
  \addtolength\boxheight{-\pagetotal}%
  \addtolength\boxheight{-2\baselineskip}%
  \ifdim\boxheight<#1\setlength{\boxheight}{#1}\fi
  \frame{\parbox[tt][\boxheight]{\linewidth}{~
%\the\pagegoal, \the\pagetotal, \the\boxheight
  }}\par
}
\begin{document}
  Ein kurzer Text
  \textbox{1cm}{Hier sollst du was eintragen}
  Noch ein paar Worte
  \textbox{1cm}{Hier sollst du was eintragen}
\end{document} 
landet die zweite Box leider auf der nächsten Seite, obwohl auf der ersten Seite mit den Mindestgrößen noch Platz wäre.

Es soll also theoretisch so laufen, dass die Boxen erst mal nur mit ihrer Mindestgröße gerechnet werden und dann am Ende der übrige Platz auf alle Boxen der Seite verteilt wird.

Habt ihr hierzu noch Verbesserungsvorschläge?

Viele Grüße
Ferdinand

rais
Forum-Guru
Forum-Guru
Beiträge: 413
Registriert: Di 21. Sep 2010, 00:37

Beitrag von rais »

Hallo Ferdinand,
ferdinand hat geschrieben: Es soll also theoretisch so laufen, dass die Boxen erst mal nur mit ihrer Mindestgröße gerechnet werden und dann am Ende der übrige Platz auf alle Boxen der Seite verteilt wird.
eine voll `automagische' Lösung will mir dazu nicht einfallen -- ich wüsste z. B. nicht, wo ich einen Seitenumbruch einfügen dürfte, falls doch nicht alles auf eine Seite passt -- in zweiter Näherung vielleicht
\documentclass[ngerman]{scrartcl}
\usepackage[utf8]{inputenc}
\usepackage{babel,blindtext}
\newlength\boxheight
\newlength\boxheightexp
\newcounter{box}
\newsavebox\mybox

\newcommand*\textbox[2]{%
  \vfil
  #2:\par\noindent%
  \stepcounter{box}%
  \setlength\boxheight{#1}%
  \addtolength\boxheight{\boxheightexp}%
  \ifdim\boxheight<#1\setlength{\boxheight}{#1}\fi
  \frame{\parbox[tt][\boxheight]{\linewidth}{~}}\par
}
\newcommand*\orgtextbox{}%
\let\orgtextbox\textbox
\newcommand\zusammen[1]{%
  \setcounter{box}{0}%
  \renewcommand*\textbox[2]{%
    \stepcounter{box}%
    \setlength\boxheight{##1}%
    \par
    ##2:\par
    \noindent\rule{\linewidth}{\boxheight}\par
  }%
  \sbox\mybox{\parbox{\linewidth}{#1}}%
  \ifnum\value{box}>0
    \setlength\boxheight{\ht\mybox}%
    \addtolength\boxheight{\dp\mybox}%
    \setlength\boxheightexp{\pagegoal}%
    \addtolength\boxheightexp{-\pagetotal}%
    \ifdim\boxheightexp>\textheight
      \setlength\boxheightexp{\textheight}%
    \fi
    \addtolength\boxheightexp{-2\baselineskip}%
    \addtolength\boxheightexp{-\boxheight}%
    \divide\boxheightexp by \value{box}%
    \ifdim\boxheightexp<0pt%
      \typeout{`\string\zusammen-Makro' warnt: passt nicht...Versuche es trotzdem.}%
      \setlength\boxheightexp{0pt}%
    \else
      \typeout{`\string\zusammen-Makro' informiert: scheint zu passen...}%
    \fi
    \renewcommand*\textbox{\orgtextbox}%
  \else
    \typeout{`\string\zusammen-Makro' informiert: keine Textbox gefunden...}%
  \fi
  #1%
}
\begin{document}
\blindtext

\zusammen{%
  \textbox{1cm}{Hier sollst du was eintragen}
  Noch ein paar Worte
  \textbox{1cm}{Hier sollst du was eintragen}
  Und noch ein paar Worte\dots
  \textbox{3cm}{Nochwas zum Eintragen}
}
\end{document}
MfG
One of the joys of travel is visiting new towns and meeting new people---G.Khan (Robert Asprin, Another Fine Myth)

Antworten