Joerka
19-05-2010, 07:24
Guten Morgen zusammen,
ich brauche eine elegante Lösung für folgendes Problem: Ich habe verschiedene Objekte - bspw. einen Graphen und ein Textobjekt -, die ich beide in gewisser Weise (nebeneinander, übereinander) anordnen und in einem gemeinsamen Rahmen abbilden möchte.
Folgende Lösung mit TikZ gefiel mir nie wirklich, weil ich IN EINEM NODE erneut eine TikZ-UMGEBUNG ÖFFNE (was sagt der LaTeX-Knigge dazu?):
\documentclass{scrbook}
\usepackage{tikz}
\usetikzlibrary{positioning}
% Damit die Box (steht in erster Zeile) nicht eingerückt wird:
\setlength{\parindent}{0pt}
% Breite der umschließenden Box ( wird auf die beiden inneren Boxen aufgeteilt)
\newlength{\Seitenbreite}
\setlength{\Seitenbreite}{\textwidth}
\addtolength{\Seitenbreite}{-10mm}
\begin{document}
\begin{tikzpicture}
% Umschließende Box: DER RAHMEN
\node [draw,outer sep=0,inner sep=0]
{
\begin{tikzpicture}[node distance=0]
% Linke innere Box: OBJEKT 1
\node [anchor=north east, outer sep=0,inner sep=2mm,text width=0.6\Seitenbreite] (A) at (0,0)
{Linke Box... \hfill ...bis hier!};
% Rechte innere Box: OBJEKT 2
\node [anchor=north east, outer sep=0,inner sep=2mm,text width=0.4\Seitenbreite,right = of A]
{Rechte Box...*\hfill ...bis hier!};
\end{tikzpicture}
};
\end{tikzpicture}
\end{document}
Sollte man als Objekte nicht nur Text, sondern auch Graphen verwenden, öffnet man quasi eine TikZ-Umgebung in einer TikZ-Umgebung, die in einer TikZ-Umgebung geöffnet wurde (siehe unten).
Das führt in den meisten Fällen zu Fehlermeldungen: Entfernt man bspw. unter "Linke Box" die Zeichen ;% vor node [below right], kommt es noch zu einer Overfull-Meldung. Entfernt man zusätzlich darunter die Zeichen ;% vor node [above left], wird die Grafik nicht mehr korrekt dargestellt.
\documentclass{scrbook}
\usepackage{tikz}
\usetikzlibrary{positioning}
% Damit die Box (steht in erster Zeile) nicht eingerückt wird:
\setlength{\parindent}{0pt}
% Breite der umschließenden Box ( wird auf die beiden inneren Boxen aufgeteilt)
\newlength{\Seitenbreite}
\setlength{\Seitenbreite}{\textwidth}
\addtolength{\Seitenbreite}{-10mm}
\begin{document}
\begin{tikzpicture}
% Umschließende Box: DER RAHMEN
\node [draw,outer sep=0,inner sep=0]
{
\begin{tikzpicture}[node distance=0]
% Linke innere Box: OBJEKT 1
\node [anchor=north east, outer sep=0,inner sep=2mm,text width=0.6\Seitenbreite] (A) at (0,0)
{
\begin{tikzpicture}
\draw[->] (0,0) -- (6,0);% node [below right] {$x$};
\draw[->] (0,0) -- (0,5);% node [above left] {$y$};
\end{tikzpicture}
};
% Rechte innere Box: OBJEKT 2
\node [anchor=north east, outer sep=0,inner sep=2mm,text width=0.4\Seitenbreite,right = of A]
{
\begin{tikzpicture}
\draw[->] (4,5) -- (0,5);% node [above left] {$x$};
\draw[->] (4,5) -- (4,0);% node [below right] {$y$};
\end{tikzpicture}
};
\end{tikzpicture}
};
\end{tikzpicture}
\end{document}
Ich suche also nach einer eleganteren Möglichkeit, Objekte anordnen und einrahmen zu können (Rahmen möglichst über gesamte Textbreite).
Vielen Dank und einen frischen Start in den Tag!
ich brauche eine elegante Lösung für folgendes Problem: Ich habe verschiedene Objekte - bspw. einen Graphen und ein Textobjekt -, die ich beide in gewisser Weise (nebeneinander, übereinander) anordnen und in einem gemeinsamen Rahmen abbilden möchte.
Folgende Lösung mit TikZ gefiel mir nie wirklich, weil ich IN EINEM NODE erneut eine TikZ-UMGEBUNG ÖFFNE (was sagt der LaTeX-Knigge dazu?):
\documentclass{scrbook}
\usepackage{tikz}
\usetikzlibrary{positioning}
% Damit die Box (steht in erster Zeile) nicht eingerückt wird:
\setlength{\parindent}{0pt}
% Breite der umschließenden Box ( wird auf die beiden inneren Boxen aufgeteilt)
\newlength{\Seitenbreite}
\setlength{\Seitenbreite}{\textwidth}
\addtolength{\Seitenbreite}{-10mm}
\begin{document}
\begin{tikzpicture}
% Umschließende Box: DER RAHMEN
\node [draw,outer sep=0,inner sep=0]
{
\begin{tikzpicture}[node distance=0]
% Linke innere Box: OBJEKT 1
\node [anchor=north east, outer sep=0,inner sep=2mm,text width=0.6\Seitenbreite] (A) at (0,0)
{Linke Box... \hfill ...bis hier!};
% Rechte innere Box: OBJEKT 2
\node [anchor=north east, outer sep=0,inner sep=2mm,text width=0.4\Seitenbreite,right = of A]
{Rechte Box...*\hfill ...bis hier!};
\end{tikzpicture}
};
\end{tikzpicture}
\end{document}
Sollte man als Objekte nicht nur Text, sondern auch Graphen verwenden, öffnet man quasi eine TikZ-Umgebung in einer TikZ-Umgebung, die in einer TikZ-Umgebung geöffnet wurde (siehe unten).
Das führt in den meisten Fällen zu Fehlermeldungen: Entfernt man bspw. unter "Linke Box" die Zeichen ;% vor node [below right], kommt es noch zu einer Overfull-Meldung. Entfernt man zusätzlich darunter die Zeichen ;% vor node [above left], wird die Grafik nicht mehr korrekt dargestellt.
\documentclass{scrbook}
\usepackage{tikz}
\usetikzlibrary{positioning}
% Damit die Box (steht in erster Zeile) nicht eingerückt wird:
\setlength{\parindent}{0pt}
% Breite der umschließenden Box ( wird auf die beiden inneren Boxen aufgeteilt)
\newlength{\Seitenbreite}
\setlength{\Seitenbreite}{\textwidth}
\addtolength{\Seitenbreite}{-10mm}
\begin{document}
\begin{tikzpicture}
% Umschließende Box: DER RAHMEN
\node [draw,outer sep=0,inner sep=0]
{
\begin{tikzpicture}[node distance=0]
% Linke innere Box: OBJEKT 1
\node [anchor=north east, outer sep=0,inner sep=2mm,text width=0.6\Seitenbreite] (A) at (0,0)
{
\begin{tikzpicture}
\draw[->] (0,0) -- (6,0);% node [below right] {$x$};
\draw[->] (0,0) -- (0,5);% node [above left] {$y$};
\end{tikzpicture}
};
% Rechte innere Box: OBJEKT 2
\node [anchor=north east, outer sep=0,inner sep=2mm,text width=0.4\Seitenbreite,right = of A]
{
\begin{tikzpicture}
\draw[->] (4,5) -- (0,5);% node [above left] {$x$};
\draw[->] (4,5) -- (4,0);% node [below right] {$y$};
\end{tikzpicture}
};
\end{tikzpicture}
};
\end{tikzpicture}
\end{document}
Ich suche also nach einer eleganteren Möglichkeit, Objekte anordnen und einrahmen zu können (Rahmen möglichst über gesamte Textbreite).
Vielen Dank und einen frischen Start in den Tag!