미리 컴파일된 프리앰블을 사용하여 tikz 외부화

미리 컴파일된 프리앰블을 사용하여 tikz 외부화

이것은 매우 특별한 경우인 것 같지만, 제가 필요한 것은 다음과 같습니다.

%&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?

관련 정보