Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Rahmen um mehrzeiligen Text

578 views
Skip to first unread message

Albrecht Mehl

unread,
Mar 6, 2015, 3:37:17 AM3/6/15
to
Mit fbox und mit framebox habe ich versucht, mehrzeiligen Text
einzurahmen: in beiden Fällen wurde der Zeilenumbruch ignoriert. Gibt es
doch ein Möglichkei, das Gewünschte zu erreichen?

-------------------

\documentclass[a4paper,10pt]{scrartcl}
\usepackage[utf8x]{inputenc}
\usepackage{enumitem}

\begin{document}

\fbox{text1\\text2}
\framebox{text1\\text2}

\end{document}

--------------------------

A. Mehl
--
Albrecht Mehl |eBriefe an:mehlBEIfreundePUNKTtu-darmstadtPUNKTde
Veilchenweg 7 |Tel. (06151) 37 39 92
64291 Darmstadt, Germany|sehenswert - ungefähr 'Wir einsam im All'
http://www.phrenopolis.com/perspective/solarsystem/index.html

Ulrike Fischer

unread,
Mar 6, 2015, 5:24:23 AM3/6/15
to
Am Fri, 06 Mar 2015 09:37:12 +0100 schrieb Albrecht Mehl:

> Mit fbox und mit framebox habe ich versucht, mehrzeiligen Text
> einzurahmen: in beiden Fällen wurde der Zeilenumbruch ignoriert. Gibt es
> doch ein Möglichkei, das Gewünschte zu erreichen?

Tausende. http://www.ctan.org/topic/boxing (tcolorbox + mdframed
gehören da auch noch rein.



--
Ulrike Fischer
http://www.troubleshooting-tex.de/

Ulrich D i e z

unread,
Mar 6, 2015, 6:30:47 AM3/6/15
to
Albrecht Mehl schrieb:

> Mit fbox und mit framebox habe ich versucht, mehrzeiligen Text
> einzurahmen: in beiden Fällen wurde der Zeilenumbruch ignoriert. Gibt es
> doch ein Möglichkei, das Gewünschte zu erreichen?

\fbox packt das als Argument übergebene Material in eine \hbox
und malt einen Rahmen darum herum.

Innerhalb einer \hbox ist (La)TeX erstmal im sogenannten
"Restricted Horizontal mode [Building a horizontal list for an
\hbox]". Horizontale Listen sind im Prinzip einzelne
(horizontale) Zeilen. Einzelne Zeilen haben keinen Umbruch, denn
sonst wären es ja mehrere Zeilen. Innerhalb einer \hbox, in
diesem Modus, funktionieren deshalb Dinge, die fürs Umbrechen
von Zeilen gedacht sind, nicht.

Für Zeilenumbrüche muss man also dafür sorgen, dass (La)TeX zu
einem Modus wechselt, in dem mehrere Zeilen möglich sind.

Dazu muss man der \fbox als Argument etwas geben, was in eine
vertikale Box, zB eine \vbox oder eine \parbox eingepackt ist.
Diese vertikale Box kommt dann in die besagte \hbox und in
dieser vertikalen Box sind Zeilenumbrüche möglich.

Innerhalb einer \vbox oder \parbox wäre (La)TeX erstmal im
"Internal vertical Mode [Building a vertical list for a \vbox]".
Alle \hboxen innerhalb einer \vbox oder \parbox werden als
einzelne Zeilen betrachtet und untereinander gesetzt und jede
Zeile ist so breit wie die jeweilige \hbox. In diesem Modus hat
man also eine umgebende vertikale Box, in die man zB per \hbox
die einzeln horizontalen Boxen/Zeilen "von Hand" hineinlegen
kann.

Im "Internal vertical Mode [Building a vertical list for a \vbox]"
werden Space-Token übrigens nicht zu horizontalem Leim, sodass
es keinen Unterschied macht, ob man schreibt
\vbox{\hbox{Zeile 1}\hbox{Zeile 2}}%
oder schreibt:
\vbox{\hbox{Zeile 1} \hbox{Zeile 2} }%
.


TeX kann aber auch noch in einen anderen Modus wechseln, so dass
man eine umgebende vertikale Box hat, in die aber nicht "von
Hand" die einzelnen horizontalen Boxen hineingelegt werden,
sondern innerhalb derer die "Absatzbastelroutine" von (La)TeX
läuft, welche wiederum einen Automatismus darstellt, der die
einzelnen in der vertikalen Box liegenden horizontalen
Boxen/Zeilen "maschinell" erstellt und dabei Dinge/Befehle wie
\\ berücksichtigt, die Zeilenumbrüche bewirken bzw das Beenden
des Erstellens der momentan in Arbeit befindlichen Zeile/\hbox
und das Beginnen des Erstellen einer neuen Zeile/\hbox bewirken.
Diese "maschinell erstellten" \hboxen haben alle eine Breite,
die dem Wert \hsize entspricht, welcher im Prinzip der
Zeilenbreite für den jeweiligen Absatz entspricht und beim
Verteilen von Material über die einzelnen maschinell zu
erstellenden horizontalen Boxen/Zeilen der Breite \hsize folgt
die Absatzbastelroutine diversen Regeln, die dazu dienen sollen,
den Absatz bzw das Gesamtbild gut aussehen zu lassen. Zum
Beispiel werden letzte Zeilen eines Absatz, die oft kürzer sind
als die vorhergehenden gleich langen "Blocksatz" Zeilen, mit
\parfillskip-Glue aufgefüllt.
Dieser "andere Modus" nennt sich "Horizontal Mode [Building a
horizontal list for paragraph]". ( Um eingängiger zu machen,
worum es bei diesem Modus geht, hätte ich ihn vielleicht
"Paragraph Mode [Building a horizontal list for paragraph]"
genannt. )

In diesem Zusammenhang: Der Befehl \par dient im Prinzip dazu,
eine laufende Absatzbastelroutine zu beenden bzw den "Horizontal
Mode [Building a horizontal list for paragraph]" zu verlassen.

Sofern (La)TeX danach auf irgendetwas stösst, was (La)TeX dazu
veranlasst, die Absatzbastelroutine wieder anzuwerfen, also
wieder in den "Horizontal Mode [Building a horizontal list for
paragraph]" zu wechseln, wird dann ein neuer Absatz gebastelt.

Innerhalb einer \parbox, bei der man die Breite als Argument
vorgeben muss, ist LaTeX erstmal im "Internal vertical Mode
[Building a vertical list for a \vbox]". Wenn in dieser \parbox
Dinge vorkommen, die LaTeX zum Wechsel in den "Horizontal Mode
[Building a horizontal list for paragraph]" veranlassen, werden
wie gehabt "maschinell" \hboxen/Zeilen der Breite \hsize
gebastelt, bloss entspricht dabei der Wert \hsize dem, was man
im Argument als Breite vorgegeben hat.





\documentclass[a4paper,10pt]{scrartcl}
%\usepackage[utf8x]{inputenc}
\usepackage{enumitem}

\begin{document}

\fbox{% TeX befindet sich im Restricted Horizontal mode [Building a horizontal list for an \hbox]
\vbox{% TeX befindet sich im Internal vertical Mode [Building a vertical list for a \vbox]
% wo jede \hbox eine Zeile darstellt und Space-Token sich nicht auswirken bzw nicht
% zu horizontalem Leim werden.
\hbox{text1} \hbox{text2} %
}%
}%

\fbox{% TeX befindet sich im Restricted Horizontal mode [Building a horizontal list for an \hbox]
\vbox{% TeX befindet sich im Internal vertical Mode [Building a vertical list for a \vbox]
% TeX wechselt dank \leavevmode zum Horizontal Mode [Building horizontal list for paragraph]
% und bastelt horizontale Boxen der Breite \hsize in die das Material hineinverteilt wird.
% In diesem Fall passt alles Material in eine solche Box.
% In diesem Modus werden Space-Token, die nicht am Zeilenende landen, zu horizontalem Leim.
\leavevmode
\hbox{text1} \hbox{text2} %
}%
}%

\fbox{% TeX befindet sich im Restricted Horizontal mode [Building a horizontal list for an \hbox]
\vbox{% TeX befindet sich im Internal vertical Mode [Building a vertical list for a \vbox]
% TeX findet keine \hbox und wechselt deshalb zum Horizontal Mode [Building horizontal list for paragraph]
% und bastelt horizontale Boxen der Breite \hsize in die das Material hineinverteilt wird.
% In diesem Fall passt alles Material in eine solche Box.
% In diesem Modus werden Space-Token, die nicht am Zeilenende landen, zu horizontalem Leim.
text1 text2 %
}%
}%

\fbox{% TeX befindet sich im Restricted Horizontal mode [Building a horizontal list for an \hbox]
\vbox{% TeX befindet sich im Internal vertical Mode [Building a vertical list for a \vbox]
% TeX findet keine \hbox und wechselt deshalb zum Horizontal Mode [Building horizontal list for paragraph]
% und bastelt horizontale Boxen der Breite \hsize in die das Material hineinverteilt wird.
% In diesem Modus werden Space-Token, die nicht am Zeilenende landen, zu horizontalem Leim.
% In diesem Modus werden auch Zeilenumbruchsbefehle beruecksichtigt sodass diesmal zwei Zeilen
% entstehen:
text1 \\text2 %
}%
}%

\end{document}



Ulrich


Ulrich D i e z

unread,
Mar 6, 2015, 6:36:23 AM3/6/15
to
Albrecht Mehl schrieb:

> Mit fbox und mit framebox habe ich versucht, mehrzeiligen Text
> einzurahmen: in beiden Fällen wurde der Zeilenumbruch ignoriert. Gibt es
> doch ein Möglichkei, das Gewünschte zu erreichen?

Ich habe vergessen zu erwähnen, dass die von mir genannte
Möglichkeit, die Dinge zusätzlich in eine vertikale Box
(zB \vbox oder \parbox oder minipage-Umgebung) zu
packen, dazu führt, dass das eingerahmte Material
nicht über Seiten umbrochen wird sondern insgesamt
auf ein- und derselben Seite landet.

Wenn man Seitenumbrüche erlauben will, empfiehlt sich
zB das framed-Paket von Donald Arseneau.

Ulrich
0 new messages