
\newlistof
패키지 에서 사용하는 새로운 항목 목록을 정의하고 싶습니다 tocloft
. 나는 tocloft
패키지에 대해 일반적인 방식으로 포함했습니다( \RequirePackage{tocloft}
; 아래 전체 최소 코드). 그러나 이를 통해 실행하면 다음과 같은 pdflatex
결과를 얻습니다.
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
다른 사람이 가지고 있는 걸 발견했어요같은 문제이지만\cftdot
. \newlistof
해당 사용자는 실제로 패키지를 포함하는 방법보다는 무슨 일이 일어나고 있는지 물었 으므로 이제는 장, 섹션 등을 찾지 못하면 실패하도록 구현되었기 tocloft
때문이라는 것을 알고 있습니다 . 그러나 나는 여전히 패키지를 어떻게 포함하는지에 대해 더 현명하지 않습니다. tocloft
포함하다 tocloft
. 인터넷이나 문서에서 관련성을 찾을 수 없었습니다.
( \RequirePackage[titles]{tocloft}
내가 사용하고 싶은 방식인 를 사용하면 가 나오는데 ! LaTeX Error: Unknown option 'titles' for package 'tocloft'.
, 이는 아마도 같은 종류의 이유일 것입니다.)
대신에 다음 \RequirePackage{tocloft}
을 시도했습니다.
\AtBeginDocument{\usepackage{tocloft}}
...
\newlistof{things}{tng}{\listthingsname}
문서의 시작 부분에 로드되도록 했으나 동일한 Undefined control sequence
오류가 발생했습니다(아마도 해당 지점에 섹션 구분이 아직 없기 때문일 것입니다). 주석 처리 \newlistof
하면 다음이 제공됩니다.
Package tocloft Warning: \@starttoc has already been redefined; tocloft bailing out. on input line 1156.
tocloft
내 질문은 *.dtx 파일에 어떻게 포함할 수 있습니까 ? ( etoolbox
도움이 된다면 패키지를 사용하고 있습니다 .)
MWE(또는 내 초기 시도를 보여주는 최소한의 예):
% \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}
답변1
David Carlisle은 내 dtx 구조가 올바르지 않다고 지적했습니다. <driver>
가 포함된 섹션이 명령 이 포함된 섹션 \begindocument
보다 먼저 처리되어야 합니다 . 따라서 해당 섹션 이전으로 섹션을 이동하면 문제가 해결됩니다. 패키지가 필요하기 전에 호출됩니다.<package>
\RequirePackage
<driver>
<package>
\begindocument
나는 또한 David의 의견 때문에 되돌아 \usepackage{things}
갔습니다 . \usepackage{\jobname}
애초에 왜 바꿨는지 모르겠네요 :)
MWE(결정된)
% \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}