längere Matlab-Codes in Latex einbinden

Tabellen und Grafiken erstellen und anordnen


waba
Forum-Anfänger
Forum-Anfänger
Beiträge: 20
Registriert: Sa 1. Mär 2014, 09:39

längere Matlab-Codes in Latex einbinden

Beitrag von waba »

Hallo,

ich binde Matlab-Codes mit Hilfe der mcode.sty Datei von Mathworks in meinen Latex-Text ein. Dies erledige ich dann mit folgendem Befehl:
\begin{figure} 
\begin{lstlisting} 
Matlab ist toll % und Latex auch 
\end{lstlisting} 
      \caption{Matlab ist toll} 
      \label{Mit} 
\end{figure}
Mein Problem ist nun das auf Grund der figure-Umgebung kein Seitenumbruch mehr vorhanden ist und somit längere Matlab-Codes nicht mehr komplett angezeigt werden. Sie werden dann bis zum Ende das Blattes und quasi darüber hinaus erstellt. Auf dem nächsten Blatt gehen sie dann aber nicht mehr weiter.

Wie kann ich nun eine Bildunterschrift und ein Label an den Code anhängen und dennoch den Seitenumbruch erhalten?

Viele Grüße

Benutzeravatar
Johannes_B
Moderator
Moderator
Beiträge: 5079
Registriert: Do 1. Nov 2012, 14:55
Kontaktdaten:

Beitrag von Johannes_B »

In Gleitumgebungen darf grundsätzlich kein Seitenumbruch stattfinden. Also wird die Gleitumgebung nicht verwendet, und stattdessen \captionof{type}{Text} aus KOMA-script benutzt.

An dieser Stelle auch gleich die Definition eines neuen Verzeichnisses mit eigenen Eintragstypen. Nähere Informationen finden sich in der KOMA-Dokumentation.
\documentclass{scrartcl}
\usepackage{tocbasic}
\DeclareNewTOC[%
	type=snippet,%
	types=snippets,%
	float,%Damit kann das Listing gleiten
	name=Codeschnipsel,%
	listname={Liste der Codeschnipsel}%
]{lol}%ListOfListings
\usepackage{listings}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{blindtext}
\begin{document}
\listofsnippets
\blindtext

\begin{snippet}
	\begin{lstlisting}
	  repeat     
    swapped = false
    for i = 1 to length(A) - 1 inclusive do:
      /* if this pair is out of order */
      if A[i-1] > A[i] then
        /* swap them and remember something changed */
        swap( A[i-1], A[i] )
        swapped = true
      end if
    end for
  until not swapped
	\end{lstlisting}
	\caption{bubbleSort}
\end{snippet}

\blindtext[2]
\begin{center}
	\begin{lstlisting}
	  repeat     
    swapped = false
    for i = 1 to length(A) - 1 inclusive do:
      /* if this pair is out of order */
      if A[i-1] > A[i] then
        /* swap them and remember something changed */
        swap( A[i-1], A[i] )
        swapped = true
      end if
    end for
  until not swapped
	  repeat     
    swapped = false
    for i = 1 to length(A) - 1 inclusive do:
      /* if this pair is out of order */
      if A[i-1] > A[i] then
        /* swap them and remember something changed */
        swap( A[i-1], A[i] )
        swapped = true
      end if
    end for
  until not swapped
	  repeat     
    swapped = false
    for i = 1 to length(A) - 1 inclusive do:
      /* if this pair is out of order */
      if A[i-1] > A[i] then
        /* swap them and remember something changed */
        swap( A[i-1], A[i] )
        swapped = true
      end if
    end for
  until not swapped
	  repeat     
    swapped = false
    for i = 1 to length(A) - 1 inclusive do:
      /* if this pair is out of order */
      if A[i-1] > A[i] then
        /* swap them and remember something changed */
        swap( A[i-1], A[i] )
        swapped = true
      end if
    end for
  until not swapped
	  repeat     
    swapped = false
    for i = 1 to length(A) - 1 inclusive do:
      /* if this pair is out of order */
      if A[i-1] > A[i] then
        /* swap them and remember something changed */
        swap( A[i-1], A[i] )
        swapped = true
      end if
    end for
  until not swapped
	  repeat     
    swapped = false
    for i = 1 to length(A) - 1 inclusive do:
      /* if this pair is out of order */
      if A[i-1] > A[i] then
        /* swap them and remember something changed */
        swap( A[i-1], A[i] )
        swapped = true
      end if
    end for
  until not swapped
	  repeat     
    swapped = false
    for i = 1 to length(A) - 1 inclusive do:
      /* if this pair is out of order */
      if A[i-1] > A[i] then
        /* swap them and remember something changed */
        swap( A[i-1], A[i] )
        swapped = true
      end if
    end for
  until not swapped
	\end{lstlisting}
	\captionof{snippet}{ein paar mal bubblesort}
\end{center}
\end{document}
TeXwelt - Fragen und Antworten Schaut vorbei und stellt Fragen.
LaTeX-Vorlagen?

Der Weg zum Ziel: Ruhe bewahren und durchatmen, Beiträge und unterstützende Links aufmerksam lesen, Lösungsansätze verstehen und ggf. nachfragen.

waba
Forum-Anfänger
Forum-Anfänger
Beiträge: 20
Registriert: Sa 1. Mär 2014, 09:39

Beitrag von waba »

ja das kommt dem schon sehr Nahe nur wie bringe ich noch folgenden Befehl unter?
\counterwithin{figure}{section} % Bildbeschriftung 1.1 ... 2.3 usw.
Wenn ich figure gegen snippet tausche kommt eine Fehlermeldung.

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

Beitrag von esdd »

Bei mir funktioniert das, wenn ich in den Code von Johannes
\usepackage{chngcntr}
\counterwithin{snippet}{section}
einfüge.

Das Paket tocbasic wird von den KOMA-Script Klassen ohnehin verwendet. Du brauchst es deshalb nur dann explizit laden, wenn Du eine andere Dokumentenklasse nutzt.

Gruß
Elke

waba
Forum-Anfänger
Forum-Anfänger
Beiträge: 20
Registriert: Sa 1. Mär 2014, 09:39

Beitrag von waba »

Meine Präambel sieht jetzt folgendermaßen aus:
\documentclass[a4paper,12pt,titlepage,german,liststotoc,bibtotoc,headsepline]{scrartcl}

\usepackage[ngerman]{babel} % deutsche Silbentrennung
\usepackage[utf8]{inputenc} % deutsche Umlaute
\usepackage{ucs}
\usepackage[T1]{fontenc}
\usepackage{graphicx}
 
% ÜBERSCHRIFTEN, ABSTÄNDE, SEITENSTIL
\frenchspacing
\pagestyle{headings}
\usepackage[left=3.5cm, right=3cm, top=2.5cm, bottom=2.5cm]{geometry} % Seitenränder
\usepackage{xcolor}%Textfarbe
%\renewcommand*{\chapterheadstartvskip}{\vspace*{-0.5cm}} % Abstand der Kapitelüberschriften zum oberen Seitenrand reduziert um x
%\usepackage{lmodern} % neue verbesserte Schrifttypen von LaTex
\usepackage{float}%Gleitumgebung für Bilder

% DOKUMENT ZEILENABSTAND
\usepackage{setspace}
%\onehalfspacing

\usepackage{parskip} %Verhindert das Einrücken nach Zeilenabsatz

%MATHE 
\usepackage{amsmath}
\usepackage{amssymb}
\usepackage{amsfonts}
\usepackage{listings} 
\usepackage[framed,numbered,autolinebreaks,useliterate]{mcode} % Matlabcode hinzufügen

\usepackage{tocbasic}
\DeclareNewTOC[% 
   type=snippet,% 
   types=snippets,% 
   float,%Damit kann das Listing gleiten 
   name=Matlab-Code,% 
   listname={Codeverzeichnis}% 
]{lol}%ListOfListings 
\lstloadlanguages{Matlab} 
\lstset{literate=%
  {Ö}{{\"O}}1
  {Ä}{{\"A}}1
  {Ü}{{\"U}}1
  {ß}{{\ss}}2
  {ü}{{\"u}}1
  {ä}{{\"a}}1
  {ö}{{\"o}}1
} % Umlaute in Matlabcode
%\counterwithin{snippet}{section} % Bildbeschriftung 1.1 ... 2.3 usw.

% ANDERES
\usepackage{blindtext}
\usepackage[numbers,square]{natbib} % zum Einbinden von .bib
\usepackage{url} % mit \url{} lassen sich Internetlinks mit Sonderzeichen darstellen
\usepackage{hyperref}
\usepackage{scrpage2}
\pagestyle{scrheadings}
\clearscrheadfoot
\ihead[\headmark]{\headmark} \ohead{Seite \pagemark}
\usepackage{eurosym}%Eurosymbol einfügen mit \EUR{Betrag}
\usepackage[printonlyused]{acronym}%Abkürzungsverzeichniss
\usepackage{csquotes}
\usepackage{chngcntr}

\counterwithin{figure}{section}  % Bildbeschriftung 1.1 ... 2.3 usw.

%\renewcaptionname{ngerman}{\contentsname}{Inhalt}
%\renewcaptionname{ngerman}{\listfigurename}{Abbildungen}
%\renewcaptionname{ngerman}{\listtablename}{Tabellen}
\renewcommand{\refname}{Literaturverzeichnis}
% ZITATE 

\bibliographystyle{natdin}
und meine Matlab-Codes sind jetzt so eingebunden:
\begin{snippet}[H]
\begin{lstlisting}
z = x + y
.
.
.
..
.
..
.
.
.
.
\end{lstlisting}
		\caption{Beispiel}
		\label{Beispiel}
\end{snippet}
Leider habe ich festgestellt das Seiten immernoch nicht umgebrochen werden. Liegt das evtl an dem verwendeten mcode.sty?
http://www.mathworks.com/matlabcentral/ ... ex-package

Falls ja was muss ich daran ändern

waba
Forum-Anfänger
Forum-Anfänger
Beiträge: 20
Registriert: Sa 1. Mär 2014, 09:39

Beitrag von waba »

Desweiteren habe ich noch das Problem Das im Code-Verzeichnis bei einer Beschriftung zum Beispiel 3.14 der Abstand zwischen den Ziffern und der Buchstaben der Beschriftung nicht groß genug ist und diese übereinander stehen...

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

Beitrag von esdd »

Hast du dir den Code von Johannes richtig angesehen? Nur die kurzen Codestücken, die gleiten dürfen, gehören in die snippet Umgebung. Bei Listings, die einen Seitenumbruch enthalten sollen, darfst du diese nicht verwenden. Die Beschriftung setzt du in dem Fall mit \captionof{snippet}{...}

Den Befehl \counterwithin kannst du erst nach \usepackage{chngcntr} verwenden.

Das Problem mit den Nummern im Verzeichnis kannst du durch die Option listof=flat lösen:
\documentclass[12pt,titlepage,
  listof=totoc,listof=flat,
  bibliography=totoc,
  headsepline]{scrartcl}
Gruß
Elke

Antworten