Hallo,

ich habe mir über matlab2tikz einen plot zu einer tex-Datei umgeschrieben. Sobald ich diese einbinden möchte, liefert mir Latex mehrere Fehler. Ich verwende MiKTeX 2.9 und als Editor TeXnicCenter 2.02. Des Weiteren läuft alles auf Windows 8.1. Ich hatte bereits versucht den Speicher zu vergrößern wie auf Extending latex memory angegeben. Die Fehlerangabe besagt:
Something's wrong--pehaps a missing item (Zeile 4545)
Something's wrong--pehaps a missing item (Zeile 4553) usw.

An dieser Stelle gibt es aber keine itemize-Umgebung. Es scheint, als ob die Datei nur bis dahin übersetzt wird. Wenn ich die übrigen Zeilen bis zum Ende auskommentiere und das end{axis} end{tikzpicture} irgendwo vor die Zeile 4530 kopiere, wird alles übersetzt. Problem ist nur, dass das Bild dann ziemlich löchrig ist.

Hier erst mal der Code der main-Datei:

Open in Online-Editor
\documentclass{article}
\usepackage{pgfplots}
\pgfplotsset{compat=newest,plot coordinates/math parser=false}
\usepackage{tikz}

\begin{document}  
\begin{figure}[t]  
   \begin{center}  
     \input{myfile.tex}   
   \end{center}  
\end{figure}
\end{document}

Der Matlab-Plot steht unter myfile.tex zum download bereit.

gefragt 27 Aug '14, 13:19

NoonienSoong's gravatar image

NoonienSoong
21112
Akzeptiert-Rate: 0%

bearbeitet 07 Feb '16, 10:51

saputello's gravatar image

saputello
11.1k174365

Die Leute von matlab2tikz wuerden gerne wissen, ob das zugrundeliegende matlab script einen patch plot mit vielen patches oder tausende patch plots jeweils mit einem Dreieck produziert hat. Im ersten Fall koennten die naemlich Verbesserungen machen.

(07 Sep '14, 16:21) cfeuersaenger

Aufgrund der Fehlermeldung vermute ich, dass Du lualatex verwendest, denn bei xelatex oder pdflatex lautet die Fehlermeldung nämlich:

! TeX capacity exceeded, sorry [main memory size=5000000].
(der angegebene Wert für main memory size kann auch anders ausfallen). lualatex kennt so etwas wie statische Speicherarrays AFAIK nicht. Deshalb funktioniert die Erhöhung des Speichers nur mit pdflatex oder xelatex. Wenn ich unter TeX Live eine texmf.cnf mit
extra_mem_top = 20000000     % extra high memory for chars, tokens, etc.
extra_mem_bot = 20000000     % extra low memory for boxes, glue, breakpoints, et
erstelle und die figure-Umgebung sinnvollerweise leicht abändere:

Open in writeLaTeX
\documentclass{article}
\usepackage{pgfplots}
\pgfplotsset{compat=newest,plot coordinates/math parser=false}
\usepackage{tikz}

\begin{document}  
\begin{figure}[t]
  \centering
  \input{myfile.tex}   
\end{figure}
\end{document}

und die texmf.cnf zusätzlich zur normalen Datei verwende, dann läuft pdflatex ohne Fehler durch und produziert:

plot

Bei MiKTeX kann man AFAIK auch einfach die Optionen --extra_mem_top=20000000 und --extra_mem_bot=20000000 beim Aufruf von pdflatex verwenden, um die beiden Speicherbereiche zu ändern.

Die genannte Änderung der figure-Umgebung alleine vermeidet auch bereits die Fehlermeldung mit lualatex. Vermutlich ist die Datei nicht für eine Listenumgebung wie eine center-Umgebung geeignet.

Der Lauf dauert übrigens ziemlich lange (bei mir mehrere Minuten). Ich würde in dem Fall daher den Plot nur einmal (beispielsweise über standalone-Klasse) erzeugen und dann künftig mit \includegraphics laden. Dann braucht man die Erweiterung des Speichers auch nur das eine Mal, wenn man die Grafik erstellt. Hingegen die Erweiterung des Speichers nur für den pdflatex-Aufruf der external library von Tikz portabel zu aktivieren, könnte schwierig werden. TeX Live kennt keine Option -extra_mem_… für den Aufruf von pdflatex. Nur für MiKTeX könnte man hingegen /tikz/external/system call (siehe die TikZ-Anleitung, pgfmanual) entsprechend setzen.

Permanenter link

beantwortet 27 Aug '14, 16:37

gast3's gravatar image

gast3
(ausgesetzt)
Akzeptiert-Rate: 53%

bearbeitet 31 Aug '14, 17:47

Ein (Gross)Teil des Problems scheint in der Natur der Ausgabe von matlab2tikz zu liegen: Deine Datei myfile.tex enthaelt je einen (gleichartigen) \addplot Befehl pro Dreieck.

Mit dem bei Dir vorliegenden Datenformat erhalte ich auch

Open in writeLaTeX
! TeX capacity exceeded, sorry [main memory size=20000000].

nach 2 minuten 30 sekunden.

Wenn ich jedoch die Eingabedatei trivial umkonfiguriere, indem ich einen \addplot Befehl mit sehr vielen Dreiecken mache (und die Eingabedaten in eine Datei data.dat schreibe), dann compiliert das Ganze innerhalb der Speichergrenzen in 20 Sekunden - die Ausgabe ist identisch.

Kern der Idee ist, dass man bei patch plots mehrere Patches hintereinander in den Eingabestream schreiben kann: die ersten drei Koordinaten gehoeren zum ersten Dreieck, die naechste drei zum zweiten Dreieck usw. Leere Zeilen werden dabei ignoriert.

Ich kann leider aus Skalierbarkeitsgruenden die Datei nicht hochladen, aber ich denke, das Prinzip ist klar. Auf Nachfrage kann ich die Datei aber auch irgendwohinschicken/hochladen.

Eine Loesung waere daher, die matlab figure und/oder matlab2tikz so zu modifizieren, dass es die Ausgabe effizienter formatiert.

Permanenter link

beantwortet 31 Aug '14, 15:56

cfeuersaenger's gravatar image

cfeuersaenger
3.7k23
Akzeptiert-Rate: 34%

bearbeitet 31 Aug '14, 16:02

2

Ich habe dem Author von matlab2tikz meine Umformatierung per E-Mail geschickt.

(31 Aug '14, 16:25) cfeuersaenger
Deine Antwort
Vorschau umschalten

Folgen dieser Frage

Per E-Mail:

Wenn sie sich anmelden, kommen Sie für alle Updates hier in Frage

Per RSS:

Antworten

Antworten und Kommentare

Markdown-Grundlagen

  • *kursiv* oder _kursiv_
  • **Fett** oder __Fett__
  • Link:[Text](http://url.com/ "Titel")
  • Bild?![alt Text](/path/img.jpg "Titel")
  • nummerierte Liste: 1. Foo 2. Bar
  • zum Hinzufügen ein Zeilenumbruchs fügen Sie einfach zwei Leerzeichen an die Stelle an der die neue Linie sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Frage-Themen:

×298
×28
×20
×5

gestellte Frage: 27 Aug '14, 13:19

Frage wurde gesehen: 19,572 Mal

zuletzt geändert: 07 Feb '16, 10:51