
Quero definir uma nova lista de itens usados \newlistof
no tocloft
pacote. Incluí tocloft
da 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\cftdot
em vez de \newlistof
. Esse usuário perguntou o que estava acontecendo em vez de como realmente incluir o tocloft
pacote, então agora eu sei que é porque tocloft
a 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 sequence
erro (presumivelmente porque ainda não há divisões seccionais nesse ponto). Comentar \newlistof
dá:
Package tocloft Warning: \@starttoc has already been redefined; tocloft bailing out. on input line 1156.
Minha pergunta é como posso incluir tocloft
em um arquivo *.dtx? (Estou usando o etoolbox
pacote, 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 \RequirePackage
comandos. 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}