我试图让它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}%
}
然后,在您的示例中替换nostarch
(mynostarch
并在文档主体中实际排版一些内容)应该可以顺利编译而不会出现错误。
编辑:正如 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}