
Это продолжениеРежим черновика в Tikz externalize скрывает графику, но не без externalize
Я пишу длинный документ, и компиляция занимает время. Некоторые графики включены как tikz (экспорт из matlab2tikz), а другие изображения просто включены с \includegraphics
. Я использую рабочий процесс latex -> dvips -> ps2pdf. Для ускорения документ находится в черновом режиме (чаще всего мне не интересно видеть все изображения). Для ускорения tikz экстернализация работает нормально.
Однако, как поясняется вРежим черновика в Tikz externalize скрывает графику, но не без externalize, tikz-draft приводит к маленьким квадратам. Первоначальный размер рисунка кажется потерянным, и документ начинает немного перемещаться.
Я получаю предупреждения:
Package pgf Warning: Missing width for image "pgflastimage" ("images/tikz/figure8") in draft mode.
(pgf) Using 1cm instead on input line 980.
Package pgf Warning: Missing height for image "pgflastimage" ("images/tikz/figure8") in draft mode.
(pgf) Using 1cm instead on input line 980.
и в результате получается просто маленькая коробка. Похоже, что он пытается найти правильный размер коробки и терпит неудачу. Есть ли обходной путь или исправление этой ошибки?
Моя экстернализация осуществляется
\tikzset{external/system call={latex \tikzexternalcheckshellescape -halt-on-error
-interaction=batchmode -jobname "\image" "\texsource" &&
dvips -o "\image".ps "\image".dvi && ps2eps "\image".ps;}}
который генерирует хорошие изображения .eps. Сгенерированные изображения хороши, и коробка будет иметь правильный размер, если включить ее вручную с помощью \includegraphics{figure0.eps}
.
Вот подход для возможного взлома. Сначала я включил свои цифры, \subimport{path}{filename.tikz}
которые помогают с подкаталогами, на основе пакета import
.
Исходя из этой идеи я начал заменять этот импорт на \tikzimport{path}{filename.tikz}
содержащий
\newcommand{\tikzimport}[2]{%
\ifdraft{%
% create counter, increment
\newstepcounter{\pgfkeysvalueof{/tikz/external/figure name}}%
% define next filename of externalized tikz file
\def\mynextfile{images/tikz/%
\pgfkeysvalueof{/tikz/external/figure name}%
\arabic{\pgfkeysvalueof{/tikz/external/figure name}}.eps}%
% check is file is there, then includegraphics the file
% as we are in draft, this gives a nice box
\IfFileExists{\mynextfile}{% show tikz
\includegraphics[scale=1]{\mynextfile}}{% fallback
\mbox{\nolinkurl{\mynextfile}}
}
}{% nodraft
\subimport{#1}{#2}%
}
Для этого требуется ifdraft
пакет и счетчик для каждого figure name
суффикса. Создание счетчика (если его нет) достигается путем
\makeatletter
\def\newstepcounter#1{%
\@ifundefined{c@#1}{%
\newcounter{#1}}{%
\stepcounter{#1}}%
}
\makeatother
Проблемы
Это не очень приятно...
внешний префикс tikz жестко закодирован, я понятия не имею, как извлечь префикс из внутренностей tikz. Префикс задается,
\tikzexternalize[prefix=images/tikz/]
но\pgfkeys{/tikz/external/prefix}
возвращается пустымУ меня есть несколько графиков, которые не экстернализуются, так как они возвращаются неправильно, если экстернализуются. Было бы хорошо проверить для каждого вызова, включена ли экстернализация для каждого графика.
Я устал
\newif\isexternal
\pgfkeys{/tikz/external/export/.is if=isexternal}
\isexternal
external
\else
not external
\fi
Однако этот тест все время дает ложный результат.