这可能是我见过的最奇怪的 TeX 行为,这说明了很多问题。就标题而言,以下内容确实是 MWE:
\documentclass{memoir}
\settocdepth{subsection}
\usepackage{calc}
\usepackage{pgfplots}
\usepgfplotslibrary{external}
\tikzexternalize
\begin{document}
\begin{center}
\begin{tikzpicture}
\begin{axis}[view={45}{45}]
\addplot3[surf,samples=20,domain=-1:1,domain y=-1:1]
{1-exp(-x^2-y^2)};
\end{axis}
\end{tikzpicture}
\end{center}
\end{document}
删除包calc
或\settocdepth
定义,一切都会好起来。但是,当两者都存在时,pdflatex -shell-escape
将停止,输出日志中将显示以下内容:
! Undefined control sequence. \@calc@post@scan ...st@scan \else \def \calc@next
{\calc@error #1}\fi \fi \f...
l.14 \end{tikzpicture}
如果我想提交错误报告,我甚至不知道在哪里 :/ 有没有其他人看到这种行为,你能说出是什么原因造成的吗?
答案1
该软件包calc
将命令\setcounter
和朋友更改为脆弱的。所以你必须让它们变得健壮。下面的示例使用了etoolbox
with \robustify
:
\documentclass{memoir}
\usepackage{calc}
\usepackage{etoolbox}
\robustify\setcounter
\robustify\addtocounter
\robustify\setlength
\robustify\addtolength
\settocdepth{subsection}
\usepackage{pgfplots}
\usepgfplotslibrary{external}
\tikzexternalize
\begin{document}
\begin{center}
\begin{tikzpicture}
\begin{axis}[view={45}{45}]
\addplot3[surf,samples=20,domain=-1:1,domain y=-1:1]
{1-exp(-x^2-y^2)};
\end{axis}
\end{tikzpicture}
\end{center}
\end{document}
通常不需要calc
。相反,您应该使用 etex 命令\dimexpr
或numexpr
。这可以避免此类不良行为。
答案2
必须\settocdepth{subsection}
在 之后\tikzexternalize
。如果在包或文档类中使用 ,则包\AfterPreamble
中的宏etoolbox
对于防止出现此类情况很有用\settocdepth
,尽管回忆录手册中的建议(完全不要\settocdepth
在序言中使用)现在已经过时了。