我已经尝试适应Joseph Wright 的模型 dtx 文件对于我基于该类编写的类article
(下面是一个简化的工作示例,我将其命名为democlass.dtx
)。但是当我运行时,pdflatex democlass.dtx
我收到错误! LaTeX Error: Two \LoadClass commands.
显然,只有一个\LoadClass
语句,因此它必须在某处第二次加载。
那么,当 .cls 文件基于类时,是否可以从 .dtx 文件中提取 .cls 文件article
?我到处寻找解决方案,但我不知所措。
% \iffalse meta-comment
% !TEX program = pdfLaTeX
%<*internal>
\iffalse
%</internal>
%<*readme>
demopkg --- readme text and license (truncated for this example)
%</readme>
%<*internal>
\fi
\def\nameofplainTeX{plain}
\ifx\fmtname\nameofplainTeX\else
\expandafter\begingroup
\fi
%</internal>
%<*install>
\input docstrip.tex
\keepsilent
\askforoverwritefalse
\preamble
demopkg --- readme text and license (truncated for this example)
\endpreamble
\postamble
Copyright, maintenance, and included files (truncated for this example)
\endpostamble
\usedir{tex/latex/demopkg}
\generate{
\file{\jobname.cls}{\from{\jobname.dtx}{class}}
}
%</install>
%<install>\endbatchfile
%<*internal>
\usedir{source/latex/demopkg}
\generate{
\file{\jobname.ins}{\from{\jobname.dtx}{install}}
}
\nopreamble\nopostamble
\usedir{doc/latex/demopkg}
\generate{
\file{README.txt}{\from{\jobname.dtx}{readme}}
}
\ifx\fmtname\nameofplainTeX
\expandafter\endbatchfile
\else
\expandafter\endgroup
\fi
%</internal>
%<*class>
\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{demopkg}[2009/10/06 v1.0 description text]
%</class>
%<*driver>
\documentclass{ltxdoc}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage{\jobname}
\usepackage[numbered]{hypdoc}
\EnableCrossrefs
\CodelineIndex
\RecordChanges
\begin{document}
\DocInput{\jobname.dtx}
\end{document}
%</driver>
% \fi
%
%\GetFileInfo{\jobname.cls}
%
%\title{^^A
% \textsf{demopkg} --- description text\thanks{^^A
% This file describes version \fileversion, last revised \filedate.^^A
% }^^A
%}
%\author{^^A
% You\thanks{E-mail: [email protected]}^^A
%}
%\date{Released \filedate}
%
%\maketitle
%
%\changes{v1.0}{2009/10/06}{First public release}
%
%\DescribeMacro{\examplemacro}
% Some text about an example macro called \cs{examplemacro}, which
% might have an optional argument \oarg{arg1} and mandatory one
% \marg{arg2}.
%
%\StopEventually{^^A
% \PrintChanges
% \PrintIndex
%}
%
% \begin{macrocode}
%<*class>
% \end{macrocode}
%
%\begin{macro}{\LoadClass}
% \begin{macrocode}
\LoadClass{article}
% \end{macrocode}
%\end{macro}
%
% \begin{macrocode}
%</class>
% \end{macrocode}
%\Finale
答案1
在禁用 之后,\usepackage{\jobname}
它只应包含在包中,而不是类中,您的示例对我来说编译得很好。我没有收到任何错误。但是,我猜问题的原因是\ProvidesClass
之前的行\documentclass
。它应该在那里,至少不是以这种形式,因为它被视为驱动程序文档的一部分。有些\iffalse
..\fi
缺失或使用%<class>\ProvidesClass
代替。在 Joseph 的原文中,对于包来说也是如此,但这可能不会造成这么多麻烦。