Se \RequirePackage{tocloft} não funcionar antes de \documentclass, como posso solicitar o pacote?

Se \RequirePackage{tocloft} não funcionar antes de \documentclass, como posso solicitar o pacote?

Quero definir uma nova lista de itens usados \newlistof​​no tocloftpacote. Incluí tocloftda maneira usual para pacotes ( \RequirePackage{tocloft}; código mínimo completo abaixo). No entanto, quando eu executo pdflatex, recebo:

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

descobri que outra pessoa tinhao mesmo problema, mas para\cftdotem vez de \newlistof. Esse usuário perguntou o que estava acontecendo em vez de como realmente incluir o tocloftpacote, então agora eu sei que é porque toclofta implementação falhará se não encontrar nenhum capítulo, seção, etc. incluir tocloft. Não encontrei mais nada de relevante na internet ou na documentação.

(Usar \RequirePackage[titles]{tocloft}, que é como eu quero usá-lo, dá ! LaTeX Error: Unknown option 'titles' for package 'tocloft'., o que provavelmente é pelo mesmo motivo.)

Em vez de \RequirePackage{tocloft}, tentei:

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

para que fosse carregado no início do documento, mas recebo o mesmo Undefined control sequenceerro (presumivelmente porque ainda não há divisões seccionais nesse ponto). Comentar \newlistofdá:

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

Minha pergunta é como posso incluir tocloftem um arquivo *.dtx? (Estou usando o etoolboxpacote, se isso ajudar.)


MWE(ou melhor, um exemplo mínimo que mostra minha tentativa 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}

Responder1

David Carlisle apontou que minha estrutura dtx não estava certa. A <driver>seção que inclui \begindocument, precisa ser processada antes da <package>seção que inclui os \RequirePackagecomandos. Portanto, mover a <driver>seção para antes dessa <package>seção resolve o problema: \begindocumenté chamada antes de qualquer pacote ser necessário.

Também voltei \usepackage{things}por \usepackage{\jobname}causa do comentário de David. Não sei por que mudei em primeiro lugar :)


MWE(fixo)

% \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}

informação relacionada