CTeX-org / ctex-kit

Macro Packages and Scripts for Chinese TeX users
982 stars 124 forks source link

tikz/external 在 LuaLaTeX + CTeX 下无法输出外部图片 #505

Closed NominHanggai closed 4 years ago

NominHanggai commented 4 years ago

MWE是 (TeXLive2020)

\documentclass{article}
\usepackage{shellesc}
\usepackage{ctex}
\usepackage{tikz}
\usetikzlibrary{external}
\tikzexternalize
\begin{document}
    \begin{tikzpicture}
    \draw (0,0)--(0,1);
    \end{tikzpicture}
\end{document}

会提示

Sorry, the system call 'lualatex -shell-escape -halt-on-e rror -interaction=batchmode -jobname "doc-figure0" "\def\tikzexternalrealjob{do c}\input{doc}"' did NOT result in a usable output file 'doc-figure0' (expected one of .pdf:.jpg:.jpeg:.png:). Please verify that you have enabled system calls . For pdflatex, this is 'pdflatex -shell-escape'. Sometimes it is also named 'w rite 18' or something like that. Or maybe the command simply failed? Error mess ages can be found in 'doc-figure0.log'. If you continue now, I'll try to typese t the picture.

但换用 XeLaTeX 就完全没有错误,或者直接用 LuaLaTeX+luatexja-fontspec 也没有问题。请问如何解决这个错误呢?

PS:如错误提示中写的那样,编译时已经加了-shell-escape 的 flag,system call 为 lualatex -shell-escape ...

qinglee commented 4 years ago

提示说得很明白了,你编译时加选项 -shell-escape 了么?

NominHanggai commented 4 years ago

提示说得很明白了,你编译时加选项 -shell-escape 了么?

谢谢李清大大回复,我编译时一直加着 -shell-escape

muzimuzhi commented 4 years ago

升级所有宏包后,我在本地使用 lualatex -shell-escape 能正常编译下面的完整例子(你提供的例子不完整,缺少 \documentclass

\documentclass{ctexart}
\usepackage{tikz}
\usetikzlibrary{external}
\tikzexternalize % 根据下方评论指出的,添加此行

\begin{document}
\begin{tikzpicture}
  \draw (0, 0) rectangle (1, 1);
\end{tikzpicture}
\end{document}

如果你在升级所有宏包后仍遇到问题,可考虑提供宏包的版本信息。

NominHanggai commented 4 years ago

升级所有宏包后,我在本地使用 lualatex -shell-escape 能正常编译下面的完整例子(你提供的例子不完整,缺少 \documentclass

\documentclass{ctexart}
\usepackage{tikz}
\usetikzlibrary{external}

\begin{document}
\begin{tikzpicture}
  \draw (0, 0) rectangle (1, 1);
\end{tikzpicture}
\end{document}

如果你在升级所有宏包后仍遇到问题,可考虑提供宏包的版本信息。

谢谢您回复!是的,我编辑时不小心把\documentclass 删掉了,现在加上了,请见谅😂。 另外,如果要将 tikz 代码块输出成外部图片,确实需要命令 \tikzexternalize 来激活一下。您给的例子中没有这一行,所以不会出现错误。

muzimuzhi commented 4 years ago

另外,如果要将 tikz 代码块输出成外部图片,确实需要命令 \tikzexternalize 来激活一下。您给的例子中没有这一行,所以不会出现错误。

我也在粘贴到 github 时,多删了一行。加上 \tikzexternalize 后,我本地依然编译正常。

说得更仔细些:

按照以上步骤,你本地依然报错吗?

NominHanggai commented 4 years ago

另外,如果要将 tikz 代码块输出成外部图片,确实需要命令 \tikzexternalize 来激活一下。您给的例子中没有这一行,所以不会出现错误。

我也在粘贴到 github 时,多删了一行。加上 \tikzexternalize 后,我本地依然编译正常。

说得更仔细些:

  • texlive 2020
  • 执行 tlmgr update --all 更新所有宏包
  • #505 (comment) 中的例子存成 tikz-external.tex
  • 执行 lualatex -shell-escape tikz-external
  • 编译无错,生成的 tikz-external.pdf 包含一个正方形,同时生成了 tikz-external-figure0.pdf

按照以上步骤,你本地依然报错吗?

辛苦您!更新 CTeX 包之后不报错了。仔细看了一下,之前的错误与 https://github.com/CTeX-org/ctex-kit/issues/497 的相同,看来已被修复。昨天才装好 TeX Live 2020,以为足够新所以并未手动更新包。浪费了您这么多时间实在不好意思。

非常感谢!