PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Framboxen verschachteln und/oder überschneiden



nutschi
26-03-2012, 13:35
Hallo,

ich würde gerne Teile einer mathematischen Formel kenntlich machen. Dazu dachte ich, dass ich die entsprechenden Teile umrahme. Nun habe ich leider das Problem, dass dann die geschlossene Klammer, die eigentlich der ersten Box galt, für die zweite Box verwendet wird. Somit überschneiden sich die beiden Boxen nicht mehr sondern ich erhalte eine innere und eine äußere Box.

Im Beispiel verzichte ich auf die mathematische Umgebung, da ich hoffe, dass das für das Problem unerheblich ist und so vielleicht im allgemeinen Fall anderen auch noch nützlich ist.

\documentclass[11pt,german]{scrartcl}

\usepackage[ngerman]{babel}
\usepackage{color}

\begin{document}
\fcolorbox{blue}{white}{Teil innerhalb der blauen Box, \fbox{ab hier beginnt die schwarze Box,
hier endet die blaue Box} und hier ist die schwarze zu Ende}
\end{document}


Leider führt das aber zu der oben beschriebenen Fehlinterpretation.

Wie löse ich denn am besten das Problem?

Gruß,
nutschi

rstuby
26-03-2012, 15:09
Irgendwie bezweifle ich, dass LaTeX das überhaupt kann.
Da liegen die Elemente doch eigentlich immer entweder vollständig eins im anderen oder nacheinander. Eine Überlappung ist weder bei Umgebungen noch bei Argumenten möglich.
Also müsste man für die Mitte irgendwie eine separate blau-schwarze Box definieren, aber wie man das mit hübschem Ergebnis hinkriegen könnte, ist mir nicht klar.

nutschi
28-03-2012, 12:16
Mir hat das Problem keine Ruhe gelassen, obwohl ich es bereits umgangen bin und anders gelöst habe. (s.u.)

Ich habe jetzt ein bisschen rumgefriemelt und gebastelt und habe eine in der Umsetzung zwar unsaubere, weil inkonsistente, im Ergebnis jedoch passable Lösung gefunden.


\documentclass[11pt,german]{scrartcl}

\usepackage[ngerman]{babel}
\usepackage{color}

\begin{document}

\color{red}\raisebox{-5pt}{\rule{0.4pt}{15pt}}%roter vertikaler Startstrich
\raisebox{-5pt}{\rule{4cm}{0.4pt}%roter unterer Strich
\rule{0.4pt}{15pt}%roter Endstrich
\hspace{-4.027cm}%Einzug oberer Strich
\raisebox{15pt}{\rule{4,027cm}{0.4pt}}}%roter oberer Strich
\hspace{-3,973cm}%Einzug Text
\color{black}Rot, %Inhalt in rein-roter Box
\fbox{schwarz, rot ende schwarz ende}

\end{document}

Die rote Farbe wählte ich nur wegen der besseren Unterscheidbarkeit.

Wenn man es jetzt noch schafft, die Linienlänge vom Textinhalt abhängig zu machen, dann könnte das Problem auch sauber gelöst werden. Dazu habe ich aber noch nichts gefunden.

Das ganze ließe sich dann auch als Makro in der Präambel definieren, falls es öfters benötigt wird.

Grüße,
nutschi

nutschi
28-03-2012, 12:20
Als Alternativlösung wählte ich statt einer roten Box um den Text einen roten Text.


\documentclass[11pt,german]{scrartcl}

\usepackage[ngerman]{babel}
\usepackage{color}

\begin{document}

\color{red}Lorem ipsum, \fcolorbox{black}{white}{schwarze Box, Ende rote "Box" \color{black} Ende Schwarze Box}

\end{document}

nutschi
28-03-2012, 18:15
Haha, ich habe jetzt eine Lösung gefunden, die die Länge automatisch dem Inhalt anpasst. Viele werden wahrscheinlich die Hände über den Kopf zusammenschlagen, weil es nicht mehr viel mit dem eigentlichen Gedanken von LaTeX gemein hat, ich möchte es euch aber dennoch nicht vorenthalten. :p



\documentclass[11pt,german]{scrartcl}

\usepackage[ngerman]{babel}
\usepackage{color}
\usepackage{calc}

%Definition neuer Längen, die abhängig vom Inhalt sind
\newlength\mylenw
\newlength\mylenh
\newlength\mylend
\newlength\mylentwow
\newlength\mylentwoh
\newlength\mylentwod
\newlength\mylentotalw

\newcommand{\vfbox}[4]{
\settowidth \mylenw{#3}
\settoheight \mylenh{#3}
\settodepth \mylend{#3}
\settowidth \mylentwow{#2}
\settoheight \mylentwoh{#2}
\settodepth \mylentwod{#2}
\settowidth \mylentotalw{#2\ \ \ #3}
\color{#1}\raisebox{-0.6\mylenh}{\rule{0.4pt}{1.9\mylenh}}%roter vertikaler Startstrich
\raisebox{-0.6\mylenh}{\rule{\mylentotalw}{0.4pt}%roter unterer Strich
\rule{0.4pt}{1.9\mylenh}%roter Endstrich
\hspace{-1.0054\mylentotalw}%Einzug oberer Strich
\raisebox{1.9\mylenh}{\rule{1.0054\mylentotalw}{0. 4pt}}}%roter oberer Strich
\hspace{-0.9943\mylentotalw}%Einzug Text
\color{black}#2 %Inhalt in rein-roter Box
\fbox{#3 #4}}

\begin{document}

\vfbox{red}%farbe der ersten box
{hier steht viel Text}%Inhalt nur in roter Box
{das ist besonders wichtig,}%Inhalt in rot-schwarzer Box
{das hier aber auch.}%Inhalt nur in schwarzer Box
\end{document}


Wie gesagt, schön ist sicherlich anders, aber es funktioniert. :cool: