Überarbeitungsverlauf[Zurück]
Klicke auf Einblenden/Ausblenden von Überarbeitungen 6

26 Sep '14, 08:57

gast3's gravatar image

gast3
(ausgesetzt)

Solange, bis die `external` Bibliothek für TikZ selbst eine Möglichkeit bietet, zwei statt nur einem externen Aufruf zu tätigen, kann man genau das mit folgendem Patch erreichen: \usepackage{etoolbox} \makeatletter \newif\if@twoexternalruns \newcommand*{\nextwithtwoexternalruns}{\@twoexternalrunstrue} \renewcommand*{\@twoexternalrunsfalse}{\global\let\if@twoexternalruns\iffalse} \patchcmd\tikzexternal@externalizefig@systemcall@@ {\immediate\write18{\pgf@tempa}}% {\immediate\write18{\pgf@tempa}% \if@twoexternalruns\@twoexternalrunsfalse\immediate\write18{\pgf@tempa}\fi}% {}{\patchFailed} \makeatother Nun kann man unmittelbar vor `\begin{tikzpicture}` mit `\nextwithtwoexternalruns` dafür sorgen, dass für genau diese nächste Umgebung automatisch zwei externe Aufrufe statt nur einem durchgeführt werden. Insgesamt sähe das dann also beispielsweise so aus: \RequirePackage{filecontents} \begin{filecontents}{\jobname Data.asc} 2 224694229071385000 8.97 8.72 3.275 5 561735572678462000 8.25 5.25 4.91 10 1123471145356920000 8.5 4.92 4.92 30 3370413436070770000 7.75 3.5 6.19 60 6740826872141550000 7.09 4.5 5.82 120 13481653744283100000 6.85 4.75 6.06 \end{filecontents} \documentclass{article} \usepackage{scrlfile} \usepackage{pgfplots} \pgfplotsset{compat=1.10} \usepackage{siunitx} \usepgfplotslibrary{external} \tikzexternalize \tikzsetexternalprefix{external_figs/} \usepackage{etoolbox} \makeatletter \newif\if@twoexternalruns \newcommand*{\nextwithtwoexternalruns}{\@twoexternalrunstrue} \renewcommand*{\@twoexternalrunsfalse}{\global\let\if@twoexternalruns\iffalse} \patchcmd\tikzexternal@externalizefig@systemcall@@ {\immediate\write18{\pgf@tempa}}% {\immediate\write18{\pgf@tempa}% \if@twoexternalruns\@twoexternalrunsfalse\immediate\write18{\pgf@tempa}\fi}% {}{\patchFailed} \makeatother \begin{document} \nextwithtwoexternalruns \begin{tikzpicture} \begin{axis}[ xlabel = {xlabel}, ylabel = {ylabel 1}, smooth, axis y line*=left, xmin = -2e18, xmax = 1.6e19, scaled x ticks=false, xticklabel={\pgfmathprintnumber[sci,sci generic={mantissa sep=\times,exponent={10^{##1}}}]{\tick}}, xtick = {0,5e18,1e19,1.5e19}, legend style={draw=none}, ] \addplot[black, mark =x] table [x index = 1, y index = 2] {\jobname Data.asc}; \label{1} \addplot[red, mark =x] table [x index = 1, y index = 3] {\jobname Data.asc}; \label{2} \end{axis} \begin{axis}[ ylabel = {ylabel 2}, smooth, axis y line*=right, xmin = -2e18, xmax = 1.6e19, ymin = 2.9, ymax = 7.2, %ytick ={3,4,...,9}, xmajorticks=false, scaled x ticks=false, legend style={draw=none}, ] \addlegendimage{/pgfplots/refstyle=1}\addlegendentry{\scriptsize{name 1}}; \addlegendimage{/pgfplots/refstyle=2}\addlegendentry{\scriptsize{name 2}}; \addplot[green, mark =x] table [x index = 1, y index = 4] {\jobname Data.asc}; \addlegendentry{\scriptsize{name 3}}; \end{axis} \end{tikzpicture} \end{document} Das schöne daran ist: Da genau der eine Aufruf der `external` Bibliothek verdoppelt wird, müsste es vollkommen unabhängig von Betriebssystem funktionieren. Ich erhalte auf diesem Weg direkt: ![Ergebnis nach dem ersten Lauf][1] In der `log`-Datei ist zu erkennen, dass auch tatsächlich zwei `pdflatex`-Aufrufe von `external` durchgeführt werden: `===== <pre>`===== 'mode=convert with system call': Invoking 'pdflatex -shell-escape -halt-o n-error -interaction=batchmode -jobname "external_figs/test-figure0" "\def\tikz externalrealjob{test}\input{test}"' ======== \openout3 = `test.auxlock'. runsystem(pdflatex -shell-escape -halt-on-error -interaction=batchmode -jobname "external_figs/test-figure0" "\def\tikzexternalrealjob{test}\input{test}")...e xecuted. runsystem(pdflatex -shell-escape -halt-on-error -interaction=batchmode -jobname "external_figs/test-figure0" "\def\tikzexternalrealjob{test}\input{test}")...e xecuted. \openout3 = `test.auxlock'.` `test.auxlock'.`</pre> Beim nächsten Lauf erkennt `external` außerdem, dass nichts zu tun ist, so dass *beide* Aufrufe entfallen. Nachteil ist, dass bei Fehlern im TikZ-Code trotzdem zwei Aufrufe stattfinden, der Fehler also zweimal auftritt. [1]: http://texwelt.de/wissen/upfiles/test13.png
Klicke auf Einblenden/Ausblenden von Überarbeitungen 5

26 Sep '14, 08:57

gast3's gravatar image

gast3
(ausgesetzt)

Solange, bis die `external` Bibliothek für TikZ selbst eine Möglichkeit bietet, zwei statt nur einem externen Aufruf zu tätigen, kann man genau das mit folgendem Patch erreichen: \usepackage{etoolbox} \makeatletter \newif\if@twoexternalruns \newcommand*{\nextwithtwoexternalruns}{\@twoexternalrunstrue} \renewcommand*{\@twoexternalrunsfalse}{\global\let\if@twoexternalruns\iffalse} \patchcmd\tikzexternal@externalizefig@systemcall@@ {\immediate\write18{\pgf@tempa}}% {\immediate\write18{\pgf@tempa}% \if@twoexternalruns\@twoexternalrunsfalse\immediate\write18{\pgf@tempa}\fi}% {}{\patchFailed} \makeatother Nun kann man unmittelbar vor `\begin{tikzpicture}` mit `\nextwithtwoexternalruns` dafür sorgen, dass für genau diese nächste Umgebung automatisch zwei externe Aufrufe statt nur einem durchgeführt werden. Insgesamt sähe das dann also beispielsweise so aus: \RequirePackage{filecontents} \begin{filecontents}{\jobname Data.asc} 2 224694229071385000 8.97 8.72 3.275 5 561735572678462000 8.25 5.25 4.91 10 1123471145356920000 8.5 4.92 4.92 30 3370413436070770000 7.75 3.5 6.19 60 6740826872141550000 7.09 4.5 5.82 120 13481653744283100000 6.85 4.75 6.06 \end{filecontents} \documentclass{article} \usepackage{scrlfile} \usepackage{pgfplots} \pgfplotsset{compat=1.10} \usepackage{siunitx} \usepgfplotslibrary{external} \tikzexternalize \tikzsetexternalprefix{external_figs/} \usepackage{etoolbox} \makeatletter \newif\if@twoexternalruns \newcommand*{\nextwithtwoexternalruns}{\@twoexternalrunstrue} \renewcommand*{\@twoexternalrunsfalse}{\global\let\if@twoexternalruns\iffalse} \patchcmd\tikzexternal@externalizefig@systemcall@@ {\immediate\write18{\pgf@tempa}}% {\immediate\write18{\pgf@tempa}% \if@twoexternalruns\@twoexternalrunsfalse\immediate\write18{\pgf@tempa}\fi}% {}{\patchFailed} \makeatother \begin{document} \nextwithtwoexternalruns \begin{tikzpicture} \begin{axis}[ xlabel = {xlabel}, ylabel = {ylabel 1}, smooth, axis y line*=left, xmin = -2e18, xmax = 1.6e19, scaled x ticks=false, xticklabel={\pgfmathprintnumber[sci,sci generic={mantissa sep=\times,exponent={10^{##1}}}]{\tick}}, xtick = {0,5e18,1e19,1.5e19}, legend style={draw=none}, ] \addplot[black, mark =x] table [x index = 1, y index = 2] {\jobname Data.asc}; \label{1} \addplot[red, mark =x] table [x index = 1, y index = 3] {\jobname Data.asc}; \label{2} \end{axis} \begin{axis}[ ylabel = {ylabel 2}, smooth, axis y line*=right, xmin = -2e18, xmax = 1.6e19, ymin = 2.9, ymax = 7.2, %ytick ={3,4,...,9}, xmajorticks=false, scaled x ticks=false, legend style={draw=none}, ] \addlegendimage{/pgfplots/refstyle=1}\addlegendentry{\scriptsize{name 1}}; \addlegendimage{/pgfplots/refstyle=2}\addlegendentry{\scriptsize{name 2}}; \addplot[green, mark =x] table [x index = 1, y index = 4] {\jobname Data.asc}; \addlegendentry{\scriptsize{name 3}}; \end{axis} \end{tikzpicture} \end{document} Das schöne daran ist: Da genau der eine Aufruf der `external` Bibliothek verdoppelt wird, müsste es vollkommen unabhängig von Betriebssystem funktionieren. Ich erhalte auf diesem Weg direkt: ![Ergebnis nach dem ersten Lauf][1] In der `log`-Datei ist zu erkennen, dass auch tatsächlich zwei `pdflatex`-Aufrufe von `external` durchgeführt werden: ``===== `===== 'mode=convert with system call': Invoking 'pdflatex -shell-escape -halt-o n-error -interaction=batchmode -jobname "external_figs/test-figure0" "\def\tikz externalrealjob{test}\input{test}"' ======== \openout3 = `test.auxlock'. runsystem(pdflatex -shell-escape -halt-on-error -interaction=batchmode -jobname "external_figs/test-figure0" "\def\tikzexternalrealjob{test}\input{test}")...e xecuted. runsystem(pdflatex -shell-escape -halt-on-error -interaction=batchmode -jobname "external_figs/test-figure0" "\def\tikzexternalrealjob{test}\input{test}")...e xecuted. \openout3 = `test.auxlock'.`` `test.auxlock'.` Beim nächsten Lauf erkennt `external` außerdem, dass nichts zu tun ist, so dass *beide* Aufrufe entfallen. Nachteil ist, dass bei Fehlern im TikZ-Code trotzdem zwei Aufrufe stattfinden, der Fehler also zweimal auftritt. [1]: http://texwelt.de/wissen/upfiles/test13.png
Klicke auf Einblenden/Ausblenden von Überarbeitungen 4

26 Sep '14, 08:56

gast3's gravatar image

gast3
(ausgesetzt)

Klicke auf Einblenden/Ausblenden von Überarbeitungen 3

26 Sep '14, 08:56

gast3's gravatar image

gast3
(ausgesetzt)

Klicke auf Einblenden/Ausblenden von Überarbeitungen 2
Ergänzende Informationen

26 Sep '14, 08:55

gast3's gravatar image

gast3
(ausgesetzt)

Klicke auf Einblenden/Ausblenden von Überarbeitungen 1

26 Sep '14, 08:50

gast3's gravatar image

gast3
(ausgesetzt)