You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
107 lines
3.9 KiB
107 lines
3.9 KiB
% Copyright 2008 by Christian Feuersaenger
|
|
%
|
|
% This file may be distributed and/or modified
|
|
%
|
|
% 1. under the LaTeX Project Public License and/or
|
|
% 2. under the GNU Public License.
|
|
%
|
|
% See the file doc/generic/pgf/licenses/LICENSE for more details.
|
|
%
|
|
%
|
|
% This file provides a high-level automatic export feature for tikz pictures.
|
|
% It allows to export EACH SINGLE FIGURE into a separate PDF.
|
|
%
|
|
% The simplest way is to use
|
|
%
|
|
% \tikzexternalize{myarticle}
|
|
%
|
|
% it simply converts every figure using the write18 method. If that is not possible,
|
|
% you need to reconfigure \tikzexternalize: it can generate a list of figure file names
|
|
% and you need to generate these figures manually (or with a script).
|
|
%
|
|
% It replaces \tikzpicture/ \endtikzpicture and \tikz and invokes \beginpgfgraphicnamed ... \endpgfgraphicnamed
|
|
% commands if necessary.
|
|
|
|
% load this package in order to get \pdf@mdfivesum .
|
|
% \pdf@mdfivesum is available for pdftex and lualatex and computes the
|
|
% md5 sum. Note that pdftex has \pdfmdfivesum, but lualatex does not
|
|
% have it.
|
|
%
|
|
% ... also used for \pdf@shellescape.
|
|
\usepackage{pdftexcmds}
|
|
\pgfutil@IfFileExists{atveryend.sty}{%
|
|
\usepackage{atveryend}%
|
|
}{%
|
|
\message{! Package tikz Warning: \string\usepackage{atveryend} impossible. Automatic resolving of references within external files impossible.}%
|
|
}%
|
|
|
|
% source generic implementation:
|
|
\input tikzexternalshared.code.tex
|
|
|
|
\pgfutil@IfUndefined{pdf@mdfivesum}{}{%
|
|
\let\tikzexternal@mdfivesum=\pdf@mdfivesum
|
|
}%
|
|
|
|
\def\tikzexternal@TEXDIALECT@begpicture{\begin{tikzpicture}}
|
|
\def\tikzexternal@TEXDIALECT@endpicture{\end{tikzpicture}}%
|
|
|
|
% this latex specific this assumes it starts at the beginning of an
|
|
% environment. The environment is named
|
|
% '\tikzexternal@laTeX@collect@until@end@tikzpicturetikzpicturestring'.
|
|
%
|
|
% Everything up to \end{<name>} will be collected and passed as
|
|
% argument to the macro '#1'.
|
|
%
|
|
% This does also work if <name> is NOT tikzpicture!
|
|
\def\tikzexternal@TEXDIALECT@collectpicture#1{%
|
|
\begingroup
|
|
\t@tikzexternal@tmpa={}%
|
|
\tikzexternal@laTeX@collect@until@end@tikzpicture{#1}%
|
|
}
|
|
|
|
% Loop until we find '\end{tikzpicture}'. We have to make sure that
|
|
% even strings like '#1' are allowed inside of the collected argument.
|
|
\long\def\tikzexternal@laTeX@collect@until@end@tikzpicture#1#2\end#3{%
|
|
\def\tikzexternal@laTeX@collect@until@end@tikzpicture@{#3}%
|
|
\ifx\tikzexternal@laTeX@collect@until@end@tikzpicture@\tikzexternal@laTeX@collect@until@end@tikzpicturetikzpicturestring
|
|
\t@tikzexternal@tmpa=\expandafter{\the\t@tikzexternal@tmpa #2}%
|
|
\edef\tikzexternal@TEXDIALECT@collectpicture@next{%
|
|
\noexpand\endgroup
|
|
\noexpand#1{\the\t@tikzexternal@tmpa}%
|
|
}%
|
|
\t@tikzexternal@tmpa={}% release memory.
|
|
\else
|
|
\t@tikzexternal@tmpa=\expandafter{\the\t@tikzexternal@tmpa #2\end{#3}}%
|
|
\def\tikzexternal@TEXDIALECT@collectpicture@next{%
|
|
\tikzexternal@laTeX@collect@until@end@tikzpicture{#1}}%
|
|
\fi
|
|
\tikzexternal@TEXDIALECT@collectpicture@next
|
|
}%
|
|
\def\tikzexternal@laTeX@collect@until@end@tikzpicturetikzpicturestring{tikzpicture}%
|
|
|
|
\def\tikzexternal@handle@landscape{%
|
|
\ltx@ifpackageloaded{pdflscape}{%
|
|
% Work around a bug in conjunction with pdflscape and
|
|
% external: without this optimize-away-instruction, the
|
|
% externalized image would be rotated - and it will be rotated
|
|
% once more again when it is included.
|
|
%
|
|
% if we "optimize it away", the landscape stuff will be
|
|
% omitted. I hope this is enough... might not be entirely
|
|
% fool-proof; perhaps we need to set it to \relax. For now, it
|
|
% will probably do the job
|
|
\tikzset{
|
|
external/.cd,
|
|
optimize command away=\landscape,
|
|
optimize command away=\endlandscape
|
|
}%
|
|
}{%
|
|
}%
|
|
}%
|
|
|
|
\AtBeginDocument{%
|
|
\pgfutil@ifundefined{tikzexternalrealjob}{%
|
|
\global\let\tikzexternalrealjob=\jobname
|
|
}{}%
|
|
\tikzexternal@handle@landscape
|
|
}%
|
|
|