In 2016, what are the advantages and disadvantages of the different methods to create a package?

Best ways will provoke opinion based answers...

Well, here is my opinion:

At the first glance, I found expl3 syntax terrible, but meanwhile I have transformed my first package from L2 to expl3, extending it's facilities tremendously.

'Currently' I will use expl3 to rewrite the other packages as well, as for the future ones ('some plans I have -- written the packages be must' master Yoda would say ;-))

I don't say, that L3 syntax is the best one -- I like it, meanwhile. But the truth is that there are still some legacies of L2 which has not been attacked so far to be provided by the L3 - team.

Concerning the options: User A prefers keyvalue package Z, the next one prefers package Y.

As long as you know what you're doing writing should be possible with any setup, regardless, whether it's plain TeX, LuaLaTeX, L2 or L3.

Perhaps the mixture will be the future (concerning L2 and L3 it's a mixture so far, since there's no \use_package:n {classicthesis} ;-))

(I can't say anything about ConTeXt, since I have not really used it so far beyond some minor testing, so nothing productive was generated by me -- but that's my fault ;-))

Barbara Beeton made some important notes about the publishers etc.

In my point of view the purpose/goals of the package determine the usage of class or package. A more generic package that could be used widely in huge range of applicable document types should be written in L2 or expl3, since lualatex is not that advanced (as of writting) and not as accepted so far as might be demanded.


if you are creating a package that you expect to be used by authors submitting books and papers for publication, you should consider the restrictions set by the likely publishers, and the reasons for those restrictions.

mostly, such restrictions are not arbitrary, but are made on account of requirements of the production and printing processes, and the need for archival stability. (the latter depends on the field; it is very important for math, not so much for chemistry.)

here are some examples.

  • luatex is not yet sufficiently stable to be considered a production tool.

  • context is not readily adaptable to some publishers' requirements.

  • restrictive licenses may be a problem; the lppl is good.

  • "drop dead" code that renders a package unusable/unrunnable after a date specified in the code makes the package unusable for a publisher with an archival requirement that includes support for revised editions or inclusion of articles in "collected works".

pdf(la)tex and xe(la)tex have proved to be stable bases.