PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Mehrspaltiger Text mit Rahmen



strolch
03-05-2010, 15:44
liebes forum,

ich versuche eine art infobox zu erstellen, in der ich einen zweispaltigen text habe. den text würde ich gerne hellgrau hinterlegen und um die box hätte ich gerne einen rahmen mit oval eingerahmten titel. und das ganze soll auch auf die naechste seite umgebrochen werden.

ich habe dazu einiges versucht. das hauptproblem ist das meine jetzige version nicht auf die naechste seite umgebrochen wird. das multicol-package erlaubt seitenumbrueche, nur kann ich es nicht in einen rahmen packen. damit dies funktioniert, muss ich es zuerst in eine minipage stecken ... und damit wird es zum float-objekt und kann nicht mehr umgebrochen werden. :-(

zum rahmen: nach dem ich ein paar pakete versucht habe und nicht gefunden habe, was ich wollte (rahmen mit oval eingerahmten titel) habe ich mir selbst etwas zusammengebastelt. es ist absolut noch nicht ausgereift, da der titel momentan eine feste länge haben muss, aber damit kann ich zur not leben, da in allen boxen vorerst der gleiche titel stehen wird. ah, und ich verwende nicht pstricks, da ich pdflatex verwende.

und noch zwei kleine probleme: das erste fällt schnell ins auge. der hintergrund wird nicht vollständig grau gefüllt. irgendwie zeichne ich die oberste linie zu weit oben oder den text zu tief. das zweite problem sieht man nicht so einfach. die gesamte box ist leider etwas zu breit. sie geht an der rechten seite ca. 4pt ueber die textbreite hinaus.

hier der stand meiner versuche:



\documentclass[ngerman,a4paper,parskip,DIV=12]{scrartcl}

\usepackage{blindtext}
\usepackage{babel}

\usepackage{multicol} % mehrspaltiger text
\usepackage{fancybox} % ovaler titel im rahmen
\usepackage[normalem]{ulem} % oberste linie bei den rahmen
\usepackage{color} % farben
\definecolor{lgray}{rgb}{0.9,0.9,0.9} % hintergrundfarbe

% Rahmen mit 3 Argumenten: Linienstärke, Titel, Inhalt
\newcommand{\myFrame}[3]{
\renewcommand{\ULthickness}{#1}
\vbox{
% linie oben mit titel in ovaler box
\sout{\hspace{25pt}} \hspace*{-5pt} \Ovalbox{#2} \hspace*{-5pt} \sout{\hspace{372pt}}
\vskip -8pt
\hbox{
\hspace*{-8pt}
\vrule width #1 % linie links
\vbox{\vskip 8pt{} \colorbox{lgray}{#3} }%
\hspace*{8pt}
\vrule width #1 % linie rechts
}%
% linie unten
\hrule height #1
}
}

\newcommand{\myBox}[1]{
\myFrame{1pt}{ABCDEFG}{
\begin{minipage}[htb]{\linewidth}
\begin{multicols}{2}
#1
\end{multicols}
\end{minipage}
}
}

\begin{document}
\myBox{
\blindtext \\ \blindtext \\
\blindtext \\ \blindtext \\
\blindtext \\ \blindtext \\
\blindtext \\ \blindtext
}

\end{document}


also ich bin mit meinem latein am ende. hoffentlich kann mir jemand von euch mit einer idee weiter helfen.

strolch

LuPi
03-05-2010, 15:47
Hast Du Dir schon das Paket framed angeschaut? Eventuell auch mdframed (ganz neu, ich habe es noch nicht benutzt).

strolch
03-05-2010, 16:52
ja, habe ich. beide pakete unterstuetzen keinen titel. und mit mdframed habe ich ausprobiert, ob ich da einen zweispaltigen text hinein hinein packen kann.
die fehlermeldung lautet dann immer: TeX capacity exceeded, sorry [save size=5000] ich habe den wert daraufhin mal auf 15000 erhoeht, mit dem gleichen resultat.

boites und niceframe funktionierten leider auch nicht. wobei boites ja schon mal einen rahmen mit zentrierten titel bereitstellt. es trat aber der gleiche fehler wie bei mdframed auf. das problem bei niceframe wieß ich jetzt nicht mehr genau.

lockstep
03-05-2010, 18:12
mit mdframed habe ich ausprobiert, ob ich da einen zweispaltigen text hinein hinein packen kann.
die fehlermeldung lautet dann immer: TeX capacity exceeded, sorry [save size=5000] ich habe den wert daraufhin mal auf 15000 erhoeht, mit dem gleichen resultat.

Nun, zumindest mit einer multicols-Umgebung innerhalb der mdframed-Umgebung funktioniert es:



\documentclass{article}

\usepackage{mdframed}
\usepackage{multicol}
\usepackage{blindtext}

\makeatletter
\g@addto@macro{\mdframed}{\setlength{\multicolsep} {0pt}}
\makeatother

\begin{document}

\blindtext

\begin{mdframed}
\begin{multicols}{2}
\blindtext
\end{multicols}
\end{mdframed}

\blindtext

\end{document}


Innerhalb der mdframed-Umgebung wird zusätzlich \multicolsep auf 0pt gesetzt, um "doppelte" Abstände zu vermeiden.

lockstep

strolch
03-05-2010, 18:26
mh, ist ja merkwürdig. funktioniert bei mir auch.
nur leider wird der rahmen nicht umgebrochen, wenn ich etwas mehr hinein packe. so z.b.:



\begin{mdframed}
\begin{multicols}{2}
\blindtext \\ \blindtext \\
\blindtext \\ \blindtext \\
\blindtext
\end{multicols}
\end{mdframed}

lockstep
03-05-2010, 18:44
Stimmt - da war ich offenbar zu optimistisch, was das Zusammenspiel zwischen mdframed und multicol betrifft.

Ich kann leider nicht beurteilen, ob bzw. mit welchem Aufwand dein Wunsch erfüllt werden kann. Das Paket mdframed ist allerding brandneu und wird offenbar rasch weiterentwickelt - ein Featurewunsch an den Paketautor Marco Daniel hilft also vielleicht.

(Oder jemand aus diesem Forum hat eine Idee. ;))

lockstep

mechanicus
03-05-2010, 18:49
Hi,

multicol und das Paket framed / mdframed speichern den Inhalt jeweils in einer savebox. framed bestimmt nun den Platz auf der Seite und splittet evtl. die savebox, um sie auf mehrere Seiten zu verteilen. multicol macht das gleiche. Das. bedeutet, du hast eine savebox in der savebox. Die Längenübergabe / Berechnung passt daher nicht.

Du könntest dir deine eigene multicol-Umgebung bauen, welche einen Rahmen hinzufügt. mdframed kann derzeit noch nicht mit multicolumn twocolumn Umgehen, was bei framed aber funktioniert.
EDIT: multicolumn war falsch, twocolum ist gemeint
Gruß
Marco

strolch
05-05-2010, 05:03
danke schon mal für eure antworten. nur so richtig weiter bin ich immer noch nicht.

@mechanicus
das ist doch schon mal eine gute erklaerung, wieso es so wie ich es mit mdframed und multicol nicht funktioniert. danke.
die kombination framed und twocolum bringt leider auch nicht das gewuenschte ergebnis. es werden zwar zwei spalten erzeugt, nur sind die separat eingerahmt. ich wollte aber einen zweispaltigen text, der von nur einem rahmen umgeben ist. wie im bsp. zu sehen ist.



\documentclass{article}

\usepackage{framed}
\usepackage{blindtext}
\usepackage[english]{babel}

\begin{document}
\blindtext

\begin{framed}
\twocolumn

\blindtext \\ \blindtext \\
\blindtext \\ \blindtext \\
\blindtext
\end{framed}

\blindtext

\end{document}



ich haette nicht gedacht, dass so ein kleiner rahmen mit titel, zweispaltigem text und farbigem hintergrund so viel arbeit machen wuerde.

strolch

mechanicus
05-05-2010, 16:14
ich haette nicht gedacht, dass so ein kleiner rahmen mit titel, zweispaltigem text und farbigem hintergrund so viel arbeit machen wuerde.
Ich früher auch nicht :D -- Aber wie gesagt, nutze die Möglichkeit, dir dein eigenes Multicol-Paket zu schreiben. Vielleicht komme ich auch am Wochenende dazu, mit etwas genauer zu überlegen, ob man eine Einbindung von multicol vornehmen kann.

Gruß
Marco

strolch
05-05-2010, 17:03
Zitat von mechanicus
Aber wie gesagt, nutze die Möglichkeit, dir dein eigenes Multicol-Paket zu schreiben.


ich hoffte es gibt eine andere loesung, die ich nur noch nicht kenne bzw. gefunden habe, bevor ich anfange pakete umzuschreiben, aber ich werde es mir mal ansehen.
vielleicht kann man ja mdframed und multicol kombinieren.

esdd
06-05-2010, 14:21
Hallo,

der folgende Vorschlag hat ein paar Einschränkungen:
Wird \Geteilt verwendet, sind nach nach dem Einfügen und bei jeder Verschiebung des enthaltenen Seitenumbruches 2 Durchläufe nötig, damit die Boxen wieder an der richtigen Stelle sind.
Innerhalb von \Geteilt muss genau ein Seitenumbruch erfolgen. Ist kein Seitenumbruch enthalten muss \Ungeteilt verwendet werden.
Auf der zweiten Seite liegt die Box über dem Text. Deshalb muss als Füllfarbe die Schriftfarbe mit einer entsprechenden Transparenz verwendet werden.



\documentclass[parskip=half-]{scrartcl}

\usepackage[ngerman]{babel}
\usepackage{blindtext}
\usepackage{tikz}
\usepackage{multicol}

\newenvironment{Quote}%
{\begin{list}{}%
{\setlength\leftmargin{0.5\multicolsep}\setlength\ rightmargin{\leftmargin}}%
\item[]\ignorespaces}%
{\end{list}}

%Befehl für Box ohne Seitenumbruch
%drei obligatorische Argumente: Linienstärke, Titel, Inhalt
\newcommand\Ungeteilt[3]{\noindent%
\begin{tikzpicture}[line width=#1]
\pgfmathparse{\textwidth-\pgflinewidth-\multicolsep}
\node(N)[preaction={fill,opacity=0.1}]%
[draw,text width=\pgfmathresult pt,text justified,inner sep=0.5\multicolsep,outer sep=0pt]%
{\vspace*{0.5\baselineskip}\begin{multicols}{2}#3\ end{multicols}};
\path (N.north west)+(1,0)node[draw,fill=white,anchor=west,rectangle,rounded corners=2mm]{#2};
\end{tikzpicture}}

%Befehl für Box mit genau einem Seitenumbruch
%ein optionales Argument: Längenkorrektur der Box auf der ersten Seite
%drei obligatorische Argumente: Linienstärke, Titel, Inhalt
\newcommand\Geteilt[4][1pt]{\noindent%
\begin{tikzpicture}[remember picture, overlay,line width=#2]
\pgfmathsetlengthmacro\x{1in+\hoffset+\oddsidemarg in+\textwidth-0.5\pgflinewidth}
\pgfmathsetlengthmacro\y{1in+\voffset+\headsep+\he adheight+\topmargin+\textheight+0.5\pgflinewidth+# 1}
\path(current page.north west)+(\x,-\y)coordinate(B);
\coordinate(O)at (0.5\pgflinewidth,-0.5\pgflinewidth);
\fill[opacity=0.08](O)rectangle(B);
\draw(B-|O)--(O)-|(B)--(B);
\path (O)+(1,0)node[draw,fill=white,anchor=west,rectangle,rounded corners=2mm]{#3};
\end{tikzpicture}%
\begin{Quote}
\begin{multicols}{2}
#4
\end{multicols}
\end{Quote}
\vspace*{-2\baselineskip}
\begin{tikzpicture}[remember picture, overlay,line width=#2]
\pgfmathsetlengthmacro\x{1in+\hoffset+\oddsidemarg in+\textwidth-0.5\pgflinewidth}
\pgfmathsetlengthmacro\y{1in+\voffset+\headsep+\he adheight+\topmargin-0.5\pgflinewidth}
\path(current page.north west)+(\x,-\y)coordinate(B);
\coordinate(O)at (0.5\pgflinewidth,0.5\pgflinewidth);
\fill[opacity=0.1](O)rectangle(B);
\draw(B-|O)--(O)-|(B)--(B);
\end{tikzpicture}}


\begin{document}

\Ungeteilt{1pt}{langer Titel}{\blindtext[1]}

\blindtext

\Geteilt{1pt}{Titel}{\foreach \i in {1,...,4}{\blindtext}}

\blindtext

\Ungeteilt{1pt}{langer Titel}{\blindtext[1]}

\end{document}

Gruß
Elke

strolch
07-05-2010, 00:41
hey, cool, danke elke, das sieht doch schon mal genau so aus, wie ich es mir vorgestellt habe. muss ich halt, wenn alles fertig geschrieben ist, noch mal genau ueberpruefen, ob wirklich die richtige box verwendet wurde aber damit kann ich vorerst leben.

strolch