Listingbreite und block position

Antwort erstellen


Diese Frage dient dazu, das automatisierte Versenden von Formularen durch Spam-Bots zu verhindern.
Smilies
:D :) :( :o :shock: :? 8) :lol: :-x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen:

BBCode ist eingeschaltet
[img] ist eingeschaltet
[flash] ist ausgeschaltet
[url] ist eingeschaltet
Smilies sind eingeschaltet

Die letzten Beiträge des Themas

Ich habe die Datenschutzerklärung gelesen und bin damit einverstanden.

   

Wenn du eine Datei oder mehrere Dateien anhängen möchtest, gib die Details unten ein.

Ansicht erweitern Die letzten Beiträge des Themas: Listingbreite und block position

von rais » Sa 21. Jan 2012, 13:24

Hallo,
GuenterW. hat geschrieben:Das einzige, was mich wundert, ist, dass das linke Listing nicht zentriert erscheint
das liegt daran, daß die lstlisting-Umgebung so breit wie die beamercolorbox ist. Teste es ggf. ohne die frame=none-Option beim ersten lstlisting.
GuenterW. hat geschrieben: und beide Listings auf leicht unterschiedlicher Höhe sind.
Die beamercolorbox wird wohl von oben mit Leerraum befüllt, um auf die geforderte Höhe zu kommen.
GuenterW. hat geschrieben: 2. Wenn Umgebungen wie \begin{center}, \begin{itemize} vertikalen Abstand einfügen, wie kriege ich diesen Abstand wieder weg? Das Problem hatte ich nämlich schon öfter.
\centering statt center-Umgebung kennst Du ja schon, im enumitem-Paket findest Du AFAIR ein paar Hinweise zu den ganzen Abständen, was itemize und Co. angeht.
Ansonsten hilft meist die Holzhammermethode mit negativem \vspace.
GuenterW. hat geschrieben: 3. Warum richten sich die beiden blocks unten aneinander aus, wenn ich zB eine Box 3cm und die andere 5cm groß mache? Sollten die sich nicht durch das der columns Umgebung oben ausrichten?
AFAIK heißt nicht an der oberen Kante ausrichten, sondern an der Grundlinie der obersten Zeile ... und die Grundlinie der beamercolorbox liegt unten an der Box, so nicht noch Tiefe hinzukommt.

Hier mal ein Vorschlag zum horizontalen Zentrieren mit \lstinline:
[code]
\documentclass{beamer}

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

\usetheme{Frankfurt}

%\setbeamercovered{transparent} %Um halbtransparente Overlays auf seinen Folien zu haben
\beamertemplatenavigationsymbolsempty %- damit lie�e sich die kleine Navizeile am unteren Rand abschalten

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

\lstset{
basicstyle=\small,
language=Haskell,
commentstyle=\itshape\color{darkgray},
keywordstyle=\bfseries\color{red},
stringstyle=\color{green},
breaklines=false,
columns=flexible,
mathescape=true,
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=3.5cm, rounded=true, shadow=true,center]{block body}
%\centering<--hier tut auch die center-Option (s.o.)
%fügt keinen Abstand ein, \begin{center} schon
\lstinline!f(a,b) = ... else 1:g(a,b-1,a)!\\[1.3ex]%Wert nur grob geschätzt
\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{beamercolorbox}
\column{0.5\textwidth}
\begin{beamercolorbox}[ht=3.5cm, rounded=true, shadow=true,center]{block body}
\lstinline!g(c,d,e) = ... else 2:g(c,d-1,e$\cdot$c)!
\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{beamercolorbox}
\end{columns}
\begin{itemize}
\item hier ist ein Item
\item und hier noch eines
\end{itemize}

\end{frame}

\end{document}
[/code]
MfG
Rainer

von GuenterW. » Sa 21. Jan 2012, 11:59

Boar, bin ich dämlich! Ich habe schlicht und ergreifend übersehen, dass bloodworks auch mein \lstset verändert hat, bzw. habe irgendwie die Befehle selbst dann auch noch übersehen!
Und fürs Minimalbeispiel hats geklappt, weil ich da einfach von bloodworks code ausgegangen bin.

Danke dir, damit ist der rechte Abstand verschwunden :roll:

Dennoch habe ich noch eine kleine Unsauberheit in diesem Beispiel und zwei allgemeinere Fragen:

1. Ich habe jetzt mein Frame wie folgt abgeändert und benutze das lstset von bloodworks.
\lstset{
basicstyle=\ttfamily,
numbers=left,
language=Haskell,
commentstyle=\itshape\color{darkgray},
keywordstyle=\bfseries\color{red},
stringstyle=\color{green},
breaklines=false,
breakautoindent=true,
columns=flexible,
frame=single,
captionpos=b,
}
...
\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=3.75cm, rounded=true, shadow=true]{block body}  
\centering  %fügt keinen Abstand ein, \begin{center} schon
\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{beamercolorbox} 
\column[tt]{0.5\textwidth} 
\begin{beamercolorbox}[ht=3.75cm, rounded=true,  shadow=true]{block body} 
\centering
\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} 
\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{beamercolorbox} 
\end{columns} 
\begin{itemize} 
\item hier ist ein Item 
\item und hier noch eines 
\end{itemize} 

\end{frame} 
Ergebnis:
Bild

Es ist also fast so, wie ich es gerne hätte! Das einzige, was mich wundert, ist, dass das linke Listing nicht zentriert erscheint und beide Listings auf leicht unterschiedlicher Höhe sind.

2. Wenn Umgebungen wie \begin{center}, \begin{itemize} vertikalen Abstand einfügen, wie kriege ich diesen Abstand wieder weg? Das Problem hatte ich nämlich schon öfter.

3. Warum richten sich die beiden blocks unten aneinander aus, wenn ich zB eine Box 3cm und die andere 5cm groß mache? Sollten die sich nicht durch das der columns Umgebung oben ausrichten?


Gruß,
Guenter

von rais » Fr 20. Jan 2012, 21:25

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

von GuenterW. » Fr 20. Jan 2012, 19:22

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

von rais » Fr 20. Jan 2012, 18:31

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

von GuenterW. » Fr 20. Jan 2012, 14:38

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....

von rais » Do 19. Jan 2012, 23:35

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

von GuenterW. » Do 19. Jan 2012, 10:57

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? :?

von bloodworks » Mi 18. Jan 2012, 19:44

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)

von GuenterW. » Mi 18. Jan 2012, 19:41

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:

Nach oben