Seite 1 von 2

Listingbreite und block position

Verfasst: Di 17. Jan 2012, 15:23
von GuenterW.
Hallo!

Hier ein Minimalbeispiel:
\documentclass{beamer}

\usepackage[ngerman]{babel}
\usepackage[latin1]{inputenc}
\usepackage{amsmath,amsfonts,amssymb}
\usepackage{mathtools} 
\usepackage{listings}
\usepackage{tikz}
\usetikzlibrary{arrows,decorations.pathmorphing,backgrounds,fit,automata,shapes}

\usetheme{Frankfurt}

\setbeamertemplate{footline}[frame number] %Seitenzahlen in Fußzeile einfügen

\lstset{
basicstyle=\ttfamily,
numbers=left,
showstringspaces=false,
language=Haskell,
commentstyle=\itshape\color{darkgray},
keywordstyle=\bfseries\color{red},
stringstyle=\color{green},
breaklines=true,
breakautoindent=true,
columns=flexible,
frame=single,
captionpos=b,
xleftmargin=1.5em,
xrightmargin=1em,
aboveskip=10pt,
linewidth = 11cm
}

\begin{document}

\begin{frame}[fragile]
\frametitle{Size-Change Graphs}
\begin{itemize}
	\item Help us to keep track of decreasing data values
	\item Capture information about one function call
\end{itemize}
Examples:
\begin{columns}
\column{0.5\textwidth}
	\begin{block}{}	
	\begin{center}
		\begin{lstlisting}[mathescape=true, linewidth = 6.5cm, numbers = none, frame = none, basicstyle=\small, aboveskip = 5pt, belowskip = 5pt]
			f(a,b) = ... else 1:g(a,b-1,a)
		\end{lstlisting}
		\scalebox{0.8}{
		\begin{tikzpicture}{->,>=stealth',shorten >=1pt,auto,semithick}
		\tikzstyle{every state}=[minimum size=10pt,fill=white,text=black, node distance=1cm]
		\tikzstyle{every pin edge}=[<-,shorten <=1pt]
     
		\node[state,shape=circle]             (a)                {$a$};
		\node[state,shape=circle]             (b) at (0, -1.5) {$b$};
		\node[state,shape=circle]             (c) at (1.5,0.75) {$c$};
		\node[state,shape=circle]             (d) at (1.5,-0.75) {$d$};
   	    \node[state,shape=circle]             (e) at (1.5,-2.25) {$e$};
    
    	\path[->]    (a) edge node[above] {$\downarrow$} (c)
    	             (a) edge node[above, very near end] {$\downarrow$} (e)
    	             (b) edge node[above, near end] {$\downarrow$}   (d)  
    
              ;
		\end{tikzpicture}}
	\end{center}
	\end{block}

\column{0.5\textwidth}
   \begin{block}{}
   	\begin{flushleft}
   		\begin{lstlisting}[mathescape=true, linewidth = 6.5cm, numbers = none, frame = none, basicstyle=\small, aboveskip = 5pt, belowskip = 5pt]
			g(c,d,e) = ... else 2:g(c,d-1,e$\cdot$c)
		\end{lstlisting}
   	\end{flushleft}
	\begin{center}
		\scalebox{0.8}{
		\centering
		\begin{tikzpicture}{->,>=stealth',shorten >=1pt,auto,semithick}
		\tikzstyle{every state}=[minimum size=16pt,fill=white,text=black, node distance=1.5cm]
		\tikzstyle{every pin edge}=[<-,shorten <=1pt]
     
		\node[state,shape=circle]             (c)                {$c$};
		\node[state,shape=circle]             (d) [below of = c] {$d$};
		\node[state,shape=circle]             (e) [below of = d] {$e$};
		\node[state,shape=circle]             (c1)[right of = c] {$c$};
    	\node[state,shape=circle]             (d1)[right of = d] {$d$};
    	\node[state,shape=circle]             (e1) [right of = e] {$e$}; 
    
   	    \path[->]    (c) edge node[above] {$\downarrow$} (c1)
        	         (d) edge node[above] {$\downarrow$} (d1)
              ;
		\end{tikzpicture}}
	\end{center}
  \end{block}
\end{columns}

\begin{itemize}
\item hier ist ein Item
\item und hier noch eines
\end{itemize}

\end{frame}

\end{document}
Und hier das Ergebnis:Bild

Wie man sieht, geht das zweite Listing über den Block rechts hinaus und auch das erste Listing ist relativ weit nach rechts gerückt. Ich habe ja schon versucht, das ganze mit flushleft nach links zu verschieben, hat aber nichts geholfen. Wie mache ich es richtig?

Zweites Problem ist, dass die blocks wegen dem "Examples" auf unterschiedlichen höhen Anfangen und unterschiedlich groß sind. Wie kann ich die Höhe und Größe gleich gestalten?

Danke!
Guenter

Verfasst: Mi 18. Jan 2012, 18:11
von bloodworks
Hallo columns bekommst du mit dem Parameter auf eine Höhe, der verzögerte Anfang der listings liegt an den white spaces (b wegen automatischen Einzug des Editors). Die gleiche Höhe wird schwieriger. Imho kennt block keine Option für die Höhe. beamercolorbox aber schon. Also eben diese Ebene:

[code]\documentclass{beamer}

\usepackage[ngerman]{babel}
\usepackage[latin1]{inputenc}
\usepackage{amsmath,amsfonts,amssymb}
\usepackage{mathtools}
\usepackage{listings}
\usepackage{tikz}
\usetikzlibrary{arrows,decorations.pathmorphing,backgrounds,fit,automata,shapes}

\usetheme{Frankfurt}

\setbeamertemplate{footline}[frame number] %Seitenzahlen in Fußzeile einfügen

\lstset{
basicstyle=\ttfamily,
numbers=left,
showstringspaces=false,
language=Haskell,
commentstyle=\itshape\color{darkgray},
keywordstyle=\bfseries\color{red},
stringstyle=\color{green},
breaklines=true,
breakautoindent=true,
columns=flexible,
frame=single,
captionpos=b,
}

\begin{document}

\begin{frame}[fragile]
\frametitle{Size-Change Graphs}
\begin{itemize}
\item Help us to keep track of decreasing data values
\item Capture information about one function call
\end{itemize}
Examples:
\begin{columns}
\column{0.5\textwidth}
\begin{beamercolorbox}[ht=5cm, rounded=true, shadow=true]{block body}
\begin{center}
\begin{lstlisting}[mathescape=true, linewidth=\textwidth, numbers = none, frame = none, basicstyle=\small, ]
f(a,b) = ... else 1:g(a,b-1,a)
\end{lstlisting}
\begin{tikzpicture}
\tikzstyle{every state}=[minimum size=10pt,fill=white,text=black, node distance=1cm]
\tikzstyle{every pin edge}=[<-,shorten <=1pt]

\node[state,shape=circle] (a) {$a$};
\node[state,shape=circle] (b) at (0, -1.5) {$b$};
\node[state,shape=circle] (c) at (1.5,0.75) {$c$};
\node[state,shape=circle] (d) at (1.5,-0.75) {$d$};
\node[state,shape=circle] (e) at (1.5,-2.25) {$e$};

\path[->] (a) edge node[above] {$\downarrow$} (c)
(a) edge node[above, very near end] {$\downarrow$} (e)
(b) edge node[above, near end] {$\downarrow$} (d)

;
\end{tikzpicture}
\end{center}
\end{beamercolorbox}

\column{0.5\textwidth}
\begin{beamercolorbox}[ht=5cm, rounded=true, shadow=true]{block body}
\begin{lstlisting}[mathescape=true, linewidth = \textwidth, numbers = none, frame = none, basicstyle=\small, aboveskip = 5pt, belowskip = 5pt]
g(c,d,e) = ... else 2:g(c,d-1,e$\cdot$c)
\end{lstlisting}

\begin{center}
\scalebox{0.8}{
\begin{tikzpicture}
\tikzstyle{every state}=[minimum size=16pt,fill=white,text=black, node distance=1.5cm]
\tikzstyle{every pin edge}=[<-,shorten <=1pt]

\node[state,shape=circle] (c) {$c$};
\node[state,shape=circle] (d) [below of = c] {$d$};
\node[state,shape=circle] (e) [below of = d] {$e$};
\node[state,shape=circle] (c1)[right of = c] {$c$};
\node[state,shape=circle] (d1)[right of = d] {$d$};
\node[state,shape=circle] (e1) [right of = e] {$e$};

\path[->] (c) edge node[above] {$\downarrow$} (c1)
(d) edge node[above] {$\downarrow$} (d1)
;
\end{tikzpicture}}
\end{center}
\end{beamercolorbox}
\end{columns}

\begin{itemize}
\item hier ist ein Item
\item und hier noch eines
\end{itemize}

\end{frame}

\end{document}
[/code]


Das ist jetzt nicht wirklich kein Minimalbeispiel , aber ich habe jetzt keine Lust das umzubauen.

Wegen den white spaces, kann es sein, dass es bei kopieren wieder zerbricht, deshalb im Zweifelsfall selber darauf achten.

Verfasst: Mi 18. Jan 2012, 19:41
von GuenterW.
hallo bloodworks,

vielen Dank für deine Antwort. Mit diesem Ansatz
- beginnen die Blöcke auf gleicher Höhe
- sind die Blöcke selbst gleich hoch

Allerdings gibt es in den Listings einen Zeilenumbruch, und dabei habe ich es jetzt so gemacht, dass der Text in den Listings im Editor direkt mit der Zeile anfängt, also nicht eingerückt ist.
Ich dachte dann, dass liegt vielleicht daran, dass die listings auch in der center-Umgebung drinstecken. Wenn ich die allerdings davor schiebe, dann stehen die listings auf einmal über dem block!
"Abhilfe" hat jetzt gebracht breaklines auf false zu setzen. Damit sind die Listings wenigstens wieder in dem block. Auch mit den Abständen listing-block-tikzpicture stimmt irgendetwas nicht.
\documentclass{beamer} 

\usepackage[ngerman]{babel} 
\usepackage[latin1]{inputenc} 
\usepackage{amsmath,amsfonts,amssymb} 
\usepackage{mathtools} 
\usepackage{listings} 
\usepackage{tikz} 
\usetikzlibrary{arrows,decorations.pathmorphing,backgrounds,fit,automata,shapes} 

\usetheme{Frankfurt} 

\setbeamertemplate{footline}[frame number] %Seitenzahlen in Fußzeile einfügen 

\lstset{ 
basicstyle=\ttfamily, 
numbers=left, 
showstringspaces=false, 
language=Haskell, 
commentstyle=\itshape\color{darkgray}, 
keywordstyle=\bfseries\color{red}, 
stringstyle=\color{green}, 
breaklines=false, 
breakautoindent=true, 
columns=flexible, 
frame=single, 
captionpos=b, 
} 

\begin{document} 

\begin{frame}[fragile] 
\frametitle{Size-Change Graphs} 
\begin{itemize} 
   \item Help us to keep track of decreasing data values 
   \item Capture information about one function call 
\end{itemize} 
Examples: 
\begin{columns} 
\column[tt]{0.5\textwidth} 
\begin{beamercolorbox}[ht=5cm, rounded=true, shadow=true]{block body} 
\begin{lstlisting}[mathescape=true, linewidth=\textwidth, numbers = none, frame = none, basicstyle=\small]
f(a,b) = ... else 1:g(a,b-1,a) 
\end{lstlisting} 
   \begin{center}   
      \begin{tikzpicture} 
      \tikzstyle{every state}=[minimum size=10pt,fill=white,text=black, node distance=1cm] 
      \tikzstyle{every pin edge}=[<-,shorten <=1pt] 
      
      \node[state,shape=circle]             (a)                {$a$}; 
      \node[state,shape=circle]             (b) at (0, -1.5) {$b$}; 
      \node[state,shape=circle]             (c) at (1.5,0.75) {$c$}; 
      \node[state,shape=circle]             (d) at (1.5,-0.75) {$d$}; 
          \node[state,shape=circle]             (e) at (1.5,-2.25) {$e$}; 
    
       \path[->]    (a) edge node[above] {$\downarrow$} (c) 
                    (a) edge node[above, very near end] {$\downarrow$} (e) 
                    (b) edge node[above, near end] {$\downarrow$}   (d)   
    
              ; 
      \end{tikzpicture} 
\end{center} 
 \end{beamercolorbox} 

\column[tt]{0.5\textwidth} 
   \begin{beamercolorbox}[ht=5cm, rounded=true,  shadow=true]{block body} 
         \begin{lstlisting}[mathescape=true, linewidth = \textwidth, numbers = none, frame = none, basicstyle=\small, aboveskip = 5pt, belowskip = 5pt]
g(c,d,e) = ... else 2:g(c,d-1,e$\cdot$c) 
      \end{lstlisting} 
   \begin{center} 
      \scalebox{0.8}{ 
      \begin{tikzpicture} 
      \tikzstyle{every state}=[minimum size=16pt,fill=white,text=black, node distance=1.5cm] 
      \tikzstyle{every pin edge}=[<-,shorten <=1pt] 
      
      \node[state,shape=circle]             (c)                {$c$}; 
      \node[state,shape=circle]             (d) [below of = c] {$d$}; 
      \node[state,shape=circle]             (e) [below of = d] {$e$}; 
      \node[state,shape=circle]             (c1)[right of = c] {$c$}; 
       \node[state,shape=circle]             (d1)[right of = d] {$d$}; 
       \node[state,shape=circle]             (e1) [right of = e] {$e$}; 
    
          \path[->]    (c) edge node[above] {$\downarrow$} (c1) 
                    (d) edge node[above] {$\downarrow$} (d1) 
              ; 
      \end{tikzpicture}} 
   \end{center} 
  \end{beamercolorbox} 
\end{columns} 

\begin{itemize} 
\item hier ist ein Item 
\item und hier noch eines 
\end{itemize} 

\end{frame} 

\end{document} 

Bild

[/code]


Tja, in diesem Minimalbeispiel sind die Listings jetzt nicht eingerückt. In meiner eigentlich Präsentation kriege ich das aber nicht hin, obwohl da der Einzug meiner Meinung nach genau so ist im Editor!
Hier mal wie es im Editor bei mir aussieht, wo es nicht klappt:
Bild


Sehr verwirrend, warum es im Minimalbeispiel beim Einrücken klappt und in der Präsenation nicht :twisted:

Verfasst: Mi 18. Jan 2012, 19:44
von bloodworks
Mhhm schwer zu sagen, aber mein Editor kann alt+return, dann macht er keine Einrückung. Versuch das mal. (also alles rauslöschen nach den [] und dann alt+return)

Verfasst: Do 19. Jan 2012, 10:57
von GuenterW.
Boar, das ist ja echt nervig. Alt+return macht mein Browser nicht. Habe die Datei dann auch mal mit notepad++ geöffnet, aber da stehen die Listingzeilen auch ganz links und alt+return kennt der auch nicht.

Das muss doch hinzukriegen sein!
Also im Moment siehts bei mir so aus:
\begin{frame}[fragile] 
\frametitle{Size-Change Graphs} 
\begin{itemize} 
   \item Help us to keep track of decreasing data values 
   \item Capture information about one function call 
\end{itemize} 
Examples: 
\begin{columns} 
\column[tt]{0.5\textwidth} 
\begin{beamercolorbox}[ht=5cm, rounded=true, shadow=true]{block body}  
\begin{center}   
\begin{lstlisting}[mathescape=true, linewidth=\textwidth, numbers = none, frame = none, basicstyle=\small]
f(a,b) = ... else 1:g(a,b-1,a)
\end{lstlisting}
\scalebox{0.8}{
      \begin{tikzpicture} 
      \tikzstyle{every state}=[minimum size=10pt,fill=white,text=black, node distance=1cm] 
      \tikzstyle{every pin edge}=[<-,shorten <=1pt] 
      
      \node[state,shape=circle]             (a)                {$a$}; 
      \node[state,shape=circle]             (b) at (0, -1.5) {$b$}; 
      \node[state,shape=circle]             (c) at (1.5,0.75) {$c$}; 
      \node[state,shape=circle]             (d) at (1.5,-0.75) {$d$}; 
          \node[state,shape=circle]             (e) at (1.5,-2.25) {$e$}; 
    
       \path[->]    (a) edge node[above] {$\downarrow$} (c) 
                    (a) edge node[above, very near end] {$\downarrow$} (e) 
                    (b) edge node[above, near end] {$\downarrow$}   (d)   
    
              ; 
      \end{tikzpicture} }
\end{center} 
 \end{beamercolorbox} 

\column[tt]{0.5\textwidth} 
   \begin{beamercolorbox}[ht=5cm, rounded=true,  shadow=true]{block body} 
\begin{lstlisting}[mathescape=true, linewidth = \textwidth, numbers = none, frame = none, basicstyle=\small]
g(c,d,e) = ... else 2:g(c,d-1,e$\cdot$c) 
      \end{lstlisting} 
   \begin{center} 
      \scalebox{0.8}{ 
      \begin{tikzpicture} 
      \tikzstyle{every state}=[minimum size=16pt,fill=white,text=black, node distance=1.5cm] 
      \tikzstyle{every pin edge}=[<-,shorten <=1pt] 
      
      \node[state,shape=circle]             (c)                {$c$}; 
      \node[state,shape=circle]             (d) [below of = c] {$d$}; 
      \node[state,shape=circle]             (e) [below of = d] {$e$}; 
      \node[state,shape=circle]             (c1)[right of = c] {$c$}; 
       \node[state,shape=circle]             (d1)[right of = d] {$d$}; 
       \node[state,shape=circle]             (e1) [right of = e] {$e$}; 
    
          \path[->]    (c) edge node[above] {$\downarrow$} (c1) 
                    (d) edge node[above] {$\downarrow$} (d1) 
              ; 
      \end{tikzpicture}} 
   \end{center} 
  \end{beamercolorbox} 
\end{columns} 

\begin{itemize} 
\item hier ist ein Item 
\item und hier noch eines 
\end{itemize} 

\end{frame} 
und das Ergebnis so:
Bild

Also, dieses blöde Einrücken nervt mich...Auch das die Abstände listing-beamerbox-tikzpicture so unterschiedlich sind ist komisch. Das würde ich aber ev. noch hinkriegen, wenn ich die Höhe der Boxen anpassen würde, denke ich. Ich verwende übrigens TexMaker. Vielleicht hast du noch eine Idee? Oder kannst du irgendwie in meiner Datei die Leerzeichen in deinem Browser entfernen? :?

Verfasst: Do 19. Jan 2012, 23:35
von rais
Hallo,
evtl. hilft es, bei der zweiten lstlisting-Umgebung den folgenden \begin{center} über diese lstlisting-Umgebung zu ziehen.
Alternativ ginge vllt auch ein \noindent vor diesem zweiten \begin{lstlisting}.

MfG
Rainer

Verfasst: Fr 20. Jan 2012, 14:38
von GuenterW.
Hallo Rainer,

alles, was " \begin{center} über diese lstlisting-Umgebung zu ziehen" bringt, ist, dass das Listing weiter runtergeschoben wird (was ich auch äußerst merkwürdig finde).

Du würdest also versuchen:
\noindent
\begin{listing}[...]
...
?

Hat anscheinend leider 0 Effekt :-(
Das ist doch echt zum Auswachsen!
Kann doch nicht so schwer sein so eine blöde Folie mal vernünftig hinzubekommen....

Verfasst: Fr 20. Jan 2012, 18:31
von rais
Hallo,
GuenterW. hat geschrieben: alles, was " \begin{center} über diese lstlisting-Umgebung zu ziehen" bringt, ist, dass das Listing weiter runtergeschoben wird (was ich auch äußerst merkwürdig finde).
die center-Umgebung fügt AFAIK vertikalen Abstand ein.
GuenterW. hat geschrieben: Du würdest also versuchen:
\noindent
\begin{listing}[...]
...
?
Nö, ich hab nur laut gedacht. Es ist auch nicht einfach, einen Rat zu erteilen, wenn man selbst das geschilderte Problem nicht beobachten kann.
BTW: hast Du schonmal versucht, Deinen letzten Codeschnippsel zurückzukopieren und lauffähig zu machen? Hast Du damit das Problem der Einrückung auch?

Ergänze/ändere testhalber in Deinen listings-Optionen
showstringspaces=true, %oder lass es ganz weg
showspaces=true,
showtabs=true,
verändert sich damit was in der Ausgabe?

Alternativ: Kannst Du ein -- möglichst minimales, aber komplettes -- Beispiel, das dieses Verhalten zeigt, mal mit zip oder ähnlichem tool einwickeln und irgendwo hochladen?
Die Wahrscheinlichkeit ist IMHO recht hoch, daß Du irgendein bzw. mehrere Zeichen in Deinem Code stehen hast, das/die Dir von Deinem Editor nicht angezeigt -- von der lstlisting-Umgebung aber ausgewertet (und beim Posten hier wohlmöglich von der Forensoftware unterdrückt) -- werden.

MfG
Rainer

Verfasst: Fr 20. Jan 2012, 19:22
von GuenterW.
Hi,

ich habe mal die Listingoptionen wie von dir beschrieben angepasst, dann sieht meine Ausgabe so aus:
Bild

Wenn ich das richtig deute, sind davor keine Whitespaces?!

Eine Minimaldatei, die zumindest bei mir das Verhalten reproduziert, kann jetzt hier runtergeladen werden:
http://dl.dropbox.com/u/13936981/listing.tex

:-)

Hoffentlich kommen wir jetzt weiter! :D

Verfasst: Fr 20. Jan 2012, 21:25
von rais
Hallo,
GuenterW. hat geschrieben: Wenn ich das richtig deute, sind davor keine Whitespaces?!
seh ich auch so...(s.u.)
GuenterW. hat geschrieben: Eine Minimaldatei, die zumindest bei mir das Verhalten reproduziert, kann jetzt hier runtergeladen werden:
http://dl.dropbox.com/u/13936981/listing.tex
Ah. Ich hatte zuvor nur Deinen Schnippsel um die Präambel aus dem Beitrag just davor ergänzt, Dein Eingangspost ist mir in der Hinsicht entgangen.
Du setzt doch extra xleftmargin ... ?

MfG
Rainer