我可以指定我只想要.dtx 中的.sty 文件吗?

我可以指定我只想要.dtx 中的.sty 文件吗?

我一直在努力做好并制作我的原型包.dtx文件(特别是TeX-SX 包但这不是特别相关)。我的工作流程有点像这样:

  1. .tex在文件中使用测试修改一些宏
  2. 将宏位分叉到.sty文件中,测试保留在.tex文件中
  3. 将宏修改为合理的值
  4. 将测试转换成类似文档的内容
  5. 将文件转换.sty.dtx
  6. 添加文档
  7. 宣布某处并要求测试人员

此时,我进入“添加功能和修复错误”阶段。编辑比编辑.dtx稍微不那么直观.sty(必须记住这些macrocode东西,但我已经习惯了),但我通常不想每次都重建文档 - 我通常有一个单独的测试文件,只测试我正在编辑的那些部分。因此,虽然我可以添加pdflatex file.dtx以生成新.sty文件,但它也生成文档有点过分。这不仅浪费了时间而且还可以隐藏.sty位中的任何错误,并将其隐藏在有关文档位的信息环之下。

那么:我该如何pdflatex告诉仅有的.sty运行时生成文件pdflatex file.dtx

(顺便说一句,如果有人碰巧建议改进我的工作流程,我将不胜感激。)

答案1

我使用的方法是建立一个.dtx文件,以便pdflatex <filename>.dtx提取代码排版文档,而tex <filename>.dtx只进行提取。我使用的基本上是

% \iffalse meta-comment
%<*internal>
\iffalse
%</internal>
%<*readme>
%</readme>
Some README information here :-)
%<*internal>
\fi
\def\nameofplainTeX{plain}
\ifx\fmtname\nameofplainTeX\else
  \expandafter\begingroup
\fi
%</internal>
%<*install>
\input docstrip.tex
\keepsilent
\askforoverwritefalse
\preamble
---------------------------------------------------------------
<PACKAGE> --- <DESCRIPTION>
Maintained by <NAME>
E-mail: <EMAIL>
Released under the LaTeX Project Public License v1.3c or later
See http://www.latex-project.org/lppl.txt
---------------------------------------------------------------

\endpreamble
\postamble
Copyright (C) DATE by
  <NAME> <<EMAIL>>

It may be distributed and/or modified under the conditions of
the LaTeX Project Public License (LPPL), either version 1.3c of
this license or (at your option) any later version.  The latest
version of this license is in the file:
   http://www.latex-project.org/lppl.txt
This work is "maintained" (as per LPPL maintenance status) by
  <NAME>.

This work consists of the file  <PACKAGE>.dtx
          and the derived files <PACKAGE>.pdf,
                                <PACKAGE>.sty and
                                <PACKAGE>.ins.

\endpostamble
\usedir{tex/latex/<PACKAGE>}
\generate{
  \file{\jobname.sty}{\from{\jobname.dtx}{package}}
}
%</install>
%<install>\endbatchfile
%<*internal>
\usedir{source/latex/<PACKAGE>}
\generate{
  \file{\jobname.ins}{\from{\jobname.dtx}{install}}
}
\nopreamble\nopostamble
\usedir{doc/latex/<PACKAGE>}
\generate{
  \file{README.txt}{\from{\jobname.dtx}{readme}}
}
\ifx\fmtname\nameofplainTeX
  \expandafter\endbatchfile
\else
  \expandafter\endgroup
\fi
%</internal>
%<*driver>
\documentclass{ltxdoc} % or whatever
%\DisableImplementation
\begin{document}
  \DocInput{\jobname.dtx}
\end{document}
%</driver>
% \fi
% 
% CODE AND DOCUMENTATION HERE

所发生的情况是,测试(在internal防护装置内部)意味着提取是在 LaTeX 组内部完成的,但不是针对纯 TeX,而是在到达文档部分之前退出。

然后我使用它进行测试的方法是创建一个非常简单的测试文件,并\write18启用它。类似

\immediate\write18{tex <FILENAME>.dtx}
\documentclass{article}
\usepackage{<FILENAME>}
\begin{document}
  Tests here.
\end{document}

这让我可以做很多简单(或不太简单)的测试而不需要排版所有内容。

答案2

您可能还会将安装程序代码放入.dtx文件中。这种风格现在似乎很流行。如图所示,执行此操作的经典方法clsguide是将docstrip命令放入单独的.ins文件中,然后提取.sty文件:

因此,使用以下方法解包:

pdflatex somepackage.ins   % extract .sty file

尽管:

pdflatex somepackage.dtx   % compile manual

我对所有软件包都使用了 Makefile,并且unpack第一行有一个目标,因此我只需要说make unpackmake package哪个是别名。


文件的最小示例.ins是:

\input docstrip.tex
\keepsilent
\generate{\file{somepackage.sty}{\from{somepackage.dtx}{package}}}
\endbatchfile

请参阅clsguide更大的示例。

相关内容