对于我想在 CTAN 上上传的课程,我希望在通过 TeX 发行版安装时,提供的文件按如下方式组织:
〈ROOT PATH〉/doc/latex/myclass/
myclass.pdf
sample/sample.tex
sample/sample.pdf
README
...
〈ROOT PATH〉/tex/latex/myclass/
myclass.cls
...
〈ROOT PATH〉/source/latex/myclass
myclass.dtx
myclass.ins
...
其中〈ROOT PATH〉
TeX 分发根路径为。
源文档文件〈ROOT PATH〉/source/latex/myclass/myclass.dtx
包含一些来自辅助文件的代码示例和“屏幕截图”:
〈ROOT PATH〉/doc/latex/myclass/sample/sample.tex
〈ROOT PATH〉/doc/latex/myclass/sample/sample.pdf
出于类开发版本的维护原因,这些代码示例和“屏幕截图”直接myclass.dtx
从源文件sample.tex
和sample.pdf
辅助文件中导入,这要归功于:
\lstinputlisting[linerange=...-...]{〈hard coded ROOT PATH〉/doc/latex/myclass/sample/sample.pdf}
...
\includegraphics[page=...]{〈hard coded ROOT PATH〉/doc/latex/myclass/sample/sample.pdf}
〈hard coded ROOT PATH〉
我自己的树在哪里texmf
?这个方法很有效。
问题是,当通过 TeX 发行版分发时,此工作流程将失败,因为据我所知,我可能无法预测应该在哪个 TeX 发行版中及以上〈hard coded ROOT PATH〉
指定,因为它取决于:\lstinputlisting
\includegraphics
- TeX 发行版,
- 操作系统。
因此用户无法通过运行该.dtx
文件来生成文档。
您有办法解决这个问题吗?
答案1
拆开
据我所知来源是
myclass.dtx
可以选择提供文档条安装文件:
myclass.ins
在我的软件包中,.ins
文件无论如何都是嵌入在.dtx
文件中的,并且我添加了一个引擎开关myclass.dtx
:如果使用纯 TeX,则会myclass.ins
触发安装驱动程序 () 并解压文件。另一方面,LaTeX 会生成文档。
然后docstrip
运行生成:
myclass.cls
sample.tex
myclass.drv % documentation driver
myclass.ins % install driver
构建文档
当文档构建时,首先sample.pdf
生成,例如:
pdflatex sample
% further runs of pdflatex, makeindex, biber, ...
% as needed to generate the final sample.
% (This also can serve as test for some basic features of the class.)
然后我们在工作目录中有了先决条件:
sample.tex
sample.pdf
并且myclass.dtx
仅使用文件名:
\lstinputlisting[linerange=...-...]{sample.tex}
\includegraphics[page=...]{sample.pdf}
主要文档编写如下:
pdflatex myclass.drv
% pdflatex, makeindex, biber, bibtex, ...
TDS 安装
下一步,文件被分类到 TDS 树中:
myclass.dtx → TDS:source/latex/myclass/myclass.dtx
myclass.ins → TDS:source/latex/myclass/myclass.ins
myclass.cls → TDS:tex/latex/myclass/myclass.cls
myclass.pdf → TDS:doc/latex/myclass/myclass.pdf
如果有很多示例文件:
sample.tex → TDS:doc/latex/myclass/sample/sample.tex
sample.pdf → TDS:doc/latex/myclass/sample/sample.pdf
对于仅两个示例文件,我认为为示例设置单独的目录是一种不必要的复杂化:
sample.tex → TDS:doc/latex/myclass/sample.tex
sample.pdf → TDS:doc/latex/myclass/sample.pdf
CTAN上传
如果TDS:
是一个空目录texmf
,那么您可以轻松地
myclass.tds.zip
为 CTAN 生成:install/macros/latex/contrib/myclass.tds.zip:
(cd texmf && zip -9r ../myclass.tds.zip *)
对于 CTAN 上传,您需要一个新目录myclass
。其中应包含应出现在的文件CTAN:macros/latex/contrib/myclass/
,例如:
cp myclass.{dtx,ins,pdf} myclass/
README
CTAN 也更喜欢文件。不幸的是,docstrip (TeX) 无法轻松生成没有扩展名的文件名,因为默认扩展名.tex
会起作用:* 因此README
可以是一个单独的文件,它进入:
README → TDS:doc/latex/myclass/README
README → myclass/README
如果它应该嵌入到
.dtx
文件中,那么它可以被命名readme.txt
或00readme.txt
重命名为 CTAN,例如:00readme.txt → myclass/README
现在,CTAN 上传的所有组件均已存在,可供myclass.zip
上传生成:
zip -9r myclass.zip myclass/ myclass.tds.zip
评论
只想重新生成文档的用户从初始步骤开始,直到
myclass.pdf
构建完成。此外,我会避免使用已安装的文件
myclass
来编译文档。否则,可能会myclass
意外使用来自不同版本的旧安装的文件。