I'm going to upload my first package to CTAN. But after reading all the upload guides from CTAN and TeXLive I'm still feeling daunted by the directory structure. My package is rather complex and by now consists of >160 files which will become a lot more when the package matures (for example there are a bunch of small pdf files used by the package, along with the sources to recreate them).

So I'm far from being able to produce a package with four or five files in one single directory.

Do such large numbers of files and changing package contents present special problems for CTAN (and the distros consecutively)? Has best practice for uploading and maintaining such large packages been documented?

Details: the package is in good shape, and a few testers fetched it from Github and got it to run without problems.

If you want to have a look: the package resides at https://github.com/openlilylib/lilyglyphs


Right now I'm trying to understand the TDS and how I can prepare a lilyglyphs.tds.zip file.

Am I right that I
a) provide the directory as I would use it myself, and when someone downloads from CTAN she will put the complete directory under texmf/tex/latex/lilyglyphs
b) provide a tds.zip that will allow the distributions to put my files in the right locations in their distribution (that is, the files are stored at different locations)

If that's true I still have a few questions about where some of my files should go, but I will come back to this after having tried to tackle the tds documentation.

  • 2
    No it will not be a problem. There are larger packages (e.g. cm-super) but you should arrange the files so that they know where all the files belong (e.g. by providing a tds-zip) to make life for the maintainer easier and to prevent that an image needed by the package ends in the doc-folder. Sep 3, 2013 at 15:12
  • 2
    Related question: What is good practice when preparing a package for CTAN?
    – Alan Munn
    Sep 3, 2013 at 15:40
  • For b): The base of a tds.zip is texmf. So it contains at least /tex/latex/lilyglyphs and maybe a /tex/latex/lilyglyphs/pics.
    – Josef
    Sep 3, 2013 at 15:44
  • I don't understand the questions in a) and b) but you can find examples of tds.zip here mirror.ctan.org/tex-archive/install/macros/latex/contrib Sep 3, 2013 at 15:50
  • a) I develop the package in one directory structure (that is also present in the Git repo). When installing the package from CTAN a user would 'recreate' that structure in texmf/tex/latex/lilyglyphs. Is that right?
    – uli_1973
    Sep 3, 2013 at 15:56

1 Answer 1


OK, by now my package is on CTAN and in TeXLive, so I can answer this question myself (it is different from the questions referenced in the comments).

  • A large number of files in a package isn't a problem, if they are needed for the working of the package.
  • There is no requirement to provide a TDS.zip.
    Quite the contrary, it is strongly discouraged if you don't know exactly what you're doing.
  • CTAN and distro maintainers have practical tools to handle your package, provided they know what to do with what.
  • For this you should at least provide a README (or dedicated additional README files) that clearly show(s) any maintainer what everything does.
  • Use meaningful subdirectory names

This is the general idea. Additionally I'll give a few hints concerning concrete types of files I encountered with my package:

  • If you have to supply fonts (and have the license to redistribute them), please put them in a dedicated directory, together with appropriate licensing information).
  • I was advised to put everything that has to be seen by LaTeX into a dedicated tex directory. In my case this contained the .sty file, input files and the large number of .pdf files that are used by the package's commands. If you have pdf files it is particularly important to tell potential distro maintainers that they will have to be put into the LaTeX search path. Otherwise you'd risk that they are interpreted as documentation files.
  • One thing to note is that file names of these pdf files have a global scope, so they should be unique among everything LaTeX might ever want to search for.
  • My package provided sources as a convenience: those used to generate the pdf files and those used to generate the fonts. These aren't needed to use the package but should be included, in a dedicated sources directory.
  • My package provided a number of Python scripts, which aren't necessary to use the package but to extend it. They have to be placed in a script directory and will then be placed in the system search path by distro maintainers. (Of course you will have to tell the user to install Python).

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .