.dtx 文件(位于源/文件夹中)中提供什么路径来访问位于 doc/文件夹中的文件?

.dtx 文件(位于源/文件夹中)中提供什么路径来访问位于 doc/文件夹中的文件?

对于我想在 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.texsample.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/

READMECTAN 也更喜欢文件。不幸的是,docstrip (TeX) 无法轻松生成没有扩展名的文件名,因为默认扩展名.tex会起作用:* 因此README可以是一个单独的文件,它进入:

    README → TDS:doc/latex/myclass/README
    README → myclass/README
  • 如果它应该嵌入到.dtx文件中,那么它可以被命名readme.txt00readme.txt重命名为 CTAN,例如:

    00readme.txt → myclass/README
    

现在,CTAN 上传的所有组件均已存在,可供myclass.zip上传生成:

zip -9r myclass.zip myclass/ myclass.tds.zip

评论

  • 只想重新生成文档的用户从初始步骤开始,直到myclass.pdf构建完成。

  • 此外,我会避免使用已安装的文件myclass来编译文档。否则,可能会myclass意外使用来自不同版本的旧安装的文件。

相关内容