需要帮助:包含多个文件的 DocStrip

需要帮助:包含多个文件的 DocStrip

我正在维护一堆文件,为我的大学企业设计提供软件包和类。为了使用文学编程并获得更好的文档,我正在研究DocStrip。我能够构建必要的基本.ins文件和文件。我可以从同一来源.dtx构建无用的文档以及可读的文档。sample.sty.dtx

我计划将我的包和类的代码拆分到几个.dtx源上,因为在一个或另一个结果文件中很多代码是相同的。

我特别希望有一个专用version.dtx文件,它应该包含在 DocStrip 将创建的每个包和类中。我打算在每个派生样式和类中都包含来自“包发布日期”的唯一版本信息。

最好的方法是什么?有没有教程可以展示这个技巧?

尝试在文件中设置 LaTeX 变量.ins不起作用,因为宏没有扩展。

这是我的sample.ins

\input docstrip.tex
\keepsilent
\preamble
Project Sample Test -- Versuche mit einer oder mehreren DTX-Dateien
\endpreamble
\usedir{tex/latex/sample}
%%% DOES NOT WORK!
%%% Define a version for all subsequent generated files
\def\TUC@Version{2017/02/05 v0.01a}
\generate{\file{sample.sty}{\from{sample.dtx}{package}}}

这是精简版的sample.dtx

% \iffalse meta-comment
Project Sample Test -- Versuche mit einer oder mehreren DTX-Dateien
% \fi
% \iffalse
%<package>\NeedsTeXFormat{LaTeX2e}[2005/12/01]
%<package>\ProvidesPackage{sample}
%<package>    [\TUC@Version (Test with DocStrip)]
%
%<*driver>
\documentclass{ltxdoc}
\usepackage{sample}

\EnableCrossrefs
\CodelineIndex
\RecordChanges

\begin{document}
  \DocInput{sample.dtx}
\end{document}
%</driver>
% \fi
% \Finale
%
\endinput

答案1

示例文件

\input docstrip

\generate{
 \file{pack1.sty}{
  \from{pack1.dtx}{package1}
  \from{vers.dtx}{}
  \from{pack1.dtx}{package}
}}

\generate{
 \file{pack2.sty}{
  \from{pack2.dtx}{package1}
  \from{vers.dtx}{}
  \from{pack2.dtx}{package}
}}


\endbatchfile

版本.dtx

%    \begin{macrocode}
2017/02/05 v1.0
%    \begin{macrocode}

包1.dtx

% \iffalse
%<package1>\ProvidesPackage{pack1}[%
%<package>pack1 package]
%
%<*driver>
\documentclass{ltxdoc}
\usepackage{pack1}
\GetFileInfo{pack1.sty}
\begin{document}
\title{The \textsf{pack1} package\thanks{This file
        has version number \fileversion, last
        revised \filedate.}}
\author{me}
\date{\filedate}
\maketitle
\DocInput{pack1.dtx}
\end{document}
%</driver>
% \fi
%
% \StopEventually{}
%
% \begin{macro}{\foo}
%  A really useful command
%    \begin{macrocode}
%<*package>
\def\foo{bar}
%</package>
%    \end{macrocode}
% \end{macro}
%
% \Finale
%

pack2.dtx

% \iffalse
%<package1>\ProvidesPackage{pack2}[%
%<package>pack2 package]
%
%<*driver>
\documentclass{ltxdoc}
\usepackage{pack2}
\GetFileInfo{pack2.sty}
\begin{document}
\title{The \textsf{pack2} package\thanks{This file
        has version number \fileversion, last
        revised \filedate.}}
\author{me}
\date{\filedate}
\maketitle
\DocInput{pack2.dtx}
\end{document}
%</driver>
% \fi
%
% \StopEventually{}
%
% \begin{macro}{\bar}
%  A really useful command
%    \begin{macrocode}
%<*package>
\def\bar{foo}
%</package>
%    \end{macrocode}
% \end{macro}
%
% \Finale
%

然后执行如下命令

tex smpl.ins

将产生pack1.stypack2.stypack1.sty看起来像

%%
%% This is file `pack1.sty',
%% generated with the docstrip utility.
%%
%% The original source files were:
%%
%% pack1.dtx  (with options: `package1')
%% vers.dtx 
%% pack1.dtx  (with options: `package')
%% 
%% IMPORTANT NOTICE:
%% 
%% For the copyright see the source file.
%% 
%% Any modified versions of this file must be renamed
%% with new filenames distinct from pack1.sty.
%% 
%% For distribution of the original source see the terms
%% for copying and modification in the file pack1.dtx vers.dtx pack1.dtx.
%% 
%% This generated file may be distributed as long as the
%% original source files, as listed above, are part of the
%% same distribution. (The sources need not necessarily be
%% in the same archive or directory.)
\ProvidesPackage{pack1}[%
2017/02/05 v1.0
pack1 package]
\def\foo{bar}
\endinput
%%
%% End of file `pack1.sty'.

看上去并pack2.sty没有什么不同。

pdflatex pack1.dtx will make

在此处输入图片描述

相关内容