
Quiero definir una nueva lista de cosas que se usan \newlistof
en el tocloft
paquete. Incluí tocloft
de 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\cftdot
en vez de \newlistof
. Ese usuario preguntó qué estaba pasando en lugar de cómo incluir realmente el tocloft
paquete, así que ahora sé que se debe a que tocloft
la 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 sequence
error (presumiblemente porque todavía no hay divisiones seccionales en ese punto). Comentar \newlistof
da:
Package tocloft Warning: \@starttoc has already been redefined; tocloft bailing out. on input line 1156.
Mi pregunta es ¿cómo puedo incluirlo tocloft
en un archivo *.dtx? (Estoy usando el etoolbox
paquete, 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 \RequirePackage
comandos. Por lo tanto, mover la <driver>
sección antes de esa <package>
sección soluciona el problema: \begindocument
se 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}