4
1

Für Absatzboxen hatte ich mal pauschal minipage verwendet, in der Annahme, dass man da nix falsch machen kann. Selbst bei kleinen Sachen, wenn ich z.B. mal einen umbrochenen Text in einem Label an einem Graphen brauchte. Sah für mich analog zu \parbox aus, nur solider.

Dann sagte mir jemand "wozu?" - minipage wäre übertrieben. Meistens würde \parbox reichen, minipage nur für komplexere Inhalte. Vermutlich hat er recht, nun nehme ich \parbox, weniger Fähigkeiten und weniger overhead mögen weniger Probleme bedeuten, wenn es nur um eine Textbox mit Umbruch geht.

Ist \parbox zu verwenden, wenn es ausreicht, der richtige Rat? Doch welchen Fällen muss ich zu minipage greifen?

gefragt 28 Jun '13, 22:57

Helmut's gravatar image

Helmut
489161722
Akzeptiert-Rate: 100%

bearbeitet 29 Jun '13, 15:23

cgnieder's gravatar image

cgnieder
22.1k253463


Allgemeine Syntax

Beginnen möchte ich mit der allgemeinen Syntax der Umgebung minipage und des Makros \parbox.

minipage

\begin{minipage}[vpos][height][innerpos]{width}
  Text
\end{minipage}

parbox

 \parbox[vpos][height][innerpos]{width}{content}

Die einzelnen Argumente bedeuten:

  • vpos: Ausrichtung der minipage oder parbox zur umliegenden Grundlinie. Erlaubte Werte sind t für top, c für center und b für bottom. Default: c
  • height: Spezifiziert die Höhe der minipage oder parbox
  • innerpos: Ausrichtung des Inhaltes der minipage oder parbox Erlaubte Werte sind t für top, c für center und b für bottom. Default: t
  • width: Die Breite der minipage oder parbox

Hier ein kleines Beispiel, dass die Anwendung zeigt:

\documentclass{article}
\usepackage{lipsum}
\begin{document}
A\hrulefill\begin{minipage}{5cm} \lipsum[2] \end{minipage}

\fbox{\begin{minipage}[t][10cm][b]{5cm} \lipsum[2] \end{minipage}}
\end{document}

Unterschiede

Ich möchte die Unterschiede in Listenform darstellen. Zu jedem Unterschied wird ein Minimalbeispiel bereitgestellt.

  • Bereits im ersten Satz ist ein wesentlicher Unterschied genannt worden. minipage ist eine Umgebung und parbox ein Anweisung. Das hat unmittelbar zur Folge, dass Innerhalb von parbox keine Verbatim-Anweisungen funktionieren:

    \documentclass{article}
    \begin{document}
        \begin{minipage}{5cm} \verb+5cm+ \end{minipage}%worked
    
        %\parbox{5cm}{\verb+5cm+}%doesn't worked
    \end{document}
    
  • Die Umgebung minipage stellt einen eigenen Fußnotenzähler und Ausgabealgorithmus für Fußnoten zur Verfügung. \parbox hat keinen eigenen Mechanismus hierfür.

    \documentclass{article}
    \begin{document}
    \begin{minipage}{5cm} Text\footnote{footnote}\end{minipage}
    
    \parbox{5cm}{Text\footnote{footnote}}
    \end{document}
    

    Allerdings erlaubt \parbox die Kombination von \footnotemark und \footnotetext

  • Innerhalb von minipage und parbox werden \parskip und \parindent ignoriert. Allerdings wurde bei minipage der Hook \@minipagerestore eingebaut, der durch den Benutzer geändert werden kann:

    \documentclass{article}
    \begin{document}
    \fbox{\begin{minipage}{5cm} Text\par Text Text\end{minipage}}
    
    \fbox{\parbox{5cm}{Text\par Text Text}}
    \end{document}
    

    Es ist kein Absatzeinzug zu erkennen.

  • Innerhalb diverser Definitionen des LaTeX-Kernels ist der Test \if@minipage eingebaut worden. Bspw. bei den Anweisungen für Listen, bei der Anweisung \addvspace, \addpenalty. Somit kommt der minipage eine besondere Bedeutung zu. Basierend auf den obigen Test ergeben sich somit Unterschiede, die das nachstehende Beispiel zeigen soll. Der Abstand einer Liste zur obigen Kante wird bei minipage nicht gesetzt. addvspace fügt ebenfalls keinen Abstand hinzu, wenn es als erstes in einer minipage ausgeführt wird.

    \documentclass{article}
    \begin{document}
    \fbox{\begin{minipage}{5cm}\begin{itemize}\item Text\end{itemize}\end{minipage}}
    
    \fbox{\parbox{5cm}{\begin{itemize}\item Text\end{itemize}}}
    
    \fbox{\begin{minipage}{5cm}\addvspace{2cm}Text\par\addvspace{2cm}Text \end{minipage}}
    
    \fbox{\parbox{5cm}{\addvspace{2cm}Text\par\addvspace{2cm}Text}}
    \end{document}
    

    Abstand zum Rahmen beachten.

  • Die Umgebung minipage setzt zudem den internen Zähler \@listdepth auf 0. Normalerweise können Listen nur bis zur fünften Ebene (start bei 0) verschachtelt werden. Da innerhalb von minipage dieser Zähler auf 0 gesetzt wird, sind also weitere Verschachtelungen möglich.

    \documentclass{article}
    \begin{document}
    \begin{list}{L}{}
     \item Text
     \begin{list}{L}{}
      \item Text
      \begin{list}{L}{}
       \item Text
       \begin{list}{L}{}
        \item Text
        \begin{list}{L}{}
         \item Text
         \begin{list}{L}{}
          \item Text
    %      \begin{list}{L}{}%error
    %       \item Text
    %      \end{list}
         \end{list}
        \end{list}
       \end{list}
      \end{list}
     \end{list}
    \end{list}
    
    \begin{list}{L}{}
     \item Text
     \begin{list}{L}{}
      \item Text
      \begin{list}{L}{}
       \item Text
       \begin{list}{L}{}
        \item Text
        \begin{list}{L}{}
         \item Text
         \begin{list}{L}{}
          \item Text
          \begin{minipage}{6cm}
           \begin{list}{L}{}
            \item Text
            \begin{list}{L}{}
             \item Text
            \end{list}
           \end{list}
          \end{minipage} 
         \end{list}
        \end{list}
       \end{list}
      \end{list}
     \end{list}
    \end{list}
    
    \end{document}
    

Fazit

Der Unterschied zwischen minipage und parbox ist im Schwerpunkt auf Fußnoten und Verbatim einzugrenzen. Solltest du also nur einfachen Text nutzen, macht es keinen Unterschied.

Permanenter link

beantwortet 29 Jun '13, 10:09

Marco_D's gravatar image

Marco_D
43015
Akzeptiert-Rate: 36%

bearbeitet 29 Jun '13, 13:05

2

Hervorragende Erklärungen! Der Effekt von \if@minipage ist nützlich anzuwenden in p-Tabellenzellen, die sich wie \parbox verhalten und daher um Listen sonst viel Platz lassen würden.

(29 Jun '13, 12:05) stefan ♦♦

Vielleicht kannst Du noch hinzufügen, dass innerhalb von minipage die Länge \textwidth die Breite der minipage und nicht die Breite des gesamten Textkörpers ist.

(04 Jul '13, 12:33) saputello

Eine \parbox sollte man immer dann nehmen, wenn man im Prinzip nichts weiter als einen Zeilenumbruch benötigt, den eine normale (horizontale) Box nicht erlaubt. Beispiele wären rotierte Tabellenüberschriften, einzelne Tabellenzellen in l- oder r-Spalten.

Eine minipage sollte man immer dann nehmen, wenn man Dinge benötigt, die in der \parbox nicht möglich sind, beispielsweise \verb oder die verbatim-Umgebung oder eigene Fußnoten.

In Tabellen ist es manchmal hilfreich, wenn man einzelnen p-Spalten vorgaukelt, dass sie durch eine minipage definiert wurden:

\makeatletter
\newcolumntype{M}{>{\@minipagetrue}X}
\makeatother

Dann kann man das vertikale Abstandsproblem in Listen, wie von Marco beschrieben, vermeiden.

Permanenter link

beantwortet 01 Jul '13, 10:21

Herbert's gravatar image

Herbert
5.1k34
Akzeptiert-Rate: 31%

bearbeitet 01 Jul '13, 10:27

Deine Antwort
Vorschau umschalten

Folgen dieser Frage

Per E-Mail:

Wenn sie sich anmelden, kommen Sie für alle Updates hier in Frage

Per RSS:

Antworten

Antworten und Kommentare

Markdown-Grundlagen

  • *kursiv* oder _kursiv_
  • **Fett** oder __Fett__
  • Link:[Text](http://url.com/ "Titel")
  • Bild?![alt Text](/path/img.jpg "Titel")
  • nummerierte Liste: 1. Foo 2. Bar
  • zum Hinzufügen ein Zeilenumbruchs fügen Sie einfach zwei Leerzeichen an die Stelle an der die neue Linie sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Frage-Themen:

×38
×23
×18
×6

gestellte Frage: 28 Jun '13, 22:57

Frage wurde gesehen: 28,162 Mal

zuletzt geändert: 04 Jul '13, 12:33