我正在维护一堆文件,为我的大学企业设计提供软件包和类。为了使用文学编程并获得更好的文档,我正在研究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.sty
和pack2.sty
,pack1.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