我根据这个问题的答案实现了一个带有列表代码的 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>
在您的文件中。