Seite 1 von 1

Tikz Figuren in Schleife als subcaptionbox einfügen.

Verfasst: Mi 11. Feb 2015, 14:07
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

Verfasst: Mi 11. Feb 2015, 16:01
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

Verfasst: Mi 11. Feb 2015, 17:46
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!

Verfasst: Mi 11. Feb 2015, 17:57
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.

Verfasst: Mi 11. Feb 2015, 21:00
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