Hallo! Und wieder einmal ein Plotproblem, bei dem ich nicht mehr weiter weiß. Ich habe einen plot mit zwei Ordinaten, bei dem einer der Legendeeinträge nicht mit der Markierung im plot übereinstimmt. Hier mal ein Minimalbeispiel bei dem bei mir der Fehler auftritt. Open in Online-Editor
\documentclass[11pt,a4paper,oneside,chapterprefix,numbers=enddot]{scrbook} \usepackage{siunitx} \usepackage{graphicx} \usepackage[ngerman]{babel} \usepackage[]{acronym} \usepackage{pgfplots,siunitx} \pgfplotsset{width=\textwidth, height = 0.4\textheight,compat=newest, legend style={cells={anchor=west}},every axis legend/.append style={at={(0.99,0.99)},anchor=north east}, ticklabel shift={0.05cm}} \usepgfplotslibrary{external} \tikzexternalize[prefix=figures/]{Diplomarbeit} \begin{document} \tikzsetnextfilename{BF+WA-sTE+KFsNoLI90} \begin{figure}[htb] \centering \tikzset{every mark/.append style = {scale = 2}} \begin{tikzpicture} \begin{axis}[grid = major, width = \textwidth-45pt, height = 0.4\textheight, xlabel near ticks, ylabel near ticks, xlabel = x, ylabel = y1, xtick = {1,2,3,4,5}, ytick = {50,54,58,62,66,70}, ymin = 50, ymax = 70, x tick label style={/pgf/number format/1000 sep=}, ] \addplot[only marks,mark = asterisk] coordinates {(1,66.90)(2,55.00)(3,56.18)(4,57.99)(5,55.00)}; \label{plot1} \end{axis} \begin{axis}[ylabel near ticks, width = \textwidth-45pt, height = 0.4\textheight, yticklabel pos=right, ylabel = y2, ytick = {0,0.04,0.08,0.12,0.16,0.20}, ymin=0, ymax=0.20, xtick = {1,2,3,4,5}, x tick label style={/pgf/number format/1000 sep=}, yticklabel style={/pgf/number format/fixed, /pgf/number format/precision=2}, legend pos=south east, ] \addlegendimage{/pgfplots/refstyle=plot1}\addlegendentry{y1} \addplot[only marks, mark = triangle] coordinates {(1,0.08)(2,0.09)(3,0.09)(4,0.18)(5,0.10)}; \addlegendentry{y2} \end{axis} \end{tikzpicture} \caption{} \end{figure} \end{document} Bei mir erscheint anstelle des Stern-Symbols ein einfacher Strich. Ich habe um zu schauen, ob es an meinem plot liegen kann, einfach mal einen Code, der ähnlich strukturiert ist, aus dem Netz in meine Datei kopiert und es tritt derselbe Fehler auf. Danke schon mal für die Hilfe! gefragt 02 Aug '14, 15:02 Volker Racho saputello
Ergebnis 5 von 10
show 5 more comments
|
Das ist entweder ein bug oder zumindest eine Schwaeche in der External lib. Ich schreibe das als bug report fuer die Bibliothek auf, vielleicht kann ich es beheben. Details: Wie schon in den Kommentaren richtig vermutet, hat es etwas mit mehrfachausfuehrung und Externalisierung zu tun. Hier etwas genauer: ohne externalisierung klappt es erst nach dem zweiten Kompile vorgang, d.h. nach Open in writeLaTeX
pdflatex Diplomarbeit pdflatex Diplomarbeit Mit externalisierung ist das ganz aehnlich - das Bild muss zweimal uebersetzt werden. Genauer: Open in writeLaTeX
pdflatex -shell-escape Diplomarbeit pdflatex -shell-escape Diplomarbeit schlaegt fehl (denn das Bild wurde nur einmal waehrend des ersten vorgangs externalisiert und wird danach nicht mehr gelesen). Wenn man aber Open in writeLaTeX
pdflatex -shell-escape Diplomarbeit pdflatex -shell-escape -halt-on-error -interaction=batchmode -jobname "BF+WA-sTE+KFsNoLI90" "\def\tikzexternalrealjob{Diplomarbeit}\input{Diplomarbeit}" pdflatex -shell-escape Diplomarbeit eingibt, klappt es. Der kryptische Befehl stammt dabei aus dem LaTeX Open in writeLaTeX
===== 'mode=convert with system call': Invoking 'pdflatex -shell-escape -halt-on-error -interaction=batchmode -jobname "BF+WA-sTE+KFsNoLI90" "\def\tikzexternalrealjob{Diplomarbeit}\input{Diplomarbeit}"' ======== This is pdfTeX, Version 3.1415926-2.5-1.40.14 (TeX Live 2013) Vermutlich sollte das Bild zweimal externalisiert werden. Falls Du Linux verwendest, koennte Open in writeLaTeX
\tikzexternalize[mode=list and make] helfen. Dann muesstest Du es mit Open in writeLaTeX
pdflatex Diplomarbeit make -f Diplomarbeit.makefile make -f Diplomarbeit.makefile pdflatex Diplomarbeit uebersetzen. Interessanterweise bekommt der naemlich mit, dass die Referenzen nicht ordentlich gesetzt sind. Ich denke, die Fuer diesen konkreten Fall koennte man auch ueberlegen, warum man fuer eine Vorwaertsreferenz denn ueberhaupt zweimal kompilieren muss. Achtung: Nicht-verwandte Best-practise: Beim Bearbeiten Deines Codes ist mir aufgefallen, dass Du Open in writeLaTeX
\tikzexternalize[prefix=figures/]{Diplomarbeit} schreibst. Damit hast Du den Namen der Hauptdatei explizit nochmal in der Hauptdatei referenziert; wenn Du jemals mal die Datei als Vorlage fuer eine Neue nehmen willst, beisst Dich das. Leider war das so in der ersten Version der external lib notwendig; mitlerweile kannst Du aber einfach Open in writeLaTeX
\tikzexternalize[prefix=figures/] schreiben, und es funktioniert unabhaengig vom Namen der Hauptdatei richtig. Letzteres ist deshalb zu verwenden. beantwortet 02 Aug '14, 22:05 cfeuersaenger Danke für die Antwort. Du schreibst oben etwas von Eingabe. Du meinst doch, dass ich dies in der Eingabeaufforderung eingeben muss. Das habe ich nun gemacht. Soweit ich das sehe, sind das drei Schritte. Nach dem ich diese durchgeführt habe, hat sich allerdings nichts geändert. Ich verwende Windows. Genauer Win7 64.
(03 Aug '14, 10:31)
Volker Racho
Also ich habe nun damit es funktioniert auf die Externalisierung verzichtet. Allerdings macht das den Kompilierungsvorgang relativ langsam. Schade drum, aber ich weiß leider nicht, was ich in der Konfiguaration noch ändern soll. Danke trotzdem für die Hilfe.
(05 Aug '14, 10:15)
Volker Racho
Ja, das ist schon sehr aergerlich :-( Du kannst uebrigens
(05 Aug '14, 12:40)
cfeuersaenger
Diese Variante werde ich anwenden. Klappt einwandfrei und kompiliert ist es auch wieder schnell. Danke Christian!
(05 Aug '14, 16:22)
Volker Racho
1
@cfeuersaenger: Ich habe in meiner Antwort auf die Frage Labels in
(26 Sep '14, 10:44)
gast3
@Ijon Tichy danke fuer den Hinweis! Ich habe mir das auf meiner Todo liste vermerkt in der Hoffnung, dass wenn ich etwas mehr Ruhe habe aufzugreifen. Allerdings stehen aktuell noch einige andere unfertige Dinge und supportanfragen davor an.
(01 Okt '14, 21:08)
cfeuersaenger
Ergebnis 5 von 6
show 1 more comments
|
Zweimal übersetzen könnte das korrigieren, was beim Externalisieren wohl nicht geschehen ist. Teste mal mit doppelt übersetzen (ggf. ohne extzernalize).
Nehme ich die Externalisierung raus, klappt es direkt beim ersten kompilieren. nehme ich sie nach mehrmaligem kompilieren wieder rein, erhalte ich wieder diesen Fehler.
Ich tippe mal drauf, dass es wegen des Referenzierens (refstyle) nicht beim einmaligen Übersetzen/externalize klappt. Evtl. ohne Referenz Stil angeben?
hab ich auch schon versucht...ohne Erfolg
Eine Richtung haben wir ja schonmal. Vllt. kommt noch jemand hierher mit dem entscheidenden Tipp, ich komme später nochmal dazu.
Super! Würde ungern auf die Externalisierung verzichten.
Sowohl im pgfmanual also auch in pgfplots.pdf steht bei der Beschreibung der Externalisierung ein langer Abschnitt über "Support for Labels and References In External Files".
Danke für die Info Ulrike. Dies ist mir beim unzähligen durchsuchen des manuals nicht aufgefallen. Ich vermute allerdings, dass dies daran liegt, dass ich auch mehrmaligem Lesen nicht wirklich weiß, was ich genau tun muss.
Im wesentlichen heißt das, dass die Referenzen nur dann funktionieren, wenn du die Bilder extern z.B. durch Aufruf des makefile erzeugt. Der simple pdflatex --shell-escape-Weg geht nicht, weil da die zwei nötigen Aufrufe nicht gemacht werden können (warum nicht habe ich nicht untersucht, aber ich nehme an, Christian weiß schon, was er tut).
Davon ist auszugehen ;-) Ich denke, dass ich morgen mal etwas basteln werde. Egal wie es läuft, ich werde es auf jeden Fall hier posten!