在我的 Latex 文件中,我使用避免重新编译的选项,并且使用tikz
伪代码,但似乎环境中的某些命令被识别为 PGF 命令并引发错误。external
algpseudocodex
algorithmic
这是最小代码:
\documentclass{article}
\usepackage{algorithm}
\usepackage{algorithmicx}
\usepackage{algpseudocodex}
\usepackage{tikz}
\usetikzlibrary{external}
\tikzexternalize[prefix=tikz/]
\begin{document}
\begin{tikzpicture}
\node[draw=red, fill=yellow] {hello};
\end{tikzpicture}
\begin{algorithm}[hbt!]
\label{alg:my-algorithm}
\begin{algorithmic}[1]
\Require $n$
\Ensure $s$
\For{$i \gets 1$ to $n$}
\State $s \gets s + i$
\EndFor
\State \Return $s$
\end{algorithmic}
\end{algorithm}
\end{document}
错误信息的部分内容如下:
Missing number, treated as zero.
<to be read again>
\relax
l.32 \State
\Return $s$
Illegal unit of measure (pt inserted).
<to be read again>
\relax
l.32 \State
\Return $s$
Package pgf Error: No shape named `algpx@indentStart-0' is known.
See the pgf package documentation for explanation.
Type H <return> for immediate help.
...
l.32 \State
\Return $s$
Undefined control sequence.
<argument> \algpx
@indStartX ,\algpx @indEndY
l.32 \State
\Return $s$
但是如果我不使用 tikz 的外部功能,即,\usetikzlibrary{external}
并且\tikzexternalize[prefix=tikz/]
进行了注释,则不会出现错误。我应该如何插入伪代码并避免重新编译未修改的 tikz 图形?
答案1
该algopseudocodex
包内部使用 TikZ。最简单的解决方案是algorithmic
通过执行以下操作禁用环境的外部化
\AddToHook{env/algorithmic/begin}{\tikzexternaldisable}
代码
\documentclass{article}
\usepackage{algorithm}
\usepackage{algorithmicx}
\usepackage{algpseudocodex}
\usepackage{tikz}
\usetikzlibrary{external}
\tikzexternalize[prefix=tikz/]
\AddToHook{env/algorithmic/begin}{\tikzexternaldisable}
\begin{document}
\begin{tikzpicture}
\node[draw=red, fill=yellow] {hello};
\end{tikzpicture}
\begin{algorithm}[hbt!]
\label{alg:my-algorithm}
\begin{algorithmic}[1]
\Require $n$
\Ensure $s$
\For{$i \gets 1$ to $n$}
\State $s \gets s + i$
\EndFor
\State \Return $s$
\end{algorithmic}
\end{algorithm}
\end{document}