\thelstlisting 未定义 nostarch

\thelstlisting 未定义 nostarch

我试图让它nostarch工作,但它根本无法启动。我只是一个低级用户,所以这些错误让我很困惑。

发行版中的示例文档nssample.tex给出了与这个简单示例相同的错误:

\documentclass[nocfonts]{nostarch}
\begin{document}
\end{document}

我得到了错误:

! LaTeX Error: \thelstlisting undefined.

See the LaTeX manual or LaTeX Companion for explanation.
Type  H <return>  for immediate help.
 ...                                              

l.580 \renewcommand \thelstlisting

显然nostarch是在拉入listings(或者是吗listing?),或者更准确地说,它需要它,但它没有拉入?我在 OS X Lion 上使用完全更新的 TeXLive 2011。

答案1

1.4 版listings.sty包含以下代码片段:

\AtBeginDocument{
  \@ifundefined{thechapter}{\let\lst@ifnumberbychapter\iffalse}{}
  \lst@ifnumberbychapter
      \newcounter{lstlisting}[chapter]
      \gdef\thelstlisting%
           {\ifnum \c@chapter>\z@ \thechapter.\fi \@arabic\c@lstlisting}
  \else
      \newcounter{lstlisting}
      \gdef\thelstlisting{\@arabic\c@lstlisting}
  \fi}

1.3 版nostarch.cls包含以下代码片段:

\renewcommand \thelstlisting
     {\ifnum \c@chapter>\z@ \thechapter-\fi \@arabic\c@lstlisting}

换句话说,nostarch尝试在前导码中重新定义一个计数器( ),该计数器仅在文档主体的开头lstlisting定义。这会导致您观察到的错误消息。listings

解决方案:复制nostarch.cls到您的工作目录并将副本重命名为,例如。mynostarch.cls在重命名的副本中,将上述代码行替换为

\AtBeginDocument{%
  \renewcommand \thelstlisting
       {\ifnum \c@chapter>\z@ \thechapter-\fi \@arabic\c@lstlisting}%
}

然后,在您的示例中替换nostarchmynostarch并在文档主体中实际排版一些内容)应该可以顺利编译而不会出现错误。

编辑:正如 Peter Grill 在一条(现已删除)评论中指出的那样,添加\def\thelstlisting{} \documentclass将删除原始示例中的错误消息。但是,nostarch尝试重新定义\thelstlisting(将点替换为破折号)将不适用。以下是另一种解决方案,它不涉及修改自定义副本nostarch.sty

\def\thelstlisting{}

\documentclass[nocfonts]{nostarch}

\makeatletter
\AtBeginDocument{%
  \renewcommand \thelstlisting
       {\ifnum \c@chapter>\z@ \thechapter-\fi \@arabic\c@lstlisting}%
}
\makeatother

\begin{document}

\chapter{First}

\begin{lstlisting}[caption={A listing}]
foo
\end{lstlisting}

\end{document}

相关内容