我一直试图将其包含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 上传了一个新版本,应该可以解决这个问题。