Si \RequirePackage{tocloft} no funciona antes de \documentclass, ¿cómo necesito el paquete?

Si \RequirePackage{tocloft} no funciona antes de \documentclass, ¿cómo necesito el paquete?

Quiero definir una nueva lista de cosas que se usan \newlistofen el tocloftpaquete. Incluí tocloftde la forma habitual para los paquetes ( \RequirePackage{tocloft}; código mínimo completo a continuación). Sin embargo, cuando lo ejecuto pdflatex, obtengo:

Package tocloft Warning: I don't recognize any sectional divisions so I'll do nothing on input line ##.

...

! Undefined control sequence.

<recently read> \newlistof

l.## \newlistof

Descubrí que alguien más habíael mismo problema pero por\cftdoten vez de \newlistof. Ese usuario preguntó qué estaba pasando en lugar de cómo incluir realmente el tocloftpaquete, así que ahora sé que se debe a que tocloftla implementación falla si no encuentra ningún capítulo, sección, etc. Pero todavía no sé cómo hacerlo. incluir tocloft. No pude encontrar nada más relevante en Internet o en la documentación.

(Usar \RequirePackage[titles]{tocloft}, que es como quiero usarlo, da ! LaTeX Error: Unknown option 'titles' for package 'tocloft'., lo cual presumiblemente se debe al mismo tipo de razón).

En lugar de \RequirePackage{tocloft}, probé:

\AtBeginDocument{\usepackage{tocloft}}
...
\newlistof{things}{tng}{\listthingsname}

para que se cargue al inicio del documento, pero aparece el mismo Undefined control sequenceerror (presumiblemente porque todavía no hay divisiones seccionales en ese punto). Comentar \newlistofda:

Package tocloft Warning: \@starttoc has already been redefined; tocloft bailing out. on input line 1156.

Mi pregunta es ¿cómo puedo incluirlo tocloften un archivo *.dtx? (Estoy usando el etoolboxpaquete, si eso ayuda).


MWE(o más bien un ejemplo mínimo que muestra mi intento inicial):

% \iffalse meta-comment
%<*internal>
\iffalse
%</internal>
%<*internal>
\fi
\def\nameofplainTeX{plain}
\ifx\fmtname\nameofplainTeX\else
  \expandafter\begingroup
\fi
%</internal>
%<*install>
\input docstrip.tex
\keepsilent
\askforoverwritefalse
\nopreamble\nopostamble
\usedir{tex/latex/things}
\generate{
  \file{\jobname.sty}{\from{\jobname.dtx}{package}}
}
%</install>
%<install>\endbatchfile
%<*internal>
\ifx\fmtname\nameofplainTeX
  \expandafter\endbatchfile
\else
  \expandafter\endgroup
\fi
%</internal>
%<*package>
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{things}
\RequirePackage{etoolbox}
\RequirePackage{tocloft}
% \AtBeginDocument{\usepackage{tocloft}}
%</package>
%<*driver>
\documentclass{ltxdoc}
\usepackage[T1]{fontenc}
\usepackage{things}
\begin{document}
  \DocInput{\jobname.dtx}
\end{document}
%</driver>
% \fi
%
%\GetFileInfo{\jobname.sty}
%
% \title{Title}
% \author{Author}
% \date{\today}
%
% \maketitle
% ^^A\listofthings
%
%    \begin{macrocode}
%<*package>
%
\ newcommand{\listthingsname}{List of Things}
\newlistof{things}{tng}{\listthingsname}
%
% \newcommand{\thing}[1]{%
%   \refstepcounter{things}\textsuperscript{\thethings}#1%
%   \addcontentsline{tng}{things}{\protect{\thethings}#1}%
% }
%
%</package>
%    \end{macrocode}

Respuesta1

David Carlisle señaló que mi estructura dtx no estaba del todo bien. La <driver>sección que incluye \begindocument, debe procesarse antes que la <package>sección que incluye los \RequirePackagecomandos. Por lo tanto, mover la <driver>sección antes de esa <package>sección soluciona el problema: \begindocumentse llama antes de que se requiera cualquier paquete.

También volví \usepackage{things}a hacerlo \usepackage{\jobname}por el comentario de David. No estoy seguro de por qué lo cambié en primer lugar :)


MWE(fijado)

% \iffalse meta-comment
%<*internal>
\iffalse
%</internal>
%<*internal>
\fi
\def\nameofplainTeX{plain}
\ifx\fmtname\nameofplainTeX\else
  \expandafter\begingroup
\fi
%</internal>
%<*install>
\input docstrip.tex
\keepsilent
\askforoverwritefalse
\nopreamble\nopostamble
\usedir{tex/latex/things}
\generate{
  \file{\jobname.sty}{\from{\jobname.dtx}{package}}
}
%</install>
%<install>\endbatchfile
%<*internal>
\ifx\fmtname\nameofplainTeX
  \expandafter\endbatchfile
\else
  \expandafter\endgroup
\fi
%</internal>
%<*driver>
\documentclass{ltxdoc}
\usepackage[T1]{fontenc}
\usepackage{\jobname}
\begin{document}
  \DocInput{\jobname.dtx}
\end{document}
%</driver>
%<*package>
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{things}
\RequirePackage{etoolbox}
\RequirePackage[titles]{tocloft}
% \AtBeginDocument{\usepackage{tocloft}}
% \AtEndDocument{\usepackage{tocloft}}
%</package>
% \fi
%
%\GetFileInfo{\jobname.sty}
%
% \title{Title}
% \author{Author}
% \date{\today}
%
% \maketitle
% \listofthings
%
% \thing{A thing}
%
%    \begin{macrocode}
%<*package>
%
\newrobustcmd{\listthingsname}{List of Things}
\newlistof{things}{tng}{\listthingsname}
%
\newrobustcmd{\thing}[1]{%
  \refstepcounter{things}\textsuperscript{\thethings}#1%
  \addcontentsline{tng}{things}{\protect\numberline{\thethings}#1}%
}
%
%</package>
%    \end{macrocode}

información relacionada