从 dtx 生成 sty 文件失败

从 dtx 生成 sty 文件失败

我根据这个问题的答案实现了一个带有列表代码的 dtx 文件: 如何将列表环境添加到 DTX 文件

清单代码在 dtx 文件中的位置如下

% \iffalse
% <*example>
% \fi
\begin{lstlisting}%
\usepackage{test}
\end{lstlisting}
% \iffalse
% </example>
% \fi

这对于生成 pdf 文件很有效。但是对于这个 ins 文件:

\input docstrip.tex
\keepsilent
\askforoverwritefalse
\generate{%
  \file{test.sty}{\nopreamble\from{test.dtx}{test.sty}}%
}
\endbatchfile

我无法生成有效的 sty 文件。它仅包含:

\begin{lstlisting}%
\usepackage{test}
\end{lstlisting}

\endinput
%%
%% End of file `test.sty'.

dtx 文件所在的位置(为了测试缩小以显示错误)是这个:

% \iffalse meta-comment
%
% \fi
%
% \iffalse
%<*driver>
\ProvidesFile{test.dtx}
%</driver>
%<package>\NeedsTeXFormat{LaTeX2e}[1999/12/01]
%<package>\ProvidesPackage{test}
%<*package>
[2011/10/01 0.1 enhanced table commands for configurable table layout]
%</package>
%
%<*driver>
\documentclass{ltxdoc}
%\usepackage{test}
\EnableCrossrefs
\CodelineIndex
\RecordChanges
%
\RequirePackage{listings}
\lstloadlanguages{[LaTeX]TeX}
\begin{document}
  \DocInput{test.dtx}
  \PrintChanges
  \PrintIndex
\end{document}
%</driver>
% \fi
%
% \GetFileInfo{test.dtx}
% \title{The \textsf{test} package}
% \author{Matthias Pospiech}
% \date{\fileversion~from \filedate}
%
% \maketitle
% \subsection{Loading}
% The package is loaded with
% \iffalse
% <*example>
% \fi

\begin{lstlisting}%
\usepackage{test}
\end{lstlisting}

% \iffalse
% </example>
% \fi
%
% \StopEventually{}
% \clearpage
% \section{Implementation}
%
% \iffalse
%<*package>
% \fi
%
%    \begin{macrocode}
\NeedsTeXFormat{LaTeX2e}[1994/12/01]
\ProvidesPackage{test}
          [2011/10/01 v0.1 test]
%    \end{macrocode}
%
% \iffalse
%</package>
% \fi
%
% \Finale
\endinput

因此实际上 sty 文件应该包含:

\NeedsTeXFormat{LaTeX2e}[1994/12/01]
\ProvidesPackage{test}
     [2011/10/01 v0.1 test]

怎么了 ?

答案1

改变线条

\generate{%
  \file{test.sty}{\nopreamble\from{test.dtx}{test.sty}}%
}

\generate{%
  \file{test.sty}{\nopreamble\from{test.dtx}{package}}%
}

的最后一个参数\from是“保护”,它决定要包含哪些代码片段,对应于以下行

%<*package>
...
%</package>

在您的文件中。

相关内容