![我如何将包实现移至文档的后面?](https://linux22.com/image/261707/%E6%88%91%E5%A6%82%E4%BD%95%E5%B0%86%E5%8C%85%E5%AE%9E%E7%8E%B0%E7%A7%BB%E8%87%B3%E6%96%87%E6%A1%A3%E7%9A%84%E5%90%8E%E9%9D%A2%EF%BC%9F.png)
我正在尝试学习如何使用.dtx
文件docstrip
等从单个文件生成包代码和文档。到目前为止,我的主要信息来源是Joseph Wright 的模型 dtx 文件以及随行的博客文章。
我已经开始一切顺利,我可以成功地将一些代码输出到样式文件以及 pdf 中该代码的文档。但是,我希望 pdf不是包含实际的实现 - 至少与我描述宏的位置不同。但是,我仍然希望将文档和实现放在文件中.dtx
。
阅读后doc 和 shortvrb 包(pdf,来自谷歌搜索的链接)我尝试将其添加\OnlyDescription
到驱动程序部分的序言和文档中.dtx
,但并没有什么区别(无论如何,我可以在我的 pdf 中观察到)。
如果可能的话,我完全可以(几乎更喜欢)将逐字包实现的输出延迟到文档的最后。但是,这不是必需的 - 我主要想确保代码不会与 pdf 中的文档文本混在一起。
例子
我的文件中有以下几行.dtx
(忽略文本 - 无论如何,它是瑞典语......)
%\section{Paket som används}
%\textsf{fstil} använder sig av funktionalitet från följande paket:
%\begin{description}
%\item[\textsf{fontenc}, med option \textsf{T1}] Använder den modernare teckenkodningen T1, vilken t.ex. underlättar för specialtecken som åäö.
% \begin{macrocode}
\RequirePackage[T1]{fontenc}
% \end{macrocode}
%\end{description}
在我的 pdf 中,输出如下
包裹寄送}
弗斯蒂尔请使用以下包中的功能签名:
fontenc,Med 选项 T1使用现代技术规范 T1,例如。了解关于
特殊装饰的详细信息。
1 \RequirePackage[T1]{fontenc}
我想将最后一行(包含逐字代码)移至文档末尾,或者将其完全删除。
答案1
据我所知,大多数软件包文档实际上都有一个部分包含用户界面文档(选项、用户级命令),另一个部分包含软件包的实现细节(带有有用的注释、记录的内部宏的副作用等)。例如amstext
,fixmath
或者microtype
说明这一点。
较大的软件包往往要么有一个单独的文档用于记录(biblatex
没有.dtx
文件 IIRC,除了记录的代码之外还有glossaries
一个单独的手册),要么通过在序言中运行宏并在实现部分之前发出宏来隐藏实现部分。glossaries-user
glossaries.pdf
\OnlyDescription
\StopEventually
重新阅读这个问题,我发现这不是你想要的。我认为如果你脱离模型docstrip
,做例如skdoc
确实如此(例如,用于verbatim
将代码保存在 token 列表和/或文件中),您可以将代码的实际打印推迟到稍后的阶段,或完全省略它。该实现的相关代码位于skdoc.dtx
,但必须进行修改。
简而言之,你要做的是:
- 不要使用
dtx
文件或文档条。 - 为每个输出文件定义一个标记列表(这就是所做
\DeclareFile
的skdoc
)。 - 创建一个基于
verbatim
此的环境,除了(或代替)打印内容之外,还将它们附加到适当的标记列表中(skdoc@verbatim
在中skdoc
,可以轻松修补以丢弃文本而不是打印它)。 - 在文档的末尾,将标记列表的内容保存到适当的文件中(第 773-783 行
skdoc.dtx
)。 - 可以定义一个宏来打印 token 列表
verbatim
(但保留其原样)。我不知道该怎么做。