Wie kann ich TikZ in einer solchen Konfiguration externalisieren? Hier ist mein MWE:
Präambel.tex:
\documentclass[a4paper, 10pt]{article}
\usepackage[left=30mm, right=10mm, top=15mm, bottom=25mm]{geometry}
\usepackage[english, russian]{babel}
\usepackage{amsmath, amssymb, mathrsfs, bm}
\usepackage{indentfirst, graphicx}
\usepackage[labelsep = period]{caption}
\usepackage[labelformat=simple]{subcaption}
\endofdump
dokument.tex:
\endofdump
\usepackage{fontspec}
\setmainfont{FreeSerif}
\usepackage{unicode-math}
\setmathfont{XITS Math}
\usepackage{pgfplots}
\usepackage{tikz}
\usetikzlibrary{pgfplots.external}
\tikzset{external/system call={lualatex -fmt=preamble.fmt \tikzexternalcheckshellescape -halt-on-error -interaction=batchmode -jobname "\image" "\texsource"}}
\tikzexternalize
\begin{document}
lorem ipsum $x^2 + y^2 = 4$
\tikzsetnextfilename{picturrre}
\begin{tikzpicture}
\draw (0, 0) -- (2, 2);
\end{tikzpicture}
\end{document}
Befehlszeilen:
luatex -ini -jobname="preamble" "&lualatex" mylatexformat.ltx preamble.tex
lualatex --shell-escape -synctex=1 -interaction=nonstopmode --fmt preamble --output-directory ./out "document".tex
Fehlermeldung: document.log (Auszug):
...
\openout3 = picturrre.md5
\openout3 = document.auxlock
===== 'mode=convert with system call': Invoking 'lualatex -fmt=preamble.fmt -she
ll-escape -halt-on-error -interaction=batchmode -jobname "picturrre" "\def\tikze
xternalrealjob{document}\input{document}"' ========
\openout3 = document.auxlock
! Package tikz Error: Sorry, the system call 'lualatex -fmt=preamble.fmt -shell
-escape -halt-on-error -interaction=batchmode -jobname "picturrre" "\def\tikzex
ternalrealjob{document}\input{document}"' did NOT result in a usable output fil
e 'picturrre' (expected one of .pdf:.jpg:.jpeg:.png:). Please verify that you h
ave enabled system calls. For pdflatex, this is 'pdflatex -shell-escape'. Somet
imes it is also named 'write 18' or something like that. Or maybe the command s
imply failed? Error messages can be found in 'picturrre.log'. If you continue n
ow, I'll try to typeset the picture.
See the tikz package documentation for explanation.
Type H <return> for immediate help.
...
l.29 \end{tikzpicture}
This error message was generated by an \errmessage
command, so I can't give any explicit help.
Pretend that you're Hercule Poirot: Examine all clues,
and deduce the truth by order and method.
...
picturrre.log (vollständig):
This is LuaTeX, Version 1.0.4 (TeX Live 2017/Debian) (format=preamble 2019.12.3) 3 DEC 2019 12:54
system commands enabled.
**\def\tikzexternalrealjob{document}\input{document}
Lua module: luaotfload-main 2017/01/29 2.80001 OpenType layout system.
Lua module: lualibs 2017-02-01 2.5 ConTeXt Lua standard libraries.
Lua module: lualibs-extended 2017-02-01 2.5 ConTeXt Lua libraries -- extended collection.(using write cache: /home/cloun/.texlive2017/texmf-var/luatex-cache/generic)(using read cache: /var/lib/texmf/luatex-cache/generic /home/cloun/.texlive2017/texmf-var/luatex-cache/generic)
luaotfload | conf : Root cache directory is /home/cloun/.texlive2017/texmf-var/luatex-cache/generic/names.
luaotfload | init : Loading fontloader “fontloader-2017-02-11.lua” from kpse-resolved path “/usr/share/texlive/texmf-dist/tex/luatex/luaotfload/fontloader-2017-02-11.lua”.
Lua-only attribute luaotfload@state = 5
Lua-only attribute luaotfload@noligature = 6
Lua-only attribute luaotfload@syllabe = 7
luaotfload | init : Context OpenType loader version “3.027”
Inserting `luaotfload.node_processor' at position 1 in `pre_linebreak_filter'.
Inserting `luaotfload.node_processor' at position 1 in `hpack_filter'.
Inserting `luaotfload.define_font' at position 1 in `define_font'.
Lua-only attribute luaotfload_color_attribute = 8
luaotfload | conf : Root cache directory is /home/cloun/.texlive2017/texmf-var/luatex-cache/generic/names.
Inserting `luaotfload.aux.set_sscale_dimens' at position 1 in `luaotfload.patch_font'.
Inserting `luaotfload.aux.patch_cambria_domh' at position 2 in `luaotfload.patch_font'.
Inserting `luaotfload.aux.fixup_fontdata' at position 1 in `luaotfload.patch_font_unsafe'.
Inserting `luaotfload.aux.set_capheight' at position 3 in `luaotfload.patch_font'.
Inserting `luaotfload.rewrite_fontname' at position 4 in `luaotfload.patch_font'.
luaotfload | main : initialization completed in 0.094 seconds
==============================================================================
JOB NAME : "picturrre"
CUSTOMISED FORMAT: "preamble"
PRELOADED FILES:
article.cls 2014/09/29 v1.4h Standard LaTeX document class
size10.clo 2014/09/29 v1.4h Standard LaTeX file (size option)
geometry.sty 2010/09/12 v5.6 Page Geometry
keyval.sty 2014/10/28 v1.15 key=value parser (DPC)
ifpdf.sty 2017/03/15 v3.2 Provides the ifpdf switch
ifvtex.sty 2016/05/16 v1.6 Detect VTeX and its facilities (HO)
ifxetex.sty 2010/09/12 v0.6 Provides ifxetex conditional
babel.sty 2018/02/14 3.18 The Babel package
english.ldf 2017/06/06 v3.3r English support from the babel system
russianb.ldf
amsmath.sty 2017/09/02 v2.17a AMS math features
amstext.sty 2000/06/29 v2.01 AMS text
amsgen.sty 1999/11/30 v2.0 generic functions
amsbsy.sty 1999/11/29 v1.2d Bold Symbols
amsopn.sty 2016/03/08 v2.02 operator names
amssymb.sty 2013/01/14 v3.01 AMS font symbols
amsfonts.sty 2013/01/14 v3.01 Basic AMSFonts support
mathrsfs.sty 1996/01/01 Math RSFS package v1.0 (jk)
bm.sty 2017/01/16 v1.2c Bold Symbol Support (DPC/FMi)
indentfirst.sty 1995/11/23 v1.03 Indent first paragraph (DPC)
graphicx.sty 2017/06/01 v1.1a Enhanced LaTeX Graphics (DPC,SPQR)
graphics.sty 2017/06/25 v1.2c Standard LaTeX Graphics (DPC,SPQR)
trig.sty 2016/01/03 v1.10 sin cos tan (DPC)
graphics.cfg 2016/06/04 v1.11 sample graphics configuration
luatex.def 2018/01/08 v1.0l Graphics/color driver for luatex
caption.sty 2016/02/21 v3.3-144 Customizing captions (AR)
caption3.sty 2016/05/22 v1.7-166 caption3 kernel (AR)
subcaption.sty 2016/05/22 v1.1-161 Sub-captions (AR)
umsa.fd 2013/01/14 v3.01 AMS symbols A
umsb.fd 2013/01/14 v3.01 AMS symbols B
ursfs.fd 1998/03/24 rsfs font definition file (jk)
==============================================================================
! Emergency stop.
<*> ...\tikzexternalrealjob{document}\input{document}
Here is how much of LuaTeX's memory you used:
6 strings out of 490450
100000,154059 words of node,token memory allocated
469 words of node memory still in use:
6 hlist, 2 vlist, 2 rule, 1 dir, 5 glue, 1 kern, 6 attribute, 49 glue_spec, 6
attribute_list, 1 write nodes
avail lists: 2:14,3:1,4:2,5:9,7:1,8:2
7965 multiletter control sequences out of 65536+600000
57 fonts using 4052259 bytes
9i,0n,26p,0b,31s stack positions out of 5000i,500n,10000p,200000b,100000s
! ==> Fatal error occurred, no output PDF file produced!
Diese Fehlermeldungen sind nicht informativ. Ich kann nicht finden, was mir fehlt. Ich hoffe, Sie können mir helfen.
Antwort1
Ich habe meine MWEs vorbereitet, um das Problem selbst zu veranschaulichen, aber ich würde in der Antwort tiefer gehen, um einigermaßen aufschlussreich zu sein.
Zuerst document.tex
wird mit eine vorkompilierte Präambel kompiliert --output-directory ./out
, was dazu führt, dass der mit -bezogene Müll in das Verzeichnis lualatex
umgeleitet wird , das die Projektwurzel ist.document
./out
.
Es ist phänomenologisch, dass manmüssen Sie die \endofdump
erneute Richtliniewenn er externe tikz syscall aufruft, wird eine entsprechende Zeichenfolge
\tikzset{external/system call={lualatex --shell-escape --fmt preamble --halt-on-error --output-directory ./out -jobname "\image" "\endofdump\texsource"}}
Wenn man jedoch --output-directory ./out
in diesem Tikzset-String erneut etwas angibt, wird die Kompilierung mit dem folgenden Fehler abgebrochen:
! error: (file picturrre.pdf) (pdf backend): cannot find image file 'picturrre.pdf'
Es scheint, dass das brandneue PDF mit Tikzpicture im Stammverzeichnis des Projekts liegen sollte, .
aber es befindet sich ./out
neben seinen MD5-, Log- und anderen Dateien auch in . Daher gibt es zwei Alternativen: Entweder man entfernt das Ausgabeverzeichnis aus dem Tikzset-String oder schreibt \tikzexternalize[prefix=out/]
.
Die zweite Variante führt dazu, dass das von Tikz ausgelagerte PDF-Bild mit seinen Satelliten in ./out/out
das Verzeichnis verschoben wird, diese aber in erwartet werden ./out
, und der folgende Fehler tritt auf:
! error: (file out/picturrre.pdf) (pdf backend): cannot find image file 'out/picturrre.pdf'
Wir versuchen also, aus der Tikzset-Zeichenfolge zu entfernen, --output-directory ./out
während wir das Tikz-Präfix beibehalten out/
. Dies führt dazu, dass das von Tikz ausgelagerte PDF-Bild mit seinen Partnern in ./out
das Verzeichnis verschoben wird, in dem sich der ganze andere Müll befindet, aber Sie benötigen ./out/out
das Verzeichnis trotzdem, da MD5-Dateien dorthin verschoben werden (ihr Pfad ist ./output-dir/externalize-prefix
, aber andere Dateien gehen nur in ./externalize-prefix
das Verzeichnis). Das Dokument wird einwandfrei kompiliert.
Wenn man jedoch gnuplot
mit tikz/pgf arbeitet, werden .gnuplot- und .table-Dateien in das Projektstammverzeichnis verschoben, da der --output-directory
Parameter in der tikzset-Zeichenfolge weggelassen wird. Daher ist es nicht möglich, Gnuplot-Müll ebenfalls in das Verzeichnis umzuleiten ./out
(aber wenn man das könnte, würde er schreiben
\pgfkeys{/pgf/plot/gnuplot call={cd out && gnuplot}}
danach, \begin{document}
um gnuplot zu zwingen, automatisch nach .gnuplot-Dateien zu suchen).