Ich lasse mir mit TikZ und gnuplot mit 5000 samples den Tanges plotten. In folgendem Beispiel funktioniert das einwandfei:

Open in Online-Editor
\documentclass[12pt]{beamer}
\usepackage[utf8]{inputenc}
\usepackage{fontenc}
\usepackage[ngerman]{babel}
\usepackage{tikz}
\usetikzlibrary{arrows.meta}

\begin{document}

\begin{frame}
\begin{tikzpicture}[line cap=round, line join=round, x=0.5cm, y=0.5cm]
\draw plot[raw gnuplot,id=tan,smooth] function{set samples 5000;set xrange [-3.1*pi:3.1*pi]; set yrange[-5:5]; plot tan(x)};
\end{tikzpicture}
\end{frame}
\end{document}

Sobald ich das tikzpicture in meine Präsentation einbaue (derzeit letzte Folie), erhalte ich die Fehlermeldung

TeX capacity exceeded, sorry [main memory size=3000000]. end{frame}

Ich bin auf der Suche nach der Fehlermeldung hier gelandet.

Ich hab die Variante mit \tikzexternalize versucht, auch weil mir das aufgrund der Vielzahl von plots attraktiv bezüglich der Übersetzungszeit erscheint. Leider funktioniert das nicht. Die Übersetzung bleibt bei dem selben plot mit der selben Fehlermelung stehen. Mir ist unklar warum. Ich hatte die Sache so verstanden, dass durch \tikzexternalize jedes tikzpicture getrennt übersetzt wird und als pdf gespeichert wird. Dies passiert auch mit allen tikzpictures bis das obigen erreicht wird. Sogar die ganzen Item-Circles werden in einzelne pdf-Dateien geschrieben (kann man das global abschalten?).

Warum lässt sich der plot in einer einzelnen Datei übersetzten, nicht aber mit der external-Variante?

Hier das logfile ab der Stelle, bei der der Fehler auftritt (Der Name des plots ist "figures/Praesentation-figure-41"):

Open in Online-Editor
! Package tikz Error: Sorry, the system call 'pdflatex -shell-escape -halt-on-e
rror -interaction=batchmode -jobname "figures/Praesentation-figure41" "\def\tik
zexternalrealjob{Praesentation}\input{Praesentation}"' did NOT result in a usab
le output file 'figures/Praesentation-figure41' (expected one of .pdf:.jpg:.jpe
g:.png:). Please verify that you have enabled system calls. For pdflatex, this 
is 'pdflatex -shell-escape'. Sometimes it is also named 'write 18' or something
 like that. Or maybe the command simply failed? Error messages can be found in 
'figures/Praesentation-figure41.log'. If you continue now, I'll try to typeset 
the picture.

See the tikz package documentation for explanation.
Type  H <return>  for immediate help.
 ...

l.819 \end{frame}

This error message was generated by an \errmessage
command, so I can't give any explicit help.
Pretend that you're Hercule Poirot: Examine all clues,
and deduce the truth by order and method.

Runaway definition?
->\pgfsyssoftpath@movetotoken {-134.08026pt}{0.0pt}\pgfsyssoftpath@curvetosuppo
rtatoken \ETC.
! TeX capacity exceeded, sorry [main memory size=3000000].
\pgfsyssoftpath@thepath ...vetosupportatoken \ETC.

l.819 \end{frame}

If you really absolutely need more capacity,
you can ask a wizard to enlarge me.

Here is how much of TeX's memory you used:
 37254 strings out of 493698
 770434 string characters out of 3144418
 3000001 words of memory out of 3000000
 39746 multiletter control sequences out of 15000+200000
 231113 words of font info for 266 fonts, out of 3000000 for 9000
 1025 hyphenation exceptions out of 8191
 56i,26n,65p,10380b,793s stack positions out of 5000i,500n,10000p,200000b,50000s
!  ==> Fatal error occurred, no output PDF file produced!

Hat jemand von euch eine Idee, woran das liegt?

In obigem Link war auch noch eine anderer Tipp. Es heißt dort, dass man MikTeX mit der Option --extra-mem-bot=10000000 starten kann. Dies funktioniert nicht. Ich hab dann einfach mal die Option --extra-mem-top=10000000 ausprobiert. Sie funktioniert, und zwar sowohl wenn man das gesamten Dokument ohne external am Stück übersetzt, als auch mit der external Variante:

Open in Online-Editor
\tikzexternalize[prefix=figures/,system call={pdflatex \tikzexternalcheckshellescape --extra-mem-top=10000000 -halt-on-error -interaction=batchmode -jobname "\image" "\texsource"}]

Allerdings hab ich an einer anderen Stelle gelesen, dass es nicht sinnvoll ist, mit dieser Speichererhöhung rumzuspielen. Mir ist auch unklar, wie weit ich den Wert erhöhen kann bzw. ob LaTeX nicht doch irgendwann wieder an die Grenze stößt. Und ich hab es so verstanden, dass dies nur mit MikTeX geht. Wie würde man diese Option z.B. bei TeXlive mitgeben? (Der Systemspeicher von Windows sagt übrigens ca. 4700 MB freier pysikalischer Speicher.)

Am liebsten wäre mir, die Sache irgendwie ohne diese Option aber mit external zum Laufen zu bringen (und ohne LuaLaTeX und ohne pgfplots).

gefragt 01 Feb '15, 21:41

tom75's gravatar image

tom75
2.2k187884
Akzeptiert-Rate: 57%

bearbeitet 01 Feb '15, 21:45

Du kannst ja mal tracingstats=2 einfügen und die Entwicklung von main memory beobachten. Vielleicht ist es ja einfach kurz vor der letzten Folie gerade an der Grenze und dein Plot geht dann drüber. Es ist aber kein Problem, extra-mem-top zu benutzen, wenn man mal für eine Datei mehr main_memory braucht. Dafür ist die Option ja da.

(02 Feb '15, 11:18) Ulrike Fischer

Ich bekomme Dimension too large, egal wie viel Speicher ich LaTeX gebe.

(02 Feb '15, 13:46) Henri

@Henri: Mit welchem Beispiel? Das MWE von tom75 funktioniert bei mir tadellos. Vielleicht ist bei dir ja eine echte Schleife, das Problem.

(02 Feb '15, 13:53) Ulrike Fischer

@UlrikeFischer pdfTeX, Version 3.1415926-2.5-1.40.14 (TeX Live 2013/Debian). Ich habe desweiteren \usetikzlibrary{arrows.meta} auskommentiert (ist eh irrelevant für's Beispiel).

(02 Feb '15, 14:38) Henri

@Ulrike Fischer Muss ich \tracingstats=2 in den LaTeX-Code einfügen?

Was bedeutet die Zahl hinter extra-mem-top? Sind das Bytes? Ich hab da gestern mal ein paar Nullen mehr angehängt, es hatte keinerlei Auswirkungen auf des Systemspeicher, den man sich im Taskmanager von Windows anschauen kann. Was ist die Obergrenze für diesen Wert?

Mir ist noch nicht klar, warum die Datei einzeln läuft aber als external-Datei nicht. Das müsste doch dasselbe sein.

(02 Feb '15, 14:45) tom75

@Henri: Das ist kein memory-Speicher problem, sondern irgendwo wird eine Länge mal zu groß (z.B. parskip=800cm würde den Fehler auch zeigen). Mit einem aktuellen pgf passiert das nicht mehr.

(02 Feb '15, 14:53) Ulrike Fischer
Ergebnis 5 von 6 show 1 more comments

In Deinem Fall würde ich einfach set samples 200 und set yrange[-10:10] nutzen und das Ergebnis mit \clip auf den eigentlich gewünschten Bereich zurecht schneiden.

Open in Online-Editor
\documentclass[12pt]{beamer}
\usepackage[utf8]{inputenc}
\usepackage{fontenc}
\usepackage[ngerman]{babel}
\usepackage{tikz}
\usetikzlibrary{arrows.meta}
\usetikzlibrary{external}
\tikzsetexternalprefix{figures/}
\tikzexternalize

\setlength\fboxsep{0pt}

\begin{document}
\tikzexternaldisable% deaktiviert das Externalisieren
\begin{frame}
\tikzexternalenable% aktiviert das Externalisieren
neu:

\fbox{\begin{tikzpicture}[line cap=round, line join=round, x=0.5cm, y=0.5cm]
\begin{scope}% hält clippen lokal
  \clip(-3.1*pi,-5)rectangle(3.1*pi,5);
  \draw plot[raw gnuplot,id=tan,smooth] 
    function{set samples 200;set xrange [-3.1*pi:3.1*pi]; set yrange[-10:10]; plot tan(x)};
\end{scope}
\end{tikzpicture}}
\end{frame}

\begin{frame}
alt:

\fbox{\begin{tikzpicture}[line cap=round, line join=round, x=0.5cm, y=0.5cm]
\draw plot[raw gnuplot,id=tan,smooth]
  function{set samples 5000;set xrange [-3.1*pi:3.1*pi]; set yrange[-5:5]; plot tan(x)};
\end{tikzpicture}}
\end{frame}
\end{document}

alt text

alt text

alt text

Permanenter link

beantwortet 02 Feb '15, 14:47

esdd's gravatar image

esdd
17.7k254256
Akzeptiert-Rate: 62%

@esdd Danke, mit der Lösung kann ich gut leben! :-)

Eine Rückfrage: Warum schaltest du die Externalisierung vor dem begin{frame} erst aus und dann wieder ein?

Und trotzdem würde mich interessieren, was der Wert hinter extra-mem-top bedeutet, also welche "Einheit" das ist. Soll ich das als neue Frage formulieren?

(03 Feb '15, 15:47) tom75

@tom75 Das diente eigentlich nur der Demonstration, wie Du dafür sorgen kannst, dass nur die Zeichnungen in dem einen Frame externalisiert werden. Mit dem \tikzexternaldisable schalte ich die Externalisierung ab. Das \tikzexternalenable steht innerhalb einer Gruppe und wirkt deshalb nur lokal auf die Zeichnungen, weshalb in meinem Beispiel nur die erste Zeichnung externalisiert wird.

(03 Feb '15, 15:54) esdd

Das Folgende ist keine Lösung für Dein spezifisches Problem, aber liefert das gewünschte Ergebnis.

Open in Online-Editor
\documentclass{article}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}
  \begin{axis}[
    no markers,samples=1000,
    domain=-3.1*pi:3.1*pi,
    restrict y to domain=-6:6,
    ymin=-5,ymax=5,
    enlargelimits=false,
    axis lines=middle,
    xtick={-9.4247,-6.28318,...,10},
    xticklabels={$-3\pi$,$-2\pi$,$-\pi$,$0$,$\pi$,$2\pi$,$3\pi$},
    ]
    \addplot {tan(deg(x))};    
  \end{axis}
\end{tikzpicture}
\end{document}

alt text

Permanenter link

beantwortet 02 Feb '15, 09:50

Henri's gravatar image

Henri
15.7k133943
Akzeptiert-Rate: 46%

@Henri Danke für deinen Vorschlag, ich wollte halt kein pgfplots verwenden, wenn es nicht unbedingt sein muss.

(02 Feb '15, 14:47) tom75
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:

×728
×11
×1
×1
×1

gestellte Frage: 01 Feb '15, 21:41

Frage wurde gesehen: 18,629 Mal

zuletzt geändert: 03 Feb '15, 15:54