Seite 1 von 1

Rahmen mit variabler Höhe

Verfasst: Mo 8. Nov 2010, 19:39
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]

Verfasst: Di 9. Nov 2010, 00:08
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

Verfasst: Di 9. Nov 2010, 11:08
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

Verfasst: Di 9. Nov 2010, 22:22
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

Verfasst: Mo 15. Nov 2010, 13:43
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

Verfasst: Mi 17. Nov 2010, 08:55
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

Verfasst: Mo 6. Dez 2010, 19:32
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