Hallo,
ich setze ein TikZ-Bild und ein Listing in einer Figure mittels Hier mein Minimalbeispiel: Open in writeLaTeX
\documentclass{scrartcl} \usepackage{listings} \usepackage{tikz} \usepackage{xcolor} \usepackage{subfig} \usepackage{filecontents} \lstset{numbers=none,frame=none,backgroundcolor=,basicstyle=\ttfamily \footnotesize,captionpos=b,escapeinside= {@}{@},aboveskip=7pt,abovecaptionskip=3pt,belowskip=3pt,boxpos=c,showspaces=false,showtabs=false,tabsize=4,breaklines=true,columns=flexible,mathescape} % RoleModel \lstdefinelanguage{Roles} {keywords={RoleModel, ROLE},keywords=[2]{input, super, transitive, reflexive, optional},morestring=[s]{[}{]}} \lstdefinestyle{Roles} {language=Roles,keywordstyle=\color{role}\bfseries,keywordstyle= [2]\color{roleKeyword}} \usetikzlibrary{positioning} \usetikzlibrary{arrows.meta} \usetikzlibrary{shapes} \usetikzlibrary{graphs} \usetikzlibrary{quotes} \begin{document} \definecolor{role}{cmyk}{1.0, 0.417, 0.0, 0.247} \definecolor{roleKeyword}{cmyk}{0.3, 0.7, 0.0, 0.373} \tikzset{ role/.style = {rounded rectangle, minimum size=6mm, very thick, draw=role, top color=white,bottom color=role!20, font=\sffamily\scriptsize,align=center,text=black}, skip loop/.style = {to path={-- ++(0,#1) -| (\tikztotarget)}}, hv/.style = {to path={-| (\tikztotarget) \tikztonodes}}, vh/.style = {to path={|- (\tikztotarget) \tikztonodes}}, comp/.style = {Diamond-}, ass/.style = {-{Straight Barb[angle'=45,round]}}, imp/.style = {-{Triangle[open,length=7pt]}}, proh/.style = {{Bar[sep=1pt]}-{Bar[sep=1pt]}} } \begin{filecontents*}{repres.role} RoleModel ExtractX { ROLE OrigContainer; input ROLE Extractee; ROLE NewContainer (newName); ROLE ContainerContainer; transitive : OrigContainer [1..1] <>- Extractee extracts [0..*]; transitive : NewContainer [1..1] <>- Extractee moved [0..*]; transitive : ContainerContainer [1..1] <>- NewContainer target [1..1]; transitive : ContainerContainer [1..1] <>- OrigContainer source [1..*]; transitive : OrigContainer [1..*] -- NewContainer reference [1..*]; } \end{filecontents*} \begin{figure} \centering \subfloat[Graphical representation.]{ \label{subfig:RolesGraph} \begin{tikzpicture}[node distance=9mm and 0mm,thick,black!50,every edge/.style= {rounded corners,draw=black!50,text=black,font=\sffamily\scriptsize,near end}] \node[role] (ContainerContainer) {ContainerContainer}; \node[role] (OriginalContainer) [below left=of ContainerContainer] {OriginalContainer}; \node[role] (NewContainer) [below right=of ContainerContainer] {NewContainer}; \node[role] (Extractee) [below right=of OriginalContainer,xshift=15pt] {Extractee}; \path (ContainerContainer) edge[comp,hv,"target"] (NewContainer) (ContainerContainer) edge[comp,hv,"source"] (OriginalContainer) (NewContainer) edge[comp,vh,"moved"] (Extractee) (OriginalContainer) edge[ass] node[above,xshift=-5pt] {reference} (NewContainer) (OriginalContainer) edge[comp,vh] node[below] {extracts} (Extractee); \end{tikzpicture} } \qquad \subfloat[Textual representation.]{ \label{subfig:RolesText} \parbox{0.45\textwidth} {\lstinputlisting[style=Roles,numbers=none,frame=none,backgroundcolor=,basicstyle=\ttfamily \footnotesize]{repres.role}} } \caption{Different representations.} \label{fig:representations} \end{figure} \end{document} gefragt 26 Mai '14, 17:20 ErnstZ |
Für den Fall, dass es unbedingt Open in writeLaTeX
\documentclass{scrartcl} \usepackage{listings} \usepackage{tikz} \usepackage{subfig} \usepackage{varwidth} \lstset{numbers=none,frame=none,backgroundcolor=, basicstyle=\ttfamily\footnotesize, captionpos=b,escapeinside={@}{@}, aboveskip=7pt,abovecaptionskip=3pt,belowskip=3pt, boxpos=c,showspaces=false,showtabs=false,tabsize=4,breaklines=true, columns=flexible,mathescape} % RoleModel \lstdefinelanguage{Roles}{ keywords={RoleModel, ROLE}, keywords=[2]{input, super, transitive, reflexive,optional},morestring=[s]{[}{]}} \lstdefinestyle{Roles}{language=Roles,keywordstyle=\color{role}\bfseries, keywordstyle= [2]\color{roleKeyword}} \usetikzlibrary{positioning} \usetikzlibrary{arrows.meta} \usetikzlibrary{shapes} \usetikzlibrary{graphs} \usetikzlibrary{quotes} \newsavebox\mybox \begin{document} \definecolor{role}{cmyk}{1.0, 0.417, 0.0, 0.247} \definecolor{roleKeyword}{cmyk}{0.3, 0.7, 0.0, 0.373} \tikzset{ role/.style = {rounded rectangle, minimum size=6mm, very thick, draw=role, top color=white,bottom color=role!20, font=\sffamily\scriptsize, align=center,text=black}, skip loop/.style = {to path={-- ++(0,#1) -| (\tikztotarget)}}, hv/.style = {to path={-| (\tikztotarget) \tikztonodes}}, vh/.style = {to path={|- (\tikztotarget) \tikztonodes}}, comp/.style = {Diamond-}, ass/.style = {-{Straight Barb[angle'=45,round]}}, imp/.style = {-{Triangle[open,length=7pt]}}, proh/.style = {{Bar[sep=1pt]}-{Bar[sep=1pt]}} } \begin{figure} % Speichern des Listings in einer Box \savebox\mybox[0.45\textwidth]{% \lstinputlisting[style=Roles]{repres.role}% } \centering \subfloat[Graphical representation.]{ \label{subfig:RolesGraph} % Einfügen des Bildes in einer varwidth oder minipage Umgebung mit gleicher Höhe % wie das Listing \begin{varwidth}[c][\dimexpr\ht\mybox+\dp\mybox\relax][c]{0.45\linewidth} \begin{tikzpicture}[ node distance=9mm and 0mm, thick,black!50, every edge/.style={ rounded corners, draw=black!50, text=black, font=\sffamily\scriptsize, near end }] \node[role] (ContainerContainer) {ContainerContainer}; \node[role] (OriginalContainer) [below left=of ContainerContainer] {OriginalContainer}; \node[role] (NewContainer) [below right=of ContainerContainer] {NewContainer}; \node[role] (Extractee) [below right=of OriginalContainer,xshift=15pt] {Extractee}; \path (ContainerContainer) edge[comp,hv,"target"] (NewContainer) (ContainerContainer) edge[comp,hv,"source"] (OriginalContainer) (NewContainer) edge[comp,vh,"moved"] (Extractee) (OriginalContainer) edge[ass] node[above,xshift=-5pt] {reference} (NewContainer) (OriginalContainer) edge[comp,vh] node[below] {extracts}(Extractee); \end{tikzpicture} \end{varwidth} } \qquad \subfloat[Textual representation.]{ \label{subfig:RolesText} \usebox\mybox% Ausgabe der Box mit dem Listing } \caption{Different representations.} \label{fig:representations} \end{figure} \end{document} beantwortet 27 Mai '14, 15:17 esdd Ich danke dir vielmals! So funktioniert es super. Eine Bitte hätte ich noch. Kannst du mir erklären, was die Befehle in der Breitenangabe
(27 Mai '14, 16:44)
ErnstZ
Siehe auch Was macht relax?
(27 Mai '14, 17:29)
esdd
Sorry, dass ich da nochmal nachhake, aber nach meinem bisherigen Verständnis haben räumliche Objekte Höhe, Breite und Tiefe. Das Listing hier liegt doch aber nur in der Ebene, hat also nur eine Breite und eine Höhe. Was genau ist denn mit Tiefe gemeint?
(28 Mai '14, 09:37)
ErnstZ
Wenn man die Box mit dem Listing einfach in einen normalen Text einfügt, dann liegt ein Teil der Box oberhalb der Grundlinie (Höhe)und der Rest unterhalb der Grundlinie (Tiefe). Die Gesamthöhe der Box ist dann die Summe aus Höhe und Tiefe.
(28 Mai '14, 10:53)
esdd
Verstehe, vielen Dank!
(28 Mai '14, 10:54)
ErnstZ
|
Nur eine schnelle Idee und vielleicht nicht die beste, aber Du könntest das alles einfach in eine Open in writeLaTeX
\begin{figure} \centering \begin{tabular}{*{2}{m{.45\linewidth}}} <Bild> & <Code> \\ <Beschriftung Bild> & <Beschriftung Code> \end{tabular} \caption{Different representations.} \label{fig:representations} \end{figure} Ich hab statt Hier der komplette Code: Open in writeLaTeX
\documentclass{scrartcl} \usepackage{listings} \lstset{ numbers=none, frame=none, backgroundcolor=, basicstyle=\ttfamily\footnotesize, captionpos=b, escapeinside={@}{@}, aboveskip=7pt, abovecaptionskip=3pt, belowskip=3pt, boxpos=c, showspaces=false, showtabs=false, tabsize=4, breaklines=true, columns=flexible, mathescape } \lstdefinelanguage{Roles}{ keywords={RoleModel, ROLE}, keywords=[2]{input, super, transitive, reflexive, optional}, morestring=[s]{[}{]} } \lstdefinestyle{Roles}{ language=Roles, keywordstyle=\color{role}\bfseries, keywordstyle=[2]\color{roleKeyword} } \usepackage{tikz} \usetikzlibrary{positioning,arrows.meta,shapes,graphs,quotes} \definecolor{role}{cmyk}{1.0, 0.417, 0.0, 0.247} \definecolor{roleKeyword}{cmyk}{0.3, 0.7, 0.0, 0.373} \tikzset{ role/.style = { rounded rectangle, minimum size=6mm, very thick, draw=role, top color=white, bottom color=role!20, font=\sffamily\scriptsize, align=center, text=black }, skip loop/.style = {to path={-- ++(0,#1) -| (\tikztotarget)}}, hv/.style = {to path={-| (\tikztotarget) \tikztonodes}}, vh/.style = {to path={|- (\tikztotarget) \tikztonodes}}, comp/.style = {Diamond-}, ass/.style = {-{Straight Barb[angle'=45,round]}}, imp/.style = {-{Triangle[open,length=7pt]}}, proh/.style = {{Bar[sep=1pt]}-{Bar[sep=1pt]}} } \usepackage{subcaption,array} \begin{document} \begin{figure} \centering \begin{tabular}{*{2}{m{.45\linewidth}}} \begin{tikzpicture}[ node distance=9mm and 0mm, thick,black!50, every edge/.style={ rounded corners, draw=black!50, text=black, font=\sffamily\scriptsize, near end }] \node[role] (ContainerContainer) {ContainerContainer}; \node[role] (OriginalContainer) [below left=of ContainerContainer] {OriginalContainer}; \node[role] (NewContainer) [below right=of ContainerContainer] {NewContainer}; \node[role] (Extractee) [below right=of OriginalContainer,xshift=15pt] {Extractee}; \path (ContainerContainer) edge[comp,hv,"target"] (NewContainer) (ContainerContainer) edge[comp,hv,"source"] (OriginalContainer) (NewContainer) edge[comp,vh,"moved"] (Extractee) (OriginalContainer) edge[ass] node[above,xshift=-5pt] {reference} (NewContainer) (OriginalContainer) edge[comp,vh] node[below] {extracts}(Extractee); \end{tikzpicture} & \lstinputlisting[style=Roles]{repres.role} \\ \subcaption{Graphical representation.\label{subfig:RolesGraph}} & \subcaption{Textual representation.\label{subfig:RolesText}} \end{tabular} \caption{Different representations.} \label{fig:representations} \end{figure} \end{document} Edit: da das Open in writeLaTeX
\begin{figure} \centering \captionsetup{skip=-15pt} \captionsetup[subfigure]{skip=-20pt} ... Ob das auch als dokumentweite Option günstig ist, lässt sich schwer beurteilen (obwohl ich das eher bezweifle). Hier bleibt es durch die beantwortet 26 Mai '14, 19:45 cgnieder Erstmal danke für deine Lösung. Sie funktioniert für das obige Beispiel ganz gut, allerdings kann ich sie trotzdem nicht in meinem eigentlichen Dokument verwenden, da mir angezeigt wird, dass packages subcaption und subfig nicht kompatibel zueinander sind und nicht gleichzeitig verwendet werden können. Subfig benötige ich aber an anderen Stellen trotzdem definitiv noch.
(27 Mai '14, 12:42)
ErnstZ
Bist Du Dir da ganz sicher, dass Du
(27 Mai '14, 12:51)
cgnieder
um auf deine andere Frage zu antworten Clemens: ich finde subfig konsistenter bzw. eleganter, da es die voreingestellten Caption-Abstände beachtet. Per Tabular und subcaption ist es halt wirklich nur ein Workaround und die Abstände sind erstmal die der tabular.
(27 Mai '14, 13:32)
ErnstZ
@ErnstZ
(27 Mai '14, 13:45)
cgnieder
Meine Antwort ist aber auch nur ein Vorschlag... wenn er Dir nicht völlig passt: vielleicht gibt es ja noch weitere Antworten :) Es ist übrigens keine gute Idee, Codeblöcke in Kommentaren zu posten: das hat den Effekt, dass nur noch die ersten sechs Kommentare angezeigt werden und die weiteren nicht mehr zu sehen sind...
(27 Mai '14, 13:47)
cgnieder
Ja, das möchte ich gar nicht bezweifeln. Aber was sagst du zu den Abständen, die durch eine Tabular dann doch anders sind?
(27 Mai '14, 13:47)
ErnstZ
1
@ErnstZ ich habe Deinen Kommentar mit dem Code entfernt, damit man die anderen Kommentare wieder lesen kann ... die Abstände schaue ich mir später nochmal an und sag dann vielleicht was und kann meine Antwort ergänzen.
(27 Mai '14, 20:51)
cgnieder
Alles klar. Habe ich auch schon mitbekommen, dass mein Kommentar nicht mehr zu sehen war. Nun weiß ich Bescheid für die Zukunft.
(28 Mai '14, 09:34)
ErnstZ
Ergebnis 5 von 8
show 3 more comments
|
Willkommen auf der TeXwelt!