方程式各部分与 tikzexternalize 之间的箭头

方程式各部分与 tikzexternalize 之间的箭头

在我的文档中,我有一个方程式,我想用箭头连接两个部分,就像 Alan Munn 做的那样这里。当我复制他的示例使用时\tikzexternalize,我收到错误

! tikz 软件包错误:抱歉,系统调用“pdflatex -shell-escape -halt-on-error -interaction=batchmode -jobname "texstudio_v59040-figure2" "\def\tikzexternalrealjob{texstudio_v59040}\input{texstudio_v59040}"”未产生可用的输出文件“texstudio_v59040-figure2”(预期为 .pdf:.jpg:.jpeg:.png: 之一)。请确认您已启用系统调用。对于 pdflatex,这是“pdflatex -shell-escape”。有时它也被命名为“write 18”或类似名称。或者命令可能只是失败了?错误消息可以在“texstudio_v59040-figure2.log”中找到。如果您现在继续,我会尝试排版图片。

!包 pgf 错误:没有已知的名为 a 的形状。

!包 pgf 错误:没有已知名为 b 的形状。

我的问题是,是否有办法解决这个问题。这是 MWE(再次感谢原始答案

\documentclass{article}
\usepackage{amsmath}
\usepackage{tikz}
\usetikzlibrary{external}
\tikzexternalize

\newcommand{\tikzmark}[1]{\tikz[overlay,remember picture] \node (#1) {};}

\tikzset{square arrow/.style={
    to path={-- ++(0,-.25)  -| (\tikztotarget) \tikztonodes},below,pos=.25}}

\begin{document}
\begin{equation}
  a\tikzmark{a}x^2 + bx + c = 5\tikzmark{b}x^2 + bx + c.
  \tikz[overlay,remember picture]
   {\path[draw,->,square arrow] (b.south) to node{x} (a.south) ;
    }
\end{equation}
\end{document}

编辑:在 MWE 中,可以在解决问题的环境\tikzset{external/export=false}之前和\tikzset{external/export=false}之后添加equation,但总的来说,将所有内容外部化以加快编译速度会更好。

答案1

与将其包含在内相比,在每个编译中创建此箭头可能并不需要花费太多时间\includegraphics

我建议你使用你的想法,禁用和启用方程周围的外部化。为了省去一些麻烦,你可以重新定义方程环境以包含这一点。

由于您正在使用amsmath环境的定义将是

\renewenvironment{equation}{%
  \incr@eqnum
  \mathdisplay@push
  \st@rredfalse \global\@eqnswtrue
  \mathdisplay{equation}%
}{%
  \endmathdisplay{equation}%
  \mathdisplay@pop
  \ignorespacesafterend
}

您可以在序言中用类似以下的方式更改此设置:

\makeatletter
\renewenvironment{equation}{%
  \incr@eqnum
  \mathdisplay@push
  \st@rredfalse \global\@eqnswtrue
  \tikzexternaldisable
  \mathdisplay{equation}%
}{%
  \endmathdisplay{equation}%
  \tikzexternalenable
  \mathdisplay@pop
  \ignorespacesafterend
}
\makeatother

那么你肯定不会遇到这个问题。我认为将箭头外部化会很困难,因为它总共在三个 tikz 环境中使用,但其他人可能有解决方案!


更新

这里有一个更好的解决方案,可以帮你省去寻找正确定义的麻烦。使用

\usepackage{etoolbox} 
\AtBeginEnvironment{equation}{\tikzexternaldisable}
\AtEndEnvironment{equation}{\tikzexternalenable}

并替代方程适用于您想要使用的任何环境。阅读更多内容etoolbox手册

相关内容