Tikz Figuren in Schleife als subcaptionbox einfügen.

Tabellen und Grafiken erstellen und anordnen


godi
Forum-Fortgeschrittener
Forum-Fortgeschrittener
Beiträge: 75
Registriert: Mi 11. Feb 2015, 13:49

Tikz Figuren in Schleife als subcaptionbox einfügen.

Beitrag von godi »

Hallo,

ich generiere mir mit Matlab tikz-figuren.

Zum einbinden in Latex habe ich mir ein necommand bzw def geschrieben, dass diese Grafiken in subcaptionboxen einfügt.
Es sollen zwei nebeneinander Dargestellt werden und dann soll die nächste Zeile beginnen. Dies funktioniert auch schon.

Hier mein Beispiel:
\documentclass[12pt, a4paper]{scrreprt}
\usepackage{tikz}
\usepackage{pgfplots} %Für Tikz Plot
\usepackage{subcaption}

% Kommando zum Einfügen von mehreren tikz Plots
% Argument 1: Name und Label der Abbildung ('fig:' wird automatisch angefügt).
% Argument 2: Information über die Abbildung (steht unter der Abbildung und im Verzeichnis)
% Argument 3: Informationen über die SubAbbildung in der Form {Info1,Info2,...}
\newcounter{iPlot}
\makeatletter
\def\PlotSeries#1#2#3{
	\setcounter{iPlot}{1}
	\begin{figure}[H]
  		\begin{minipage}{\linewidth}
  		\captionsetup{type=figure}	
			{\@for\info:=#3\do{
				\begin{minipage}[b]{0.5\textwidth}
				\captionsetup{type=figure}
				\subcaptionbox{\info}{%		
					\input{#1_\arabic{iPlot}.tikz}%
					\label{fig:#1_\arabic{iPlot}}
				}													
				\end{minipage}
				\vspace{2mm}				
				\stepcounter{iPlot}
			}}
		\captionof{figure}{#2}
		\label{fig:#1}		
		\end{minipage}			
	\end{figure}
}
\makeatother

\begin{document}
\PlotSeries{Plot}{Eine Serie von Abbildungen.}{Erste Unterabbildung,Zweite Unterabbildung,Dritte Unterabbildung,Vierte Unterabbildung}

Abbildung \ref{fig:Plot} zeigt eine Serie von Abbildungen, davon ist \ref{fig:Plot_2} die zweite Abbildung.

\end{document}

Meine Probleme:
1. Die Hauptabbildung hat die Abbildungsnummer 5, sollte aber 1 sein
2. Die Unterabbildungen haben alle das Label (a) und nicht aufsteigend.
3. Eine Referenz auf die Unterabbildungen funktioniert nicht.
4. Die zweite Zeile der Abbildungen ist leicht nach rechts versetzt.

Ich habe da Gestern und Heute schon herumprobiert. Leider habe ich noch keine Lösungen gefunden.

Wäre super wenn mir da wer weiterhilft!

Im Anhang befindet sich das Bsp + 4 tikz Abbildungen.

godi
Dateianhänge
TikzSubplot.zip
(55.64 KiB) 236-mal heruntergeladen

esdd
Forum-Meister
Forum-Meister
Beiträge: 2561
Registriert: So 7. Feb 2010, 16:36

Beitrag von esdd »

Deine Abbildungen sind etwas zu breit, um sie jeweils auf halber Textbreite unterzubringen. Dafür bekommt man entsprechend 4 Meldungen über zu breite Boxen.

Wenn Du ohnehin pgf verwendest, dann kannst Du die Schleife auch über \foreach realisieren. Außerdem sind da ein paar signifikante Leerzeichen drin gewesen und \vspace im horizontalen Modus ist auch nicht so das wahre. Die ganzen \captionsetup{type=figure} und das \captionof{figure}{...} haben jeweils den figure Zähler erhöht.
\documentclass[12pt]{scrreprt}
\usepackage{pgfplots}% lädt auch tikz
\pgfplotsset{compat=newest}
\usepackage{subcaption}

% Kommando zum Einfügen von meheren tikz Plots
% Argument 1: Name und Label der Abbildung ('fig:' wird automatisch angefügt).
% Argument 2: Information über die Abbildung (steht unter der Abbildung und im Verzeichnis)
% Argument 3: Informationen über die SubAbbildung in der Form {Info1,Info2,...}
\newcommand\newsubplotrow{\\[5mm]}
\newcommand\PlotSeries[3]{
  \begin{center}
    \begin{minipage}{\linewidth}
    \centering
    \setcaptiontype{figure}
    \foreach[count=\i] \info in {#3}{%
      \begin{minipage}[b]{0.5\textwidth}
        \subcaptionbox{\info\label{fig:#1_\i}}{\input{#1_\i.tikz}}
      \end{minipage}%
      \pgfmathparse{0==mod(\i,2)?"\noexpand\newsubplotrow":"\noexpand\hfill"}\pgfmathresult%
    }
    \caption{#2}
    \label{fig:#1}
    \end{minipage}
  \end{center}
}
\begin{document}
\chapter{Plots}
\PlotSeries{Plot}{Eine Serie von Abbildungen.}{Erste Unterabbildung,Zweite Unterabbildung,Dritte Unterabbildung,Vierte Unterabbildung}

Abbildung \ref{fig:Plot} zeigt eine Serie von Abbildungen, davon ist \ref{fig:Plot_2} die zweite Abbildung.
\end{document}
Gruß
Elke

Bild
Dateianhänge
gl_subplots.png
gl_subplots.png (28.98 KiB) 1715 mal betrachtet
Zuletzt geändert von esdd am Mi 11. Feb 2015, 20:48, insgesamt 1-mal geändert.

godi
Forum-Fortgeschrittener
Forum-Fortgeschrittener
Beiträge: 75
Registriert: Mi 11. Feb 2015, 13:49

Beitrag von godi »

Herzlichen Dank! :)
So habe ich mir das vorgestellt. :)

Ja die Warnings ignoriere ich vorerst mal alle.
Ich bin immer froh wenn es keine errors gibt. ;)

Mit der foreach Schleife habe ich auch ein paar Stunden verbracht.
Die wollte mich aber nicht, da habe ich immer errors gehabt. Warum auch immer...

"signifikante Leerzeichen"?
Stören Leerzeichen? Ich habe mir gedacht die werden automatisch entfernt.

Die ganzen \captionsetup usw habe ich beim herumprobieren eingefügt.
Irgendwie ist es immer mehr geworden und dadurch auch immer schlechter.

Naja so ist das wenn man (noch) zu wenig Ahnung hat. ;)

Vielen Dank nochmals!

godi
Forum-Fortgeschrittener
Forum-Fortgeschrittener
Beiträge: 75
Registriert: Mi 11. Feb 2015, 13:49

Beitrag von godi »

Ich habe noch eine Frage, muss das erste \centering vorhanden sein?
Damit wird auch der folgende Text zentriert. Ich habe es momentan entfernt, und es sieht gleich aus wie vorher.

esdd
Forum-Meister
Forum-Meister
Beiträge: 2561
Registriert: So 7. Feb 2010, 16:36

Beitrag von esdd »

Ich habe den Code oben nochmal geändert und das erste \centering durch eine center Umgebung ersetzt. Dann wird der nachfolgende Text nicht mehr zentriert und außerdem wird um die Abbildungen etwas zusätzlicher Platz eingefügt. Würde man die Zentrierung ganz weglassen, dann müsste vor der minipage ein \noindent eingefügt werden, da ein gegebenenfalls vorhandener Absatzeinzug die minipage nach rechts in den Rand schiebt und damit eine weitere zu volle Box entsteht.

Hier ist jetzt noch ein Link, bei dem Du Dich über signifikante Leerzeichen informieren kannst.

Gruß
Elke

Antworten