Guidelines for uploading TDS-Packaged materials to CTAN

Background

Some authors have started experimenting with packaging their materials in a .zip file that is ready to unzip into a user's TeX tree. That is, instead of uploading to CTAN in the traditional format

    xxx.zip:
       +--xxx/
          +--README
          +--xxx.ins
          +--xxx.dtx
          +--xxx.pdf

an author may send this.

    xxx.zip:
       +--tex/
          +--latex/  
             +--xxx/
                +--xxx.ins
                +--xxx.dtx
                +--xxx.sty
       +--doc/
          +--latex/
             +--xxx/
                +--README
                +--xxx.pdf

This layout follows the TeX Directory Standard. We say that these materials are TDS-packaged.

Strengths

The goal of TDS packaging is to make installation easier. The hope is that end users can just move to the directory on top of their local tree, perhaps /usr/local/share/texmf-local or C:\localtexmf, unzip the file, and finish by running texhash. This simplicity is a great advantage for packages with elaborate installs such as fonts.

Weaknesses

However, TDS-packaged material has a number of disadvantages, also.

The most serious is that TDS-packaging is not a substitute for a distribution's package manager: users must watch for new versions of a package and by-hand update their materials, including deleting any files in the old version that do not exist in the new version.

Another disadvantage is that TDS-packaging is only useful in the time between the package being uploaded or updated and when it gets into the distributions. (Some packages are not in the distributions but most are.) So the additional work, and potential for confusion, may only result in a gain for a short time.

Issues for the archive

To us this appears to be an experiment. It may be that the advantages prove to outweigh the disadvantages but we do not yet know.

However, this experiment does raise issues. For one thing, TDS-packaged materials are significantly more tedious to browse than the traditional format, and making packages harder for our visitors to understand is bad both for our visitors and for the package authors, whose work does not get the attention it deserves.

Another disadvantage is that the xxx.zip file that we now place at macros/latex/contrib/xxx.zip would not work as intended by TDS authors. That file unzips to a top-level directory of xxx/ so that packages would actually end on the user's disk in this way.

    /usr/local/share/texmf-local/
                                +--xxx/
                                      +--tex/
                                            +--latex/
                                                    +--xxx/
                                                          +--xxx.ins
                                                          +--xxx.dtx
                                                          +--xxx.sty
                                      +--doc/
                                            +--latex/
                                                    +--xxx/
                                                          +--README
                                                          +--xxx.pdf

Note that the tex/ subtree there is not immediately below texmf-local/. This is not TDS compliant, and the TeX system of potential users will not be able to find this package.

In addition to those disadvantages, converting all packages to the TDS format would be a large undertaking and our archive would be awkward if it is partly one way and partly the other.

On the other hand, we welcome innovation in the community.

Action

Authors who do not wish to experiment should continue what they are doing. We ask that authors wishing to try TDS packaging do this.

  • As usual, upload a .zip or a .tar.gz bundle of your material. Lay the material out in the traditional way.
  • In the top level of your bundle place the file <pkg id>.tds.zip that contains the TDS packaging of your materials. We will not install this in the regular browsing tree but instead will put it below the install/ subtree.

Example

For instance, an author may send us xxx.zip with this layout.

   
    xxx.zip:
       xxx.tds.zip
       +--xxx/
          +--README
          +--xxx.ins
          +--xxx.dtx
          +--xxx.pdf

We install into macros/latex/contrib/xxx the files README, xxx.ins, xxx.dtx, and xxx.pdf. We generate a macros/latex/contrib/xxx.zip so archive visitors can download all these files at once. The xxx.tds.zip file which unzips into the TDS layout shown earlier we put in install/macros/latex/contrib/xxx.tds.zip.