升级到 MacTeX 2011 (TeXLive) 后出现奇怪的错误

升级到 MacTeX 2011 (TeXLive) 后出现奇怪的错误

我有自己的个人风格文件,用于考试。它会记录每个问题的分数,并在首页上打印评分表,自动将所有分数加起来计算总分。它的工作方式与 中的分数表略有不同exam.sty,否则我会使用它。

无论如何,当我升级到 MacTeX 2011 时,我开始收到以下错误:

./M113F10E1.tex:25: Undefined control sequence.
\rc@set ...safe@activestrue\endcsname \rc@refused 
                                                  {#4}\expandafter \rc@@set ...
l.25 \PointTable{1}
                   \nextpage

\PointTable是我创建成绩表的命令。系统指示它挂在rc@refused。上面的控制序列不在我的样式文件中,所以我假设它一定在我需要的样式文件之一中。我的样式文件使用calccommentifthen和。refcounttabls

有人见过这个吗?有人能指出在哪里可以看吗?我不想发布我的样式文件,因为它太长了。我已经好几年没弄它了(在我修改它之前,代码最初来自其他地方)。我一直想更新这个包,但现在,我想让它再次工作。

希望这不是一个愚蠢的问题。

答案1

我敢肯定这是 中的一个错误refcount。在 TL2010 和 TL2011 中,我得到了一个匹配项\rc@refused,并且它符合您的错误,因为它是:

\def\rc@set#1#2#3#4{%
  \begingroup
    \csname @safe@activestrue\endcsname
    \rc@refused{#4}%
    \expandafter\rc@@set\csname r@#4\endcsname{#1}{#2}{#3}%
  \endgroup
}

幸运的是,我使用的是 Debian 系统,所以有一份refcount.sty来自 TL2009 的古老副本,但没什么用。我还有一些:

\long\def\rc@refused#1{%
  \expandafter\ifx\csname r@#1\endcsname\relax
    \protect\G@refundefinedtrue
    \@latex@warning{%
      Reference `#1' on page \thepage\space undefined%
    }%
  \fi
}

\newcommand*{\refused}[1]{%
  \begingroup
    \csname @safe@activestrue\endcsname
    \rc@refused{#1}{}%
  \endgroup
}

\def\rc@set#1#2#3#4{%
  \begingroup
    \csname @safe@activestrue\endcsname
    \rc@refused{#4}%
    \expandafter\rc@@set\csname r@#4\endcsname{#1}{#2}{#3}%
  \endgroup
}

的定义\refused已发生很大变化,原来属于的位置现在\rc@refused被以下之一所占据:

  \ltx@IfUndefined{r@#1}{%
    \protect\G@refundefinedtrue
    \rc@WarningUndefined{#1}%
  }{}%

或者

  \ltx@IfUndefined{r@#1}{%
    \csname protect\expandafter\endcsname
    \csname G@refundefinedtrue\endcsname
    \rc@WarningUndefined{#1}%
  }{}%

(取决于测试是否\G@refundefinedtrue定义的某些条件)。因此,您可以尝试用以下代码之一替换\rc@refused定义。要正确执行此操作,您可能应该执行以下操作:\rc@set

\ltx@IfUndefined{G@refundefinedtrue}{%
\def\rc@set#1#2#3#4{%
  \begingroup
    \csname @safe@activestrue\endcsname
      \ltx@IfUndefined{r@#1}{%
        \protect\G@refundefinedtrue
        \rc@WarningUndefined{#1}%
      }{}%
    \expandafter\rc@@set\csname r@#4\endcsname{#1}{#2}{#3}%
  \endgroup
}
}{%
\def\rc@set#1#2#3#4{%
  \begingroup
    \csname @safe@activestrue\endcsname
      \ltx@IfUndefined{r@#1}{%
        \csname protect\expandafter\endcsname
        \csname G@refundefinedtrue\endcsname
        \rc@WarningUndefined{#1}%
      }{}%
    \expandafter\rc@@set\csname r@#4\endcsname{#1}{#2}{#3}%
  \endgroup
}
}

(未经测试......这可能会以意想不到的方式中断)。

但如果我是对的,那么这确实应该作为一个错误报告给 Heiko Oberdiek。

答案2

我联系了 Heiko,他知道这件事并修复了它。不过他还没有上传。我将以下内容附加到我的 .sty 文件末尾,一切正常。谢谢你的帮助。

\makeatletter
\let\rc@refused\refused
\makeatother

相关内容