Полагаю, это очень особый случай, но это то, что мне нужно:
%&Testing
\documentclass{article}
\endofdump
\usepackage{pgfplots}
\usetikzlibrary{external}
\tikzexternalize
\begin{document}
\begin{tikzpicture}
\begin{axis}[xlabel=x axis label,ylabel=y axis label]
\addplot {x};
\end{axis}
\end{tikzpicture}
\end{document}
Я хочу иметь возможность включать и выключать tikz без необходимости перекомпилировать преамбулу, отсюда и \endofdump. Я создал заголовок с помощью MiKTeX и
etex -job-name=Testing -initialize "&pdflatex" mylatexformat.ltx Testing.tex
Когда я затем компилирую Testing.tex, я получаю следующее сообщение об ошибке:
! Package tikz Error: Sorry, the system call 'pdflatex -shell-escape -halt-on-e
rror -interaction=batchmode -jobname "Testing-figure0" "\def\tikzexternalrealjo
b{Testing}\input{Testing}"' did NOT result in a usable output file 'Testing-fig
ure0' (expected one of .pdf:.jpg:.jpeg:.png:).
Проверяя соответствующий файл журнала ( Testing-figure0.log
), я нахожу следующее:
! Undefined control sequence.
<recently read> \endofdump
l.3 \endofdump
Мне было интересно, как это исправить. Похоже, что внешнее задание tikz вводит преамбулу, но не использует пользовательский формат. Следовательно, оно не может понять \endofdump.
Я обнаружил, что это работает (возможно, это уже ответ).
%&Testing
\documentclass{article}
\ifcsname tikzexternalrealjob\endcsname\else\endofdump\fi
\usepackage{pgfplots}
\usetikzlibrary{external}
\tikzexternalize
\begin{document}
\begin{tikzpicture}
\begin{axis}[xlabel=x axis label,ylabel=y axis label]
\addplot {x};
\end{axis}
\end{tikzpicture}
\end{document}
Есть лучший способ сделать это?
решение1
Вы можете изменить макрос, содержащий внешний вызов pdflatex, чтобы вместо этого вызвать
etex '&mylatexformat'
Мне нужна была следующая командная строка, чтобы сделать формат
etex --job-name=testing --ini "&pdflatex" mylatexformat.ltx testing.tex
как только формат будет создан, добавьте следующее, чтобы tikz externalize использовал его
\def\zzz#1 #2\relax{%
\expandafter\def\csname pgfk@/tikz/external/system call\endcsname{etex '&mylatexformat' #2}%
}
\expandafter\expandafter\expandafter\zzz\csname pgfk@/tikz/external/system call\endcsname\relax
так что это работает без ошибок
%&Testing
\documentclass{article}
\endofdump
\usepackage{pgfplots}
\usetikzlibrary{external}
\def\zzz#1 #2\relax{%
\expandafter\def\csname pgfk@/tikz/external/system call\endcsname{etex '&mylatexformat' #2}%
}
\expandafter\expandafter\expandafter\zzz\csname pgfk@/tikz/external/system call\endcsname\relax
\begin{document}
\begin{tikzpicture}
\begin{axis}[xlabel=x axis label,ylabel=y axis label]
\addplot {x};
\end{axis}
\end{tikzpicture}
\end{document}
решение2
А как насчет дженерика \ifdefined\endofdump\endofdump\else\fi
?