tikz-pgf 与程序冲突

tikz-pgf 与程序冲突

我一直试图将其包含tikz在已包含的文档中program。我读到过一些文章说 tikz 应该包含在程序之前,因为程序使用了 tikz 的一个版本。所以把它放在后面是行不通的,这是真的(你会得到一个Missing \endcsname inserted错误),但对我来说放在前面也不行。

Bad character code (280)我遇到了类似program.sty 中的错误,Tab overflow位于 \BEGIN 第 11 行,以及其他多个错误。编译日志可以找到这里,错误从第 697 行开始。

我的问题类似于这个除了我根本不使用之外etex,所描述的错误似乎与 etex 有关。

这是一个最小的失败示例。如果我注释掉\usepackage{tikz},它就可以编译成功。程序本身被发现这里,因此我认为它的输入是正确的。

\documentclass[review]{article}
\usepackage[utf8]{inputenc}

\usepackage{tikz}
\usepackage{program}

\begin{document}

\begin{program}
    \mbox{A fast exponentiation procedure:}
    \BEGIN \\ %
    \FOR i:=1 \TO 10 \STEP 1 \DO
    |expt|(2,i); \\ |newline|() \OD %
    \rcomment{This text will be set flush to the right margin}
    \WHERE
    \PROC |expt|(x,n) \BODY
    z:=1;
    \DO \IF n=0 \THEN \EXIT \FI;
    \DO \IF |odd|(n) \THEN \EXIT \FI;
    \COMMENT{This is a comment statement};
    n:=n/2; x:=x*x \OD;
    \{ n>0 \};
    n:=n-1; z:=z*x \OD;
    |print|(z) \ENDPROC
    \END
\end{program}

\end{document}

知道为什么吗?

答案1

program软件包需要更新,您可以尝试联系作者,但目前您可以通过以下方式使其工作:

\documentclass[review]{article}
\usepackage[utf8]{inputenc}

\usepackage{tikz}

\let\oldchardef\chardef
\let\chardef\mathchardef
\usepackage{program}
\let\chardef\oldchardef

\begin{document}

\begin{program}
    \mbox{A fast exponentiation procedure:}
    \BEGIN \\ %
    \FOR i:=1 \TO 10 \STEP 1 \DO
    |expt|(2,i); \\ |newline|() \OD %
    \rcomment{This text will be set flush to the right margin}
    \WHERE
    \PROC |expt|(x,n) \BODY
    z:=1;
    \DO \IF n=0 \THEN \EXIT \FI;
    \DO \IF |odd|(n) \THEN \EXIT \FI;
    \COMMENT{This is a comment statement};
    n:=n/2; x:=x*x \OD;
    \{ n>0 \};
    n:=n-1; z:=z*x \OD;
    |print|(z) \ENDPROC
    \END
\end{program}

\end{document}

问题是,在 etex 下,自 1993 年左右以来,(e)tex 可以拥有超过 256 个 dimen 寄存器,因此您不能将数字存储为字符代码(在 etex 中最多为 255)

答案2

我是progam.sty的作者

我刚刚向 CTAN 上传了一个新版本,应该可以解决这个问题。

相关内容