我已经阅读过docstrip
文档,但还没有形成关于当我简单运行时如何提取包文档的直觉pdflatex package.dtx
。
假设我使用简单的dtxtut
用于生成.sty
文件和.pdf
记录该文件的文件的骨架文件。
直观地讲,pdflatex
只需丢弃所有注释并编译剩余的内容。我还可以理解,部分\DocInput
内的命令driver
会再次获取同一文件并使用一些不同的“过滤器”对其进行解析。
但是该<*driver></driver>
部分是做什么的呢?我从来没有定义过driver
布尔值,而且我在其他地方也找不到它的定义。
答案1
在最初的计划中,docstrip
文档源将位于.dtx
文件中,并且一个单独的 LaTeX“驱动程序”文档(除了.tex
可能与正在生成的文件发生冲突之外)将用于输入包和生成文档,并且将使用doc
第三个文件来控制文件的生成。.ins
docstrip
通过将适当的神秘\if
构造和保护放入dtx
文件中,可以省去两个额外的文件,只分发一个dtx
文件,该文件可用于驱动文档或代码生成,具体取决于调用方式。
当我们为 LaTeX2e 发行版标准化内容时,删除ins
文件被认为太奇怪了,但我们确实将文档驱动程序隐藏在文件中,dtx
从而避免了为每个包生成文档而使用单独的文件。但是,我们docstrip
在那里放置了保护装置,以便如果有人需要,文档驱动程序文件可以生成为单独的文件(通过指定驱动程序保护装置docstrip
)。我猜它们现在永远不会直接使用,尽管您需要将该块放入某个保护装置顶部以阻止它被写入生成的文件的顶部.sty
。
答案2
“经典”.dtx
文件(~LaTeX2.09)包含(通常)LaTeX 软件包的源代码和文档,但不包含从源代码中提取软件包或排版文档的说明。因此,latex foo.dtx
不会产生有用的输出。要允许提取,.ins
需要一个安装()文件,要允许排版,则使用驱动程序(.drv
)文件。因此,要获取文档,您需要latex foo.drv
……
通过适当的设置,可以避免这两个额外的文件。多年来,将驱动程序集成到 中一直是标准做法。.dtx
这仍然通常使用名为 的保护程序来完成driver
,这意味着可以创建一个.ins
文件来从源中提取驱动程序。(您仍然可以在 CTAN 上找到一些以这种方式设置文件的软件包.ins
。)集成驱动程序的结果是latex foo.dtx
(通常)将排版文档。
虽然问题中没有直接问到,但值得注意的是,你也不必有单独的.ins
文件。我的模型.dtx
文件被设置为“自解压”,所以不需要.drv
文件.ins
。
答案3
单独的驱动程序文件使得修改它以改变文档的生成方式(例如生成哪些索引)变得更加容易(并且更合法)。
%% To produce the documentation in the way you like you are allowed
%% to change this driver file.